@pie-players/pie-tool-tts-inline 0.3.52 → 0.3.53

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/README.md CHANGED
@@ -165,6 +165,7 @@ When used with the section player, this tool benefits from extracted catalogs
165
165
  when a host/import pipeline runs `SSMLExtractor` before render:
166
166
 
167
167
  **Author embeds SSML in content:**
168
+
168
169
  ```html
169
170
  <div>
170
171
  <speak>Solve <prosody rate="slow">x squared plus two</prosody>.</speak>
@@ -173,11 +174,13 @@ when a host/import pipeline runs `SSMLExtractor` before render:
173
174
  ```
174
175
 
175
176
  **Preprocessing extracts SSML:**
177
+
176
178
  - Generates catalog with ID like `auto-prompt-q1-0`
177
179
  - Adds `data-catalog-idref="auto-prompt-q1-0"` to visual content
178
180
  - Provides `config.extractedCatalogs` for runtime catalog registration
179
181
 
180
182
  **Tool uses extracted catalog:**
183
+
181
184
  - User clicks TTS button in header
182
185
  - Tool calls `ttsService.speak(text, { catalogId: 'auto-prompt-q1-0' })`
183
186
  - TTSService finds SSML in extracted catalogs
@@ -194,6 +197,28 @@ The component uses scoped styles and doesn't require external CSS. Styling uses
194
197
  - **Speed state**: Active speed button receives distinct token-driven styling
195
198
  - **Disabled**: Reduced opacity, no pointer
196
199
 
200
+ Hosts that need to theme the trigger's active/open state should prefer these
201
+ component-scoped variables instead of overriding broad semantic tokens such as
202
+ `--pie-primary`:
203
+
204
+ ```css
205
+ --pie-tool-trigger-active-background: Active/open trigger background
206
+ --pie-tool-trigger-active-color: Active/open trigger foreground
207
+ --pie-tool-trigger-active-border-color: Active/open trigger border
208
+ ```
209
+
210
+ If unset, the trigger keeps the existing defaults: active background and border
211
+ derive from `--pie-primary`, while foreground continues through
212
+ `--pie-button-color` / `--pie-text`. Hosts remain responsible for maintaining
213
+ WCAG AA foreground/background contrast when overriding active trigger colors.
214
+
215
+ Ordinary trigger and control button styling also preserves these legacy aliases:
216
+ `--pie-button-background-color`, `--pie-button-border-color`, and
217
+ `--pie-button-hover-background-color`. They remain supported for host
218
+ compatibility, but fall back through the canonical `--pie-button-bg`,
219
+ `--pie-button-border`, and `--pie-button-hover-bg` tokens before broad surface
220
+ tokens.
221
+
197
222
  ## Architecture
198
223
 
199
224
  This tool follows the PIE Assessment Toolkit tool pattern:
