@a4anthony/proctorkit-vue 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/README.md +176 -8
  2. package/dist/ProctoredAssessment.vue.d.ts +70 -2
  3. package/dist/ProctoredAssessment.vue.d.ts.map +1 -1
  4. package/dist/ProctoringDeviceSettings.vue.d.ts +27 -1
  5. package/dist/ProctoringDeviceSettings.vue.d.ts.map +1 -1
  6. package/dist/ProctoringSystemCheck.vue.d.ts +39 -11
  7. package/dist/ProctoringSystemCheck.vue.d.ts.map +1 -1
  8. package/dist/browser-face-detector.d.ts +59 -0
  9. package/dist/browser-face-detector.d.ts.map +1 -0
  10. package/dist/check-cards/system/DisplayPermissionDialog.vue.d.ts +24 -0
  11. package/dist/check-cards/system/DisplayPermissionDialog.vue.d.ts.map +1 -0
  12. package/dist/check-cards/system/DisplayRecovery.vue.d.ts +25 -0
  13. package/dist/check-cards/system/DisplayRecovery.vue.d.ts.map +1 -0
  14. package/dist/check-cards/system/SystemCheckCard.vue.d.ts +13 -1
  15. package/dist/check-cards/system/SystemCheckCard.vue.d.ts.map +1 -1
  16. package/dist/check-cards/system/display-progress-story.d.ts +468 -0
  17. package/dist/check-cards/system/display-progress-story.d.ts.map +1 -0
  18. package/dist/check-cards/system/display-recovery-story.d.ts +290 -0
  19. package/dist/check-cards/system/display-recovery-story.d.ts.map +1 -0
  20. package/dist/demo-runner/QuestionCard.vue.d.ts.map +1 -1
  21. package/dist/detect-face.d.ts +22 -95
  22. package/dist/detect-face.d.ts.map +1 -1
  23. package/dist/i18n/merge.d.ts.map +1 -1
  24. package/dist/index.d.ts +19 -8
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +9637 -2485
  27. package/dist/media-controls/AudioPlayer.vue.d.ts +43 -20
  28. package/dist/media-controls/AudioPlayer.vue.d.ts.map +1 -1
  29. package/dist/media-controls/AudioRecorder.vue.d.ts +171 -11
  30. package/dist/media-controls/AudioRecorder.vue.d.ts.map +1 -1
  31. package/dist/media-controls/RecorderUploadIndicator.vue.d.ts +17 -0
  32. package/dist/media-controls/RecorderUploadIndicator.vue.d.ts.map +1 -0
  33. package/dist/media-controls/VideoPlayer.vue.d.ts +36 -13
  34. package/dist/media-controls/VideoPlayer.vue.d.ts.map +1 -1
  35. package/dist/media-controls/VideoRecorder.vue.d.ts +90 -10
  36. package/dist/media-controls/VideoRecorder.vue.d.ts.map +1 -1
  37. package/dist/media-controls/audio-recorder-messages.d.ts +15 -0
  38. package/dist/media-controls/audio-recorder-messages.d.ts.map +1 -0
  39. package/dist/media-controls/local-media-playback-client.d.ts +2 -6
  40. package/dist/media-controls/local-media-playback-client.d.ts.map +1 -1
  41. package/dist/media-controls/local-media-recording-client.d.ts.map +1 -1
  42. package/dist/media-controls/media-recovery-story.d.ts +9 -0
  43. package/dist/media-controls/media-recovery-story.d.ts.map +1 -0
  44. package/dist/media-controls/storybook-mock-client.d.ts +2 -0
  45. package/dist/media-controls/storybook-mock-client.d.ts.map +1 -1
  46. package/dist/media-controls/types.d.ts +63 -7
  47. package/dist/media-controls/types.d.ts.map +1 -1
  48. package/dist/media-controls/ui-config.d.ts +2 -2
  49. package/dist/media-controls/ui-config.d.ts.map +1 -1
  50. package/dist/media-controls/useLiveInputCheck.d.ts +18 -0
  51. package/dist/media-controls/useLiveInputCheck.d.ts.map +1 -0
  52. package/dist/media-controls/useMediaClipRecorder.d.ts +90 -12
  53. package/dist/media-controls/useMediaClipRecorder.d.ts.map +1 -1
  54. package/dist/media-controls/useMediaFilePlayback.d.ts +8 -1
  55. package/dist/media-controls/useMediaFilePlayback.d.ts.map +1 -1
  56. package/dist/media-controls/useMinimumVisibleUpload.d.ts +18 -0
  57. package/dist/media-controls/useMinimumVisibleUpload.d.ts.map +1 -0
  58. package/dist/proctored-assessment/PreparationGate.vue.d.ts +16 -0
  59. package/dist/proctored-assessment/PreparationGate.vue.d.ts.map +1 -0
  60. package/dist/proctored-assessment/preparation-feedback.d.ts +7 -0
  61. package/dist/proctored-assessment/preparation-feedback.d.ts.map +1 -0
  62. package/dist/proctored-assessment/replay-failure-queue.d.ts +18 -0
  63. package/dist/proctored-assessment/replay-failure-queue.d.ts.map +1 -0
  64. package/dist/proctored-assessment/replay-failure-queue.test.d.ts +2 -0
  65. package/dist/proctored-assessment/replay-failure-queue.test.d.ts.map +1 -0
  66. package/dist/proctored-assessment/request-deadline.d.ts +1 -0
  67. package/dist/proctored-assessment/request-deadline.d.ts.map +1 -1
  68. package/dist/proctored-assessment/resume-microphone-route.d.ts +13 -0
  69. package/dist/proctored-assessment/resume-microphone-route.d.ts.map +1 -0
  70. package/dist/proctored-assessment/resume-microphone-route.test.d.ts +2 -0
  71. package/dist/proctored-assessment/resume-microphone-route.test.d.ts.map +1 -0
  72. package/dist/proctored-assessment/resume-probe.d.ts +13 -0
  73. package/dist/proctored-assessment/resume-probe.d.ts.map +1 -1
  74. package/dist/proctored-assessment/resume-speaker-confirmation.d.ts +27 -0
  75. package/dist/proctored-assessment/resume-speaker-confirmation.d.ts.map +1 -0
  76. package/dist/proctored-assessment/resume-speaker-route.d.ts +32 -0
  77. package/dist/proctored-assessment/resume-speaker-route.d.ts.map +1 -0
  78. package/dist/proctored-assessment/session-start.d.ts +2 -2
  79. package/dist/proctored-assessment/types.d.ts +14 -4
  80. package/dist/proctored-assessment/types.d.ts.map +1 -1
  81. package/dist/proctored-assessment/usePreparationRetryTiming.d.ts +13 -0
  82. package/dist/proctored-assessment/usePreparationRetryTiming.d.ts.map +1 -0
  83. package/dist/proctored-assessment/useResumeDisplayGuard.d.ts +20 -0
  84. package/dist/proctored-assessment/useResumeDisplayGuard.d.ts.map +1 -0
  85. package/dist/proctoring-client.d.ts +6 -2
  86. package/dist/proctoring-client.d.ts.map +1 -1
  87. package/dist/proctoring-system-check-contract.d.ts +2 -0
  88. package/dist/proctoring-system-check-contract.d.ts.map +1 -1
  89. package/dist/runtime-devices/DevicePickerItem.vue.d.ts +58 -0
  90. package/dist/runtime-devices/DevicePickerItem.vue.d.ts.map +1 -0
  91. package/dist/runtime-devices/PickerMessage.vue.d.ts +17 -0
  92. package/dist/runtime-devices/PickerMessage.vue.d.ts.map +1 -0
  93. package/dist/runtime-devices/ProctoringDevicePicker.vue.d.ts +89 -0
  94. package/dist/runtime-devices/ProctoringDevicePicker.vue.d.ts.map +1 -0
  95. package/dist/runtime-devices/device-picker-messages.d.ts +42 -0
  96. package/dist/runtime-devices/device-picker-messages.d.ts.map +1 -0
  97. package/dist/runtime-devices/microphone-attention.d.ts +48 -0
  98. package/dist/runtime-devices/microphone-attention.d.ts.map +1 -0
  99. package/dist/runtime-devices/microphone-check-messages.d.ts +13 -0
  100. package/dist/runtime-devices/microphone-check-messages.d.ts.map +1 -0
  101. package/dist/runtime-devices/runtime-device-activity.d.ts +16 -0
  102. package/dist/runtime-devices/runtime-device-activity.d.ts.map +1 -0
  103. package/dist/runtime-devices/runtime-device-selection.d.ts +11 -0
  104. package/dist/runtime-devices/runtime-device-selection.d.ts.map +1 -0
  105. package/dist/runtime-devices/useRuntimeDevice.d.ts +72 -0
  106. package/dist/runtime-devices/useRuntimeDevice.d.ts.map +1 -0
  107. package/dist/runtime-devices/useTrackLoss.d.ts +15 -0
  108. package/dist/runtime-devices/useTrackLoss.d.ts.map +1 -0
  109. package/dist/style.css +367 -14
  110. package/dist/text-answer/ProctoredTextarea.vue.d.ts +8 -1
  111. package/dist/text-answer/ProctoredTextarea.vue.d.ts.map +1 -1
  112. package/dist/text-answer/useProctoredText.d.ts +5 -2
  113. package/dist/text-answer/useProctoredText.d.ts.map +1 -1
  114. package/dist/ui/ProctoringAlert.vue.d.ts.map +1 -1
  115. package/dist/ui/ProctoringFileUpload.vue.d.ts +3 -3
  116. package/dist/ui/ProctoringFileUpload.vue.d.ts.map +1 -1
  117. package/dist/ui/ProctoringInput.vue.d.ts +3 -3
  118. package/dist/ui/ProctoringInput.vue.d.ts.map +1 -1
  119. package/dist/ui/ProctoringSelect.vue.d.ts +2 -2
  120. package/dist/ui/ProctoringSelect.vue.d.ts.map +1 -1
  121. package/dist/usePreflightCheck.d.ts +4 -3
  122. package/dist/usePreflightCheck.d.ts.map +1 -1
  123. package/dist/vision_bundle-8xEDyfqS.js +4160 -0
  124. package/dist/wizard/BrowserDisplayPermissionGuide.vue.d.ts +11 -0
  125. package/dist/wizard/BrowserDisplayPermissionGuide.vue.d.ts.map +1 -0
  126. package/dist/wizard/BrowserPermissionLocation.vue.d.ts +9 -0
  127. package/dist/wizard/BrowserPermissionLocation.vue.d.ts.map +1 -0
  128. package/dist/wizard/CameraStep.vue.d.ts +10 -1
  129. package/dist/wizard/CameraStep.vue.d.ts.map +1 -1
  130. package/dist/wizard/CandidateHeadshotField.vue.d.ts.map +1 -1
  131. package/dist/wizard/CandidateIntakeStep.vue.d.ts +3 -0
  132. package/dist/wizard/CandidateIntakeStep.vue.d.ts.map +1 -1
  133. package/dist/wizard/ChecklistShell.vue.d.ts +3 -0
  134. package/dist/wizard/ChecklistShell.vue.d.ts.map +1 -1
  135. package/dist/wizard/FinalStep.vue.d.ts +6 -2
  136. package/dist/wizard/FinalStep.vue.d.ts.map +1 -1
  137. package/dist/wizard/MediaDeviceSelect.vue.d.ts +11 -1
  138. package/dist/wizard/MediaDeviceSelect.vue.d.ts.map +1 -1
  139. package/dist/wizard/MicStep.vue.d.ts +24 -3
  140. package/dist/wizard/MicStep.vue.d.ts.map +1 -1
  141. package/dist/wizard/PermissionDeniedPanel.vue.d.ts +9 -4
  142. package/dist/wizard/PermissionDeniedPanel.vue.d.ts.map +1 -1
  143. package/dist/wizard/ResumeCheck.vue.d.ts +16 -2
  144. package/dist/wizard/ResumeCheck.vue.d.ts.map +1 -1
  145. package/dist/wizard/SpeakerStep.vue.d.ts +17 -4
  146. package/dist/wizard/SpeakerStep.vue.d.ts.map +1 -1
  147. package/dist/wizard/SystemStep.vue.d.ts +9 -0
  148. package/dist/wizard/SystemStep.vue.d.ts.map +1 -1
  149. package/dist/wizard/WizardShell.vue.d.ts +3 -3
  150. package/dist/wizard/WizardShell.vue.d.ts.map +1 -1
  151. package/dist/wizard/candidate-intake-draft.d.ts +9 -0
  152. package/dist/wizard/candidate-intake-draft.d.ts.map +1 -0
  153. package/dist/wizard/display-diagnostics.d.ts +21 -0
  154. package/dist/wizard/display-diagnostics.d.ts.map +1 -0
  155. package/dist/wizard/event-telemetry.d.ts +24 -0
  156. package/dist/wizard/event-telemetry.d.ts.map +1 -0
  157. package/dist/wizard/media-device-list.d.ts +8 -1
  158. package/dist/wizard/media-device-list.d.ts.map +1 -1
  159. package/dist/wizard/microphone-preflight-trace.d.ts +10 -0
  160. package/dist/wizard/microphone-preflight-trace.d.ts.map +1 -0
  161. package/dist/wizard/microphone-preflight-trace.test.d.ts +2 -0
  162. package/dist/wizard/microphone-preflight-trace.test.d.ts.map +1 -0
  163. package/dist/wizard/resume-check-stories/shared.d.ts +35 -11
  164. package/dist/wizard/resume-check-stories/shared.d.ts.map +1 -1
  165. package/dist/wizard/speaker-test-tone.d.ts +29 -4
  166. package/dist/wizard/speaker-test-tone.d.ts.map +1 -1
  167. package/dist/wizard/useCandidateIssues.d.ts +30 -0
  168. package/dist/wizard/useCandidateIssues.d.ts.map +1 -0
  169. package/dist/wizard/useCandidateIssues.test.d.ts +2 -0
  170. package/dist/wizard/useCandidateIssues.test.d.ts.map +1 -0
  171. package/dist/wizard/useLiveDisplayCheck.d.ts +8 -0
  172. package/dist/wizard/useLiveDisplayCheck.d.ts.map +1 -0
  173. package/dist/wizard/usePreflightTelemetry.d.ts +6 -26
  174. package/dist/wizard/usePreflightTelemetry.d.ts.map +1 -1
  175. package/dist/wizard/useWizardSteps.d.ts +10 -1
  176. package/dist/wizard/useWizardSteps.d.ts.map +1 -1
  177. package/package.json +4 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResumeDisplayGuard.d.ts","sourceRoot":"","sources":["../../src/proctored-assessment/useResumeDisplayGuard.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACpB,MAAM,kCAAkC,CAAC;AAG1C,UAAU,OAAO;IACf,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,KAAK,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,OAAO,GAAG,QAAQ,CAAC;IAChC,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,IAAI,EAAE,MAAM,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,CACN,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,EAClD,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,KACrC,IAAI,CAAC;IACV,MAAM,EAAE,yBAAyB,CAAC;IAClC,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO;uBAW3B,cAAc,KAAoB,OAAO,CAAC,OAAO,CAAC;EA0J5E"}
