@pie-players/pie-section-player 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +122 -5
  2. package/dist/components/section-player-item-card-element.d.ts +2 -0
  3. package/dist/components/section-player-item-card-element.d.ts.map +1 -0
  4. package/dist/components/section-player-items-pane-element.d.ts +2 -0
  5. package/dist/components/section-player-items-pane-element.d.ts.map +1 -0
  6. package/dist/components/section-player-kernel-host-element.d.ts +2 -0
  7. package/dist/components/section-player-kernel-host-element.d.ts.map +1 -0
  8. package/dist/components/section-player-passage-card-element.d.ts +2 -0
  9. package/dist/components/section-player-passage-card-element.d.ts.map +1 -0
  10. package/dist/components/section-player-passages-pane-element.d.ts +2 -0
  11. package/dist/components/section-player-passages-pane-element.d.ts.map +1 -0
  12. package/dist/components/section-player-shell-element.d.ts +2 -0
  13. package/dist/components/section-player-shell-element.d.ts.map +1 -0
  14. package/dist/components/shared/outer-scrollbars.d.ts +6 -0
  15. package/dist/components/shared/outer-scrollbars.d.ts.map +1 -0
  16. package/dist/components/shared/player-action.d.ts +1 -0
  17. package/dist/components/shared/player-action.d.ts.map +1 -1
  18. package/dist/components/shared/player-preload.d.ts +5 -0
  19. package/dist/components/shared/player-preload.d.ts.map +1 -1
  20. package/dist/components/shared/section-player-card-context.d.ts +15 -0
  21. package/dist/components/shared/section-player-card-context.d.ts.map +1 -0
  22. package/dist/components/shared/section-player-props.d.ts +2 -0
  23. package/dist/components/shared/section-player-props.d.ts.map +1 -0
  24. package/dist/components/shared/section-player-readiness.d.ts +14 -0
  25. package/dist/components/shared/section-player-readiness.d.ts.map +1 -0
  26. package/dist/components/shared/section-player-runtime.d.ts +4 -4
  27. package/dist/components/shared/section-player-runtime.d.ts.map +1 -1
  28. package/dist/components/shared/section-player-view-state.d.ts +9 -0
  29. package/dist/components/shared/section-player-view-state.d.ts.map +1 -1
  30. package/dist/contracts/layout-contract.d.ts +18 -0
  31. package/dist/contracts/layout-contract.d.ts.map +1 -0
  32. package/dist/contracts/layout-parity-metadata.d.ts +4 -0
  33. package/dist/contracts/layout-parity-metadata.d.ts.map +1 -0
  34. package/dist/contracts/public-events.d.ts +25 -0
  35. package/dist/contracts/public-events.d.ts.map +1 -0
  36. package/dist/contracts/runtime-host-contract.d.ts +29 -0
  37. package/dist/contracts/runtime-host-contract.d.ts.map +1 -0
  38. package/dist/controllers/SectionController.d.ts +2 -0
  39. package/dist/controllers/SectionController.d.ts.map +1 -1
  40. package/dist/controllers/types.d.ts +21 -12
  41. package/dist/controllers/types.d.ts.map +1 -1
  42. package/dist/{index-C1goqVqV-DS7afZzq.js → index-BZq66Ke6-D8dZwpj4.js} +15064 -18442
  43. package/dist/index-CGEKDUBQ-C-8EFMUk.js +216 -0
  44. package/dist/index-DF-Dk87f-lxErM8bo.js +178 -0
  45. package/dist/pie-section-player.d.ts +7 -0
  46. package/dist/pie-section-player.d.ts.map +1 -1
  47. package/dist/pie-section-player.js +8474 -14014
  48. package/dist/player-preload-Dj2ELq_u.js +6845 -0
  49. package/dist/policies/guards.d.ts +3 -0
  50. package/dist/policies/guards.d.ts.map +1 -0
  51. package/dist/policies/index.d.ts +3 -0
  52. package/dist/policies/index.d.ts.map +1 -0
  53. package/dist/policies/types.d.ts +23 -0
  54. package/dist/policies/types.d.ts.map +1 -0
  55. package/dist/tool-annotation-toolbar-DJvpXk1K.js +4917 -0
  56. package/dist/utils/player-preload.js +1 -1
  57. package/package.json +54 -13
  58. package/dist/index-C1goqVqV.js +0 -69344
  59. package/dist/player-preload-CQVG0Bih.js +0 -705
  60. package/dist/tool-annotation-toolbar-m4Mv2j0H.js +0 -4305
  61. package/src/components/ItemShellElement.svelte +0 -302
  62. package/src/components/PassageShellElement.svelte +0 -217
  63. package/src/components/PieSectionPlayerBaseElement.svelte +0 -245
  64. package/src/components/PieSectionPlayerSplitPaneElement.svelte +0 -675
  65. package/src/components/PieSectionPlayerVerticalElement.svelte +0 -439
  66. package/src/components/shared/SectionItemCard.svelte +0 -92
  67. package/src/components/shared/SectionPassageCard.svelte +0 -88
