@pie-players/pie-assessment-toolkit 0.3.42 → 0.3.44
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/attempt/AssessmentSession.d.ts +0 -1
- package/dist/attempt/AssessmentSession.js.map +1 -1
- package/dist/attempt/TestSession.d.ts +0 -1
- package/dist/attempt/TestSession.js.map +1 -1
- package/dist/attempt/adapters/activity-to-test-attempt-session.d.ts +0 -1
- package/dist/attempt/adapters/activity-to-test-attempt-session.js.map +1 -1
- package/dist/components/ItemToolBar.custom-element.js +1181 -157
- package/dist/components/SectionToolBar.custom-element.js +1179 -157
- package/dist/components/item-toolbar-element.d.ts +0 -1
- package/dist/components/item-toolbar-element.js.map +1 -1
- package/dist/components/pie-assessment-toolkit-element.d.ts +0 -1
- package/dist/components/pie-assessment-toolkit-element.js.map +1 -1
- package/dist/components/section-toolbar-element.d.ts +0 -1
- package/dist/components/section-toolbar-element.js.map +1 -1
- package/dist/components/vendor/nds/README.md +110 -0
- package/dist/components/vendor/nds/nds-icon-button.js +826 -0
- package/dist/context/assessment-toolkit-context.d.ts +0 -1
- package/dist/context/assessment-toolkit-context.js.map +1 -1
- package/dist/context/runtime-context-consumer.d.ts +0 -1
- package/dist/context/runtime-context-consumer.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js.map +1 -1
- package/dist/item-loader.d.ts +0 -1
- package/dist/item-loader.js.map +1 -1
- package/dist/policy/core/PolicySource.d.ts +0 -1
- package/dist/policy/core/PolicySource.js.map +1 -1
- package/dist/policy/core/ToolPolicyEngine.d.ts +0 -1
- package/dist/policy/core/ToolPolicyEngine.js.map +1 -1
- package/dist/policy/core/compose-decision.d.ts +0 -1
- package/dist/policy/core/compose-decision.js.map +1 -1
- package/dist/policy/core/decision-types.d.ts +0 -1
- package/dist/policy/core/decision-types.js.map +1 -1
- package/dist/policy/core/engine-context.d.ts +0 -1
- package/dist/policy/core/engine-context.js.map +1 -1
- package/dist/policy/core/pnp-policy-inputs.d.ts +0 -1
- package/dist/policy/core/pnp-policy-inputs.js.map +1 -1
- package/dist/policy/core/policy-source-tag.d.ts +0 -1
- package/dist/policy/core/policy-source-tag.js.map +1 -1
- package/dist/policy/core/provenance.d.ts +0 -1
- package/dist/policy/core/provenance.js.map +1 -1
- package/dist/policy/engine.d.ts +0 -1
- package/dist/policy/engine.js.map +1 -1
- package/dist/policy/internal.d.ts +0 -1
- package/dist/policy/internal.js.map +1 -1
- package/dist/policy/sources/PnpPolicySource.d.ts +0 -1
- package/dist/policy/sources/PnpPolicySource.js.map +1 -1
- package/dist/runtime/RuntimeRegistry.d.ts +0 -1
- package/dist/runtime/RuntimeRegistry.js.map +1 -1
- package/dist/runtime/SectionRuntimeEngine.d.ts +0 -1
- package/dist/runtime/SectionRuntimeEngine.js.map +1 -1
- package/dist/runtime/adapter/SectionEngineAdapter.d.ts +0 -1
- package/dist/runtime/adapter/SectionEngineAdapter.js.map +1 -1
- package/dist/runtime/adapter/coordinator-bridge.d.ts +0 -1
- package/dist/runtime/adapter/coordinator-bridge.js.map +1 -1
- package/dist/runtime/adapter/dom-event-bridge.d.ts +0 -1
- package/dist/runtime/adapter/dom-event-bridge.js.map +1 -1
- package/dist/runtime/adapter/framework-error-bridge.d.ts +0 -1
- package/dist/runtime/adapter/framework-error-bridge.js.map +1 -1
- package/dist/runtime/adapter/instrumentation-bridge.d.ts +0 -1
- package/dist/runtime/adapter/instrumentation-bridge.js.map +1 -1
- package/dist/runtime/adapter/subscriber-fanout.d.ts +0 -1
- package/dist/runtime/adapter/subscriber-fanout.js.map +1 -1
- package/dist/runtime/core/SectionEngineCore.d.ts +0 -1
- package/dist/runtime/core/SectionEngineCore.js.map +1 -1
- package/dist/runtime/core/cohort.d.ts +0 -1
- package/dist/runtime/core/cohort.js.map +1 -1
- package/dist/runtime/core/engine-input.d.ts +0 -1
- package/dist/runtime/core/engine-input.js.map +1 -1
- package/dist/runtime/core/engine-output.d.ts +0 -1
- package/dist/runtime/core/engine-output.js.map +1 -1
- package/dist/runtime/core/engine-readiness.d.ts +0 -1
- package/dist/runtime/core/engine-readiness.js.map +1 -1
- package/dist/runtime/core/engine-resolver.d.ts +0 -1
- package/dist/runtime/core/engine-resolver.js.map +1 -1
- package/dist/runtime/core/engine-stage-derivation.d.ts +0 -1
- package/dist/runtime/core/engine-stage-derivation.js.map +1 -1
- package/dist/runtime/core/engine-state.d.ts +0 -1
- package/dist/runtime/core/engine-state.js.map +1 -1
- package/dist/runtime/core/engine-transition.d.ts +0 -1
- package/dist/runtime/core/engine-transition.js.map +1 -1
- package/dist/runtime/engine-context.d.ts +0 -1
- package/dist/runtime/engine-context.js.map +1 -1
- package/dist/runtime/engine.d.ts +0 -1
- package/dist/runtime/engine.js.map +1 -1
- package/dist/runtime/internal.d.ts +0 -1
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/registration-events.d.ts +0 -1
- package/dist/runtime/registration-events.js.map +1 -1
- package/dist/runtime/runtime-id.d.ts +0 -1
- package/dist/runtime/runtime-id.js.map +1 -1
- package/dist/runtime/section-runtime-engine-host-context.d.ts +0 -1
- package/dist/runtime/section-runtime-engine-host-context.js.map +1 -1
- package/dist/runtime/session-event-emitter-policy.d.ts +0 -1
- package/dist/runtime/session-event-emitter-policy.js.map +1 -1
- package/dist/runtime/stage-emit-gate.d.ts +0 -1
- package/dist/runtime/stage-emit-gate.js.map +1 -1
- package/dist/runtime/tool-host-contract.d.ts +0 -1
- package/dist/runtime/tool-host-contract.js.map +1 -1
- package/dist/services/AccessibilityCatalogResolver.d.ts +0 -1
- package/dist/services/AccessibilityCatalogResolver.js.map +1 -1
- package/dist/services/ContextVariableStore.d.ts +0 -1
- package/dist/services/ContextVariableStore.js.map +1 -1
- package/dist/services/ElementToolStateStore.d.ts +0 -1
- package/dist/services/ElementToolStateStore.js.map +1 -1
- package/dist/services/HighlightCoordinator.d.ts +0 -1
- package/dist/services/HighlightCoordinator.js.map +1 -1
- package/dist/services/I18nService.d.ts +0 -1
- package/dist/services/I18nService.js.map +1 -1
- package/dist/services/PNPToolResolver.d.ts +0 -1
- package/dist/services/PNPToolResolver.js.map +1 -1
- package/dist/services/RangeSerializer.d.ts +0 -1
- package/dist/services/RangeSerializer.js.map +1 -1
- package/dist/services/SSMLExtractor.d.ts +0 -1
- package/dist/services/SSMLExtractor.js.map +1 -1
- package/dist/services/TTSService.d.ts +0 -1
- package/dist/services/TTSService.js.map +1 -1
- package/dist/services/ThemeProvider.d.ts +0 -1
- package/dist/services/ThemeProvider.js.map +1 -1
- package/dist/services/ToolConfigResolver.d.ts +0 -1
- package/dist/services/ToolConfigResolver.js.map +1 -1
- package/dist/services/ToolCoordinator.d.ts +0 -1
- package/dist/services/ToolCoordinator.js.map +1 -1
- package/dist/services/ToolRegistry.d.ts +0 -1
- package/dist/services/ToolRegistry.js.map +1 -1
- package/dist/services/ToolkitCoordinator.d.ts +0 -1
- package/dist/services/ToolkitCoordinator.js.map +1 -1
- package/dist/services/create-tools-config.d.ts +0 -1
- package/dist/services/create-tools-config.js.map +1 -1
- package/dist/services/createDefaultToolRegistry.d.ts +0 -1
- package/dist/services/createDefaultToolRegistry.js.map +1 -1
- package/dist/services/defaultPersonalNeedsProfile.d.ts +0 -1
- package/dist/services/defaultPersonalNeedsProfile.js.map +1 -1
- package/dist/services/framework-error-bus.d.ts +0 -1
- package/dist/services/framework-error-bus.js.map +1 -1
- package/dist/services/framework-error.d.ts +0 -1
- package/dist/services/framework-error.js.map +1 -1
- package/dist/services/interfaces.d.ts +0 -1
- package/dist/services/interfaces.js.map +1 -1
- package/dist/services/pnp-provenance.d.ts +0 -1
- package/dist/services/pnp-provenance.js.map +1 -1
- package/dist/services/pnp-standard-features.d.ts +0 -1
- package/dist/services/pnp-standard-features.js.map +1 -1
- package/dist/services/section-controller-types.d.ts +0 -1
- package/dist/services/section-controller-types.js.map +1 -1
- package/dist/services/tool-config-defaults.d.ts +0 -1
- package/dist/services/tool-config-defaults.js.map +1 -1
- package/dist/services/tool-config-validation.d.ts +0 -1
- package/dist/services/tool-config-validation.js.map +1 -1
- package/dist/services/tool-context.d.ts +0 -1
- package/dist/services/tool-context.js.map +1 -1
- package/dist/services/tool-instance-id.d.ts +0 -1
- package/dist/services/tool-instance-id.js.map +1 -1
- package/dist/services/tool-providers/DesmosToolProvider.d.ts +0 -1
- package/dist/services/tool-providers/DesmosToolProvider.js.map +1 -1
- package/dist/services/tool-providers/TTSToolProvider.d.ts +0 -1
- package/dist/services/tool-providers/TTSToolProvider.js.map +1 -1
- package/dist/services/tool-providers/ToolProviderApi.d.ts +0 -1
- package/dist/services/tool-providers/ToolProviderApi.js.map +1 -1
- package/dist/services/tool-providers/ToolProviderRegistry.d.ts +0 -1
- package/dist/services/tool-providers/ToolProviderRegistry.js.map +1 -1
- package/dist/services/tool-providers/index.d.ts +0 -1
- package/dist/services/tool-providers/index.js.map +1 -1
- package/dist/services/toolbar-items.d.ts +0 -1
- package/dist/services/toolbar-items.js.map +1 -1
- package/dist/services/tools-config-normalizer.d.ts +0 -1
- package/dist/services/tools-config-normalizer.js.map +1 -1
- package/dist/services/tts/browser-provider.d.ts +0 -1
- package/dist/services/tts/browser-provider.js.map +1 -1
- package/dist/services/tts/text-processing.d.ts +0 -1
- package/dist/services/tts/text-processing.js.map +1 -1
- package/dist/services/tts/text-segmentation.d.ts +0 -1
- package/dist/services/tts/text-segmentation.js.map +1 -1
- package/dist/services/tts/visual-line-ranges.d.ts +0 -1
- package/dist/services/tts/visual-line-ranges.js.map +1 -1
- package/dist/services/tts-control-events.d.ts +0 -1
- package/dist/services/tts-control-events.js.map +1 -1
- package/dist/services/tts-runtime-config.d.ts +0 -1
- package/dist/services/tts-runtime-config.js.map +1 -1
- package/dist/tools/calculators/desmos-provider.d.ts +0 -1
- package/dist/tools/calculators/desmos-provider.js.map +1 -1
- package/dist/tools/client.d.ts +0 -1
- package/dist/tools/client.js.map +1 -1
- package/dist/tools/default-tool-module-loaders.d.ts +0 -1
- package/dist/tools/default-tool-module-loaders.js.map +1 -1
- package/dist/tools/index.d.ts +0 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/library-loader.d.ts +0 -1
- package/dist/tools/library-loader.js.map +1 -1
- package/dist/tools/registrations/accessibility-tools.d.ts +0 -1
- package/dist/tools/registrations/accessibility-tools.js.map +1 -1
- package/dist/tools/registrations/calculator.d.ts +0 -1
- package/dist/tools/registrations/calculator.js.map +1 -1
- package/dist/tools/registrations/interaction-tools.d.ts +0 -1
- package/dist/tools/registrations/interaction-tools.js.map +1 -1
- package/dist/tools/registrations/measurement-tools.d.ts +0 -1
- package/dist/tools/registrations/measurement-tools.js.map +1 -1
- package/dist/tools/registrations/subject-specific-tools.d.ts +0 -1
- package/dist/tools/registrations/subject-specific-tools.js.map +1 -1
- package/dist/tools/registrations/toolbar-registration-helpers.d.ts +0 -1
- package/dist/tools/registrations/toolbar-registration-helpers.js.map +1 -1
- package/dist/tools/registrations/tts.d.ts +0 -1
- package/dist/tools/registrations/tts.js.map +1 -1
- package/dist/tools/response-discovery.d.ts +0 -1
- package/dist/tools/response-discovery.js.map +1 -1
- package/dist/tools/tool-tag-map.d.ts +0 -1
- package/dist/tools/tool-tag-map.js.map +1 -1
- package/dist/tools/types.d.ts +0 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/variant-resolver.d.ts +0 -1
- package/dist/tools/variant-resolver.js.map +1 -1
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.js.map +1 -1
- package/package.json +7 -7
- package/dist/attempt/AssessmentSession.d.ts.map +0 -1
- package/dist/attempt/TestSession.d.ts.map +0 -1
- package/dist/attempt/adapters/activity-to-test-attempt-session.d.ts.map +0 -1
- package/dist/components/item-toolbar-element.d.ts.map +0 -1
- package/dist/components/pie-assessment-toolkit-element.d.ts.map +0 -1
- package/dist/components/section-toolbar-element.d.ts.map +0 -1
- package/dist/context/assessment-toolkit-context.d.ts.map +0 -1
- package/dist/context/runtime-context-consumer.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/item-loader.d.ts.map +0 -1
- package/dist/policy/core/PolicySource.d.ts.map +0 -1
- package/dist/policy/core/ToolPolicyEngine.d.ts.map +0 -1
- package/dist/policy/core/compose-decision.d.ts.map +0 -1
- package/dist/policy/core/decision-types.d.ts.map +0 -1
- package/dist/policy/core/engine-context.d.ts.map +0 -1
- package/dist/policy/core/pnp-policy-inputs.d.ts.map +0 -1
- package/dist/policy/core/policy-source-tag.d.ts.map +0 -1
- package/dist/policy/core/provenance.d.ts.map +0 -1
- package/dist/policy/engine.d.ts.map +0 -1
- package/dist/policy/internal.d.ts.map +0 -1
- package/dist/policy/sources/PnpPolicySource.d.ts.map +0 -1
- package/dist/runtime/RuntimeRegistry.d.ts.map +0 -1
- package/dist/runtime/SectionRuntimeEngine.d.ts.map +0 -1
- package/dist/runtime/adapter/SectionEngineAdapter.d.ts.map +0 -1
- package/dist/runtime/adapter/coordinator-bridge.d.ts.map +0 -1
- package/dist/runtime/adapter/dom-event-bridge.d.ts.map +0 -1
- package/dist/runtime/adapter/framework-error-bridge.d.ts.map +0 -1
- package/dist/runtime/adapter/instrumentation-bridge.d.ts.map +0 -1
- package/dist/runtime/adapter/subscriber-fanout.d.ts.map +0 -1
- package/dist/runtime/core/SectionEngineCore.d.ts.map +0 -1
- package/dist/runtime/core/cohort.d.ts.map +0 -1
- package/dist/runtime/core/engine-input.d.ts.map +0 -1
- package/dist/runtime/core/engine-output.d.ts.map +0 -1
- package/dist/runtime/core/engine-readiness.d.ts.map +0 -1
- package/dist/runtime/core/engine-resolver.d.ts.map +0 -1
- package/dist/runtime/core/engine-stage-derivation.d.ts.map +0 -1
- package/dist/runtime/core/engine-state.d.ts.map +0 -1
- package/dist/runtime/core/engine-transition.d.ts.map +0 -1
- package/dist/runtime/engine-context.d.ts.map +0 -1
- package/dist/runtime/engine.d.ts.map +0 -1
- package/dist/runtime/internal.d.ts.map +0 -1
- package/dist/runtime/registration-events.d.ts.map +0 -1
- package/dist/runtime/runtime-id.d.ts.map +0 -1
- package/dist/runtime/section-runtime-engine-host-context.d.ts.map +0 -1
- package/dist/runtime/session-event-emitter-policy.d.ts.map +0 -1
- package/dist/runtime/stage-emit-gate.d.ts.map +0 -1
- package/dist/runtime/tool-host-contract.d.ts.map +0 -1
- package/dist/services/AccessibilityCatalogResolver.d.ts.map +0 -1
- package/dist/services/ContextVariableStore.d.ts.map +0 -1
- package/dist/services/ElementToolStateStore.d.ts.map +0 -1
- package/dist/services/HighlightCoordinator.d.ts.map +0 -1
- package/dist/services/I18nService.d.ts.map +0 -1
- package/dist/services/PNPToolResolver.d.ts.map +0 -1
- package/dist/services/RangeSerializer.d.ts.map +0 -1
- package/dist/services/SSMLExtractor.d.ts.map +0 -1
- package/dist/services/TTSService.d.ts.map +0 -1
- package/dist/services/ThemeProvider.d.ts.map +0 -1
- package/dist/services/ToolConfigResolver.d.ts.map +0 -1
- package/dist/services/ToolCoordinator.d.ts.map +0 -1
- package/dist/services/ToolRegistry.d.ts.map +0 -1
- package/dist/services/ToolkitCoordinator.d.ts.map +0 -1
- package/dist/services/create-tools-config.d.ts.map +0 -1
- package/dist/services/createDefaultToolRegistry.d.ts.map +0 -1
- package/dist/services/defaultPersonalNeedsProfile.d.ts.map +0 -1
- package/dist/services/framework-error-bus.d.ts.map +0 -1
- package/dist/services/framework-error.d.ts.map +0 -1
- package/dist/services/interfaces.d.ts.map +0 -1
- package/dist/services/pnp-provenance.d.ts.map +0 -1
- package/dist/services/pnp-standard-features.d.ts.map +0 -1
- package/dist/services/section-controller-types.d.ts.map +0 -1
- package/dist/services/tool-config-defaults.d.ts.map +0 -1
- package/dist/services/tool-config-validation.d.ts.map +0 -1
- package/dist/services/tool-context.d.ts.map +0 -1
- package/dist/services/tool-instance-id.d.ts.map +0 -1
- package/dist/services/tool-providers/DesmosToolProvider.d.ts.map +0 -1
- package/dist/services/tool-providers/TTSToolProvider.d.ts.map +0 -1
- package/dist/services/tool-providers/ToolProviderApi.d.ts.map +0 -1
- package/dist/services/tool-providers/ToolProviderRegistry.d.ts.map +0 -1
- package/dist/services/tool-providers/index.d.ts.map +0 -1
- package/dist/services/toolbar-items.d.ts.map +0 -1
- package/dist/services/tools-config-normalizer.d.ts.map +0 -1
- package/dist/services/tts/browser-provider.d.ts.map +0 -1
- package/dist/services/tts/text-processing.d.ts.map +0 -1
- package/dist/services/tts/text-segmentation.d.ts.map +0 -1
- package/dist/services/tts/visual-line-ranges.d.ts.map +0 -1
- package/dist/services/tts-control-events.d.ts.map +0 -1
- package/dist/services/tts-runtime-config.d.ts.map +0 -1
- package/dist/tools/calculators/desmos-provider.d.ts.map +0 -1
- package/dist/tools/client.d.ts.map +0 -1
- package/dist/tools/default-tool-module-loaders.d.ts.map +0 -1
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/library-loader.d.ts.map +0 -1
- package/dist/tools/registrations/accessibility-tools.d.ts.map +0 -1
- package/dist/tools/registrations/calculator.d.ts.map +0 -1
- package/dist/tools/registrations/interaction-tools.d.ts.map +0 -1
- package/dist/tools/registrations/measurement-tools.d.ts.map +0 -1
- package/dist/tools/registrations/subject-specific-tools.d.ts.map +0 -1
- package/dist/tools/registrations/toolbar-registration-helpers.d.ts.map +0 -1
- package/dist/tools/registrations/tts.d.ts.map +0 -1
- package/dist/tools/response-discovery.d.ts.map +0 -1
- package/dist/tools/tool-tag-map.d.ts.map +0 -1
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/variant-resolver.d.ts.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PNPToolResolver.js","sourceRoot":"","sources":["../../src/services/PNPToolResolver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PNPToolResolver.js","sourceRoot":"","sources":["../../src/services/PNPToolResolver.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PNP Tool Resolver\n *\n * Resolves tool availability from QTI 3.0 Personal Needs Profile (PNP) and\n * assessment settings. Implements a precedence hierarchy for tool configuration\n * based on common assessment platform governance patterns.\n *\n * PRECEDENCE HIERARCHY (highest to lowest):\n * ==========================================\n *\n * Standards-Based (QTI 3.0):\n * - PNP supports (#6): Student's documented accessibility needs (accessibilityInfo.accessFeature)\n * - Item-level settings (#3, #4): Per-item accessibility requirements/restrictions\n *\n * Implementation-Specific (Common Practice):\n * - District policy (#1, #5): Institutional governance and legal compliance\n * - Test administration (#2): Session-level operational control\n *\n * The hierarchy itself is NOT defined by QTI 3.0 standards but follows common\n * patterns in K-12 assessment platforms, aligning with US IEP/504 accommodation\n * hierarchies where legal requirements and institutional policies take precedence.\n *\n * Precedence Order:\n * 1. District block (absolute veto) - Legal/policy requirements\n * 2. Test administration override - Proctor/administrator operational control\n * 3. Item restriction (per-item block) - Content author can disable for specific items\n * 4. Item requirement (forces enable) - Required by IEP/504 or content needs\n * 5. District requirement - Institutional accessibility requirements\n * 6. PNP supports (student needs) - QTI 3.0 standard student preferences\n *\n * Governance Context:\n * - Institutional veto (district) trumps individual preferences (legal compliance)\n * - Session control (test admin) enables operational flexibility\n * - Content restrictions (item) prevent tools that invalidate assessment\n * - Required accommodations (IEP/504) ensure legal compliance\n * - Student preferences (PNP) are honored when not overridden\n *\n * References:\n * - QTI 3.0: https://www.imsglobal.org/spec/qti/v3p0\n * - IMS AfA 3.0: https://www.imsglobal.org/spec/afa/v3p0\n * - Common assessment platform governance patterns (not standardized)\n *\n * Part of PIE Assessment Toolkit.\n */\n\nimport type {\n\tAssessmentEntity,\n\tAssessmentItemRef,\n\tAssessmentSettings,\n\tItemSettings,\n\tPersonalNeedsProfile,\n} from \"@pie-players/pie-players-shared/types\";\nimport type { ToolRegistry } from \"./ToolRegistry.js\";\nimport {\n\tPnpProvenanceBuilder,\n\ttype PnpResolutionProvenance,\n} from \"./pnp-provenance.js\";\n\n/**\n * Resolved tool configuration with source tracking\n */\nexport interface ResolvedToolConfig {\n\tid: string; // PIE tool ID\n\tenabled: boolean;\n\trequired?: boolean; // Must be available (item/district requirement)\n\talwaysAvailable?: boolean; // PNP support (can't be toggled off)\n\tsettings?: any; // Tool-specific configuration\n\tsource: \"district\" | \"item\" | \"pnp\" | \"settings\"; // Configuration source\n}\n\n/**\n * Resolution result with provenance tracking\n */\nexport interface ToolResolutionResult {\n\t/** Resolved tool configurations */\n\ttools: ResolvedToolConfig[];\n\n\t/** Complete provenance trail (for debugging/display) */\n\tprovenance: PnpResolutionProvenance;\n}\n\n/**\n * Internal context for tool resolution\n */\ninterface ResolutionContext {\n\tpnp?: PersonalNeedsProfile;\n\tdistrictPolicy?: AssessmentSettings[\"districtPolicy\"];\n\ttestAdmin?: AssessmentSettings[\"testAdministration\"];\n\titemSettings?: ItemSettings;\n\ttoolConfigs?: AssessmentSettings[\"toolConfigs\"];\n}\n\n/**\n * Resolves tool availability from QTI 3.0 assessment structure\n */\nexport class PnpToolResolver {\n\tprivate toolRegistry: ToolRegistry;\n\tprivate enableProvenance: boolean;\n\n\t/**\n\t * Create a PnpToolResolver\n\t *\n\t * @param toolRegistry Tool registry for PNP support mapping\n\t * @param enableProvenance Enable detailed provenance tracking (default: true)\n\t */\n\tconstructor(toolRegistry: ToolRegistry, enableProvenance = true) {\n\t\tthis.toolRegistry = toolRegistry;\n\t\tthis.enableProvenance = enableProvenance;\n\t}\n\n\t/**\n\t * Resolve all tools from QTI 3.0 assessment + optional item context\n\t *\n\t * @param assessment QTI 3.0 assessment with personalNeedsProfile\n\t * @param currentItemRef Current item for item-specific requirements (optional)\n\t * @returns Array of resolved tool configurations\n\t *\n\t * @example\n\t * const resolver = new PnpToolResolver(registry);\n\t * const tools = resolver.resolveTools(assessment, itemRef);\n\t * tools.forEach(tool => {\n\t * console.log(`${tool.id}: ${tool.enabled ? 'enabled' : 'disabled'}`);\n\t * });\n\t */\n\tresolveTools(\n\t\tassessment: AssessmentEntity,\n\t\tcurrentItemRef?: AssessmentItemRef,\n\t): ResolvedToolConfig[] {\n\t\tconst result = this.resolveToolsWithProvenance(assessment, currentItemRef);\n\t\treturn result.tools;\n\t}\n\n\t/**\n\t * Resolve all tools with full provenance tracking\n\t *\n\t * Returns both resolved tools and complete provenance trail showing:\n\t * - All configuration sources consulted\n\t * - Decision steps at each precedence level\n\t * - Reasons for enabling/blocking each feature\n\t * - Human-readable explanations\n\t *\n\t * @param assessment QTI 3.0 assessment with personalNeedsProfile\n\t * @param currentItemRef Current item for item-specific requirements (optional)\n\t * @returns Resolution result with tools and provenance\n\t *\n\t * @example\n\t * const resolver = new PnpToolResolver(registry);\n\t * const result = resolver.resolveToolsWithProvenance(assessment, itemRef);\n\t *\n\t * // Use resolved tools\n\t * result.tools.forEach(tool => console.log(tool.id, tool.enabled));\n\t *\n\t * // Display provenance to user\n\t * console.log(result.provenance.summary);\n\t * result.provenance.features.forEach((trail, featureId) => {\n\t * console.log(`${featureId}: ${trail.explanation}`);\n\t * });\n\t */\n\tresolveToolsWithProvenance(\n\t\tassessment: AssessmentEntity,\n\t\tcurrentItemRef?: AssessmentItemRef,\n\t): ToolResolutionResult {\n\t\tconst pnp = assessment.personalNeedsProfile;\n\t\tconst settings = assessment.settings as AssessmentSettings;\n\t\tconst itemSettings = currentItemRef?.settings as ItemSettings;\n\n\t\t// Initialize provenance builder\n\t\tconst contextId = `assessment-${assessment.id || \"unknown\"}${currentItemRef ? `-item-${currentItemRef.identifier}` : \"\"}`;\n\t\tconst provenanceBuilder = this.enableProvenance\n\t\t\t? new PnpProvenanceBuilder(contextId)\n\t\t\t: null;\n\n\t\t// Record configuration sources\n\t\tif (provenanceBuilder) {\n\t\t\tif (settings?.districtPolicy || settings?.testAdministration) {\n\t\t\t\tprovenanceBuilder.addSource(\"assessment\", {\n\t\t\t\t\tid: assessment.id || \"unknown\",\n\t\t\t\t\tname: assessment.name || assessment.id || \"Assessment\",\n\t\t\t\t\tconfig: settings,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (pnp) {\n\t\t\t\tprovenanceBuilder.addSource(\"student\", {\n\t\t\t\t\tid: \"student\", // Would come from session context\n\t\t\t\t\tname: \"Student PNP Profile\",\n\t\t\t\t\tconfig: pnp,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (currentItemRef && itemSettings) {\n\t\t\t\tprovenanceBuilder.addSource(\"item\", {\n\t\t\t\t\tid: currentItemRef.identifier,\n\t\t\t\t\tname: currentItemRef.identifier,\n\t\t\t\t\tconfig: itemSettings,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Collect all PNP support IDs mentioned anywhere\n\t\tconst allSupports = new Set<string>();\n\t\tpnp?.supports?.forEach((s) => allSupports.add(s));\n\t\tpnp?.prohibitedSupports?.forEach((s) => allSupports.add(s));\n\t\tsettings?.districtPolicy?.blockedTools?.forEach((s) => allSupports.add(s));\n\t\tsettings?.districtPolicy?.requiredTools?.forEach((s) => allSupports.add(s));\n\t\titemSettings?.requiredTools?.forEach((s) => allSupports.add(s));\n\t\titemSettings?.restrictedTools?.forEach((s) => allSupports.add(s));\n\n\t\tconst resolved: ResolvedToolConfig[] = [];\n\t\tconst context: ResolutionContext = {\n\t\t\tpnp,\n\t\t\tdistrictPolicy: settings?.districtPolicy,\n\t\t\ttestAdmin: settings?.testAdministration,\n\t\t\titemSettings,\n\t\t\ttoolConfigs: settings?.toolConfigs,\n\t\t};\n\n\t\tfor (const supportId of allSupports) {\n\t\t\tconst config = this.resolveSupport(supportId, context, provenanceBuilder);\n\n\t\t\tif (config) {\n\t\t\t\tresolved.push(config);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttools: resolved,\n\t\t\tprovenance: provenanceBuilder\n\t\t\t\t? provenanceBuilder.build()\n\t\t\t\t: this.createEmptyProvenance(contextId),\n\t\t};\n\t}\n\n\t/**\n\t * Resolve availability of a single PNP support\n\t *\n\t * Applies precedence rules to determine if support should be enabled.\n\t *\n\t * @param supportId PNP support identifier\n\t * @param context Resolution context with all configuration sources\n\t * @param provenanceBuilder Provenance tracking (optional)\n\t * @returns Resolved config or null if blocked/disabled\n\t */\n\tprivate resolveSupport(\n\t\tsupportId: string,\n\t\tcontext: ResolutionContext,\n\t\tprovenanceBuilder: PnpProvenanceBuilder | null,\n\t): ResolvedToolConfig | null {\n\t\t// Precedence (highest to lowest):\n\n\t\t// 1. District block (absolute veto)\n\t\tif (context.districtPolicy?.blockedTools?.includes(supportId)) {\n\t\t\tprovenanceBuilder?.addDecision({\n\t\t\t\tprecedence: 1,\n\t\t\t\trule: \"district-block\",\n\t\t\t\tfeatureId: supportId,\n\t\t\t\taction: \"block\",\n\t\t\t\tsourceType: \"assessment\",\n\t\t\t\treason: `District policy blocks \"${supportId}\" for all assessments`,\n\t\t\t\tvalue: context.districtPolicy.blockedTools,\n\t\t\t});\n\t\t\treturn null; // Blocked\n\t\t}\n\n\t\t// 2. Test administration override\n\t\tif (context.testAdmin?.toolOverrides?.[supportId] === false) {\n\t\t\tprovenanceBuilder?.addDecision({\n\t\t\t\tprecedence: 2,\n\t\t\t\trule: \"test-admin-override\",\n\t\t\t\tfeatureId: supportId,\n\t\t\t\taction: \"block\",\n\t\t\t\tsourceType: \"assessment\",\n\t\t\t\treason: `Test administrator disabled \"${supportId}\" for this session`,\n\t\t\t\tvalue: context.testAdmin.toolOverrides,\n\t\t\t});\n\t\t\treturn null; // Blocked\n\t\t}\n\n\t\t// 3. Item restriction\n\t\tif (context.itemSettings?.restrictedTools?.includes(supportId)) {\n\t\t\tprovenanceBuilder?.addDecision({\n\t\t\t\tprecedence: 3,\n\t\t\t\trule: \"item-restriction\",\n\t\t\t\tfeatureId: supportId,\n\t\t\t\taction: \"block\",\n\t\t\t\tsourceType: \"item\",\n\t\t\t\treason: `Item restricts \"${supportId}\" (e.g., mental math question blocks calculator)`,\n\t\t\t\tvalue: context.itemSettings.restrictedTools,\n\t\t\t});\n\t\t\treturn null; // Blocked for this item\n\t\t}\n\n\t\t// 4. Item requirement (forces enable)\n\t\tif (context.itemSettings?.requiredTools?.includes(supportId)) {\n\t\t\tprovenanceBuilder?.addDecision({\n\t\t\t\tprecedence: 4,\n\t\t\t\trule: \"item-requirement\",\n\t\t\t\tfeatureId: supportId,\n\t\t\t\taction: \"enable\",\n\t\t\t\tsourceType: \"item\",\n\t\t\t\treason: `Item requires \"${supportId}\" for this question`,\n\t\t\t\tvalue: context.itemSettings.requiredTools,\n\t\t\t});\n\t\t\treturn this.buildToolConfig(supportId, context, {\n\t\t\t\trequired: true,\n\t\t\t\tsource: \"item\",\n\t\t\t});\n\t\t}\n\n\t\t// 5. District requirement\n\t\tif (context.districtPolicy?.requiredTools?.includes(supportId)) {\n\t\t\tprovenanceBuilder?.addDecision({\n\t\t\t\tprecedence: 5,\n\t\t\t\trule: \"district-requirement\",\n\t\t\t\tfeatureId: supportId,\n\t\t\t\taction: \"enable\",\n\t\t\t\tsourceType: \"assessment\",\n\t\t\t\treason: `District policy requires \"${supportId}\" for all assessments`,\n\t\t\t\tvalue: context.districtPolicy.requiredTools,\n\t\t\t});\n\t\t\treturn this.buildToolConfig(supportId, context, {\n\t\t\t\trequired: true,\n\t\t\t\tsource: \"district\",\n\t\t\t});\n\t\t}\n\n\t\t// 6. PNP prohibitions and supports (student needs)\n\t\tif (context.pnp?.prohibitedSupports?.includes(supportId)) {\n\t\t\tprovenanceBuilder?.addDecision({\n\t\t\t\tprecedence: 6,\n\t\t\t\trule: \"pnp-prohibited\",\n\t\t\t\tfeatureId: supportId,\n\t\t\t\taction: \"block\",\n\t\t\t\tsourceType: \"student\",\n\t\t\t\treason: `Student PNP profile prohibits \"${supportId}\"`,\n\t\t\t\tvalue: context.pnp.prohibitedSupports,\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\n\t\tif (context.pnp?.supports?.includes(supportId)) {\n\t\t\tprovenanceBuilder?.addDecision({\n\t\t\t\tprecedence: 6,\n\t\t\t\trule: \"pnp-support\",\n\t\t\t\tfeatureId: supportId,\n\t\t\t\taction: \"enable\",\n\t\t\t\tsourceType: \"student\",\n\t\t\t\treason: `Student PNP profile requests \"${supportId}\"`,\n\t\t\t\tvalue: context.pnp.supports,\n\t\t\t});\n\n\t\t\treturn this.buildToolConfig(supportId, context, {\n\t\t\t\talwaysAvailable: true,\n\t\t\t\tsource: \"pnp\",\n\t\t\t});\n\t\t}\n\n\t\t// Not enabled - log as skipped\n\t\tprovenanceBuilder?.addDecision({\n\t\t\tprecedence: 6,\n\t\t\trule: \"pnp-support\",\n\t\t\tfeatureId: supportId,\n\t\t\taction: \"skip\",\n\t\t\tsourceType: \"system\",\n\t\t\treason: `Feature \"${supportId}\" not configured at any level`,\n\t\t});\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Create empty provenance when tracking is disabled\n\t */\n\tprivate createEmptyProvenance(contextId: string): PnpResolutionProvenance {\n\t\treturn {\n\t\t\tcontextId,\n\t\t\tresolvedAt: new Date(),\n\t\t\tsources: {},\n\t\t\tfeatures: new Map(),\n\t\t\tdecisionLog: [],\n\t\t\tsummary: {\n\t\t\t\ttotalFeatures: 0,\n\t\t\t\tenabled: 0,\n\t\t\t\tblocked: 0,\n\t\t\t\tnotConfigured: 0,\n\t\t\t\tbySource: {},\n\t\t\t\tbyRule: {},\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Build resolved tool configuration\n\t *\n\t * Maps PNP support ID to PIE tool ID and merges tool-specific settings.\n\t *\n\t * @param supportId PNP support identifier\n\t * @param context Resolution context for settings lookup\n\t * @param flags Availability flags (required, alwaysAvailable, source)\n\t * @returns Complete resolved tool configuration\n\t */\n\tprivate buildToolConfig(\n\t\tsupportId: string,\n\t\tcontext: ResolutionContext,\n\t\tflags: {\n\t\t\trequired?: boolean;\n\t\t\talwaysAvailable?: boolean;\n\t\t\tsource: string;\n\t\t},\n\t): ResolvedToolConfig {\n\t\t// Map PNP support ID to PIE tool ID via registry\n\t\tconst toolIds = this.toolRegistry.getToolsByPNPSupport(supportId);\n\n\t\t// Use first matching tool (usually only one per PNP support)\n\t\t// If no mapping exists, use the support ID directly as tool ID\n\t\tconst pieToolId = toolIds.size > 0 ? Array.from(toolIds)[0] : supportId;\n\n\t\t// Get tool-specific config from settings (item takes precedence)\n\t\tconst toolConfig =\n\t\t\tcontext.itemSettings?.toolParameters?.[supportId] ||\n\t\t\tcontext.toolConfigs?.[supportId];\n\n\t\treturn {\n\t\t\tid: pieToolId,\n\t\t\tenabled: true,\n\t\t\trequired: flags.required || false,\n\t\t\talwaysAvailable: flags.alwaysAvailable || false,\n\t\t\tsettings: toolConfig,\n\t\t\tsource: flags.source as any,\n\t\t};\n\t}\n\n\t/**\n\t * Check if a specific tool is enabled\n\t *\n\t * @param toolId Toolkit tool identifier (e.g., 'calculator')\n\t * @param assessment Assessment with PNP\n\t * @param itemRef Optional item context\n\t * @returns true if tool is enabled\n\t */\n\tisToolEnabled(\n\t\ttoolId: string,\n\t\tassessment: AssessmentEntity,\n\t\titemRef?: AssessmentItemRef,\n\t): boolean {\n\t\tconst resolved = this.resolveTools(assessment, itemRef);\n\t\treturn resolved.some((t) => t.id === toolId && t.enabled);\n\t}\n\n\t/**\n\t * Check if a tool is required (cannot be disabled)\n\t *\n\t * @param toolId Toolkit tool identifier\n\t * @param assessment Assessment with PNP\n\t * @param itemRef Optional item context\n\t * @returns true if tool is required or always available\n\t */\n\tisToolRequired(\n\t\ttoolId: string,\n\t\tassessment: AssessmentEntity,\n\t\titemRef?: AssessmentItemRef,\n\t): boolean {\n\t\tconst resolved = this.resolveTools(assessment, itemRef);\n\t\tconst tool = resolved.find((t) => t.id === toolId);\n\t\treturn tool?.required || tool?.alwaysAvailable || false;\n\t}\n\n\t/**\n\t * Get list of auto-activate tools from PNP\n\t *\n\t * Returns PIE tool IDs that should be automatically opened/activated\n\t * when the assessment starts, based on PNP activateAtInit field.\n\t *\n\t * @param assessment Assessment with PNP\n\t * @returns Array of PIE tool IDs to auto-activate\n\t *\n\t * @example\n\t * const autoActivate = resolver.getAutoActivateTools(assessment);\n\t * // Returns: ['textToSpeech', 'lineReader']\n\t */\n\tgetAutoActivateTools(assessment: AssessmentEntity): string[] {\n\t\tconst pnp = assessment.personalNeedsProfile;\n\t\tif (!pnp?.activateAtInit) return [];\n\n\t\treturn pnp.activateAtInit\n\t\t\t.map((supportId) => {\n\t\t\t\tconst toolIds = this.toolRegistry.getToolsByPNPSupport(supportId);\n\t\t\t\treturn toolIds.size > 0 ? Array.from(toolIds)[0] : null;\n\t\t\t})\n\t\t\t.filter(Boolean) as string[];\n\t}\n\n\t/**\n\t * Get all enabled tools\n\t *\n\t * @param assessment Assessment with PNP\n\t * @param itemRef Optional item context\n\t * @returns Array of PIE tool IDs that are enabled\n\t */\n\tgetEnabledTools(\n\t\tassessment: AssessmentEntity,\n\t\titemRef?: AssessmentItemRef,\n\t): string[] {\n\t\tconst resolved = this.resolveTools(assessment, itemRef);\n\t\treturn Array.from(\n\t\t\tnew Set(\n\t\t\t\tresolved\n\t\t\t\t\t.filter((t) => t.enabled)\n\t\t\t\t\t.map((t) => this.toolRegistry.normalizeToolId(t.id))\n\t\t\t\t\t.filter(Boolean),\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * Get allowed tool IDs (Pass 1 of two-pass visibility model)\n\t *\n\t * Returns tool IDs that pass orchestrator-level checks (PNP + policies + settings).\n\t * This is the first gate - tools still need to pass Pass 2 (relevance check).\n\t *\n\t * This is the primary method to use with ToolRegistry.filterVisibleInContext()\n\t *\n\t * @param assessment Assessment with PNP\n\t * @param itemRef Optional item context\n\t * @returns Array of allowed tool IDs (Pass 1)\n\t *\n\t * @example\n\t * // Two-pass visibility model\n\t * const allowedToolIds = resolver.getAllowedToolIds(assessment, itemRef);\n\t * const visibleTools = toolRegistry.filterVisibleInContext(allowedToolIds, context);\n\t */\n\tgetAllowedToolIds(\n\t\tassessment: AssessmentEntity,\n\t\titemRef?: AssessmentItemRef,\n\t): string[] {\n\t\treturn this.getEnabledTools(assessment, itemRef);\n\t}\n\n\t/**\n\t * Resolve tools with a test/override PNP profile\n\t *\n\t * FOR TESTING/DEVELOPMENT ONLY\n\t *\n\t * Allows direct injection of a PNP profile for testing accessibility configurations\n\t * without modifying the assessment entity. The override profile replaces the\n\t * assessment's personalNeedsProfile entirely.\n\t *\n\t * Use cases:\n\t * - Development/testing UI for trying different profiles\n\t * - Automated testing with various accessibility configurations\n\t * - Preview tools with profile simulation\n\t * - Accessibility team testing and validation\n\t *\n\t * @param assessment Base assessment (settings, policies, etc.)\n\t * @param overrideProfile PNP profile to inject (replaces assessment.personalNeedsProfile)\n\t * @param itemRef Optional item context\n\t * @returns Resolution result with tools and provenance\n\t *\n\t * @example\n\t * // Test with low vision profile\n\t * const testProfile = {\n\t * supports: ['magnification', 'textToSpeech', 'highContrastDisplay']\n\t * };\n\t * const result = resolver.resolveWithOverride(assessment, testProfile);\n\t *\n\t * @example\n\t * // Test with null profile (no accessibility features)\n\t * const result = resolver.resolveWithOverride(assessment, null);\n\t */\n\tresolveWithOverride(\n\t\tassessment: AssessmentEntity,\n\t\toverrideProfile: PersonalNeedsProfile | null,\n\t\titemRef?: AssessmentItemRef,\n\t): ToolResolutionResult {\n\t\t// Create assessment clone with overridden PNP\n\t\tconst testAssessment: AssessmentEntity = {\n\t\t\t...assessment,\n\t\t\tpersonalNeedsProfile: overrideProfile || undefined,\n\t\t};\n\n\t\treturn this.resolveToolsWithProvenance(testAssessment, itemRef);\n\t}\n\n\t/**\n\t * Get allowed tool IDs with full provenance tracking\n\t *\n\t * Returns both tool IDs and complete resolution provenance for debugging,\n\t * auditing, and displaying to users.\n\t *\n\t * @param assessment Assessment with PNP\n\t * @param itemRef Optional item context\n\t * @returns Object with tool IDs and provenance\n\t *\n\t * @example\n\t * const result = resolver.getAllowedToolIdsWithProvenance(assessment, itemRef);\n\t *\n\t * // Use tool IDs\n\t * const visibleTools = toolRegistry.filterVisibleInContext(result.toolIds, context);\n\t *\n\t * // Display provenance to user\n\t * console.log('Resolution Summary:', result.provenance.summary);\n\t * console.log('Explanation for calculator:', result.provenance.features.get('calculator')?.explanation);\n\t */\n\tgetAllowedToolIdsWithProvenance(\n\t\tassessment: AssessmentEntity,\n\t\titemRef?: AssessmentItemRef,\n\t): { toolIds: string[]; provenance: PnpResolutionProvenance } {\n\t\tconst result = this.resolveToolsWithProvenance(assessment, itemRef);\n\t\treturn {\n\t\t\ttoolIds: result.tools.map((t) => t.id),\n\t\t\tprovenance: result.provenance,\n\t\t};\n\t}\n\n\t/**\n\t * Get all required tools\n\t *\n\t * @param assessment Assessment with PNP\n\t * @param itemRef Optional item context\n\t * @returns Array of PIE tool IDs that are required\n\t */\n\tgetRequiredTools(\n\t\tassessment: AssessmentEntity,\n\t\titemRef?: AssessmentItemRef,\n\t): string[] {\n\t\tconst resolved = this.resolveTools(assessment, itemRef);\n\t\treturn resolved\n\t\t\t.filter((t) => t.required || t.alwaysAvailable)\n\t\t\t.map((t) => t.id);\n\t}\n\n\t/**\n\t * Get tool configuration settings\n\t *\n\t * @param toolId Toolkit tool identifier\n\t * @param assessment Assessment with PNP\n\t * @param itemRef Optional item context\n\t * @returns Tool-specific settings or null if not found\n\t */\n\tgetToolSettings(\n\t\ttoolId: string,\n\t\tassessment: AssessmentEntity,\n\t\titemRef?: AssessmentItemRef,\n\t): any | null {\n\t\tconst resolved = this.resolveTools(assessment, itemRef);\n\t\tconst tool = resolved.find((t) => t.id === toolId);\n\t\treturn tool?.settings || null;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RangeSerializer.js","sourceRoot":"","sources":["../../src/services/RangeSerializer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RangeSerializer.js","sourceRoot":"","sources":["../../src/services/RangeSerializer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RangeSerializer - Serialize and deserialize DOM Range objects\n *\n * Provides utilities for storing and restoring text ranges across sessions.\n * Used by both TTS (for timing data) and annotations (for persistence).\n *\n * Uses CSS selector paths and node indices for robust serialization that\n * survives content changes when possible.\n */\n\n/**\n * Serialized form of a Range suitable for storage.\n */\nexport interface SerializedRange {\n\t/** CSS selector path to start container */\n\tstartContainer: string;\n\n\t/** Character offset in start container */\n\tstartOffset: number;\n\n\t/** CSS selector path to end container */\n\tendContainer: string;\n\n\t/** Character offset in end container */\n\tendOffset: number;\n\n\t/** Original text for validation */\n\ttext: string;\n\n\t/** Optional metadata */\n\tmetadata?: {\n\t\t/** When this range was created */\n\t\ttimestamp?: number;\n\n\t\t/** User-provided label */\n\t\tlabel?: string;\n\n\t\t/** Custom data */\n\t\tcustom?: Record<string, unknown>;\n\t};\n}\n\n/**\n * RangeSerializer - Serialize and deserialize Range objects.\n */\nexport class RangeSerializer {\n\t/**\n\t * Serialize a Range to storable format.\n\t *\n\t * @param range - Range to serialize\n\t * @param root - Root element (typically document.body or content container)\n\t * @returns Serialized range data\n\t *\n\t * @example\n\t * ```typescript\n\t * const serializer = new RangeSerializer();\n\t * const range = window.getSelection()!.getRangeAt(0);\n\t * const serialized = serializer.serialize(range, document.body);\n\t * localStorage.setItem('savedRange', JSON.stringify(serialized));\n\t * ```\n\t */\n\tserialize(range: Range, root: Element): SerializedRange {\n\t\treturn {\n\t\t\tstartContainer: this.getNodePath(range.startContainer, root),\n\t\t\tstartOffset: range.startOffset,\n\t\t\tendContainer: this.getNodePath(range.endContainer, root),\n\t\t\tendOffset: range.endOffset,\n\t\t\ttext: range.toString(),\n\t\t};\n\t}\n\n\t/**\n\t * Deserialize range from storage.\n\t *\n\t * @param data - Serialized range data\n\t * @param root - Root element (same as used in serialize)\n\t * @returns Range object, or null if content changed\n\t *\n\t * @example\n\t * ```typescript\n\t * const serializer = new RangeSerializer();\n\t * const data = JSON.parse(localStorage.getItem('savedRange')!);\n\t * const range = serializer.deserialize(data, document.body);\n\t * if (range) {\n\t * // Range successfully restored\n\t * } else {\n\t * // Content changed, range invalid\n\t * }\n\t * ```\n\t */\n\tdeserialize(data: SerializedRange, root: Element): Range | null {\n\t\tconst startNode = this.findNodeByPath(data.startContainer, root);\n\t\tconst endNode = this.findNodeByPath(data.endContainer, root);\n\n\t\tif (!startNode || !endNode) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tconst range = new Range();\n\t\t\trange.setStart(startNode, data.startOffset);\n\t\t\trange.setEnd(endNode, data.endOffset);\n\n\t\t\t// Validate text hasn't changed\n\t\t\tif (range.toString() === data.text) {\n\t\t\t\treturn range;\n\t\t\t}\n\n\t\t\t// Text changed, range is invalid\n\t\t\treturn null;\n\t\t} catch (error) {\n\t\t\t// Range construction failed (offsets invalid, etc.)\n\t\t\tconsole.warn(\"Failed to deserialize range:\", error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Get a unique path to a node from root.\n\t *\n\t * Uses a hybrid approach:\n\t * - For element nodes: CSS selector path\n\t * - For text nodes: parent selector + text node index\n\t *\n\t * @param node - Node to get path for\n\t * @param root - Root element\n\t * @returns Path string\n\t */\n\tprivate getNodePath(node: Node, root: Element): string {\n\t\tif (node === root) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// Handle text nodes\n\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\tconst parent = node.parentElement;\n\t\t\tif (!parent) {\n\t\t\t\tthrow new Error(\"Text node has no parent\");\n\t\t\t}\n\n\t\t\t// Get index of this text node among its siblings\n\t\t\tconst textNodes = Array.from(parent.childNodes).filter(\n\t\t\t\t(n) => n.nodeType === Node.TEXT_NODE,\n\t\t\t);\n\t\t\tconst index = textNodes.indexOf(node as Text);\n\n\t\t\tconst parentPath = this.getElementPath(parent, root);\n\t\t\treturn `${parentPath}::text[${index}]`;\n\t\t}\n\n\t\t// Handle element nodes\n\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\treturn this.getElementPath(node as Element, root);\n\t\t}\n\n\t\tthrow new Error(`Unsupported node type: ${node.nodeType}`);\n\t}\n\n\t/**\n\t * Get CSS selector path to an element.\n\t *\n\t * @param element - Element to get path for\n\t * @param root - Root element\n\t * @returns CSS selector path\n\t */\n\tprivate getElementPath(element: Element, root: Element): string {\n\t\tif (element === root) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst path: string[] = [];\n\t\tlet current: Element | null = element;\n\n\t\twhile (current && current !== root) {\n\t\t\t// Use ID if available (more stable)\n\t\t\tif (current.id) {\n\t\t\t\tpath.unshift(`#${current.id}`);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Otherwise use tag + nth-of-type\n\t\t\tconst parent: Element | null = current.parentElement;\n\t\t\tif (!parent) break;\n\n\t\t\tconst siblings = Array.from(parent.children).filter(\n\t\t\t\t(el: Element) => el.tagName === current!.tagName,\n\t\t\t);\n\t\t\tconst index = siblings.indexOf(current);\n\t\t\tconst selector =\n\t\t\t\tsiblings.length > 1\n\t\t\t\t\t? `${current.tagName.toLowerCase()}:nth-of-type(${index + 1})`\n\t\t\t\t\t: current.tagName.toLowerCase();\n\n\t\t\tpath.unshift(selector);\n\t\t\tcurrent = parent;\n\t\t}\n\n\t\treturn path.join(\" > \");\n\t}\n\n\t/**\n\t * Find a node by its path from root.\n\t *\n\t * @param path - Path string from getNodePath\n\t * @param root - Root element\n\t * @returns Node, or null if not found\n\t */\n\tprivate findNodeByPath(path: string, root: Element): Node | null {\n\t\tif (path === \"\") {\n\t\t\treturn root;\n\t\t}\n\n\t\t// Handle text node paths\n\t\tif (path.includes(\"::text[\")) {\n\t\t\tconst [elementPath, textPart] = path.split(\"::text[\");\n\t\t\tconst textIndex = Number.parseInt(textPart.replace(\"]\", \"\"), 10);\n\n\t\t\t// Find parent element\n\t\t\tconst parent = elementPath ? root.querySelector(elementPath) : root;\n\t\t\tif (!parent) return null;\n\n\t\t\t// Find text node by index\n\t\t\tconst textNodes = Array.from(parent.childNodes).filter(\n\t\t\t\t(n) => n.nodeType === Node.TEXT_NODE,\n\t\t\t);\n\n\t\t\treturn textNodes[textIndex] || null;\n\t\t}\n\n\t\t// Handle element paths\n\t\ttry {\n\t\t\treturn root.querySelector(path);\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"Invalid selector path:\", path, error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Batch serialize multiple ranges.\n\t *\n\t * @param ranges - Ranges to serialize\n\t * @param root - Root element\n\t * @returns Array of serialized ranges\n\t */\n\tserializeMany(ranges: Range[], root: Element): SerializedRange[] {\n\t\treturn ranges.map((range) => this.serialize(range, root));\n\t}\n\n\t/**\n\t * Batch deserialize multiple ranges.\n\t *\n\t * @param data - Array of serialized ranges\n\t * @param root - Root element\n\t * @returns Array of ranges (nulls for invalid ranges)\n\t */\n\tdeserializeMany(data: SerializedRange[], root: Element): (Range | null)[] {\n\t\treturn data.map((item) => this.deserialize(item, root));\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SSMLExtractor.js","sourceRoot":"","sources":["../../src/services/SSMLExtractor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SSMLExtractor.js","sourceRoot":"","sources":["../../src/services/SSMLExtractor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SSMLExtractor\n *\n * Service for extracting embedded SSML from PIE item content and converting\n * it into QTI 3.0 accessibility catalogs.\n *\n * Authors can embed <speak> SSML tags directly in content for convenience.\n * The extractor automatically:\n * 1. Parses markup and finds all <speak> elements\n * 2. Extracts SSML content with language metadata\n * 3. Generates accessibility catalogs with unique IDs\n * 4. Cleans visual markup (removes SSML, adds data-catalog-id)\n *\n * This enables proper pronunciation, emphasis, and pacing for TTS without\n * requiring authors to maintain separate catalog files.\n *\n * Part of PIE Assessment Toolkit.\n */\n\nimport type {\n\tAccessibilityCatalog,\n\tConfigEntity,\n\tPieModel,\n} from \"@pie-players/pie-players-shared/types\";\n\n/**\n * Result from extracting SSML from markup\n */\ninterface MarkupExtractionResult {\n\tcatalogs: AccessibilityCatalog[];\n\tcleanedMarkup: string;\n}\n\n/**\n * Result from extracting SSML from entire item config\n */\nexport interface ExtractionResult {\n\tcatalogs: AccessibilityCatalog[];\n\tcleanedConfig: ConfigEntity;\n}\n\n/**\n * Allow-listed SSML elements (from the SSML 1.1 spec subset we forward to\n * TTS providers). Anything outside this list is unwrapped during\n * sanitization so we never leak author-supplied scripts, iframes, or\n * arbitrary HTML into the TTS pipeline.\n */\nconst SSML_ALLOWED_TAGS = new Set([\n\t\"speak\",\n\t\"break\",\n\t\"prosody\",\n\t\"emphasis\",\n\t\"say-as\",\n\t\"sub\",\n\t\"mark\",\n\t\"phoneme\",\n\t\"lang\",\n\t\"p\",\n\t\"s\",\n\t\"voice\",\n\t\"audio\",\n\t\"lexicon\",\n]);\n\n/**\n * Allow-listed attributes across SSML elements. Attribute allow-listing is\n * global (not per-tag) because the union is small and consistent across\n * providers.\n */\n/**\n * Tags whose content must be dropped entirely (rather than unwrapped to\n * preserve phrasing text). These are dangerous containers whose text\n * payload could be re-interpreted downstream.\n */\nconst SSML_DROP_FULLY_TAGS = new Set([\n\t\"script\",\n\t\"style\",\n\t\"iframe\",\n\t\"object\",\n\t\"embed\",\n\t\"foreignobject\",\n\t\"noscript\",\n\t\"template\",\n]);\n\nconst SSML_ALLOWED_ATTRS = new Set([\n\t\"alphabet\",\n\t\"ph\",\n\t\"time\",\n\t\"strength\",\n\t\"rate\",\n\t\"pitch\",\n\t\"volume\",\n\t\"name\",\n\t\"interpret-as\",\n\t\"format\",\n\t\"detail\",\n\t\"language\",\n\t\"xml:lang\",\n\t\"lang\",\n\t\"gender\",\n\t\"src\",\n]);\n\n/**\n * Hosts that must never appear inside an SSML `<audio src>` because they\n * would cause the server-side TTS provider to fetch a private / metadata\n * endpoint on behalf of the request. Mirrors the SchoolCity provider's\n * defense-in-depth check; the SSML-side block is cheap and belt-and-braces.\n */\nconst SSML_PRIVATE_AUDIO_HOSTS: RegExp[] = [\n\t/^localhost$/i,\n\t/^127(?:\\.\\d{1,3}){3}$/,\n\t/^0(?:\\.\\d{1,3}){3}$/,\n\t/^10(?:\\.\\d{1,3}){3}$/,\n\t/^192\\.168(?:\\.\\d{1,3}){2}$/,\n\t/^172\\.(?:1[6-9]|2\\d|3[01])(?:\\.\\d{1,3}){2}$/,\n\t/^169\\.254(?:\\.\\d{1,3}){2}$/,\n\t/^::1$/,\n\t/^fe80:/i,\n\t/^fc00:/i,\n\t/^fd[0-9a-f]{2}:/i,\n\t/^metadata\\.google\\.internal$/i,\n\t/^metadata\\.azure\\.internal$/i,\n\t/^metadata\\.packet\\.net$/i,\n];\n\nfunction isSafeSsmlAudioSrc(raw: string): boolean {\n\tif (typeof raw !== \"string\" || raw.length === 0) return false;\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(raw);\n\t} catch {\n\t\treturn false;\n\t}\n\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n\t\treturn false;\n\t}\n\tconst hostname = parsed.hostname.replace(/^\\[|\\]$/g, \"\").replace(/\\.$/, \"\");\n\treturn !SSML_PRIVATE_AUDIO_HOSTS.some((pattern) => pattern.test(hostname));\n}\n\n/**\n * Sanitize an SSML subtree in place: remove disallowed attributes and\n * replace disallowed elements with their text content (so phrasing order\n * is preserved but no scripts / iframes / unknown tags survive).\n */\nfunction sanitizeSsmlElement(element: Element): void {\n\t// Walk children snapshot first because we may replace nodes as we go.\n\tconst children = Array.from(element.children);\n\tfor (const child of children) {\n\t\tconst tagName = child.tagName.toLowerCase();\n\t\tif (SSML_DROP_FULLY_TAGS.has(tagName)) {\n\t\t\tchild.remove();\n\t\t\tcontinue;\n\t\t}\n\t\tsanitizeSsmlElement(child);\n\t\tif (!SSML_ALLOWED_TAGS.has(tagName)) {\n\t\t\tconst textNode = element.ownerDocument.createTextNode(\n\t\t\t\tchild.textContent ?? \"\",\n\t\t\t);\n\t\t\tchild.replaceWith(textNode);\n\t\t}\n\t}\n\t// Strip disallowed attributes on the surviving node.\n\tconst attrNames = Array.from(element.attributes).map((attr) => attr.name);\n\tfor (const attrName of attrNames) {\n\t\tif (!SSML_ALLOWED_ATTRS.has(attrName.toLowerCase())) {\n\t\t\telement.removeAttribute(attrName);\n\t\t}\n\t}\n\t// Belt-and-braces: even though `src` is allow-listed, SSML `<audio>`\n\t// sends its URL to a server-side TTS provider that will dereference\n\t// it. Refuse non-http(s) schemes and private / cloud-metadata hosts\n\t// at the SSML boundary so we never forward an SSRF primitive.\n\tif (element.tagName.toLowerCase() === \"audio\") {\n\t\tconst src = element.getAttribute(\"src\");\n\t\tif (src !== null && !isSafeSsmlAudioSrc(src)) {\n\t\t\telement.removeAttribute(\"src\");\n\t\t}\n\t}\n}\n\n/**\n * Serialize a sanitized `<speak>` element back to a minimal SSML string.\n * Uses a manual walker instead of `outerHTML` so that any namespace\n * quirks (e.g. `xmlns` attributes added by the HTML parser) are\n * normalised and disallowed descendants cannot reappear through quirks\n * in the serializer.\n */\nfunction serializeSsmlElement(element: Element): string {\n\tconst tagName = element.tagName.toLowerCase();\n\tconst attrs = Array.from(element.attributes)\n\t\t.filter((attr) => SSML_ALLOWED_ATTRS.has(attr.name.toLowerCase()))\n\t\t.map((attr) => ` ${attr.name}=\"${escapeXmlAttr(attr.value)}\"`)\n\t\t.join(\"\");\n\tconst childPieces: string[] = [];\n\tfor (const node of Array.from(element.childNodes)) {\n\t\tif (node.nodeType === 3 /* text */) {\n\t\t\tchildPieces.push(escapeXmlText(node.nodeValue ?? \"\"));\n\t\t} else if (node.nodeType === 1 /* element */) {\n\t\t\tconst childElement = node as Element;\n\t\t\tconst childTag = childElement.tagName.toLowerCase();\n\t\t\tif (SSML_DROP_FULLY_TAGS.has(childTag)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (SSML_ALLOWED_TAGS.has(childTag)) {\n\t\t\t\tchildPieces.push(serializeSsmlElement(childElement));\n\t\t\t} else {\n\t\t\t\tchildPieces.push(escapeXmlText(childElement.textContent ?? \"\"));\n\t\t\t}\n\t\t}\n\t}\n\treturn `<${tagName}${attrs}>${childPieces.join(\"\")}</${tagName}>`;\n}\n\nfunction escapeXmlText(value: string): string {\n\treturn value\n\t\t.replace(/&/g, \"&\")\n\t\t.replace(/</g, \"<\")\n\t\t.replace(/>/g, \">\");\n}\n\nfunction escapeXmlAttr(value: string): string {\n\treturn value\n\t\t.replace(/&/g, \"&\")\n\t\t.replace(/</g, \"<\")\n\t\t.replace(/>/g, \">\")\n\t\t.replace(/\"/g, \""\");\n}\n\n/**\n * SSMLExtractor Service\n *\n * Extracts embedded SSML from PIE content and generates accessibility catalogs.\n */\nexport class SSMLExtractor {\n\tprivate catalogCounter = 0;\n\n\t/**\n\t * Extract SSML from entire item config (markup + models)\n\t *\n\t * @param config Item configuration with potential embedded SSML\n\t * @returns Extracted catalogs and cleaned config\n\t */\n\textractFromItemConfig(config: ConfigEntity): ExtractionResult {\n\t\tconst allCatalogs: AccessibilityCatalog[] = [];\n\n\t\t// Deep clone config to avoid mutating original\n\t\tconst cleanedConfig: ConfigEntity = {\n\t\t\t...config,\n\t\t\tmodels: config.models ? [...config.models] : [],\n\t\t};\n\n\t\t// 1. Extract from top-level markup (passages)\n\t\tif (config.markup) {\n\t\t\tconst markupResult = this.extractFromMarkup(config.markup, \"markup\");\n\t\t\tallCatalogs.push(...markupResult.catalogs);\n\t\t\tcleanedConfig.markup = markupResult.cleanedMarkup;\n\t\t}\n\n\t\t// 2. Extract from models (prompts, choices, etc.)\n\t\tif (config.models && config.models.length > 0) {\n\t\t\tcleanedConfig.models = config.models.map((model) => {\n\t\t\t\tconst cleanedModel = { ...model };\n\t\t\t\tconst modelCatalogs: AccessibilityCatalog[] = [];\n\n\t\t\t\t// Extract from prompt\n\t\t\t\tif (model.prompt && typeof model.prompt === \"string\") {\n\t\t\t\t\tconst promptResult = this.extractFromMarkup(\n\t\t\t\t\t\tmodel.prompt,\n\t\t\t\t\t\t`prompt-${model.id}`,\n\t\t\t\t\t);\n\t\t\t\t\tmodelCatalogs.push(...promptResult.catalogs);\n\t\t\t\t\tcleanedModel.prompt = promptResult.cleanedMarkup;\n\t\t\t\t}\n\n\t\t\t\t// Extract from choices\n\t\t\t\tif (model.choices && Array.isArray(model.choices)) {\n\t\t\t\t\tcleanedModel.choices = model.choices.map((choice) => {\n\t\t\t\t\t\tif (choice.label && typeof choice.label === \"string\") {\n\t\t\t\t\t\t\tconst choiceResult = this.extractFromMarkup(\n\t\t\t\t\t\t\t\tchoice.label,\n\t\t\t\t\t\t\t\t`choice-${model.id}-${choice.value}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tmodelCatalogs.push(...choiceResult.catalogs);\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...choice,\n\t\t\t\t\t\t\t\tlabel: choiceResult.cleanedMarkup,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn choice;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tallCatalogs.push(...modelCatalogs);\n\t\t\t\treturn cleanedModel;\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tcatalogs: allCatalogs,\n\t\t\tcleanedConfig,\n\t\t};\n\t}\n\n\t/**\n\t * Extract SSML from markup string\n\t *\n\t * @param markup HTML markup potentially containing <speak> elements\n\t * @param idPrefix Prefix for generating catalog IDs\n\t * @returns Extracted catalogs and cleaned markup\n\t */\n\tprivate extractFromMarkup(\n\t\tmarkup: string,\n\t\tidPrefix: string,\n\t): MarkupExtractionResult {\n\t\tif (!markup || markup.trim() === \"\") {\n\t\t\treturn { catalogs: [], cleanedMarkup: markup };\n\t\t}\n\n\t\t// Check if running in browser environment\n\t\tif (typeof window === \"undefined\" || typeof DOMParser === \"undefined\") {\n\t\t\tconsole.warn(\n\t\t\t\t\"[SSMLExtractor] DOMParser not available (SSR?), skipping extraction\",\n\t\t\t);\n\t\t\treturn { catalogs: [], cleanedMarkup: markup };\n\t\t}\n\n\t\tconst catalogs: AccessibilityCatalog[] = [];\n\n\t\ttry {\n\t\t\tconst parser = new DOMParser();\n\t\t\tconst doc = parser.parseFromString(markup, \"text/html\");\n\n\t\t\t// Find all <speak> elements\n\t\t\tconst speakElements = Array.from(doc.querySelectorAll(\"speak\"));\n\n\t\t\tif (speakElements.length === 0) {\n\t\t\t\t// No SSML found, return original markup\n\t\t\t\treturn { catalogs: [], cleanedMarkup: markup };\n\t\t\t}\n\n\t\t\t// Process each <speak> element\n\t\t\tfor (const speakEl of speakElements) {\n\t\t\t\ttry {\n\t\t\t\t\t// Generate unique catalog ID\n\t\t\t\t\tconst catalogId = this.generateCatalogId(idPrefix);\n\n\t\t\t\t\t// Sanitize before serializing so the SSML forwarded to the TTS\n\t\t\t\t\t// provider only contains spec-allowed tags/attributes. This\n\t\t\t\t\t// closes an author-content -> TTS-server pipeline that would\n\t\t\t\t\t// otherwise accept arbitrary HTML.\n\t\t\t\t\tsanitizeSsmlElement(speakEl);\n\t\t\t\t\tconst ssmlContent = serializeSsmlElement(speakEl);\n\n\t\t\t\t\t// Extract language (check both xml:lang and lang attributes)\n\t\t\t\t\tconst language =\n\t\t\t\t\t\tspeakEl.getAttribute(\"xml:lang\") ||\n\t\t\t\t\t\tspeakEl.getAttribute(\"lang\") ||\n\t\t\t\t\t\t\"en-US\";\n\n\t\t\t\t\t// Get plain text for visual display\n\t\t\t\t\tconst plainText = speakEl.textContent || \"\";\n\n\t\t\t\t\t// Find parent element or create wrapper\n\t\t\t\t\tlet wrapper = speakEl.parentElement;\n\n\t\t\t\t\tif (!wrapper || wrapper.tagName === \"BODY\") {\n\t\t\t\t\t\t// SPEAK is at root level - create span wrapper\n\t\t\t\t\t\tconst span = doc.createElement(\"span\");\n\t\t\t\t\t\tspeakEl.parentNode?.insertBefore(span, speakEl);\n\t\t\t\t\t\tspan.appendChild(doc.createTextNode(plainText));\n\t\t\t\t\t\twrapper = span;\n\t\t\t\t\t\tspeakEl.remove();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Just remove <speak> - visual content should be in sibling element\n\t\t\t\t\t\tspeakEl.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add catalog ID to wrapper element\n\t\t\t\t\tif (wrapper) {\n\t\t\t\t\t\twrapper.setAttribute(\"data-catalog-id\", catalogId);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create catalog entry\n\t\t\t\t\tcatalogs.push({\n\t\t\t\t\t\tidentifier: catalogId,\n\t\t\t\t\t\tcards: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcatalog: \"spoken\",\n\t\t\t\t\t\t\t\tlanguage,\n\t\t\t\t\t\t\t\tcontent: ssmlContent,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\"[SSMLExtractor] Error processing <speak> element:\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t);\n\t\t\t\t\t// Continue with other elements\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return cleaned markup\n\t\t\tconst cleanedMarkup = doc.body.innerHTML;\n\n\t\t\treturn { catalogs, cleanedMarkup };\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[SSMLExtractor] Error parsing markup:\", error);\n\t\t\t// Return original markup if parsing fails\n\t\t\treturn { catalogs: [], cleanedMarkup: markup };\n\t\t}\n\t}\n\n\t/**\n\t * Generate unique catalog ID\n\t *\n\t * @param prefix Context prefix (e.g., 'prompt-q1', 'choice-q1-a')\n\t * @returns Unique catalog ID (e.g., 'auto-prompt-q1-0')\n\t */\n\tprivate generateCatalogId(prefix: string): string {\n\t\tconst id = `auto-${prefix}-${this.catalogCounter}`;\n\t\tthis.catalogCounter++;\n\t\treturn id;\n\t}\n\n\t/**\n\t * Reset counter (useful for testing or new extraction contexts)\n\t */\n\treset(): void {\n\t\tthis.catalogCounter = 0;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TTSService.js","sourceRoot":"","sources":["../../src/services/TTSService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TTSService.js","sourceRoot":"","sources":["../../src/services/TTSService.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TTSService\n *\n * Text-to-speech service with pluggable provider architecture.\n * Manages playback state, coordinates multiple TTS entry points,\n * and integrates with HighlightCoordinator for word highlighting.\n *\n * Features:\n * - Pluggable TTS providers (browser, AWS Polly, etc.)\n * - QTI 3.0 accessibility catalogs (pre-authored spoken content)\n * - Unified playback state management\n * - Prevents conflicts from simultaneous speech\n * - Word highlighting integration\n * - Playback controls: play, pause, resume, stop\n *\n * Part of PIE Assessment Toolkit.\n */\n\nimport type {\n\tITTSProvider,\n\tITTSProviderImplementation,\n\tTTSConfig,\n\tTTSProviderCapabilities,\n} from \"@pie-players/pie-tts\";\nimport type { AccessibilityCatalogResolver } from \"./AccessibilityCatalogResolver.js\";\nimport type { HighlightCoordinatorApi } from \"./interfaces.js\";\nimport { BrowserTTSProvider } from \"./tts/browser-provider.js\";\nimport {\n\ttype BoundarySpacingMode,\n\tcollectVisibleTextAndMap,\n\textractVisibleText as extractVisibleTextFromDOM,\n\tisElementHiddenForTTS,\n\tnormalizeTextForSpeech,\n} from \"./tts/text-processing.js\";\nimport {\n\tsegmentSentences as segmentTextToSentences,\n\ttype SentenceSegment as SharedSentenceSegment,\n} from \"./tts/text-segmentation.js\";\nimport {\n\tPIE_TTS_CONTROL_HANDOFF_EVENT,\n\ttype TTSControlHandoffDetail,\n} from \"./tts-control-events.js\";\n\ninterface TTSSpeechSegment {\n\ttext: string;\n\tstartOffset: number;\n\tpauseMsAfter?: number;\n}\n\n// Re-export core TTS types for convenience\nexport type {\n\tITTSProvider,\n\tITTSProviderImplementation,\n\tTTSConfig,\n\tTTSFeature,\n\tTTSProviderCapabilities,\n} from \"@pie-players/pie-tts\";\n\n/**\n * Playback state\n */\nexport enum PlaybackState {\n\tIDLE = \"idle\",\n\tLOADING = \"loading\",\n\tPLAYING = \"playing\",\n\tPAUSED = \"paused\",\n\tERROR = \"error\",\n}\n\ntype StructuralPauseStrength = \"minor\" | \"section\" | \"major\";\n\ninterface StructuralPauseProfile {\n\tbaseMs: number;\n\tunits: Record<StructuralPauseStrength, number>;\n\tminMs: number;\n\tmaxMs: number;\n}\n\ntype HighlightMode = \"word\" | \"sentence\";\n\ninterface SpeakOptions {\n\tcatalogId?: string;\n\tlanguage?: string;\n\tcontentElement?: Element;\n\twordBoundaryOffset?: number;\n\thighlightModeOverride?: HighlightMode;\n}\n\ninterface ResolvedSpeechContent {\n\tcontentToSpeak: string;\n\tusedCatalogSpoken: boolean;\n\tspeechSource: \"catalog-spoken\" | \"dom-or-input\";\n\tnormalizedText: string;\n}\n\n/**\n * TTSService\n *\n * Instantiable service for text-to-speech functionality.\n * Each instance manages its own playback state.\n */\nexport class TTSService {\n\tprivate currentProvider: ITTSProvider | null = null;\n\tprivate provider: ITTSProviderImplementation | null = null;\n\tprivate highlightCoordinator: HighlightCoordinatorApi | null = null;\n\tprivate catalogResolver: AccessibilityCatalogResolver | null = null;\n\tprivate state: PlaybackState = PlaybackState.IDLE;\n\tprivate ttsConfig: Partial<TTSConfig> = {};\n\tprivate currentText: string | null = null;\n\tprivate currentContentElement: Element | null = null;\n\tprivate normalizedToDOM: Map<number, { node: Text; offset: number }> =\n\t\tnew Map();\n\tprivate listeners = new Map<string, Set<(state: PlaybackState) => void>>();\n\tprivate lastError: string | null = null;\n\tprivate speakRunId = 0;\n\tprivate currentBoundaryOffset = 0;\n\tprivate seekSegments: TTSSpeechSegment[] = [];\n\tprivate sentenceHighlightSegments: TTSSpeechSegment[] = [];\n\tprivate currentSeekSegmentIndex = 0;\n\tprivate activeSentenceStartOffset: number | null = null;\n\tprivate activeHighlightMode: HighlightMode = \"word\";\n\tprivate telemetryReporter:\n\t\t| ((eventName: string, payload?: Record<string, unknown>) => void | Promise<void>)\n\t\t| null = null;\n\n\tconstructor() {}\n\n\tprivate async emitTelemetry(\n\t\teventName: string,\n\t\tpayload?: Record<string, unknown>,\n\t): Promise<void> {\n\t\ttry {\n\t\t\tawait this.telemetryReporter?.(eventName, payload);\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[TTSService] telemetry callback failed:\", error);\n\t\t}\n\t}\n\n\t/**\n\t * Initialize TTS service with a provider\n\t *\n\t * @param provider TTS provider instance\n\t * @param config Provider configuration\n\t */\n\tasync initialize(\n\t\tprovider: ITTSProvider,\n\t\tconfig: Partial<TTSConfig> = {},\n\t): Promise<void> {\n\t\tthis.currentProvider = provider;\n\t\tthis.ttsConfig = { ...config };\n\t\tconst providerOptions =\n\t\t\tconfig.providerOptions && typeof config.providerOptions === \"object\"\n\t\t\t\t? (config.providerOptions as Record<string, unknown>)\n\t\t\t\t: {};\n\t\tthis.telemetryReporter =\n\t\t\ttypeof providerOptions.__pieTelemetry === \"function\"\n\t\t\t\t? (providerOptions.__pieTelemetry as (\n\t\t\t\t\t\teventName: string,\n\t\t\t\t\t\tpayload?: Record<string, unknown>,\n\t\t\t\t ) => void | Promise<void>)\n\t\t\t\t: null;\n\n\t\t// Initialize provider and get implementation\n\t\tthis.provider = await provider.initialize(config as TTSConfig);\n\t}\n\n\t/**\n\t * Update TTS settings dynamically without full reinitialization\n\t *\n\t * This allows changing rate, pitch, and voice on the fly.\n\t * Note: Some providers may require reinitialization for voice changes.\n\t *\n\t * @param settings Partial settings to update (rate, pitch, voice)\n\t */\n\tasync updateSettings(settings: Partial<TTSConfig>): Promise<void> {\n\t\tif (!this.provider) {\n\t\t\tthrow new Error(\"TTSService not initialized. Call initialize() first.\");\n\t\t}\n\n\t\t// If the provider implementation has an updateSettings method, use it\n\t\tif (\n\t\t\t\"updateSettings\" in this.provider &&\n\t\t\ttypeof (this.provider as any).updateSettings === \"function\"\n\t\t) {\n\t\t\tawait (this.provider as any).updateSettings(settings);\n\t\t\tthis.ttsConfig = { ...this.ttsConfig, ...settings };\n\t\t} else {\n\t\t\t// Fallback: Reinitialize with merged config\n\t\t\t// This requires storing the original config, which we don't have\n\t\t\t// So for now, just log a warning\n\t\t\tconsole.warn(\n\t\t\t\t\"[TTSService] Provider does not support dynamic settings updates. Some settings may require reinitialization.\",\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Set highlight coordinator for word highlighting\n\t */\n\tsetHighlightCoordinator(coordinator: HighlightCoordinatorApi): void {\n\t\tthis.highlightCoordinator = coordinator;\n\t}\n\n\t/**\n\t * Set accessibility catalog resolver for spoken content\n\t *\n\t * When set, the speak() method will check for pre-authored spoken\n\t * content in catalogs before falling back to generated TTS.\n\t *\n\t * @param resolver AccessibilityCatalogResolver instance\n\t */\n\tsetCatalogResolver(resolver: AccessibilityCatalogResolver): void {\n\t\tthis.catalogResolver = resolver;\n\t}\n\n\t/**\n\t * Get provider capabilities\n\t */\n\tgetCapabilities(): TTSProviderCapabilities | null {\n\t\treturn this.currentProvider?.getCapabilities() || null;\n\t}\n\n\t/**\n\t * Build a character-by-character map from normalized text positions to DOM positions\n\t * This handles the complexity of whitespace normalization\n\t */\n\tprivate getTextProcessingOptions(language?: string): {\n\t\tlocale?: string;\n\t\tboundarySpacingMode?: BoundarySpacingMode;\n\t} {\n\t\tconst providerOptions = (this.ttsConfig.providerOptions || {}) as Record<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>;\n\t\tconst textNormalization = (providerOptions.textNormalization || {}) as Record<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>;\n\t\tconst mode = textNormalization.boundarySpacingMode;\n\t\tconst boundarySpacingMode: BoundarySpacingMode | undefined =\n\t\t\tmode === \"none\" || mode === \"alnum\" || mode === \"segmenterPreferred\"\n\t\t\t\t? mode\n\t\t\t\t: undefined;\n\t\tconst locale =\n\t\t\tlanguage ||\n\t\t\t(typeof textNormalization.locale === \"string\"\n\t\t\t\t? textNormalization.locale\n\t\t\t\t: undefined);\n\t\treturn { locale, boundarySpacingMode };\n\t}\n\n\tprivate buildPositionMap(\n\t\telement: Element,\n\t\tspokenText: string,\n\t\tlanguage?: string,\n\t): void {\n\t\tthis.normalizedToDOM.clear();\n\t\tconst { text: normalizedDomText, map } = collectVisibleTextAndMap(\n\t\t\telement,\n\t\t\tthis.getTextProcessingOptions(language),\n\t\t);\n\t\tthis.normalizedToDOM = map;\n\n\t\tconsole.log(\"[TTSService] Text comparison:\", {\n\t\t\tspokenLength: spokenText.length,\n\t\t\tnormalizedDomLength: normalizedDomText.length,\n\t\t\tmatch: spokenText === normalizedDomText,\n\t\t\tspokenPreview: spokenText.substring(0, 150),\n\t\t\tnormalizedPreview: normalizedDomText.substring(0, 150),\n\t\t\tdifferAtIndex:\n\t\t\t\tspokenText === normalizedDomText\n\t\t\t\t\t? null\n\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\t\t\ti < Math.min(spokenText.length, normalizedDomText.length);\n\t\t\t\t\t\t\t\ti++\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tif (spokenText[i] !== normalizedDomText[i]) {\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\t\tspokenChar: spokenText[i],\n\t\t\t\t\t\t\t\t\t\tnormalizedChar: normalizedDomText[i],\n\t\t\t\t\t\t\t\t\t\tspokenContext: spokenText.substring(\n\t\t\t\t\t\t\t\t\t\t\tMath.max(0, i - 20),\n\t\t\t\t\t\t\t\t\t\t\ti + 20,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\tnormalizedContext: normalizedDomText.substring(\n\t\t\t\t\t\t\t\t\t\t\tMath.max(0, i - 20),\n\t\t\t\t\t\t\t\t\t\t\ti + 20,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t})(),\n\t\t});\n\n\t\tconsole.log(\"[TTSService] Position map built:\", {\n\t\t\tentries: this.normalizedToDOM.size,\n\t\t\tspokenTextLength: spokenText.length,\n\t\t\tnormalizedDomLength: normalizedDomText.length,\n\t\t\tmapLengthMatchesSpoken: this.normalizedToDOM.size === spokenText.length,\n\t\t\tfirstFewMappings: Array.from(this.normalizedToDOM.entries())\n\t\t\t\t.slice(0, 10)\n\t\t\t\t.map(([pos, { node, offset }]) => ({\n\t\t\t\t\tpos,\n\t\t\t\t\toffset,\n\t\t\t\t\tchar: node.textContent?.[offset],\n\t\t\t\t\texpected: spokenText[pos],\n\t\t\t\t})),\n\t\t});\n\t}\n\n\tprivate getStructuralPauseProfile(): StructuralPauseProfile {\n\t\tconst providerOptions = (this.ttsConfig.providerOptions || {}) as Record<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>;\n\t\tconst custom = (providerOptions.structuralPauses || {}) as Record<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>;\n\t\tconst customUnits = (custom.units || {}) as Record<string, unknown>;\n\t\tconst toNumber = (value: unknown, fallback: number): number => {\n\t\t\tif (typeof value === \"number\" && Number.isFinite(value)) return value;\n\t\t\tif (typeof value === \"string\" && value.trim()) {\n\t\t\t\tconst parsed = Number(value);\n\t\t\t\treturn Number.isFinite(parsed) ? parsed : fallback;\n\t\t\t}\n\t\t\treturn fallback;\n\t\t};\n\t\treturn {\n\t\t\tbaseMs: toNumber(custom.baseMs, 280),\n\t\t\tunits: {\n\t\t\t\tminor: toNumber(customUnits.minor, 0.65),\n\t\t\t\tsection: toNumber(customUnits.section, 1.0),\n\t\t\t\tmajor: toNumber(customUnits.major, 1.35),\n\t\t\t},\n\t\t\tminMs: toNumber(custom.minMs, 120),\n\t\t\tmaxMs: toNumber(custom.maxMs, 900),\n\t\t};\n\t}\n\n\tprivate resolvePauseMsFromUnits(units: number): number {\n\t\tconst profile = this.getStructuralPauseProfile();\n\t\tconst rate = Math.max(0.25, Math.min(4, Number(this.ttsConfig.rate || 1)));\n\t\tconst raw = (profile.baseMs * Math.max(0, units)) / rate;\n\t\treturn Math.max(profile.minMs, Math.min(profile.maxMs, Math.round(raw)));\n\t}\n\n\tprivate resolveHighlightMode(): HighlightMode {\n\t\tconst providerOptions = (this.ttsConfig.providerOptions || {}) as Record<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>;\n\t\tconst configuredMode = providerOptions.highlightMode;\n\t\tif (configuredMode === \"word\" || configuredMode === \"sentence\") {\n\t\t\treturn configuredMode;\n\t\t}\n\t\tconst providerId = (this.currentProvider?.providerId || \"\").toLowerCase();\n\t\tif (providerId === \"browser\") {\n\t\t\treturn \"sentence\";\n\t\t}\n\t\tconst supportsWordBoundary =\n\t\t\tthis.currentProvider?.getCapabilities().supportsWordBoundary ?? false;\n\t\treturn supportsWordBoundary ? \"word\" : \"sentence\";\n\t}\n\n\tprivate hasExplicitBreakSemantics(text: string): boolean {\n\t\tif (!text.includes(\"<\")) return false;\n\t\treturn /<\\s*break\\b|<\\s*speak\\b|<\\s*prosody\\b|<\\s*p\\b|<\\s*s\\b/i.test(text);\n\t}\n\n\tprivate isElementHidden(element: Element): boolean {\n\t\treturn isElementHiddenForTTS(element);\n\t}\n\n\tprivate extractVisibleText(element: Element, language?: string): string {\n\t\treturn extractVisibleTextFromDOM(\n\t\t\telement,\n\t\t\tthis.getTextProcessingOptions(language),\n\t\t);\n\t}\n\n\tprivate getBoundaryStrength(element: Element): StructuralPauseStrength {\n\t\tconst explicitBreakMs = Number(element.getAttribute(\"data-tts-break-ms\"));\n\t\tif (Number.isFinite(explicitBreakMs) && explicitBreakMs > 0) return \"major\";\n\t\tconst tagName = element.tagName.toUpperCase();\n\t\tif (tagName.match(/^H[1-6]$/)) return \"major\";\n\t\tconst role = (element.getAttribute(\"role\") || \"\").toLowerCase();\n\t\tif (role === \"heading\") return \"major\";\n\t\tif (\n\t\t\trole === \"listitem\" ||\n\t\t\trole === \"row\" ||\n\t\t\trole === \"option\" ||\n\t\t\trole === \"radio\" ||\n\t\t\ttagName === \"LI\"\n\t\t) {\n\t\t\treturn \"section\";\n\t\t}\n\t\tif (typeof window !== \"undefined\") {\n\t\t\tconst display = window.getComputedStyle(element).display;\n\t\t\tif (\n\t\t\t\tdisplay === \"block\" ||\n\t\t\t\tdisplay === \"list-item\" ||\n\t\t\t\tdisplay.startsWith(\"table\") ||\n\t\t\t\tdisplay === \"flex\" ||\n\t\t\t\tdisplay === \"grid\"\n\t\t\t) {\n\t\t\t\treturn \"minor\";\n\t\t\t}\n\t\t}\n\t\treturn \"minor\";\n\t}\n\n\tprivate getBoundaryAnchor(\n\t\ttextNode: Text,\n\t\troot: Element,\n\t): { anchor: Element; units: number } | null {\n\t\tlet current = textNode.parentElement;\n\t\tlet best: Element | null = null;\n\t\twhile (current && current !== root) {\n\t\t\tif (this.isElementHidden(current)) return null;\n\t\t\tconst explicitBreakMs = Number(current.getAttribute(\"data-tts-break-ms\"));\n\t\t\tif (Number.isFinite(explicitBreakMs) && explicitBreakMs > 0) {\n\t\t\t\treturn {\n\t\t\t\t\tanchor: current,\n\t\t\t\t\tunits: explicitBreakMs / this.getStructuralPauseProfile().baseMs,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst role = (current.getAttribute(\"role\") || \"\").toLowerCase();\n\t\t\tconst tagName = current.tagName.toUpperCase();\n\t\t\tif (tagName.match(/^H[1-6]$/) || role === \"heading\" || role === \"listitem\" || tagName === \"LI\") {\n\t\t\t\tbest = current;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!best) {\n\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\tconst display = window.getComputedStyle(current).display;\n\t\t\t\t\tif (\n\t\t\t\t\t\tdisplay === \"block\" ||\n\t\t\t\t\t\tdisplay === \"list-item\" ||\n\t\t\t\t\t\tdisplay.startsWith(\"table\") ||\n\t\t\t\t\t\tdisplay === \"flex\" ||\n\t\t\t\t\t\tdisplay === \"grid\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tbest = current;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrent = current.parentElement;\n\t\t}\n\t\tif (!best) return null;\n\t\tconst strength = this.getBoundaryStrength(best);\n\t\treturn {\n\t\t\tanchor: best,\n\t\t\tunits: this.getStructuralPauseProfile().units[strength],\n\t\t};\n\t}\n\n\tprivate createSpeechPlan(\n\t\tcontentElement: Element,\n\t\tnormalizedText: string,\n\t): TTSSpeechSegment[] {\n\t\tconst boundaries = this.collectSpeechPlanBoundaries(\n\t\t\tcontentElement,\n\t\t\tnormalizedText,\n\t\t);\n\t\treturn this.createSpeechPlanSegments(normalizedText, boundaries);\n\t}\n\n\tprivate collectSpeechPlanBoundaries(\n\t\tcontentElement: Element,\n\t\tnormalizedText: string,\n\t): Map<number, number> {\n\t\tconst boundaries = new Map<number, number>();\n\t\tconst { map } = collectVisibleTextAndMap(\n\t\t\tcontentElement,\n\t\t\tthis.getTextProcessingOptions(),\n\t\t);\n\t\tconst nodeStartOffsets = this.createNodeStartOffsets(map);\n\n\t\tconst walker = document.createTreeWalker(contentElement, NodeFilter.SHOW_TEXT);\n\t\tlet currentNode = walker.nextNode();\n\t\tlet previousBoundaryAnchor: Element | null = null;\n\t\twhile (currentNode) {\n\t\t\tconst textNode = currentNode as Text;\n\t\t\tconst parent = textNode.parentElement;\n\t\t\tif (parent && !this.isElementHidden(parent)) {\n\t\t\t\tconst boundary = this.getBoundaryAnchor(textNode, contentElement);\n\t\t\t\tconst boundaryPoint = nodeStartOffsets.get(textNode);\n\t\t\t\tif (\n\t\t\t\t\tboundary &&\n\t\t\t\t\tboundaryPoint !== undefined &&\n\t\t\t\t\tboundary.anchor !== previousBoundaryAnchor &&\n\t\t\t\t\tboundaryPoint > 0\n\t\t\t\t) {\n\t\t\t\t\tboundaries.set(\n\t\t\t\t\t\tboundaryPoint,\n\t\t\t\t\t\tMath.max(boundaries.get(boundaryPoint) || 0, boundary.units),\n\t\t\t\t\t);\n\t\t\t\t\tpreviousBoundaryAnchor = boundary.anchor;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurrentNode = walker.nextNode();\n\t\t}\n\t\treturn boundaries;\n\t}\n\n\tprivate createNodeStartOffsets(\n\t\tmap: Map<number, { node: Text; offset: number }>,\n\t): Map<Text, number> {\n\t\tconst nodeStartOffsets = new Map<Text, number>();\n\t\tfor (const [normalizedIndex, mapping] of map.entries()) {\n\t\t\tif (!nodeStartOffsets.has(mapping.node)) {\n\t\t\t\tnodeStartOffsets.set(mapping.node, normalizedIndex);\n\t\t\t}\n\t\t}\n\t\treturn nodeStartOffsets;\n\t}\n\n\tprivate createSpeechPlanSegments(\n\t\tnormalizedText: string,\n\t\tboundaries: Map<number, number>,\n\t): TTSSpeechSegment[] {\n\t\tconst points = Array.from(boundaries.keys())\n\t\t\t.filter((point) => point > 0 && point < normalizedText.length)\n\t\t\t.sort((a, b) => a - b);\n\t\tconst segments: TTSSpeechSegment[] = [];\n\t\tlet start = 0;\n\t\tfor (const point of points) {\n\t\t\tconst raw = normalizedText.substring(start, point);\n\t\t\tconst leading = raw.match(/^\\s*/)?.[0].length || 0;\n\t\t\tconst trailing = raw.match(/\\s*$/)?.[0].length || 0;\n\t\t\tconst segmentStart = start + leading;\n\t\t\tconst segmentEnd = point - trailing;\n\t\t\tif (segmentEnd > segmentStart) {\n\t\t\t\tconst text = normalizedText.substring(segmentStart, segmentEnd);\n\t\t\t\tsegments.push({\n\t\t\t\t\ttext,\n\t\t\t\t\tstartOffset: segmentStart,\n\t\t\t\t\tpauseMsAfter: this.resolvePauseMsFromUnits(boundaries.get(point) || 0),\n\t\t\t\t});\n\t\t\t}\n\t\t\tstart = point;\n\t\t}\n\t\tconst tail = normalizedText.substring(start);\n\t\tconst tailLeading = tail.match(/^\\s*/)?.[0].length || 0;\n\t\tconst tailStart = start + tailLeading;\n\t\tif (tailStart < normalizedText.length) {\n\t\t\tsegments.push({\n\t\t\t\ttext: normalizedText.substring(tailStart).trimEnd(),\n\t\t\t\tstartOffset: tailStart,\n\t\t\t\tpauseMsAfter: 0,\n\t\t\t});\n\t\t}\n\t\treturn segments.filter((segment) => segment.text.trim().length > 0);\n\t}\n\n\tprivate segmentSentences(text: string): SharedSentenceSegment[] {\n\t\tconst locale =\n\t\t\t((this.ttsConfig.providerOptions as Record<string, unknown> | undefined)\n\t\t\t\t?.locale as string | undefined) || undefined;\n\t\treturn segmentTextToSentences(text, { locale });\n\t}\n\n\tprivate createSeekSegmentsFromText(text: string): TTSSpeechSegment[] {\n\t\treturn this.segmentSentences(text)\n\t\t\t.map((segment) => {\n\t\t\t\tconst leadingWhitespace = segment.text.match(/^\\s*/)?.[0].length || 0;\n\t\t\t\tconst trimmed = segment.text.trim();\n\t\t\t\treturn {\n\t\t\t\t\ttext: trimmed,\n\t\t\t\t\tstartOffset: segment.offset + leadingWhitespace,\n\t\t\t\t\tpauseMsAfter: 0,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.filter((segment) => segment.text.length > 0);\n\t}\n\n\tprivate splitSegmentsAtBoundaries(\n\t\tsegments: TTSSpeechSegment[],\n\t\tboundaryOffsets: number[],\n\t\tsourceText: string,\n\t): TTSSpeechSegment[] {\n\t\tif (segments.length === 0 || boundaryOffsets.length === 0) return segments;\n\t\tconst normalizedBoundaries = Array.from(new Set(boundaryOffsets))\n\t\t\t.filter((offset) => Number.isFinite(offset) && offset > 0)\n\t\t\t.sort((left, right) => left - right);\n\t\tif (normalizedBoundaries.length === 0) return segments;\n\t\tconst result: TTSSpeechSegment[] = [];\n\t\tfor (const segment of segments) {\n\t\t\tconst segmentStart = segment.startOffset;\n\t\t\tconst segmentEnd = segment.startOffset + segment.text.length;\n\t\t\tconst splitPoints = normalizedBoundaries.filter(\n\t\t\t\t(offset) => offset > segmentStart && offset < segmentEnd,\n\t\t\t);\n\t\t\tif (splitPoints.length === 0) {\n\t\t\t\tresult.push(segment);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet cursor = segmentStart;\n\t\t\tfor (const point of [...splitPoints, segmentEnd]) {\n\t\t\t\tconst raw = sourceText.substring(cursor, point);\n\t\t\t\tconst leadingWhitespace = raw.match(/^\\s*/)?.[0].length || 0;\n\t\t\t\tconst trailingWhitespace = raw.match(/\\s*$/)?.[0].length || 0;\n\t\t\t\tconst startOffset = cursor + leadingWhitespace;\n\t\t\t\tconst endOffset = point - trailingWhitespace;\n\t\t\t\tif (endOffset > startOffset) {\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\ttext: sourceText.substring(startOffset, endOffset),\n\t\t\t\t\t\tstartOffset,\n\t\t\t\t\t\tpauseMsAfter: 0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcursor = point;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate createSentenceHighlightSegments(args: {\n\t\tcontentToSpeak: string;\n\t\tshouldUsePlan: boolean;\n\t\tplaybackSegments: TTSSpeechSegment[];\n\t}): TTSSpeechSegment[] {\n\t\tconst grammaticalSegments = this.createSeekSegmentsFromText(args.contentToSpeak);\n\t\tif (!args.shouldUsePlan || args.playbackSegments.length === 0) {\n\t\t\treturn grammaticalSegments;\n\t\t}\n\t\tconst structuralBoundaries = args.playbackSegments\n\t\t\t.map((segment) => segment.startOffset)\n\t\t\t.filter((offset) => offset > 0);\n\t\treturn this.splitSegmentsAtBoundaries(\n\t\t\tgrammaticalSegments,\n\t\t\tstructuralBoundaries,\n\t\t\targs.contentToSpeak,\n\t\t);\n\t}\n\n\tprivate getCurrentSeekSegmentIndex(): number {\n\t\tif (this.seekSegments.length === 0) return 0;\n\t\tlet index = 0;\n\t\tfor (let i = 0; i < this.seekSegments.length; i++) {\n\t\t\tif (this.seekSegments[i].startOffset <= this.currentBoundaryOffset) {\n\t\t\t\tindex = i;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\n\tprivate async speakWithPlan(\n\t\tsegments: TTSSpeechSegment[],\n\t\trunId: number,\n\t\toptions?: { highlightMode?: HighlightMode },\n\t): Promise<void> {\n\t\tif (!this.provider || segments.length === 0) return;\n\t\tconst shouldTrackSentenceProgress = options?.highlightMode === \"sentence\";\n\t\tconst providerWithPlan = this.provider as ITTSProviderImplementation & {\n\t\t\tspeakSegments?: (segments: TTSSpeechSegment[]) => Promise<void>;\n\t\t};\n\t\tif (\n\t\t\t!shouldTrackSentenceProgress &&\n\t\t\ttypeof providerWithPlan.speakSegments === \"function\"\n\t\t) {\n\t\t\tthis.currentBoundaryOffset = 0;\n\t\t\tconst originalOnWordBoundary = this.provider.onWordBoundary;\n\t\t\tthis.provider.onWordBoundary = (\n\t\t\t\tword: string,\n\t\t\t\tposition: number,\n\t\t\t\tlength?: number,\n\t\t\t) => {\n\t\t\t\tif (Number.isFinite(position)) {\n\t\t\t\t\tthis.currentBoundaryOffset = position;\n\t\t\t\t\tthis.currentSeekSegmentIndex = this.getCurrentSeekSegmentIndex();\n\t\t\t\t}\n\t\t\t\toriginalOnWordBoundary?.(word, position, length);\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tawait providerWithPlan.speakSegments(segments);\n\t\t\t} finally {\n\t\t\t\tthis.provider.onWordBoundary = originalOnWordBoundary;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tfor (const segment of segments) {\n\t\t\tif (runId !== this.speakRunId) return;\n\t\t\tconst seekIndex = this.seekSegments.findIndex(\n\t\t\t\t(candidate) => candidate.startOffset === segment.startOffset,\n\t\t\t);\n\t\t\tif (seekIndex >= 0) {\n\t\t\t\tthis.currentSeekSegmentIndex = seekIndex;\n\t\t\t}\n\t\t\tthis.currentBoundaryOffset = segment.startOffset;\n\t\t\tif (shouldTrackSentenceProgress) {\n\t\t\t\tthis.highlightSentenceSegment(segment.startOffset, segment.text);\n\t\t\t}\n\t\t\tawait this.provider.speak(segment.text);\n\t\t\tconst pauseMs = segment.pauseMsAfter ?? 0;\n\t\t\tif (pauseMs > 0) {\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, pauseMs));\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate highlightSentenceSegment(startOffset: number, text: string): void {\n\t\tif (!this.highlightCoordinator || typeof document === \"undefined\") return;\n\t\tconst length = text.trimEnd().length;\n\t\tif (length <= 0) return;\n\t\tconst start = this.normalizedToDOM.get(startOffset);\n\t\tconst end = this.normalizedToDOM.get(startOffset + length - 1);\n\t\tif (!start || !end) return;\n\t\tconst range = document.createRange();\n\t\trange.setStart(start.node, start.offset);\n\t\trange.setEnd(end.node, end.offset + 1);\n\t\tthis.highlightCoordinator.highlightTTSSentence([range]);\n\t\tthis.activeSentenceStartOffset = startOffset;\n\t}\n\n\tprivate getSegmentIndexForOffset(\n\t\tsegments: TTSSpeechSegment[],\n\t\toffset: number,\n\t): number {\n\t\tif (segments.length === 0) return -1;\n\t\tlet index = -1;\n\t\tfor (let i = 0; i < segments.length; i++) {\n\t\t\tif (segments[i].startOffset <= offset) {\n\t\t\t\tindex = i;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\n\tprivate highlightSentenceForOffset(offset: number): void {\n\t\tconst segments = this.sentenceHighlightSegments;\n\t\tif (!this.highlightCoordinator || segments.length === 0) return;\n\t\tconst segmentIndex = this.getSegmentIndexForOffset(segments, offset);\n\t\tif (segmentIndex < 0) return;\n\t\tconst segment = segments[segmentIndex];\n\t\tif (!segment) return;\n\t\tif (this.activeSentenceStartOffset === segment.startOffset) return;\n\t\tthis.highlightSentenceSegment(segment.startOffset, segment.text);\n\t}\n\n\t/**\n\t * Find text node and offsets for highlighting a word\n\t *\n\t * @param charIndex Character position in normalized/spoken text\n\t * @param length Length of the word\n\t * @returns Text node and local offsets, or null if not found\n\t */\n\tprivate findHighlightRange(\n\t\tcharIndex: number,\n\t\tlength: number,\n\t): { node: Text; start: number; end: number } | null {\n\t\tconst startPos = this.normalizedToDOM.get(charIndex);\n\t\tif (!startPos) {\n\t\t\tconsole.warn(\n\t\t\t\t`[TTSService] No mapping found for start position ${charIndex}`,\n\t\t\t\t{\n\t\t\t\t\ttotalMappings: this.normalizedToDOM.size,\n\t\t\t\t\tnearbyMappings: Array.from(this.normalizedToDOM.entries())\n\t\t\t\t\t\t.filter(([pos]) => Math.abs(pos - charIndex) < 5)\n\t\t\t\t\t\t.map(([pos, { offset, node }]) => ({\n\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\toffset,\n\t\t\t\t\t\t\tchar: node.textContent?.[offset],\n\t\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\n\t\t// Find the end position (last character of the word)\n\t\tconst endIndex = charIndex + length - 1;\n\t\tconst endPos = this.normalizedToDOM.get(endIndex);\n\t\tif (!endPos) {\n\t\t\tconsole.warn(\n\t\t\t\t`[TTSService] No mapping found for end position ${endIndex}`,\n\t\t\t\t{\n\t\t\t\t\tstartChar: charIndex,\n\t\t\t\t\tlength,\n\t\t\t\t\ttotalMappings: this.normalizedToDOM.size,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\n\t\t// For simplicity, if the word spans multiple nodes, just highlight in the first node\n\t\t// (This is a rare edge case and would require creating multiple ranges)\n\t\tif (startPos.node !== endPos.node) {\n\t\t\tconsole.warn(\n\t\t\t\t`[TTSService] Word spans multiple nodes, highlighting in first node only`,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tnode: startPos.node,\n\t\t\t\tstart: startPos.offset,\n\t\t\t\tend: (startPos.node.textContent || \"\").length,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tnode: startPos.node,\n\t\t\tstart: startPos.offset,\n\t\t\tend: endPos.offset + 1, // +1 because we want to include the character at endPos\n\t\t};\n\t}\n\n\t/**\n\t * Speak text with optional catalog support\n\t *\n\t * @param text Text to speak (will be normalized: trimmed and whitespace collapsed)\n\t * @param options Optional catalog ID, language, and content element for highlighting\n\t */\n\tasync speak(text: string, options?: SpeakOptions): Promise<void> {\n\t\tif (!this.provider) {\n\t\t\tthrow new Error(\"TTS service not initialized\");\n\t\t}\n\t\tconst runId = ++this.speakRunId;\n\t\tawait this.applyLanguageSettings(options);\n\t\tconst { contentToSpeak, normalizedText, usedCatalogSpoken, speechSource } =\n\t\t\tthis.resolveSpeechContent(text, options);\n\t\tthis.logResolvedSpeechContent({\n\t\t\tcontentToSpeak,\n\t\t\tspeechSource,\n\t\t\tcatalogId: options?.catalogId,\n\t\t});\n\t\tthis.initializeSpeakTracking(contentToSpeak, options);\n\t\tconst highlightMode =\n\t\t\toptions?.highlightModeOverride || this.resolveHighlightMode();\n\t\tthis.activeHighlightMode = highlightMode;\n\t\tconst shouldUsePlan =\n\t\t\t!!this.currentContentElement &&\n\t\t\t!usedCatalogSpoken &&\n\t\t\t!this.hasExplicitBreakSemantics(contentToSpeak);\n\t\tthis.seekSegments = this.hasExplicitBreakSemantics(contentToSpeak)\n\t\t\t? []\n\t\t\t: shouldUsePlan && this.currentContentElement\n\t\t\t\t? this.createSpeechPlan(this.currentContentElement, normalizedText)\n\t\t\t\t: this.createSeekSegmentsFromText(contentToSpeak);\n\t\tthis.sentenceHighlightSegments = this.hasExplicitBreakSemantics(contentToSpeak)\n\t\t\t? []\n\t\t\t: this.createSentenceHighlightSegments({\n\t\t\t\t\tcontentToSpeak,\n\t\t\t\t\tshouldUsePlan,\n\t\t\t\t\tplaybackSegments: this.seekSegments,\n\t\t\t\t});\n\t\tthis.setState(PlaybackState.LOADING);\n\t\tthis.prepareHighlightsForSpeak({\n\t\t\tcontentToSpeak,\n\t\t\toptions,\n\t\t\thighlightMode,\n\t\t\tshouldUsePlan,\n\t\t});\n\n\t\ttry {\n\t\t\tthis.configureWordBoundaryHighlighting({\n\t\t\t\thighlightMode,\n\t\t\t\twordBoundaryOffset: options?.wordBoundaryOffset || 0,\n\t\t\t});\n\t\t\tthis.setState(PlaybackState.PLAYING);\n\t\t\tawait this.executeSpeakPlayback({\n\t\t\t\tshouldUsePlan,\n\t\t\t\trunId,\n\t\t\t\thighlightMode,\n\t\t\t\tcontentToSpeak,\n\t\t\t});\n\t\t\tif (runId !== this.speakRunId) return;\n\t\t\tthis.setState(PlaybackState.IDLE);\n\t\t\tthis.clearHighlightsAndTracking();\n\t\t} catch (error) {\n\t\t\tlet finalError = error;\n\t\t\tif (runId === this.speakRunId) {\n\t\t\t\ttry {\n\t\t\t\t\tconst recovered = await this.retryWithBrowserFallback({\n\t\t\t\t\t\terror,\n\t\t\t\t\t\trunId,\n\t\t\t\t\t\tshouldUsePlan,\n\t\t\t\t\t\thighlightMode,\n\t\t\t\t\t\tcontentToSpeak,\n\t\t\t\t\t\twordBoundaryOffset: options?.wordBoundaryOffset || 0,\n\t\t\t\t\t});\n\t\t\t\t\tif (recovered) {\n\t\t\t\t\t\tthis.setState(PlaybackState.IDLE);\n\t\t\t\t\t\tthis.clearHighlightsAndTracking();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} catch (retryError) {\n\t\t\t\t\tfinalError = retryError;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconsole.error(\"TTS error:\", finalError);\n\t\t\tthis.lastError =\n\t\t\t\tfinalError instanceof Error ? finalError.message : String(finalError);\n\t\t\tif (runId !== this.speakRunId) return;\n\t\t\tthis.setState(PlaybackState.ERROR);\n\t\t\tthis.clearHighlightsAndTracking();\n\t\t\tthrow finalError;\n\t\t}\n\t}\n\n\tprivate shouldAttemptBrowserFallback(error: unknown): boolean {\n\t\tif (!this.provider || !this.currentProvider) return false;\n\t\tconst providerId = (this.currentProvider.providerId || \"\").toLowerCase();\n\t\tif (providerId === \"browser\") return false;\n\t\tconst message = (error instanceof Error ? error.message : String(error))\n\t\t\t.toLowerCase()\n\t\t\t.trim();\n\t\t// Avoid fallback for expected cancellation/superseded flows.\n\t\tif (message.includes(\"superseded by a newer request\")) return false;\n\t\tif (message.includes(\"aborterror\")) return false;\n\t\tif (message.includes(\"aborted\")) return false;\n\t\tif (message.includes(\"cancelled\")) return false;\n\t\tif (message.includes(\"canceled\")) return false;\n\t\t// For non-browser providers, default to browser fallback on runtime errors.\n\t\treturn true;\n\t}\n\n\tprivate async switchProviderToBrowser(reason: unknown): Promise<boolean> {\n\t\tif (!this.currentProvider) return false;\n\t\tconst fallbackProvider = new BrowserTTSProvider();\n\t\tconst previousProviderId = this.currentProvider.providerId;\n\t\tconst browserConfig: Partial<TTSConfig> = { ...this.ttsConfig };\n\t\ttry {\n\t\t\tthis.provider?.stop();\n\t\t\tthis.currentProvider.destroy();\n\t\t\tthis.currentProvider = fallbackProvider;\n\t\t\tthis.provider = await fallbackProvider.initialize(browserConfig as TTSConfig);\n\t\t\tthis.ttsConfig = browserConfig;\n\t\t\tawait this.emitTelemetry(\"pie-tool-runtime-fallback\", {\n\t\t\t\ttoolId: \"textToSpeech\",\n\t\t\t\toperation: \"tts-speak\",\n\t\t\t\tfromProvider: previousProviderId,\n\t\t\t\ttoProvider: fallbackProvider.providerId,\n\t\t\t\treason: reason instanceof Error ? reason.message : String(reason),\n\t\t\t});\n\t\t\tconsole.warn(\n\t\t\t\t\"[TTSService] Server TTS playback failed; switched to browser fallback\",\n\t\t\t\t{\n\t\t\t\t\tfromProvider: previousProviderId,\n\t\t\t\t\treason,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn true;\n\t\t} catch (fallbackError) {\n\t\t\tawait this.emitTelemetry(\"pie-tool-runtime-fallback-error\", {\n\t\t\t\ttoolId: \"textToSpeech\",\n\t\t\t\toperation: \"tts-speak\",\n\t\t\t\tfromProvider: previousProviderId,\n\t\t\t\ttoProvider: \"browser\",\n\t\t\t\terrorType: \"TTSRuntimeFallbackError\",\n\t\t\t\tmessage:\n\t\t\t\t\tfallbackError instanceof Error\n\t\t\t\t\t\t? fallbackError.message\n\t\t\t\t\t\t: String(fallbackError),\n\t\t\t});\n\t\t\tconsole.error(\n\t\t\t\t\"[TTSService] Failed to switch to browser fallback provider\",\n\t\t\t\tfallbackError,\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tprivate isBrowserSpeechFallbackAvailable(): boolean {\n\t\tif (typeof window === \"undefined\") return false;\n\t\tif (!(\"speechSynthesis\" in window)) return false;\n\t\treturn typeof (globalThis as Record<string, unknown>).SpeechSynthesisUtterance === \"function\";\n\t}\n\n\tprivate async retryWithBrowserFallback(args: {\n\t\terror: unknown;\n\t\trunId: number;\n\t\tshouldUsePlan: boolean;\n\t\thighlightMode: HighlightMode;\n\t\tcontentToSpeak: string;\n\t\twordBoundaryOffset: number;\n\t}): Promise<boolean> {\n\t\tif (!this.shouldAttemptBrowserFallback(args.error)) return false;\n\t\tif (!this.isBrowserSpeechFallbackAvailable()) return false;\n\t\tconst switched = await this.switchProviderToBrowser(args.error);\n\t\tif (!switched) return false;\n\t\tif (args.runId !== this.speakRunId) return true;\n\t\t// Rebind highlight callbacks to the newly initialized provider, then retry once.\n\t\tthis.configureWordBoundaryHighlighting({\n\t\t\thighlightMode: args.highlightMode,\n\t\t\twordBoundaryOffset: args.wordBoundaryOffset,\n\t\t});\n\t\tawait this.executeSpeakPlayback({\n\t\t\tshouldUsePlan: args.shouldUsePlan,\n\t\t\trunId: args.runId,\n\t\t\thighlightMode: args.highlightMode,\n\t\t\tcontentToSpeak: args.contentToSpeak,\n\t\t});\n\t\treturn true;\n\t}\n\n\tprivate async applyLanguageSettings(options?: SpeakOptions): Promise<void> {\n\t\tif (!options?.language || !this.provider) return;\n\t\tconst providerOptions = (this.ttsConfig.providerOptions ||\n\t\t\t{}) as Record<string, unknown>;\n\t\tconst textNormalization = (providerOptions.textNormalization ||\n\t\t\t{}) as Record<string, unknown>;\n\t\tconst segmenter = (providerOptions.segmenter || {}) as Record<\n\t\t\tstring,\n\t\t\tunknown\n\t\t>;\n\t\tconst mergedProviderOptions = {\n\t\t\t...providerOptions,\n\t\t\tlocale: options.language,\n\t\t\ttextNormalization: {\n\t\t\t\t...textNormalization,\n\t\t\t\tlocale: options.language,\n\t\t\t},\n\t\t\tsegmenter: {\n\t\t\t\t...segmenter,\n\t\t\t\tlocale: options.language,\n\t\t\t},\n\t\t};\n\t\tthis.ttsConfig = {\n\t\t\t...this.ttsConfig,\n\t\t\tproviderOptions: mergedProviderOptions,\n\t\t};\n\t\tif (\n\t\t\t\"updateSettings\" in this.provider &&\n\t\t\ttypeof (this.provider as { updateSettings?: unknown }).updateSettings ===\n\t\t\t\t\"function\"\n\t\t) {\n\t\t\tawait (\n\t\t\t\tthis.provider as {\n\t\t\t\t\tupdateSettings: (settings: Partial<TTSConfig>) => Promise<void> | void;\n\t\t\t\t}\n\t\t\t).updateSettings({ providerOptions: mergedProviderOptions });\n\t\t}\n\t}\n\n\tprivate resolveSpeechContent(\n\t\ttext: string,\n\t\toptions?: SpeakOptions,\n\t): ResolvedSpeechContent {\n\t\tconst normalizedInputText = normalizeTextForSpeech(text);\n\t\tconst normalizedText = options?.contentElement\n\t\t\t? this.extractVisibleText(options.contentElement, options.language) ||\n\t\t\t\tnormalizedInputText\n\t\t\t: normalizedInputText;\n\n\t\tlet contentToSpeak = normalizedText;\n\t\tlet usedCatalogSpoken = false;\n\t\tlet speechSource: \"catalog-spoken\" | \"dom-or-input\" = \"dom-or-input\";\n\t\tif (options?.catalogId && this.catalogResolver) {\n\t\t\tconst catalogContent = this.catalogResolver.getAlternative(\n\t\t\t\toptions.catalogId,\n\t\t\t\t{\n\t\t\t\t\ttype: \"spoken\",\n\t\t\t\t\tlanguage: options.language || \"en-US\",\n\t\t\t\t\tuseFallback: true,\n\t\t\t\t},\n\t\t\t);\n\t\t\tif (catalogContent) {\n\t\t\t\tcontentToSpeak = catalogContent.content;\n\t\t\t\tusedCatalogSpoken = true;\n\t\t\t\tspeechSource = \"catalog-spoken\";\n\t\t\t\tconsole.debug(\n\t\t\t\t\t`[TTSService] Using catalog content for \"${options.catalogId}\" (${catalogContent.language})`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconsole.debug(\n\t\t\t\t\t`[TTSService] No catalog found for \"${options.catalogId}\", falling back to generated TTS`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (usedCatalogSpoken && options?.contentElement) {\n\t\t\tconst normalizedCatalogText = normalizeTextForSpeech(contentToSpeak);\n\t\t\tconst preserveCatalogSpeech = this.hasExplicitBreakSemantics(contentToSpeak);\n\t\t\tif (!preserveCatalogSpeech && normalizedCatalogText !== normalizedText) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[TTSService] Catalog spoken text diverges from visible DOM; using normalized visible text to keep highlighting aligned.\",\n\t\t\t\t\t{\n\t\t\t\t\t\tcatalogId: options.catalogId || null,\n\t\t\t\t\t\tcatalogLength: normalizedCatalogText.length,\n\t\t\t\t\t\tvisibleLength: normalizedText.length,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tcontentToSpeak = normalizedText;\n\t\t\t\tusedCatalogSpoken = false;\n\t\t\t\tspeechSource = \"dom-or-input\";\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tcontentToSpeak,\n\t\t\tusedCatalogSpoken,\n\t\t\tspeechSource,\n\t\t\tnormalizedText,\n\t\t};\n\t}\n\n\tprivate logResolvedSpeechContent(args: {\n\t\tcontentToSpeak: string;\n\t\tspeechSource: \"catalog-spoken\" | \"dom-or-input\";\n\t\tcatalogId?: string;\n\t}): void {\n\t\tconst preview = args.contentToSpeak.replace(/\\s+/g, \" \").trim().slice(0, 200);\n\t\tconsole.debug(\"[TTSService] Speak resolved content\", {\n\t\t\tsource: args.speechSource,\n\t\t\tcatalogId: args.catalogId || null,\n\t\t\tlength: args.contentToSpeak.length,\n\t\t\tpreview,\n\t\t});\n\t}\n\n\tprivate initializeSpeakTracking(\n\t\tcontentToSpeak: string,\n\t\toptions?: SpeakOptions,\n\t): void {\n\t\tthis.currentText = contentToSpeak;\n\t\tthis.currentContentElement = options?.contentElement || null;\n\t\tthis.lastError = null;\n\t\tthis.currentBoundaryOffset = 0;\n\t\tthis.currentSeekSegmentIndex = 0;\n\t\tthis.activeSentenceStartOffset = null;\n\t}\n\n\tprivate prepareHighlightsForSpeak(args: {\n\t\tcontentToSpeak: string;\n\t\toptions?: SpeakOptions;\n\t\thighlightMode: HighlightMode;\n\t\tshouldUsePlan: boolean;\n\t}): void {\n\t\tif (!this.currentContentElement || !this.highlightCoordinator) return;\n\t\tthis.buildPositionMap(\n\t\t\tthis.currentContentElement,\n\t\t\targs.contentToSpeak,\n\t\t\targs.options?.language,\n\t\t);\n\t\tif (args.highlightMode === \"sentence\" && args.shouldUsePlan) {\n\t\t\treturn;\n\t\t}\n\t\tconst initialSegment =\n\t\t\tthis.sentenceHighlightSegments[0] || this.seekSegments[0];\n\t\tif (initialSegment) {\n\t\t\tthis.highlightSentenceSegment(\n\t\t\t\tinitialSegment.startOffset,\n\t\t\t\tinitialSegment.text,\n\t\t\t);\n\t\t\tconsole.log(\"[TTSService] Applied initial sentence highlighting\");\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tconst range = document.createRange();\n\t\t\t\trange.selectNodeContents(this.currentContentElement);\n\t\t\t\tthis.highlightCoordinator.highlightTTSSentence([range]);\n\t\t\t} catch {\n\t\t\t\t// No-op fallback when DOM range creation fails.\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate configureWordBoundaryHighlighting(args: {\n\t\thighlightMode: HighlightMode;\n\t\twordBoundaryOffset: number;\n\t}): void {\n\t\tif (\n\t\t\t!this.provider ||\n\t\t\targs.highlightMode !== \"word\" ||\n\t\t\t!this.highlightCoordinator ||\n\t\t\t!this.currentContentElement\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\t// Word index uses the same globalIndex as highlightTTSWord (browser boundaries\n\t\t// or ServerTTSProvider time-scaled onWordBoundary).\n\t\tthis.provider.onWordBoundary = (word: string, charIndex: number, length?: number) => {\n\t\t\tconst wordLength = length || word.length;\n\t\t\tconst globalIndex = charIndex + this.currentBoundaryOffset + args.wordBoundaryOffset;\n\t\t\tthis.highlightSentenceForOffset(globalIndex);\n\t\t\tconst highlightRange = this.findHighlightRange(globalIndex, wordLength);\n\t\t\tif (highlightRange && this.highlightCoordinator) {\n\t\t\t\tconst highlightText =\n\t\t\t\t\thighlightRange.node.textContent?.substring(\n\t\t\t\t\t\thighlightRange.start,\n\t\t\t\t\t\thighlightRange.end,\n\t\t\t\t\t) || \"\";\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[TTSService] Highlighting \"${highlightText}\" (word: \"${word}\") at position ${globalIndex}`,\n\t\t\t\t);\n\t\t\t\tthis.highlightCoordinator.highlightTTSWord(\n\t\t\t\t\thighlightRange.node,\n\t\t\t\t\thighlightRange.start,\n\t\t\t\t\thighlightRange.end,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[TTSService] Could not find highlight range for position ${globalIndex}, length ${wordLength}`,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate async executeSpeakPlayback(args: {\n\t\tshouldUsePlan: boolean;\n\t\trunId: number;\n\t\thighlightMode: HighlightMode;\n\t\tcontentToSpeak: string;\n\t}): Promise<void> {\n\t\tif (args.shouldUsePlan && this.currentContentElement) {\n\t\t\tconst segments = this.seekSegments;\n\t\t\tif (segments.length > 0) {\n\t\t\t\tawait this.speakWithPlan(segments, args.runId, {\n\t\t\t\t\thighlightMode: args.highlightMode,\n\t\t\t\t});\n\t\t\t} else if (this.provider) {\n\t\t\t\tawait this.provider.speak(args.contentToSpeak);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (this.provider) {\n\t\t\tawait this.provider.speak(args.contentToSpeak);\n\t\t}\n\t}\n\n\tprivate clearHighlightsAndTracking(): void {\n\t\tif (this.highlightCoordinator) {\n\t\t\tthis.highlightCoordinator.clearTTS();\n\t\t}\n\t\tthis.currentContentElement = null;\n\t\tthis.normalizedToDOM.clear();\n\t\tthis.currentBoundaryOffset = 0;\n\t\tthis.seekSegments = [];\n\t\tthis.sentenceHighlightSegments = [];\n\t\tthis.currentSeekSegmentIndex = 0;\n\t\tthis.activeSentenceStartOffset = null;\n\t}\n\n\t/**\n\t * Speak a text range with accurate word highlighting\n\t *\n\t * This calculates the offset of the range within its parent element\n\t * to ensure word highlighting aligns correctly with the selected text.\n\t *\n\t * @param range DOM Range to speak\n\t */\n\tasync speakRange(\n\t\trange: Range,\n\t\toptions?: { contentRoot?: Element | null },\n\t): Promise<void> {\n\t\tif (!this.provider) {\n\t\t\tthrow new Error(\"TTS service not initialized\");\n\t\t}\n\n\t\tconst text = range.toString().trim();\n\t\tif (!text) return;\n\n\t\t// Use explicit content root when provided; otherwise keep highlighting scoped\n\t\t// to the selected range's nearest element ancestor.\n\t\tconst fromOptions = options?.contentRoot || null;\n\t\tlet root: Element | null = fromOptions;\n\t\tif (!root) {\n\t\t\tconst ancestor = range.commonAncestorContainer;\n\t\t\troot =\n\t\t\t\tancestor.nodeType === Node.ELEMENT_NODE\n\t\t\t\t\t? (ancestor as Element)\n\t\t\t\t\t: ancestor.parentElement;\n\t\t}\n\t\tif (!root) return;\n\n\t\t// Calculate the offset of the range start within the root element\n\t\tconst beforeRange = document.createRange();\n\t\tbeforeRange.selectNodeContents(root);\n\t\tbeforeRange.setEnd(range.startContainer, range.startOffset);\n\t\tconst textBeforeRange = beforeRange.toString();\n\t\tconst offset = normalizeTextForSpeech(textBeforeRange).length;\n\n\t\tconsole.log(\"[TTSService] speakRange offset calculation:\", {\n\t\t\tselectedText: text,\n\t\t\ttextBeforeRange: textBeforeRange.substring(0, 100),\n\t\t\toffset,\n\t\t\trootTag: root.tagName,\n\t\t});\n\n\t\t// Speak the text with the root element as context\n\t\tawait this.speak(text, {\n\t\t\tcontentElement: root,\n\t\t\twordBoundaryOffset: offset,\n\t\t});\n\t}\n\n\t/**\n\t * Pause playback\n\t */\n\tpause(): void {\n\t\tif (!this.provider) return;\n\n\t\tif (this.state === PlaybackState.PLAYING) {\n\t\t\tthis.provider.pause();\n\t\t\tthis.setState(PlaybackState.PAUSED);\n\t\t}\n\t}\n\n\t/**\n\t * Resume playback\n\t */\n\tresume(): void {\n\t\tif (!this.provider) return;\n\n\t\tif (this.state === PlaybackState.PAUSED) {\n\t\t\tthis.provider.resume();\n\t\t\tthis.setState(PlaybackState.PLAYING);\n\t\t}\n\t}\n\n\tprivate async seekBy(units: number): Promise<void> {\n\t\tif (!this.provider || !this.currentText) return;\n\t\tif (this.state !== PlaybackState.PLAYING && this.state !== PlaybackState.PAUSED) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.hasExplicitBreakSemantics(this.currentText)) return;\n\t\tif (this.seekSegments.length === 0) return;\n\n\t\tconst delta = Number.isFinite(units) ? Math.trunc(units) : 0;\n\t\tif (delta === 0) return;\n\n\t\tconst currentIndex = this.getCurrentSeekSegmentIndex();\n\t\tconst targetIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.seekSegments.length - 1, currentIndex + delta),\n\t\t);\n\t\tif (targetIndex === currentIndex) return;\n\n\t\tthis.speakRunId += 1;\n\t\tthis.provider.stop();\n\t\tthis.currentSeekSegmentIndex = targetIndex;\n\t\tconst runId = ++this.speakRunId;\n\t\tconst restartSegments = this.seekSegments.slice(targetIndex);\n\n\t\tthis.setState(PlaybackState.PLAYING);\n\t\ttry {\n\t\t\tawait this.speakWithPlan(restartSegments, runId, {\n\t\t\t\thighlightMode: this.activeHighlightMode,\n\t\t\t});\n\t\t\tif (runId !== this.speakRunId) return;\n\t\t\tthis.setState(PlaybackState.IDLE);\n\t\t\tthis.clearHighlightsAndTracking();\n\t\t} catch (error) {\n\t\t\tif (runId !== this.speakRunId) return;\n\t\t\tthis.lastError = error instanceof Error ? error.message : String(error);\n\t\t\tthis.setState(PlaybackState.ERROR);\n\t\t\tthis.clearHighlightsAndTracking();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync seekForward(units = 1): Promise<void> {\n\t\tconst step = Number.isFinite(units) ? Math.max(1, Math.trunc(units)) : 1;\n\t\tawait this.seekBy(step);\n\t}\n\n\tasync seekBackward(units = 1): Promise<void> {\n\t\tconst step = Number.isFinite(units) ? Math.max(1, Math.trunc(units)) : 1;\n\t\tawait this.seekBy(-step);\n\t}\n\n\t/**\n\t * Stop playback\n\t */\n\tstop(): void {\n\t\tif (!this.provider) return;\n\t\tthis.speakRunId += 1;\n\t\tthis.provider.stop();\n\t\tthis.setState(PlaybackState.IDLE);\n\t\tthis.currentText = null;\n\n\t\t// Clear highlights\n\t\tif (this.highlightCoordinator) {\n\t\t\tthis.highlightCoordinator.clearTTS();\n\t\t}\n\n\t\t// Clear tracking\n\t\tthis.currentContentElement = null;\n\t\tthis.normalizedToDOM.clear();\n\t\tthis.currentBoundaryOffset = 0;\n\t\tthis.seekSegments = [];\n\t\tthis.sentenceHighlightSegments = [];\n\t\tthis.currentSeekSegmentIndex = 0;\n\t\tthis.activeSentenceStartOffset = null;\n\t}\n\n\t/**\n\t * Request UI-level TTS controls to hand off/deactivate.\n\t *\n\t * This is intentionally separate from playback controls so hosts can orchestrate\n\t * control handoff explicitly (for example: stop playback, then dismiss controls).\n\t */\n\trequestControlHandoff(): void {\n\t\tif (typeof window === \"undefined\") return;\n\t\tconst detail: TTSControlHandoffDetail = { source: \"host\" };\n\t\twindow.dispatchEvent(\n\t\t\tnew CustomEvent(PIE_TTS_CONTROL_HANDOFF_EVENT, {\n\t\t\t\tdetail,\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * Check if currently playing\n\t */\n\tisPlaying(): boolean {\n\t\treturn this.state === PlaybackState.PLAYING;\n\t}\n\n\t/**\n\t * Check if paused\n\t */\n\tisPaused(): boolean {\n\t\treturn this.state === PlaybackState.PAUSED;\n\t}\n\n\t/**\n\t * Get current state\n\t */\n\tgetState(): PlaybackState {\n\t\treturn this.state;\n\t}\n\n\t/**\n\t * Get current text being spoken\n\t */\n\tgetCurrentText(): string | null {\n\t\treturn this.currentText;\n\t}\n\n\t/**\n\t * Get the last error message\n\t * Returns null if no error has occurred\n\t */\n\tgetLastError(): string | null {\n\t\treturn this.lastError;\n\t}\n\n\t/**\n\t * Subscribe to state changes\n\t *\n\t * @param id Unique listener ID\n\t * @param callback Function to call on state change\n\t */\n\tonStateChange(id: string, callback: (state: PlaybackState) => void): void {\n\t\tif (!this.listeners.has(id)) {\n\t\t\tthis.listeners.set(id, new Set());\n\t\t}\n\t\tthis.listeners.get(id)!.add(callback);\n\t}\n\n\t/**\n\t * Unsubscribe from state changes\n\t */\n\toffStateChange(id: string, callback: (state: PlaybackState) => void): void {\n\t\tconst callbacks = this.listeners.get(id);\n\t\tif (callbacks) {\n\t\t\tcallbacks.delete(callback);\n\t\t\tif (callbacks.size === 0) {\n\t\t\t\tthis.listeners.delete(id);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Set state and notify listeners\n\t */\n\tprivate setState(newState: PlaybackState): void {\n\t\tif (this.state === newState) return;\n\n\t\tconst previousState = this.state;\n\t\tthis.state = newState;\n\n\t\t// Notify all listeners\n\t\tfor (const callbacks of this.listeners.values()) {\n\t\t\tfor (const callback of callbacks) {\n\t\t\t\tcallback(newState);\n\t\t\t}\n\t\t}\n\n\t\tvoid this.emitTelemetry(\"pie-tool-playback-state-changed\", {\n\t\t\ttoolId: \"textToSpeech\",\n\t\t\tproviderId: \"tts\",\n\t\t\tpreviousState,\n\t\t\tstate: newState,\n\t\t});\n\n\t\tif (newState === PlaybackState.PLAYING) {\n\t\t\tconst eventName =\n\t\t\t\tpreviousState === PlaybackState.PAUSED\n\t\t\t\t\t? \"pie-tool-playback-resume\"\n\t\t\t\t\t: \"pie-tool-playback-start\";\n\t\t\tvoid this.emitTelemetry(eventName, {\n\t\t\t\ttoolId: \"textToSpeech\",\n\t\t\t\tproviderId: \"tts\",\n\t\t\t\tpreviousState,\n\t\t\t\tstate: newState,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (newState === PlaybackState.PAUSED) {\n\t\t\tvoid this.emitTelemetry(\"pie-tool-playback-pause\", {\n\t\t\t\ttoolId: \"textToSpeech\",\n\t\t\t\tproviderId: \"tts\",\n\t\t\t\tpreviousState,\n\t\t\t\tstate: newState,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (newState === PlaybackState.ERROR) {\n\t\t\tvoid this.emitTelemetry(\"pie-tool-playback-error\", {\n\t\t\t\ttoolId: \"textToSpeech\",\n\t\t\t\tproviderId: \"tts\",\n\t\t\t\tpreviousState,\n\t\t\t\tstate: newState,\n\t\t\t\tmessage: this.lastError || undefined,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tnewState === PlaybackState.IDLE &&\n\t\t\t(previousState === PlaybackState.PLAYING ||\n\t\t\t\tpreviousState === PlaybackState.PAUSED ||\n\t\t\t\tpreviousState === PlaybackState.LOADING)\n\t\t) {\n\t\t\tvoid this.emitTelemetry(\"pie-tool-playback-stop\", {\n\t\t\t\ttoolId: \"textToSpeech\",\n\t\t\t\tproviderId: \"tts\",\n\t\t\t\tpreviousState,\n\t\t\t\tstate: newState,\n\t\t\t});\n\t\t}\n\t}\n}\n"]}
|