@@ -1,11 +1,15 @@
1
1
  import { type ComputedRef, type ShallowRef } from "vue";
2
2
  import type { ProctoringClient } from "@a4anthony/proctorkit-sdk";
3
+ /** Which devices Device settings shows. Omit `kinds` to show every device the policy uses. */
4
+ export interface OpenSettingsOptions {
5
+ kinds?: Array<"microphone" | "speaker" | "camera">;
6
+ }
3
7
  export interface ProctoringVueClientControls {
4
- openSettings?: () => boolean;
8
+ openSettings?: (options?: OpenSettingsOptions) => boolean;
5
9
  }
6
10
  /** The SDK client plus commands whose UI is owned by the Vue integration. */
7
11
  export type ProctoringVueClient = ProctoringClient & {
8
- openSettings(): boolean;
12
+ openSettings(options?: OpenSettingsOptions): boolean;
9
13
  };
10
14
  export declare function setActiveProctoringClient(client: ProctoringClient | null, controls?: ProctoringVueClientControls): void;
11
15
  export declare function clearActiveProctoringClient(client?: ProctoringClient | null): void;
@@ -1 +1 @@
1
- {"version":3,"file":"proctoring-client.d.ts","sourceRoot":"","sources":["../src/proctoring-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,KAAK,CAAC;AACb,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,WAAW,2BAA2B;IAC1C,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;CAC9B;AAED,6EAA6E;AAC7E,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG;IACnD,YAAY,IAAI,OAAO,CAAC;CACzB,CAAC;AAIF,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAC/B,QAAQ,GAAE,2BAAgC,GACzC,IAAI,CAgBN;AAED,wBAAgB,2BAA2B,CACzC,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAC/B,IAAI,CAIN;AAED,wBAAgB,yBAAyB,IAAI,mBAAmB,GAAG,IAAI,CAEtE;AAED,wBAAgB,mBAAmB,IAAI;IACrC,MAAM,EAAE,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IAC/C,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACjC,CAKA"}
1
+ {"version":3,"file":"proctoring-client.d.ts","sourceRoot":"","sources":["../src/proctoring-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,KAAK,CAAC;AACb,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAMlE,8FAA8F;AAC9F,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC;CAC3D;AAED,6EAA6E;AAC7E,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG;IACnD,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC;CACtD,CAAC;AAsBF,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAC/B,QAAQ,GAAE,2BAAgC,GACzC,IAAI,CAkBN;AAED,wBAAgB,2BAA2B,CACzC,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAC/B,IAAI,CAKN;AAED,wBAAgB,yBAAyB,IAAI,mBAAmB,GAAG,IAAI,CAEtE;AAED,wBAAgB,mBAAmB,IAAI;IACrC,MAAM,EAAE,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IAC/C,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACjC,CAKA"}
@@ -3,6 +3,7 @@ import type { LocaleCode } from "./i18n/index.js";
3
3
  import type { PreflightMessages } from "./messages.js";
4
4
  import type { CandidateIntakeConfig, CandidateIntakeSubmission, CandidateIntakeSubmitter } from "./candidate-intake.js";
5
5
  import type { SystemCheckMode, SystemCheckOptions } from "./usePreflightCheck.js";
6
+ import type { PreparationFeedback } from "./proctored-assessment/preparation-feedback.js";
6
7
  /** Shared public contract implemented by both preflight renderers. */
7
8
  export interface ProctoringSystemCheckProps {
8
9
  mode?: SystemCheckMode;
@@ -14,6 +15,7 @@ export interface ProctoringSystemCheckProps {
14
15
  simulateResults?: SimulatedCheckResult[];
15
16
  autoResumeSeconds?: number;
16
17
  starting?: boolean;
18
+ preparationError?: PreparationFeedback;
17
19
  dark?: boolean;
18
20
  autoStart?: boolean;
19
21
  allowDevSkip?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"proctoring-system-check-contract.d.ts","sourceRoot":"","sources":["../src/proctoring-system-check-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAElF,sEAAsE;AACtE,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,aAAa,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE;QACV,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,uBAAuB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC;IACF,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,EAAE,CAAC;IACT,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC7E,4BAA4B,EAAE,EAAE,CAAC;IACjC,4BAA4B,EAAE,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACtE,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACvC"}
1
+ {"version":3,"file":"proctoring-system-check-contract.d.ts","sourceRoot":"","sources":["../src/proctoring-system-check-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAE1F,sEAAsE;AACtE,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,aAAa,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE;QACV,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,uBAAuB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC;IACF,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,EAAE,CAAC;IACT,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC7E,4BAA4B,EAAE,EAAE,CAAC;IACjC,4BAA4B,EAAE,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACtE,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACvC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * One device inside `<ProctoringDevicePicker>`. Internal: hosts use the
3
+ * parent, which decides which devices a question needs and owns the layout
4
+ * and the single status line. This item lists its devices, switches through
5
+ * the session, runs the quick test, and reports its status upward.
6
+ */
7
+ import type { RuntimeDeviceSwitchResult } from "@a4anthony/proctorkit-sdk";
8
+ import type { MediaDeviceOption } from "../wizard/media-device-list.js";
9
+ import type { RuntimeDeviceSelectionKind } from "./runtime-device-selection.js";
10
+ import { type RuntimeDevicePickerClient } from "./useRuntimeDevice.js";
11
+ import { type ProctoringDevicePickerMessages } from "./device-picker-messages.js";
12
+ export type DevicePickerItemTone = "neutral" | "success" | "warn" | "danger";
13
+ export interface DevicePickerItemStatus {
14
+ text: string;
15
+ tone: DevicePickerItemTone;
16
+ }
17
+ /** What a device button needs to show without opening its panel. */
18
+ export interface DevicePickerItemSummary {
19
+ /**
20
+ * Worth showing at all. False until the first device list is in, and for a
21
+ * speaker the browser can't switch (no output routing, or none listed):
22
+ * the picker hides it rather than offer a control that changes nothing.
23
+ */
24
+ available: boolean;
25
+ label: string | null;
26
+ locked: boolean;
27
+ switching: boolean;
28
+ attention: boolean;
29
+ }
30
+ type __VLS_Props = {
31
+ kind: RuntimeDeviceSelectionKind;
32
+ copy: ProctoringDevicePickerMessages;
33
+ /**
34
+ * "chip": compact, for an inline footer. "row": labelled, for the menu.
35
+ * "panel": a selectable list, for a device button's popover.
36
+ */
37
+ variant: "chip" | "row" | "panel";
38
+ client?: RuntimeDevicePickerClient | null;
39
+ locked: boolean;
40
+ disabled: boolean;
41
+ showTest: boolean;
42
+ allowVirtualDevices: boolean;
43
+ deviceList?: MediaDeviceOption[];
44
+ speakerRoutingSupported?: boolean;
45
+ };
46
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
47
+ status: (kind: RuntimeDeviceSelectionKind, status: DevicePickerItemStatus | null) => any;
48
+ error: (error: Error) => any;
49
+ summary: (kind: RuntimeDeviceSelectionKind, summary: DevicePickerItemSummary) => any;
50
+ changed: (result: RuntimeDeviceSwitchResult) => any;
51
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
52
+ onStatus?: ((kind: RuntimeDeviceSelectionKind, status: DevicePickerItemStatus | null) => any) | undefined;
53
+ onError?: ((error: Error) => any) | undefined;
54
+ onSummary?: ((kind: RuntimeDeviceSelectionKind, summary: DevicePickerItemSummary) => any) | undefined;
55
+ onChanged?: ((result: RuntimeDeviceSwitchResult) => any) | undefined;
56
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
57
+ export default _default;
58
+ //# sourceMappingURL=DevicePickerItem.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevicePickerItem.vue.d.ts","sourceRoot":"","sources":["../../src/runtime-devices/DevicePickerItem.vue"],"names":[],"mappings":"AAiiBA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAM3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAIhF,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAuB,KAAK,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAEvG,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAC7E,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AACD,oEAAoE;AACpE,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,0BAA0B,CAAC;IACjC,IAAI,EAAE,8BAA8B,CAAC;IACrC;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;IAClC,MAAM,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACjC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;;;;;;;;;;;;AA4yBF,wBAOG"}
@@ -0,0 +1,17 @@
1
+ export type PickerMessageTone = "neutral" | "success" | "warn" | "danger";
2
+ type __VLS_Props = {
3
+ tone: PickerMessageTone;
4
+ text: string;
5
+ /** "hint": standing guidance. "status": progress. "problem": needs action. */
6
+ kind?: "hint" | "status" | "problem";
7
+ /** Show a lock instead of the neutral icon (a recording holds the device). */
8
+ locked?: boolean;
9
+ reserve?: boolean;
10
+ };
11
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
12
+ kind: "hint" | "status" | "problem";
13
+ locked: boolean;
14
+ reserve: boolean;
15
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
+ export default _default;
17
+ //# sourceMappingURL=PickerMessage.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PickerMessage.vue.d.ts","sourceRoot":"","sources":["../../src/runtime-devices/PickerMessage.vue"],"names":[],"mappings":"AAqEA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1E,KAAK,WAAW,GAAG;IACf,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrC,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;;UAJO,MAAM,GAAG,QAAQ,GAAG,SAAS;YAE3B,OAAO;aACN,OAAO;;AAyFrB,wBAOG"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * In-question device picker. Place it anywhere (typically the question
3
+ * wrapper's footer) and pass the devices the current question uses —
4
+ *
5
+ * <ProctoringDevicePicker :devices="['speaker']" /> listening
6
+ * <ProctoringDevicePicker :devices="['speaker', 'microphone']" /> speaking
7
+ *
8
+ * The camera is deliberately not offered. It is the proctoring camera, and a
9
+ * switch from here would skip the face check that pre-flight and Device
10
+ * settings run, letting a candidate move to a camera pointed elsewhere
11
+ * mid-exam. Camera changes go through Device settings, which re-verifies.
12
+ *
13
+ * It needs nothing else from the question. Devices come and go as `devices`
14
+ * changes between questions, and the chosen devices carry over because the
15
+ * selection is page-wide. Recorders and players anywhere on the page report
16
+ * what they are doing, so the microphone locks itself while a take is
17
+ * recording and the speaker test waits while question audio plays.
18
+ *
19
+ * Switching goes through the session client (the active `<ProctoredAssessment>`
20
+ * by default), so the SDK's rules hold: the speaker changes live without
21
+ * interrupting playback; the microphone is refused mid-recording.
22
+ */
23
+ import type { RuntimeDeviceSwitchResult } from "@a4anthony/proctorkit-sdk";
24
+ import type { MediaDeviceOption } from "../wizard/media-device-list.js";
25
+ /** The devices the picker offers. The camera is excluded on purpose (see above). */
26
+ export type ProctoringDevicePickerKind = "speaker" | "microphone";
27
+ import type { RuntimeDevicePickerClient } from "./useRuntimeDevice.js";
28
+ import { type ProctoringDevicePickerMessages } from "./device-picker-messages.js";
29
+ type __VLS_Props = {
30
+ /** The devices the current question uses, in display order. Empty hides the picker. */
31
+ devices: ProctoringDevicePickerKind[];
32
+ /**
33
+ * "buttons": one round button per device, each opening its own device
34
+ * list (like a call's control bar). "inline": a row of compact dropdowns.
35
+ * "menu": one "Audio & video" button holding every device.
36
+ */
37
+ layout?: "buttons" | "inline" | "menu";
38
+ /** Where device lists open. "top" suits a footer; flips if it won't fit. */
39
+ menuPlacement?: "top" | "bottom";
40
+ /** Session client. Defaults to the active `<ProctoredAssessment>` client. */
41
+ client?: RuntimeDevicePickerClient | null;
42
+ /**
43
+ * Lock the microphone and camera yourself. Recorders on the page already
44
+ * lock them automatically while recording; use this for a host-owned
45
+ * recording the picker can't see.
46
+ */
47
+ locked?: boolean;
48
+ disabled?: boolean;
49
+ /** Offer a quick test (tone for speakers, level for microphones). */
50
+ showTest?: boolean;
51
+ /** Offer virtual devices. Pass the policy's resolved value. */
52
+ allowVirtualDevices?: boolean;
53
+ /** Fixed device lists for host tests and stories. Skips enumeration. */
54
+ deviceLists?: Partial<Record<ProctoringDevicePickerKind, MediaDeviceOption[]>>;
55
+ /** Override detection of speaker routing (tests and stories). */
56
+ speakerRoutingSupported?: boolean;
57
+ messages?: Partial<ProctoringDevicePickerMessages>;
58
+ /** Open a device's list (or the menu) when the picker mounts. */
59
+ initialOpen?: ProctoringDevicePickerKind | "menu";
60
+ /**
61
+ * When the microphone in `devices` is offered. "attention" (default) keeps
62
+ * it hidden until a recorder on the page reports a microphone problem, so
63
+ * a candidate can't switch away from a working microphone mid-exam.
64
+ * "always" shows it whenever `devices` lists it.
65
+ */
66
+ microphoneVisibility?: "attention" | "always";
67
+ };
68
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
69
+ error: (error: Error) => any;
70
+ changed: (result: RuntimeDeviceSwitchResult) => any;
71
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
72
+ onError?: ((error: Error) => any) | undefined;
73
+ onChanged?: ((result: RuntimeDeviceSwitchResult) => any) | undefined;
74
+ }>, {
75
+ layout: "buttons" | "inline" | "menu";
76
+ messages: Partial<ProctoringDevicePickerMessages>;
77
+ disabled: boolean;
78
+ allowVirtualDevices: boolean;
79
+ client: RuntimeDevicePickerClient | null;
80
+ locked: boolean;
81
+ showTest: boolean;
82
+ speakerRoutingSupported: boolean;
83
+ menuPlacement: "top" | "bottom";
84
+ deviceLists: Partial<Record<ProctoringDevicePickerKind, MediaDeviceOption[]>>;
85
+ initialOpen: ProctoringDevicePickerKind | "menu";
86
+ microphoneVisibility: "attention" | "always";
87
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
88
+ export default _default;
89
+ //# sourceMappingURL=ProctoringDevicePicker.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProctoringDevicePicker.vue.d.ts","sourceRoot":"","sources":["../../src/runtime-devices/ProctoringDevicePicker.vue"],"names":[],"mappings":"AA+dA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAW3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AASxE,oFAAoF;AACpF,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,YAAY,CAAC;AAGlE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,6BAA6B,CAAC;AAErC,KAAK,WAAW,GAAG;IACf,uFAAuF;IACvF,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,4EAA4E;IAC5E,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACjC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC1C;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wEAAwE;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;IAC/E,iEAAiE;IACjE,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACnD,iEAAiE;IACjE,WAAW,CAAC,EAAE,0BAA0B,GAAG,MAAM,CAAC;IAClD;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CAC/C,CAAC;;;;;;;;YA9BS,SAAS,GAAG,QAAQ,GAAG,MAAM;cAoB3B,OAAO,CAAC,8BAA8B,CAAC;cATvC,OAAO;yBAII,OAAO;YAXpB,yBAAyB,GAAG,IAAI;YAMhC,OAAO;cAGL,OAAO;6BAMQ,OAAO;mBAjBjB,KAAK,GAAG,QAAQ;iBAelB,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,iBAAiB,EAAE,CAAC,CAAC;iBAKhE,0BAA0B,GAAG,MAAM;0BAO1B,WAAW,GAAG,QAAQ;;AAqwBjD,wBAQG"}
@@ -0,0 +1,42 @@
1
+ import type { RuntimeDeviceSelectionKind } from "./runtime-device-selection.js";
2
+ import type { RuntimeDeviceSwitchFailure } from "./useRuntimeDevice.js";
3
+ /**
4
+ * Copy for `<ProctoringDevicePicker>`. `{device}` is the lower-case device
5
+ * noun ("microphone"), `{label}` the device's name.
6
+ */
7
+ export interface ProctoringDevicePickerMessages {
8
+ /** The menu layout's button. */
9
+ menuLabel: string;
10
+ /** Appended to a device button's spoken name. */
11
+ lockedShort: string;
12
+ attentionShort: string;
13
+ kindLabel: Record<RuntimeDeviceSelectionKind, string>;
14
+ deviceNoun: Record<RuntimeDeviceSelectionKind, string>;
15
+ selectLabel: string;
16
+ noDevices: string;
17
+ locked: string;
18
+ /** The microphone is held because a finished take's upload is waiting for a retry. */
19
+ lockedUpload: string;
20
+ disconnected: string;
21
+ failed: Record<RuntimeDeviceSwitchFailure, string>;
22
+ /** Visible label of the compact test buttons; the full label is announced. */
23
+ testShort: string;
24
+ speakerTest: string;
25
+ /** Standing hint at the foot of each device's panel. */
26
+ hint: Record<RuntimeDeviceSelectionKind, string>;
27
+ speakerTestFailed: string;
28
+ microphoneTest: string;
29
+ microphoneTestStop: string;
30
+ microphoneListening: string;
31
+ microphoneHeard: string;
32
+ microphoneLow: string;
33
+ microphoneSilent: string;
34
+ microphoneUnavailable: string;
35
+ /** Opens Device settings with only the microphone (inside `<ProctoredAssessment>`). */
36
+ microphoneCheck: string;
37
+ /** A recorder on the page reported a microphone problem. */
38
+ microphoneAttention: string;
39
+ }
40
+ export declare const DEFAULT_DEVICE_PICKER_MESSAGES: ProctoringDevicePickerMessages;
41
+ export declare function formatPickerMessage(template: string, values: Partial<Record<"device" | "label", string>>): string;
42
+ //# sourceMappingURL=device-picker-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-picker-messages.d.ts","sourceRoot":"","sources":["../../src/runtime-devices/device-picker-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IACtD,UAAU,EAAE,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IACnD,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IACjD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uFAAuF;IACvF,eAAe,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,8BAA8B,EAAE,8BAuC5C,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,GAClD,MAAM,CAER"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Page-wide "the microphone needs attention" flag, shared by recorders, the
3
+ * in-question picker, and the Device settings dialog.
4
+ *
5
+ * A recorder raises it when it has evidence the microphone is not working:
6
+ * it would not open, it disconnected mid-take, a finished take was silent, or
7
+ * (with the live check turned on) the input stayed digitally silent. The
8
+ * picker reads it to reveal its microphone control; Device settings clears it
9
+ * once a microphone passes its speech check. Choosing another microphone
10
+ * anywhere on the page clears it too, through the shared device selection.
11
+ *
12
+ * Only certain failures ever block: a microphone that will not open. Every
13
+ * other reason is a hint the candidate can dismiss, because silence alone is
14
+ * not proof a microphone is broken (noise-gated microphones, a suspended
15
+ * audio engine, and Bluetooth profile switches all read as true silence).
16
+ */
17
+ import { type ComputedRef } from "vue";
18
+ export type MicrophoneAttentionReason =
19
+ /** The microphone would not open when recording started. */
20
+ "unavailable"
21
+ /** The microphone disconnected during a take. */
22
+ | "device-lost"
23
+ /** A finished take's volume analysis was `silent`. */
24
+ | "silent-take"
25
+ /** The live check found no input for several seconds during a take. */
26
+ | "no-input";
27
+ export interface MicrophoneAttention {
28
+ reason: MicrophoneAttentionReason;
29
+ /** The take it was raised for, when there is one. */
30
+ clipId: string | null;
31
+ /**
32
+ * The microphone the recorder recorded from (or, for `unavailable`, tried
33
+ * to open), so a check can start on that exact device. `null` when the
34
+ * browser didn't report one.
35
+ */
36
+ deviceId: string | null;
37
+ }
38
+ declare const state: import("vue").ShallowRef<MicrophoneAttention | null, MicrophoneAttention | null>;
39
+ export declare function raiseMicrophoneAttention(attention: MicrophoneAttention): void;
40
+ export declare function clearMicrophoneAttention(): void;
41
+ export declare function useMicrophoneAttention(): {
42
+ attention: Readonly<typeof state>;
43
+ needsAttention: ComputedRef<boolean>;
44
+ };
45
+ /** For tests, stories, and a new session on the same page. */
46
+ export declare function resetMicrophoneAttention(): void;
47
+ export {};
48
+ //# sourceMappingURL=microphone-attention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microphone-attention.d.ts","sourceRoot":"","sources":["../../src/runtime-devices/microphone-attention.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAyC,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAG9E,MAAM,MAAM,yBAAyB;AACnC,4DAA4D;AAC1D,aAAa;AACf,iDAAiD;GAC/C,aAAa;AACf,sDAAsD;GACpD,aAAa;AACf,uEAAuE;GACrE,UAAU,CAAC;AAEf,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,yBAAyB,CAAC;IAClC,qDAAqD;IACrD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,QAAA,MAAM,KAAK,kFAA+C,CAAC;AAe3D,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAG7E;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED,wBAAgB,sBAAsB,IAAI;IACxC,SAAS,EAAE,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC;IAClC,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACtC,CAMA;AAED,8DAA8D;AAC9D,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -0,0 +1,13 @@
1
+ import type { MicrophoneAttentionReason } from "./microphone-attention.js";
2
+ /**
3
+ * Copy for the alert at the top of Device settings when it is opened to check
4
+ * only the microphone (a recorder's or the picker's **Check microphone**).
5
+ * The title says what went wrong; `instruction` says what to do. `{test}` is
6
+ * replaced with the microphone step's test button label.
7
+ */
8
+ export interface MicrophoneCheckMessages {
9
+ title: Record<MicrophoneAttentionReason, string>;
10
+ instruction: string;
11
+ }
12
+ export declare const DEFAULT_MICROPHONE_CHECK_MESSAGES: MicrophoneCheckMessages;
13
+ //# sourceMappingURL=microphone-check-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microphone-check-messages.d.ts","sourceRoot":"","sources":["../../src/runtime-devices/microphone-check-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,iCAAiC,EAAE,uBAS/C,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { RuntimeDeviceSelectionKind } from "./runtime-device-selection.js";
2
+ export type DeviceActivityReason = "recording" | "upload";
3
+ /** Mark devices as in use. Call the returned function exactly once to release. */
4
+ export declare function beginDeviceActivity(kinds: RuntimeDeviceSelectionKind[], reason?: DeviceActivityReason): () => void;
5
+ /** Reactive: whether any component is using this device right now. */
6
+ export declare function isDeviceActive(kind: RuntimeDeviceSelectionKind): boolean;
7
+ /** Reactive: why the device is held, preferring a live recording. */
8
+ export declare function deviceActivityReason(kind: RuntimeDeviceSelectionKind): DeviceActivityReason | null;
9
+ /** Clear all activity. For tests. */
10
+ export declare function resetDeviceActivity(): void;
11
+ /**
12
+ * Hold `kinds` as active whenever `isActive()` is true, for a component's
13
+ * lifetime. Released when it turns false, the kinds change, or on unmount.
14
+ */
15
+ export declare function useDeviceActivity(kinds: () => RuntimeDeviceSelectionKind[], isActive: () => boolean, reason?: DeviceActivityReason): void;
16
+ //# sourceMappingURL=runtime-device-activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-device-activity.d.ts","sourceRoot":"","sources":["../../src/runtime-devices/runtime-device-activity.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAEhF,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAQ1D,kFAAkF;AAClF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,0BAA0B,EAAE,EACnC,MAAM,GAAE,oBAAkC,GACzC,MAAM,IAAI,CAQZ;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAExE;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,0BAA0B,GAAG,oBAAoB,GAAG,IAAI,CAIlG;AAED,qCAAqC;AACrC,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,0BAA0B,EAAE,EACzC,QAAQ,EAAE,MAAM,OAAO,EACvB,MAAM,GAAE,oBAAkC,GACzC,IAAI,CAcN"}
@@ -0,0 +1,11 @@
1
+ export type RuntimeDeviceSelectionKind = "microphone" | "speaker" | "camera";
2
+ /** Record a live choice and keep the wizard's saved selection in step. */
3
+ export declare function setRuntimeDeviceSelection(kind: RuntimeDeviceSelectionKind, deviceId: string | null | undefined): void;
4
+ /**
5
+ * The device a component should use. Reactive on the live choice, so a
6
+ * `computed` around it follows switches made anywhere on the page.
7
+ */
8
+ export declare function resolveRuntimeDeviceId(kind: RuntimeDeviceSelectionKind, propValue?: string | null): string | undefined;
9
+ /** Clear live choices. For tests, stories, and a new session on the same page. */
10
+ export declare function resetRuntimeDeviceSelection(): void;
11
+ //# sourceMappingURL=runtime-device-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-device-selection.d.ts","sourceRoot":"","sources":["../../src/runtime-devices/runtime-device-selection.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,0BAA0B,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAgB7E,0EAA0E;AAC1E,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,0BAA0B,EAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,IAAI,CAMN;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,0BAA0B,EAChC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,MAAM,GAAG,SAAS,CAKpB;AAED,kFAAkF;AAClF,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD"}
@@ -0,0 +1,72 @@
1
+ import { type RuntimeDeviceSwitchErrorCode, type RuntimeDeviceSwitchResult } from "@a4anthony/proctorkit-sdk";
2
+ import { type MaybeRefOrGetter } from "vue";
3
+ import { type MediaDeviceOption } from "../wizard/media-device-list.js";
4
+ import { type RuntimeDeviceSelectionKind } from "./runtime-device-selection.js";
5
+ /**
6
+ * Whether question audio and video (HTML media elements) can be sent to a
7
+ * chosen speaker. This, not Web Audio support, decides if a speaker list is
8
+ * worth showing: it is what actually plays the question.
9
+ */
10
+ export declare function supportsMediaOutputRouting(): boolean;
11
+ /** Real outputs, without the browser's "default"/"communications" aliases. */
12
+ export declare function distinctOutputs(devices: ReadonlyArray<MediaDeviceOption>): MediaDeviceOption[];
13
+ /**
14
+ * The real device a browser alias entry ("Default - Built-in Speakers")
15
+ * stands for, when that device is also listed. Such an alias is shown once,
16
+ * as the real device, instead of twice.
17
+ */
18
+ export declare function aliasTarget(device: MediaDeviceOption, list: ReadonlyArray<MediaDeviceOption>): MediaDeviceOption | undefined;
19
+ /** The session methods an in-question picker needs. */
20
+ export interface RuntimeDevicePickerClient {
21
+ switchMicrophone(deviceId?: string | null): Promise<RuntimeDeviceSwitchResult>;
22
+ switchSpeaker(deviceId?: string | null): Promise<RuntimeDeviceSwitchResult>;
23
+ switchCamera(deviceId?: string | null): Promise<RuntimeDeviceSwitchResult>;
24
+ }
25
+ /** Why a switch did not happen. `switch-failed` covers anything untyped. */
26
+ export type RuntimeDeviceSwitchFailure = RuntimeDeviceSwitchErrorCode | "switch-failed";
27
+ export interface UseRuntimeDeviceOptions {
28
+ /** Session client. Defaults to the active `<ProctoredAssessment>` client. */
29
+ client?: MaybeRefOrGetter<RuntimeDevicePickerClient | null | undefined>;
30
+ /** Fixed device list for host tests and stories. Skips enumeration. */
31
+ devices?: MaybeRefOrGetter<MediaDeviceOption[] | undefined>;
32
+ /** Offer virtual devices. Pass the policy's resolved value. */
33
+ allowVirtualDevices?: MaybeRefOrGetter<boolean | undefined>;
34
+ /** Override detection of media-element speaker routing (tests and stories). */
35
+ speakerRoutingSupported?: MaybeRefOrGetter<boolean | undefined>;
36
+ }
37
+ /**
38
+ * One device kind's live state for an in-question picker: the selectable
39
+ * devices (same virtual-device rule as preflight), the device in use, and a
40
+ * `switchTo` that goes through the session when there is one so the SDK's
41
+ * recording lock, rollback, and checkpoint rebase all apply. Without a session
42
+ * (standalone media components) the choice is stored for this page only.
43
+ */
44
+ export declare function useRuntimeDevice(kind: MaybeRefOrGetter<RuntimeDeviceSelectionKind>, options?: UseRuntimeDeviceOptions): {
45
+ devices: import("vue").ComputedRef<MediaDeviceOption[]>;
46
+ currentId: import("vue").ComputedRef<string>;
47
+ currentDevice: import("vue").ComputedRef<MediaDeviceOption | null>;
48
+ currentMissing: import("vue").ComputedRef<boolean>;
49
+ routingSupported: import("vue").ComputedRef<boolean>;
50
+ toneRoutingSupported: import("vue").ComputedRef<boolean>;
51
+ loading: import("vue").Ref<boolean, boolean>;
52
+ loaded: import("vue").ComputedRef<boolean>;
53
+ switching: import("vue").Ref<boolean, boolean>;
54
+ failure: import("vue").Ref<RuntimeDeviceSwitchFailure | null, RuntimeDeviceSwitchFailure | null>;
55
+ lastSwitched: import("vue").Ref<{
56
+ deviceId: string | null;
57
+ label: string;
58
+ at: number;
59
+ } | null, {
60
+ deviceId: string | null;
61
+ label: string;
62
+ at: number;
63
+ } | {
64
+ deviceId: string | null;
65
+ label: string;
66
+ at: number;
67
+ } | null>;
68
+ refresh: () => Promise<void>;
69
+ switchTo: (deviceId: string) => Promise<RuntimeDeviceSwitchResult | null>;
70
+ clearFailure: () => void;
71
+ };
72
+ //# sourceMappingURL=useRuntimeDevice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRuntimeDevice.d.ts","sourceRoot":"","sources":["../../src/runtime-devices/useRuntimeDevice.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAsD,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAEhG,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAG1F,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAMpD;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,EAAE,CAE9F;AAID;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,aAAa,CAAC,iBAAiB,CAAC,GACrC,iBAAiB,GAAG,SAAS,CAI/B;AAED,uDAAuD;AACvD,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC/E,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC5E,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC5E;AAED,4EAA4E;AAC5E,MAAM,MAAM,0BAA0B,GAAG,4BAA4B,GAAG,eAAe,CAAC;AAExF,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,gBAAgB,CAAC,yBAAyB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACxE,uEAAuE;IACvE,OAAO,CAAC,EAAE,gBAAgB,CAAC,iBAAiB,EAAE,GAAG,SAAS,CAAC,CAAC;IAC5D,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAC5D,+EAA+E;IAC/E,uBAAuB,CAAC,EAAE,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;CACjE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,gBAAgB,CAAC,0BAA0B,CAAC,EAClD,OAAO,GAAE,uBAA4B;;;;;;;;;;;;kBAYA,MAAM,GAAG,IAAI;eAAS,MAAM;YAAM,MAAM;;kBAAxC,MAAM,GAAG,IAAI;eAAS,MAAM;YAAM,MAAM;;kBAAxC,MAAM,GAAG,IAAI;eAAS,MAAM;YAAM,MAAM;;mBA2CnD,OAAO,CAAC,IAAI,CAAC;yBAkBL,MAAM,KAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;;EAmErF"}
@@ -0,0 +1,15 @@
1
+ import { type Ref } from "vue";
2
+ export type LostTrackKind = "microphone" | "camera";
3
+ /**
4
+ * Calls `onLost` once when an audio or video track of `stream` ends while
5
+ * `active` is true (a device unplugged, or the OS revoked it mid-take).
6
+ * Recorders use it to stop the take cleanly instead of hot-swapping the
7
+ * device inside a running recording.
8
+ */
9
+ export declare function useTrackLoss(options: {
10
+ stream: Ref<MediaStream | undefined>;
11
+ active: Ref<boolean>;
12
+ kinds: () => LostTrackKind[];
13
+ onLost: (kind: LostTrackKind) => void;
14
+ }): void;
15
+ //# sourceMappingURL=useTrackLoss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTrackLoss.d.ts","sourceRoot":"","sources":["../../src/runtime-devices/useTrackLoss.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEpD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,MAAM,EAAE,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,KAAK,EAAE,MAAM,aAAa,EAAE,CAAC;IAC7B,MAAM,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;CACvC,GAAG,IAAI,CAmCP"}