@@ -1,675 +0,0 @@
1
- <svelte:options
2
- customElement={{
3
- tag: "pie-section-player-splitpane",
4
- // Use light DOM so item-player/runtime styles can cascade into rendered item content.
5
- shadow: "none",
6
- props: {
7
- assessmentId: { attribute: "assessment-id", type: "String" },
8
- runtime: { type: "Object", reflect: false },
9
- section: { type: "Object", reflect: false },
10
- sectionId: { attribute: "section-id", type: "String" },
11
- attemptId: { attribute: "attempt-id", type: "String" },
12
- playerType: { attribute: "player-type", type: "String" },
13
- player: { type: "Object", reflect: false },
14
- lazyInit: { attribute: "lazy-init", type: "Boolean" },
15
- tools: { type: "Object", reflect: false },
16
- accessibility: { type: "Object", reflect: false },
17
- coordinator: { type: "Object", reflect: false },
18
- createSectionController: { type: "Object", reflect: false },
19
- isolation: { attribute: "isolation", type: "String" },
20
- env: { type: "Object", reflect: false },
21
- iifeBundleHost: { attribute: "iife-bundle-host", type: "String" },
22
- showToolbar: { attribute: "show-toolbar", type: "String" },
23
- toolbarPosition: { attribute: "toolbar-position", type: "String" },
24
- enabledTools: { attribute: "enabled-tools", type: "String" },
25
- itemToolbarTools: { attribute: "item-toolbar-tools", type: "String" },
26
- passageToolbarTools: { attribute: "passage-toolbar-tools", type: "String" },
27
- },
28
- }}
29
- />
30
-
31
- <script lang="ts">
32
- import { onMount } from "svelte";
33
- import "./section-player-base-element.js";
34
- import * as SectionItemCardModule from "./shared/SectionItemCard.svelte";
35
- import * as SectionPassageCardModule from "./shared/SectionPassageCard.svelte";
36
- import "@pie-players/pie-toolbars/components/section-toolbar-element";
37
- import type { Component } from "svelte";
38
- import type { SectionCompositionModel } from "../controllers/types.js";
39
- import type { AssessmentSection } from "@pie-players/pie-players-shared/types";
40
- import {
41
- EMPTY_COMPOSITION,
42
- } from "./shared/composition.js";
43
- import {
44
- createPlayerAction,
45
- } from "./shared/player-action.js";
46
- import {
47
- getRenderablesSignature,
48
- orchestratePlayerElementPreload,
49
- type PlayerPreloadState,
50
- } from "./shared/player-preload.js";
51
- import {
52
- getCanonicalItemId,
53
- getCompositionFromEvent,
54
- getItemPlayerParams,
55
- getPassagePlayerParams,
56
- } from "./shared/section-player-view-state.js";
57
- import {
58
- type RuntimeConfig,
59
- mapRenderablesToItems,
60
- resolveSectionPlayerRuntimeState,
61
- } from "./shared/section-player-runtime.js";
62
-
63
- const SectionItemCard = (
64
- SectionItemCardModule as unknown as { default: Component<any, any, any> }
65
- ).default;
66
- const SectionPassageCard = (
67
- SectionPassageCardModule as unknown as {
68
- default: Component<any, any, any>;
69
- }
70
- ).default;
71
-
72
- let {
73
- assessmentId,
74
- runtime = null as RuntimeConfig | null,
75
- section = null as AssessmentSection | null,
76
- sectionId = "",
77
- attemptId = "",
78
- playerType,
79
- player,
80
- lazyInit,
81
- tools,
82
- accessibility,
83
- coordinator,
84
- createSectionController,
85
- isolation,
86
- env,
87
- iifeBundleHost,
88
- showToolbar = "false" as boolean | string | null | undefined,
89
- toolbarPosition = "right",
90
- enabledTools = "",
91
- itemToolbarTools = "",
92
- passageToolbarTools = "",
93
- } = $props();
94
-
95
- function resolveToolbarVisibility(value: boolean | string | null | undefined): boolean {
96
- if (typeof value === "boolean") {
97
- return value;
98
- }
99
- if (value === null || value === undefined) {
100
- return true;
101
- }
102
- const normalizedValue = String(value).trim().toLowerCase();
103
- if (normalizedValue === "") {
104
- return true;
105
- }
106
- if (["false", "0", "off", "no"].includes(normalizedValue)) {
107
- return false;
108
- }
109
- if (["true", "1", "on", "yes"].includes(normalizedValue)) {
110
- return true;
111
- }
112
- return Boolean(normalizedValue);
113
- }
114
-
115
- const MANAGED_OUTER_SCROLL_CLASS = "pie-outer-scrollbars-managed";
116
- const ACTIVE_OUTER_SCROLL_CLASS = "pie-outer-scrolling";
117
-
118
- let compositionModel = $state<SectionCompositionModel>(EMPTY_COMPOSITION);
119
- let leftPanelWidth = $state(50);
120
- let isDragging = $state(false);
121
- let splitContainerElement = $state<HTMLDivElement | null>(null);
122
- let elementsLoaded = $state(false);
123
- let lastPreloadSignature = $state("");
124
- let preloadRunToken = $state(0);
125
-
126
- const passages = $derived(compositionModel.passages || []);
127
- const items = $derived(compositionModel.items || []);
128
- const hasPassages = $derived(passages.length > 0);
129
- const shouldRenderToolbar = $derived(
130
- resolveToolbarVisibility(showToolbar) && toolbarPosition !== "none",
131
- );
132
- const toolbarBeforeContent = $derived(
133
- toolbarPosition === "top" || toolbarPosition === "left",
134
- );
135
- const toolbarInline = $derived(toolbarPosition === "left" || toolbarPosition === "right");
136
- const preloadedRenderables = $derived.by(() =>
137
- mapRenderablesToItems(compositionModel.renderables || []),
138
- );
139
- const preloadedRenderablesSignature = $derived.by(() =>
140
- getRenderablesSignature(compositionModel.renderables || []),
141
- );
142
- const runtimeState = $derived.by(() =>
143
- resolveSectionPlayerRuntimeState({
144
- assessmentId,
145
- playerType,
146
- player,
147
- lazyInit,
148
- tools,
149
- accessibility,
150
- coordinator,
151
- createSectionController,
152
- isolation,
153
- env,
154
- runtime,
155
- enabledTools,
156
- itemToolbarTools,
157
- passageToolbarTools,
158
- }),
159
- );
160
- const effectiveRuntime = $derived(runtimeState.effectiveRuntime);
161
- const playerRuntime = $derived(runtimeState.playerRuntime);
162
- const resolvedPlayerDefinition = $derived(playerRuntime.resolvedPlayerDefinition);
163
- const resolvedPlayerTag = $derived(playerRuntime.resolvedPlayerTag);
164
- const resolvedPlayerAttributes = $derived(playerRuntime.resolvedPlayerAttributes);
165
- const resolvedPlayerProps = $derived(playerRuntime.resolvedPlayerProps);
166
- const resolvedPlayerEnv = $derived(playerRuntime.resolvedPlayerEnv);
167
- const playerStrategy = $derived(playerRuntime.strategy);
168
- const splitPanePlayerAction = createPlayerAction({
169
- stateKey: "__splitPaneAppliedParams",
170
- setSkipElementLoadingOnce: true,
171
- includeSessionRefInState: true,
172
- });
173
-
174
- function handleBaseCompositionChanged(event: Event) {
175
- compositionModel = getCompositionFromEvent(event);
176
- }
177
-
178
- function handleDividerMouseDown(event: MouseEvent) {
179
- event.preventDefault();
180
- isDragging = true;
181
- document.body.style.cursor = "col-resize";
182
- document.body.style.userSelect = "none";
183
- }
184
-
185
- function handleDividerMouseMove(event: MouseEvent) {
186
- if (!isDragging || !splitContainerElement) return;
187
- const containerRect = splitContainerElement.getBoundingClientRect();
188
- const offsetX = event.clientX - containerRect.left;
189
- const newWidth = (offsetX / containerRect.width) * 100;
190
- if (newWidth >= 20 && newWidth <= 80) {
191
- leftPanelWidth = newWidth;
192
- }
193
- }
194
-
195
- function handleDividerMouseUp() {
196
- if (!isDragging) return;
197
- isDragging = false;
198
- document.body.style.cursor = "";
199
- document.body.style.userSelect = "";
200
- }
201
-
202
- function handleDividerKeyDown(event: KeyboardEvent) {
203
- const step = 5;
204
- if (event.key === "ArrowLeft") {
205
- event.preventDefault();
206
- leftPanelWidth = Math.max(20, leftPanelWidth - step);
207
- }
208
- if (event.key === "ArrowRight") {
209
- event.preventDefault();
210
- leftPanelWidth = Math.min(80, leftPanelWidth + step);
211
- }
212
- }
213
-
214
- $effect(() => {
215
- if (!isDragging) return;
216
- window.addEventListener("mousemove", handleDividerMouseMove);
217
- window.addEventListener("mouseup", handleDividerMouseUp);
218
- return () => {
219
- window.removeEventListener("mousemove", handleDividerMouseMove);
220
- window.removeEventListener("mouseup", handleDividerMouseUp);
221
- };
222
- });
223
-
224
- $effect(() => {
225
- resolvedPlayerDefinition?.ensureDefined?.().catch((error) => {
226
- console.error("[pie-section-player-splitpane] Failed to load item player component:", error);
227
- });
228
- });
229
-
230
- $effect(() => {
231
- orchestratePlayerElementPreload({
232
- componentTag: "pie-section-player-splitpane",
233
- strategy: playerStrategy,
234
- renderables: preloadedRenderables,
235
- renderablesSignature: preloadedRenderablesSignature,
236
- resolvedPlayerProps: resolvedPlayerProps as Record<string, unknown>,
237
- resolvedPlayerEnv: resolvedPlayerEnv as Record<string, unknown>,
238
- iifeBundleHost,
239
- getState: () =>
240
- ({
241
- lastPreloadSignature,
242
- preloadRunToken,
243
- elementsLoaded,
244
- }) as PlayerPreloadState,
245
- setState: (next) => {
246
- if (next.lastPreloadSignature !== undefined) {
247
- lastPreloadSignature = next.lastPreloadSignature;
248
- }
249
- if (next.preloadRunToken !== undefined) {
250
- preloadRunToken = next.preloadRunToken;
251
- }
252
- if (next.elementsLoaded !== undefined) {
253
- elementsLoaded = next.elementsLoaded;
254
- }
255
- },
256
- });
257
- });
258
-
259
- onMount(() => {
260
- let scrollTimeout: ReturnType<typeof setTimeout> | null = null;
261
- const html = document.documentElement;
262
- const body = document.body;
263
-
264
- html.classList.add(MANAGED_OUTER_SCROLL_CLASS);
265
- body.classList.add(MANAGED_OUTER_SCROLL_CLASS);
266
-
267
- const showOuterScrollbars = () => {
268
- html.classList.add(ACTIVE_OUTER_SCROLL_CLASS);
269
- body.classList.add(ACTIVE_OUTER_SCROLL_CLASS);
270
- if (scrollTimeout) {
271
- clearTimeout(scrollTimeout);
272
- }
273
- scrollTimeout = setTimeout(() => {
274
- html.classList.remove(ACTIVE_OUTER_SCROLL_CLASS);
275
- body.classList.remove(ACTIVE_OUTER_SCROLL_CLASS);
276
- }, 900);
277
- };
278
-
279
- window.addEventListener("scroll", showOuterScrollbars, { passive: true });
280
- return () => {
281
- window.removeEventListener("scroll", showOuterScrollbars);
282
- html.classList.remove(ACTIVE_OUTER_SCROLL_CLASS);
283
- body.classList.remove(ACTIVE_OUTER_SCROLL_CLASS);
284
- html.classList.remove(MANAGED_OUTER_SCROLL_CLASS);
285
- body.classList.remove(MANAGED_OUTER_SCROLL_CLASS);
286
- if (scrollTimeout) {
287
- clearTimeout(scrollTimeout);
288
- }
289
- };
290
- });
291
-
292
- </script>
293
-
294
- <pie-section-player-base
295
- runtime={effectiveRuntime}
296
- {section}
297
- section-id={sectionId}
298
- attempt-id={attemptId}
299
- oncomposition-changed={handleBaseCompositionChanged}
300
- >
301
- <div
302
- class={`pie-section-player-shell pie-section-player-shell--${toolbarPosition}`}
303
- >
304
- {#if shouldRenderToolbar && toolbarBeforeContent}
305
- <pie-section-toolbar
306
- class={`pie-section-player-toolbar pie-section-player-toolbar--${toolbarPosition}`}
307
- position={toolbarPosition}
308
- enabled-tools={enabledTools}
309
- ></pie-section-toolbar>
310
- {/if}
311
-
312
- <div
313
- class={`pie-section-player-layout-body ${shouldRenderToolbar && toolbarInline ? "pie-section-player-layout-body--inline" : ""}`}
314
- >
315
- <div
316
- class={`pie-section-player-split-content ${!hasPassages ? "pie-section-player-split-content--no-passages" : ""}`}
317
- bind:this={splitContainerElement}
318
- style={hasPassages
319
- ? `grid-template-columns: ${leftPanelWidth}% 0.5rem ${100 - leftPanelWidth - 0.5}%`
320
- : "grid-template-columns: 1fr"}
321
- >
322
- {#if hasPassages}
323
- <aside class="pie-section-player-passages-pane" aria-label="Passages">
324
- {#if !elementsLoaded}
325
- <div class="pie-section-player-content-card">
326
- <div
327
- class="pie-section-player-content-card-body pie-section-player-passage-content pie-section-player__passage-content"
328
- >
329
- Loading passage content...
330
- </div>
331
- </div>
332
- {:else}
333
- {#each passages as passage, passageIndex (passage.id || passageIndex)}
334
- <SectionPassageCard
335
- {passage}
336
- {resolvedPlayerTag}
337
- playerAction={splitPanePlayerAction}
338
- playerParams={getPassagePlayerParams({
339
- passage,
340
- resolvedPlayerEnv,
341
- resolvedPlayerAttributes,
342
- resolvedPlayerProps,
343
- playerStrategy,
344
- })}
345
- {passageToolbarTools}
346
- />
347
- {/each}
348
- {/if}
349
- </aside>
350
-
351
- <button
352
- type="button"
353
- class={`pie-section-player-split-divider ${isDragging ? "pie-section-player-split-divider--dragging" : ""}`}
354
- onmousedown={handleDividerMouseDown}
355
- onkeydown={handleDividerKeyDown}
356
- aria-label="Resize panels"
357
- >
358
- <span class="pie-section-player-split-divider-handle"></span>
359
- </button>
360
- {/if}
361
-
362
- <main class="pie-section-player-items-pane" aria-label="Items">
363
- {#if !elementsLoaded}
364
- <div class="pie-section-player-content-card">
365
- <div
366
- class="pie-section-player-content-card-body pie-section-player-item-content pie-section-player__item-content"
367
- >
368
- Loading section content...
369
- </div>
370
- </div>
371
- {:else}
372
- {#each items as item, itemIndex (item.id || itemIndex)}
373
- <SectionItemCard
374
- {item}
375
- canonicalItemId={getCanonicalItemId({ compositionModel, item })}
376
- {resolvedPlayerTag}
377
- playerAction={splitPanePlayerAction}
378
- playerParams={getItemPlayerParams({
379
- item,
380
- compositionModel,
381
- resolvedPlayerEnv,
382
- resolvedPlayerAttributes,
383
- resolvedPlayerProps,
384
- playerStrategy,
385
- })}
386
- {itemToolbarTools}
387
- />
388
- {/each}
389
- {/if}
390
- </main>
391
- </div>
392
-
393
- {#if shouldRenderToolbar && toolbarInline && toolbarPosition === "right"}
394
- <aside
395
- class="pie-section-player-toolbar-pane pie-section-player-toolbar-pane--right"
396
- aria-label="Section tools"
397
- >
398
- <pie-section-toolbar
399
- position="right"
400
- enabled-tools={enabledTools}
401
- ></pie-section-toolbar>
402
- </aside>
403
- {/if}
404
-
405
- {#if shouldRenderToolbar && toolbarInline && toolbarPosition === "left"}
406
- <aside
407
- class="pie-section-player-toolbar-pane pie-section-player-toolbar-pane--left"
408
- aria-label="Section tools"
409
- >
410
- <pie-section-toolbar
411
- position="left"
412
- enabled-tools={enabledTools}
413
- ></pie-section-toolbar>
414
- </aside>
415
- {/if}
416
- </div>
417
-
418
- {#if shouldRenderToolbar && !toolbarBeforeContent && !toolbarInline}
419
- <pie-section-toolbar
420
- class={`pie-section-player-toolbar pie-section-player-toolbar--${toolbarPosition}`}
421
- position={toolbarPosition}
422
- enabled-tools={enabledTools}
423
- ></pie-section-toolbar>
424
- {/if}
425
- </div>
426
- </pie-section-player-base>
427
-
428
- <style>
429
- :host {
430
- display: block;
431
- width: 100%;
432
- height: 100%;
433
- min-height: 0;
434
- max-height: 100%;
435
- overflow: hidden;
436
- }
437
-
438
- .pie-section-player-shell {
439
- display: flex;
440
- flex-direction: column;
441
- height: 100%;
442
- min-height: 0;
443
- overflow: hidden;
444
- background: var(--pie-background-dark, #ecedf1);
445
- }
446
-
447
- .pie-section-player-shell--left,
448
- .pie-section-player-shell--right {
449
- flex-direction: row;
450
- }
451
-
452
- .pie-section-player-shell--left .pie-section-player-layout-body--inline {
453
- order: 2;
454
- }
455
-
456
- .pie-section-player-shell--left .pie-section-player-toolbar-pane--left {
457
- order: 1;
458
- }
459
-
460
- .pie-section-player-layout-body {
461
- display: grid;
462
- grid-template-columns: minmax(0, 1fr);
463
- flex: 1;
464
- min-height: 0;
465
- overflow: hidden;
466
- background: var(--pie-background-dark, #ecedf1);
467
- }
468
-
469
- .pie-section-player-layout-body--inline {
470
- grid-template-columns: minmax(0, 1fr) auto;
471
- gap: 1rem;
472
- }
473
-
474
- .pie-section-player-split-content {
475
- display: grid;
476
- gap: 0;
477
- min-height: 0;
478
- height: 100%;
479
- overflow: hidden;
480
- }
481
-
482
- .pie-section-player-split-content--no-passages .pie-section-player-items-pane {
483
- padding-left: 0.5rem;
484
- }
485
-
486
- .pie-section-player-passages-pane,
487
- .pie-section-player-items-pane {
488
- height: 100%;
489
- max-height: 100%;
490
- min-height: 0;
491
- min-width: 0;
492
- overflow-y: auto;
493
- overflow-x: hidden;
494
- overscroll-behavior: contain;
495
- display: flex;
496
- flex-direction: column;
497
- gap: 1rem;
498
- padding: 0.5rem;
499
- box-sizing: border-box;
500
- background: var(--pie-background-dark, #ecedf1);
501
- }
502
-
503
- .pie-section-player-toolbar-pane {
504
- min-height: 0;
505
- overflow: auto;
506
- padding: 0.5rem;
507
- box-sizing: border-box;
508
- background: var(--pie-background-dark, #ecedf1);
509
- }
510
-
511
- .pie-section-player-toolbar-pane--right {
512
- border-left: 1px solid var(--pie-border-light, #e5e7eb);
513
- }
514
-
515
- .pie-section-player-toolbar-pane--left {
516
- border-right: 1px solid var(--pie-border-light, #e5e7eb);
517
- }
518
-
519
- .pie-section-player-toolbar {
520
- margin: 0.5rem;
521
- }
522
-
523
- .pie-section-player-toolbar-pane pie-section-toolbar {
524
- margin: 0.5rem;
525
- }
526
-
527
- .pie-section-player-split-divider {
528
- border: none;
529
- padding: 0;
530
- margin: 0;
531
- font: inherit;
532
- align-self: stretch;
533
- height: 100%;
534
- min-height: 0;
535
- position: relative;
536
- cursor: col-resize;
537
- background: var(--pie-secondary-background, #f3f4f6);
538
- display: flex;
539
- align-items: center;
540
- justify-content: center;
541
- user-select: none;
542
- touch-action: none;
543
- transition: background 0.2s ease;
544
- }
545
-
546
- .pie-section-player-split-divider:hover {
547
- background: var(--pie-border-light, #e5e7eb);
548
- }
549
-
550
- .pie-section-player-split-divider:focus {
551
- outline: 2px solid var(--pie-focus-checked-border, #1976d2);
552
- outline-offset: -2px;
553
- }
554
-
555
- .pie-section-player-split-divider-handle {
556
- position: absolute;
557
- inset: 0;
558
- margin: auto;
559
- width: 6px;
560
- height: 60px;
561
- background: var(--pie-blue-grey-600, #9ca3af);
562
- border-radius: 3px;
563
- transition: all 0.2s ease;
564
- pointer-events: none;
565
- }
566
-
567
- .pie-section-player-split-divider-handle::before {
568
- content: "";
569
- position: absolute;
570
- top: 50%;
571
- left: 50%;
572
- transform: translate(-50%, -50%);
573
- width: 2px;
574
- height: 20px;
575
- background: var(--pie-white, white);
576
- border-radius: 1px;
577
- opacity: 0.8;
578
- }
579
-
580
- .pie-section-player-split-divider:hover .pie-section-player-split-divider-handle,
581
- .pie-section-player-split-divider:focus .pie-section-player-split-divider-handle,
582
- .pie-section-player-split-divider--dragging .pie-section-player-split-divider-handle {
583
- background: var(--pie-primary, #1976d2);
584
- height: 80px;
585
- box-shadow: 0 2px 8px rgba(25, 118, 210, 0.3);
586
- }
587
-
588
- .pie-section-player-split-divider--dragging {
589
- background: var(--pie-primary-light, #dbeafe);
590
- }
591
-
592
- .pie-section-player-content-card {
593
- border: 1px solid var(--pie-border-light, #e5e7eb);
594
- border-radius: 8px;
595
- background: var(--pie-background, #fff);
596
- }
597
-
598
- .pie-section-player-content-card-header {
599
- display: flex;
600
- align-items: center;
601
- justify-content: space-between;
602
- padding: 0.75rem 1rem;
603
- border-bottom: 1px solid var(--pie-border-light, #e5e7eb);
604
- }
605
-
606
- .pie-section-player-content-card-body {
607
- padding: 1rem;
608
- }
609
-
610
- :global(html.pie-outer-scrollbars-managed),
611
- :global(body.pie-outer-scrollbars-managed) {
612
- scrollbar-width: auto;
613
- scrollbar-color: transparent transparent;
614
- }
615
-
616
- :global(html.pie-outer-scrollbars-managed.pie-outer-scrolling),
617
- :global(body.pie-outer-scrollbars-managed.pie-outer-scrolling) {
618
- scrollbar-color: #c1c1c1 #f1f1f1;
619
- }
620
-
621
- :global(html.pie-outer-scrollbars-managed::-webkit-scrollbar),
622
- :global(body.pie-outer-scrollbars-managed::-webkit-scrollbar) {
623
- width: 0;
624
- height: 0;
625
- background: transparent;
626
- }
627
-
628
- :global(html.pie-outer-scrollbars-managed.pie-outer-scrolling::-webkit-scrollbar),
629
- :global(body.pie-outer-scrollbars-managed.pie-outer-scrolling::-webkit-scrollbar) {
630
- width: 8px;
631
- height: 8px;
632
- }
633
-
634
- :global(html.pie-outer-scrollbars-managed.pie-outer-scrolling::-webkit-scrollbar-track),
635
- :global(body.pie-outer-scrollbars-managed.pie-outer-scrolling::-webkit-scrollbar-track) {
636
- background: #f1f1f1;
637
- border-radius: 4px;
638
- }
639
-
640
- :global(html.pie-outer-scrollbars-managed.pie-outer-scrolling::-webkit-scrollbar-thumb),
641
- :global(body.pie-outer-scrollbars-managed.pie-outer-scrolling::-webkit-scrollbar-thumb) {
642
- background: #c1c1c1;
643
- border-radius: 4px;
644
- }
645
-
646
- :global(html.pie-outer-scrollbars-managed.pie-outer-scrolling::-webkit-scrollbar-thumb:hover),
647
- :global(body.pie-outer-scrollbars-managed.pie-outer-scrolling::-webkit-scrollbar-thumb:hover) {
648
- background: #a1a1a1;
649
- }
650
-
651
- @media (max-width: 1100px) {
652
- .pie-section-player-shell--left,
653
- .pie-section-player-shell--right {
654
- flex-direction: column;
655
- }
656
-
657
- .pie-section-player-layout-body--inline {
658
- grid-template-columns: 1fr;
659
- }
660
-
661
- .pie-section-player-split-content {
662
- grid-template-columns: 1fr !important;
663
- }
664
-
665
- .pie-section-player-split-divider {
666
- display: none;
667
- }
668
-
669
- .pie-section-player-toolbar-pane--left,
670
- .pie-section-player-toolbar-pane--right {
671
- border: none;
672
- padding: 0;
673
- }
674
- }
675
- </style>