@@ -2301,7 +2301,7 @@ function ci(e, t, n, r, i, a) {
2301
2301
  //#region tool-tts-inline.svelte
2302
2302
  var li = /* @__PURE__ */ xr("<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" class=\"pie-tool-tts-inline__icon svelte-18mzc0g\" aria-hidden=\"true\"><path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\"></path></svg>"), ui = /* @__PURE__ */ xr("<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" class=\"pie-tool-tts-inline__icon svelte-18mzc0g\" aria-hidden=\"true\"><path d=\"M8 5v14l11-7z\"></path></svg>"), di = /* @__PURE__ */ yr("<button type=\"button\"><!></button>"), fi = /* @__PURE__ */ yr("<button type=\"button\" data-pie-tts-control=\"\"><span aria-hidden=\"true\"> </span></button>"), pi = /* @__PURE__ */ yr("<div role=\"toolbar\" aria-label=\"Reading controls\" tabindex=\"-1\"><!> <button type=\"button\" data-pie-tts-control=\"\" class=\"pie-tool-tts-inline__control svelte-18mzc0g\" aria-label=\"Rewind\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" class=\"pie-tool-tts-inline__icon svelte-18mzc0g\" aria-hidden=\"true\"><path d=\"M20 18V6l-8.5 6L20 18zM10.5 18V6L2 12l8.5 6z\"></path></svg></button> <button type=\"button\" data-pie-tts-control=\"\" class=\"pie-tool-tts-inline__control svelte-18mzc0g\" aria-label=\"Fast-forward\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" class=\"pie-tool-tts-inline__icon svelte-18mzc0g\" aria-hidden=\"true\"><path d=\"M4 18l8.5-6L4 6v12zm9.5 0L22 12l-8.5-6v12z\"></path></svg></button> <button type=\"button\" data-pie-tts-control=\"\" class=\"pie-tool-tts-inline__control svelte-18mzc0g\" aria-label=\"Stop reading\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" class=\"pie-tool-tts-inline__icon svelte-18mzc0g\" aria-hidden=\"true\"><path d=\"M6 6h12v12H6z\"></path></svg></button></div>"), mi = /* @__PURE__ */ yr("<!> <!>", 1), hi = /* @__PURE__ */ yr("<div><!> <div class=\"pie-sr-only svelte-18mzc0g\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"> </div></div>"), gi = {
2303
2303
  hash: "svelte-18mzc0g",
2304
- code: ".pie-tool-tts-inline.svelte-18mzc0g {position:relative;display:inline-flex;align-items:center;}.pie-tool-tts-inline--controls-row.svelte-18mzc0g {width:100%;justify-content:flex-end;}.pie-tool-tts-inline__trigger.svelte-18mzc0g {display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:1px solid var(--pie-button-border-color, var(--pie-border, #c6c6c6));background-color:var(--pie-button-background-color, var(--pie-background, #fff));color:var(--pie-button-color, var(--pie-text, #333));border-radius:0.25rem;cursor:pointer;transition:background-color 0.15s ease, box-shadow 0.15s ease, transform 0.1s ease;}.pie-tool-tts-inline__trigger.svelte-18mzc0g:hover:not(:disabled),\n .pie-tool-tts-inline__control.svelte-18mzc0g:hover:not(:disabled) {background-color:var(--pie-button-hover-background-color, var(--pie-secondary-background, #f2f4f8));transform:translateY(-1px);box-shadow:0 2px 6px color-mix(in srgb, var(--pie-shadow, #000) 14%, transparent);}.pie-tool-tts-inline__trigger.svelte-18mzc0g:active:not(:disabled),\n .pie-tool-tts-inline__control.svelte-18mzc0g:active:not(:disabled) {transform:translateY(0);box-shadow:none;}.pie-tool-tts-inline__trigger.svelte-18mzc0g:focus-visible,\n .pie-tool-tts-inline__control.svelte-18mzc0g:focus-visible {outline:2px solid var(--pie-focus-outline, var(--pie-button-focus-outline, var(--pie-primary, #0066cc)));outline-offset:2px;box-shadow:0 0 0 4px color-mix(in srgb, var(--pie-primary, #0066cc) 22%, transparent);}.pie-tool-tts-inline__trigger--active.svelte-18mzc0g {border-color:var(--pie-primary, #1565c0);background-color:color-mix(in srgb, var(--pie-primary, #1565c0) 10%, var(--pie-background, #fff));}.pie-tool-tts-inline__panel.svelte-18mzc0g {display:inline-flex;flex-wrap:nowrap;align-items:center;justify-content:flex-end;gap:0.25rem;box-sizing:border-box;height:var(--pie-tts-controls-row-height, 2.875rem);padding:0 0.5rem;background:var(--pie-surface, var(--pie-background, #fff));border:1px solid var(--pie-border, #d0d0d0);border-radius:0.5rem;}.pie-tool-tts-inline__panel--floating.svelte-18mzc0g {position:absolute;z-index:2;top:100%;right:0;left:auto;}.pie-tool-tts-inline__panel--left-aligned-inline.svelte-18mzc0g {position:static;margin-right:0.5rem;}.pie-tool-tts-inline__panel--row.svelte-18mzc0g {position:absolute;z-index:2;top:100%;right:0;left:auto;}.pie-tool-tts-inline__control.svelte-18mzc0g {display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:1px solid var(--pie-button-border-color, var(--pie-border, #c6c6c6));border-radius:0.25rem;background:var(--pie-button-background-color, var(--pie-background, #fff));color:var(--pie-button-color, var(--pie-text, #222));cursor:pointer;transition:background-color 0.15s ease, box-shadow 0.15s ease, transform 0.1s ease;}.pie-tool-tts-inline__control--speed.svelte-18mzc0g {font-size:0.6875rem;font-weight:400;letter-spacing:0;white-space:nowrap;}.pie-tool-tts-inline__control--speed-active.svelte-18mzc0g {border-color:var(--pie-primary, #1565c0);background:color-mix(in srgb, var(--pie-primary, #1565c0) 14%, var(--pie-background, #fff));color:var(--pie-primary, #1565c0);font-weight:600;}.pie-tool-tts-inline__trigger.svelte-18mzc0g:disabled,\n .pie-tool-tts-inline__control.svelte-18mzc0g:disabled {cursor:not-allowed;opacity:0.6;}.pie-tool-tts-inline__trigger--sm.svelte-18mzc0g {width:1.75rem;height:1.75rem;}.pie-tool-tts-inline__trigger--sm.svelte-18mzc0g .pie-tool-tts-inline__icon:where(.svelte-18mzc0g) {width:1rem;height:1rem;}.pie-tool-tts-inline__trigger--md.svelte-18mzc0g {width:2rem;height:2rem;}.pie-tool-tts-inline__trigger--md.svelte-18mzc0g .pie-tool-tts-inline__icon:where(.svelte-18mzc0g) {width:1.25rem;height:1.25rem;}.pie-tool-tts-inline__trigger--lg.svelte-18mzc0g {width:2.5rem;height:2.5rem;}.pie-tool-tts-inline__trigger--lg.svelte-18mzc0g .pie-tool-tts-inline__icon:where(.svelte-18mzc0g) {width:1.5rem;height:1.5rem;}.pie-tool-tts-inline__icon.svelte-18mzc0g {\n /* Default explicit size so control-button icons (rewind/fast-forward/stop)\n render in WebKit, which sizes an inline SVG that has only a viewBox (no\n width/height attributes) to 0. The play/pause trigger icon already works\n because the __trigger--sm/md/lg rules below set these dimensions; this\n gives the control-panel icons the same treatment. Keep the SVG's default\n inline display — forcing display:block makes WebKit collapse it to 0. */width:1.25rem;height:1.25rem;fill:currentColor;color:currentColor;}.pie-sr-only.svelte-18mzc0g {position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;}\n\n @media (prefers-reduced-motion: reduce) {.pie-tool-tts-inline__trigger.svelte-18mzc0g,\n .pie-tool-tts-inline__control.svelte-18mzc0g {transition:none !important;}\n }"
2304
+ code: ".pie-tool-tts-inline.svelte-18mzc0g {position:relative;display:inline-flex;align-items:center;}.pie-tool-tts-inline--controls-row.svelte-18mzc0g {width:100%;justify-content:flex-end;}.pie-tool-tts-inline__trigger.svelte-18mzc0g {display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:1px solid var(--pie-button-border-color, var(--pie-button-border, var(--pie-border, #c6c6c6)));background-color:var(--pie-button-background-color, var(--pie-button-bg, var(--pie-background, #fff)));color:var(--pie-button-color, var(--pie-text, #333));border-radius:0.25rem;cursor:pointer;transition:background-color 0.15s ease, box-shadow 0.15s ease, transform 0.1s ease;}.pie-tool-tts-inline__trigger.svelte-18mzc0g:hover:not(:disabled),\n .pie-tool-tts-inline__control.svelte-18mzc0g:hover:not(:disabled) {background-color:var(--pie-button-hover-background-color, var(--pie-button-hover-bg, var(--pie-secondary-background, #f2f4f8)));transform:translateY(-1px);box-shadow:0 2px 6px color-mix(in srgb, var(--pie-shadow, #000) 14%, transparent);}.pie-tool-tts-inline__trigger.svelte-18mzc0g:active:not(:disabled),\n .pie-tool-tts-inline__control.svelte-18mzc0g:active:not(:disabled) {transform:translateY(0);box-shadow:none;}.pie-tool-tts-inline__trigger.svelte-18mzc0g:focus-visible,\n .pie-tool-tts-inline__control.svelte-18mzc0g:focus-visible {outline:2px solid var(--pie-focus-outline, var(--pie-button-focus-outline, var(--pie-primary, #0066cc)));outline-offset:2px;box-shadow:0 0 0 4px color-mix(in srgb, var(--pie-primary, #0066cc) 22%, transparent);}.pie-tool-tts-inline__trigger--active.svelte-18mzc0g {border-color:var(--pie-tool-trigger-active-border-color, var(--pie-primary, #1565c0));background-color:var(\n --pie-tool-trigger-active-background,\n color-mix(in srgb, var(--pie-primary, #1565c0) 10%, var(--pie-background, #fff))\n );color:var(--pie-tool-trigger-active-color, var(--pie-button-color, var(--pie-text, #333)));}.pie-tool-tts-inline__trigger--active.svelte-18mzc0g:hover:not(:disabled) {border-color:var(--pie-tool-trigger-active-border-color, var(--pie-primary, #1565c0));background-color:var(\n --pie-tool-trigger-active-background,\n color-mix(in srgb, var(--pie-primary, #1565c0) 10%, var(--pie-background, #fff))\n );color:var(--pie-tool-trigger-active-color, var(--pie-button-color, var(--pie-text, #333)));}.pie-tool-tts-inline__panel.svelte-18mzc0g {display:inline-flex;flex-wrap:nowrap;align-items:center;justify-content:flex-end;gap:0.25rem;box-sizing:border-box;height:var(--pie-tts-controls-row-height, 2.875rem);padding:0 0.5rem;background:var(--pie-surface, var(--pie-background, #fff));border:1px solid var(--pie-border, #d0d0d0);border-radius:0.5rem;}.pie-tool-tts-inline__panel--floating.svelte-18mzc0g {position:absolute;z-index:2;top:100%;right:0;left:auto;}.pie-tool-tts-inline__panel--left-aligned-inline.svelte-18mzc0g {position:static;margin-right:0.5rem;}.pie-tool-tts-inline__panel--row.svelte-18mzc0g {position:absolute;z-index:2;top:100%;right:0;left:auto;}.pie-tool-tts-inline__control.svelte-18mzc0g {display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:1px solid var(--pie-button-border-color, var(--pie-button-border, var(--pie-border, #c6c6c6)));border-radius:0.25rem;background:var(--pie-button-background-color, var(--pie-button-bg, var(--pie-background, #fff)));color:var(--pie-button-color, var(--pie-text, #222));cursor:pointer;transition:background-color 0.15s ease, box-shadow 0.15s ease, transform 0.1s ease;}.pie-tool-tts-inline__control--speed.svelte-18mzc0g {font-size:0.6875rem;font-weight:400;letter-spacing:0;white-space:nowrap;}.pie-tool-tts-inline__control--speed-active.svelte-18mzc0g {border-color:var(--pie-primary, #1565c0);background:color-mix(in srgb, var(--pie-primary, #1565c0) 14%, var(--pie-background, #fff));color:var(--pie-primary, #1565c0);font-weight:600;}.pie-tool-tts-inline__trigger.svelte-18mzc0g:disabled,\n .pie-tool-tts-inline__control.svelte-18mzc0g:disabled {cursor:not-allowed;opacity:0.6;}.pie-tool-tts-inline__trigger--sm.svelte-18mzc0g {width:1.75rem;height:1.75rem;}.pie-tool-tts-inline__trigger--sm.svelte-18mzc0g .pie-tool-tts-inline__icon:where(.svelte-18mzc0g) {width:1rem;height:1rem;}.pie-tool-tts-inline__trigger--md.svelte-18mzc0g {width:2rem;height:2rem;}.pie-tool-tts-inline__trigger--md.svelte-18mzc0g .pie-tool-tts-inline__icon:where(.svelte-18mzc0g) {width:1.25rem;height:1.25rem;}.pie-tool-tts-inline__trigger--lg.svelte-18mzc0g {width:2.5rem;height:2.5rem;}.pie-tool-tts-inline__trigger--lg.svelte-18mzc0g .pie-tool-tts-inline__icon:where(.svelte-18mzc0g) {width:1.5rem;height:1.5rem;}.pie-tool-tts-inline__icon.svelte-18mzc0g {\n /* Default explicit size so control-button icons (rewind/fast-forward/stop)\n render in WebKit, which sizes an inline SVG that has only a viewBox (no\n width/height attributes) to 0. The play/pause trigger icon already works\n because the __trigger--sm/md/lg rules below set these dimensions; this\n gives the control-panel icons the same treatment. Keep the SVG's default\n inline display — forcing display:block makes WebKit collapse it to 0. */width:1.25rem;height:1.25rem;fill:currentColor;color:currentColor;}.pie-sr-only.svelte-18mzc0g {position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;}\n\n @media (prefers-reduced-motion: reduce) {.pie-tool-tts-inline__trigger.svelte-18mzc0g,\n .pie-tool-tts-inline__control.svelte-18mzc0g {transition:none !important;}\n }"
2305
2305
  };
2306
2306
  function _i(o, s) {
2307
2307
  We(s, !0), Ur(o, gi);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-players/pie-tool-tts-inline",
3
- "version": "0.3.52",
3
+ "version": "0.3.53",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "main": "./dist/tool-tts-inline.js",
@@ -27,12 +27,13 @@
27
27
  "scripts": {
28
28
  "build": "vite build",
29
29
  "dev": "vite build --watch",
30
+ "test": "bun test tests",
30
31
  "typecheck": "tsc --noEmit",
31
32
  "lint": "biome check ."
32
33
  },
33
34
  "dependencies": {
34
- "@pie-players/pie-assessment-toolkit": "0.3.52",
35
- "@pie-players/pie-context": "0.3.52"
35
+ "@pie-players/pie-assessment-toolkit": "0.3.53",
36
+ "@pie-players/pie-context": "0.3.53"
36
37
  },
37
38
  "devDependencies": {
38
39
  "@biomejs/biome": "^2.4.12",