taleem-player 1.0.0 → 1.0.2

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
@@ -100,15 +100,24 @@ player.renderAt(12.5);
100
100
 
101
101
  ## Utilities (Runtime-safe)
102
102
 
103
+
104
+ These **Utilities (Runtime-safe)** are exported :
105
+
103
106
  ```js
104
- import { assignMockTimings, resolveAssetPaths } from "taleem-player";
107
+ import {
108
+ assignMockTimings,
109
+ resolveAssetPaths,
110
+ resolveBackground,
111
+ getDeckEndTime
112
+ } from "taleem-player";
105
113
  ```
106
114
 
107
115
  * `assignMockTimings(deck, seconds)`
108
116
  * `resolveAssetPaths(deck, basePath)`
109
117
  * `resolveBackground(deck, basePath)`
118
+ * `getDeckEndTime(deck)`
110
119
 
111
- These helpers prepare decks for real usage.
120
+ These helpers prepare decks for real usage and runtime playback.
112
121
 
113
122
  ---
114
123
 
@@ -344,4 +344,67 @@
344
344
  .slide.table thead tr:has(th:empty) {
345
345
  display: none;
346
346
  }
347
+
348
+
349
+ /* -------------------------------
350
+ Corner Words Slide (4 Quadrants)
351
+ ------------------------------- */
352
+
353
+ .slide.cornerWordsSlide {
354
+ position: relative;
355
+ width: 100%;
356
+ height: 100vh;
357
+ padding: 0;
358
+ }
359
+
360
+ /* base card */
361
+ .cornerWordsSlide .corner-card {
362
+ position: absolute;
363
+ width: 45%;
364
+ height: 45%;
365
+
366
+ display: flex;
367
+ flex-direction: column;
368
+ justify-content: center;
369
+ align-items: center;
370
+ gap: 16px;
371
+
372
+ font-size: 4.2rem;
373
+ font-weight: 700;
374
+ letter-spacing: 0.02em;
375
+ text-align: center;
376
+ }
377
+
378
+ /* emoji / icon */
379
+ .cornerWordsSlide .corner-card .icon {
380
+ font-size: 5.2rem;
381
+ line-height: 1;
382
+ }
383
+
384
+ /* label text */
385
+ .cornerWordsSlide .corner-card .label {
386
+ font-size: 3.6rem;
387
+ font-weight: 600;
388
+ }
389
+
390
+ /* quadrants */
391
+ .cornerWordsSlide .corner-1 {
392
+ top: 0;
393
+ left: 0;
394
+ }
395
+
396
+ .cornerWordsSlide .corner-2 {
397
+ top: 0;
398
+ right: 0;
399
+ }
400
+
401
+ .cornerWordsSlide .corner-3 {
402
+ bottom: 0;
403
+ left: 0;
404
+ }
405
+
406
+ .cornerWordsSlide .corner-4 {
407
+ bottom: 0;
408
+ right: 0;
409
+ }
347
410
 
@@ -591,7 +591,7 @@ function getSlideTemplate(type) {
591
591
  }
592
592
 
593
593
  // src/engines/player/stage.js
594
- function createStage(mount) {
594
+ function createStage(mount, background = {}) {
595
595
  if (!mount) throw new Error("taleem-player: mount is required");
596
596
  const root = typeof mount === "string" ? document.querySelector(mount) : mount;
597
597
  if (!root) throw new Error("taleem-player: mount element not found");
@@ -601,15 +601,41 @@ function createStage(mount) {
601
601
  stage.style.position = "relative";
602
602
  stage.style.width = "100%";
603
603
  stage.style.height = "100%";
604
+ stage.style.overflow = "hidden";
605
+ const bgLayer = document.createElement("div");
606
+ bgLayer.className = "taleem-player-bg";
607
+ bgLayer.style.position = "absolute";
608
+ bgLayer.style.inset = "0";
609
+ bgLayer.style.zIndex = "0";
610
+ bgLayer.style.backgroundRepeat = "no-repeat";
611
+ bgLayer.style.backgroundSize = "cover";
612
+ bgLayer.style.backgroundPosition = "center";
613
+ if (background.backgroundColor) {
614
+ bgLayer.style.backgroundColor = background.backgroundColor;
615
+ }
616
+ if (background.backgroundImage) {
617
+ bgLayer.style.backgroundImage = `url("${background.backgroundImage}")`;
618
+ }
619
+ if (typeof background.backgroundImageOpacity === "number" && background.backgroundImageOpacity < 1) {
620
+ bgLayer.style.opacity = String(background.backgroundImageOpacity);
621
+ }
622
+ const slideLayer = document.createElement("div");
623
+ slideLayer.className = "taleem-player-slides";
624
+ slideLayer.style.position = "relative";
625
+ slideLayer.style.zIndex = "1";
626
+ slideLayer.style.width = "100%";
627
+ slideLayer.style.height = "100%";
628
+ stage.appendChild(bgLayer);
629
+ stage.appendChild(slideLayer);
604
630
  root.appendChild(stage);
605
631
  function clear() {
606
- stage.innerHTML = "";
632
+ slideLayer.innerHTML = "";
607
633
  }
608
634
  function destroy() {
609
635
  root.innerHTML = "";
610
636
  }
611
637
  return {
612
- el: stage,
638
+ el: slideLayer,
613
639
  clear,
614
640
  destroy
615
641
  };
@@ -617,7 +643,7 @@ function createStage(mount) {
617
643
 
618
644
  // src/engines/player/player.js
619
645
  function createTaleemPlayer({ mount, deck }) {
620
- const stage = createStage(mount);
646
+ const stage = createStage(mount, deck.background);
621
647
  let lastSlide = null;
622
648
  let lastRenderedKey = null;
623
649
  function getSlideAtTime(deck2, time) {
@@ -785,10 +811,19 @@ function resolveBackground2(deck, ASSET_BASE) {
785
811
  }
786
812
  return deck;
787
813
  }
814
+
815
+ // src/utils/getDeckEndTime.js
816
+ function getDeckEndTime(deck) {
817
+ if (!deck || !deck.deck || deck.deck.length === 0) {
818
+ return 0;
819
+ }
820
+ return deck.deck[deck.deck.length - 1].end;
821
+ }
788
822
  export {
789
823
  assignMockTimings,
790
824
  createTaleemBrowser,
791
825
  createTaleemPlayer,
826
+ getDeckEndTime,
792
827
  resolveAssetPaths,
793
828
  resolveBackground2 as resolveBackground
794
829
  };
@@ -23,6 +23,7 @@ var TaleemPlayer = (() => {
23
23
  assignMockTimings: () => assignMockTimings,
24
24
  createTaleemBrowser: () => createTaleemBrowser,
25
25
  createTaleemPlayer: () => createTaleemPlayer,
26
+ getDeckEndTime: () => getDeckEndTime,
26
27
  resolveAssetPaths: () => resolveAssetPaths,
27
28
  resolveBackground: () => resolveBackground2
28
29
  });
@@ -620,7 +621,7 @@ var TaleemPlayer = (() => {
620
621
  }
621
622
 
622
623
  // src/engines/player/stage.js
623
- function createStage(mount) {
624
+ function createStage(mount, background = {}) {
624
625
  if (!mount) throw new Error("taleem-player: mount is required");
625
626
  const root = typeof mount === "string" ? document.querySelector(mount) : mount;
626
627
  if (!root) throw new Error("taleem-player: mount element not found");
@@ -630,15 +631,41 @@ var TaleemPlayer = (() => {
630
631
  stage.style.position = "relative";
631
632
  stage.style.width = "100%";
632
633
  stage.style.height = "100%";
634
+ stage.style.overflow = "hidden";
635
+ const bgLayer = document.createElement("div");
636
+ bgLayer.className = "taleem-player-bg";
637
+ bgLayer.style.position = "absolute";
638
+ bgLayer.style.inset = "0";
639
+ bgLayer.style.zIndex = "0";
640
+ bgLayer.style.backgroundRepeat = "no-repeat";
641
+ bgLayer.style.backgroundSize = "cover";
642
+ bgLayer.style.backgroundPosition = "center";
643
+ if (background.backgroundColor) {
644
+ bgLayer.style.backgroundColor = background.backgroundColor;
645
+ }
646
+ if (background.backgroundImage) {
647
+ bgLayer.style.backgroundImage = `url("${background.backgroundImage}")`;
648
+ }
649
+ if (typeof background.backgroundImageOpacity === "number" && background.backgroundImageOpacity < 1) {
650
+ bgLayer.style.opacity = String(background.backgroundImageOpacity);
651
+ }
652
+ const slideLayer = document.createElement("div");
653
+ slideLayer.className = "taleem-player-slides";
654
+ slideLayer.style.position = "relative";
655
+ slideLayer.style.zIndex = "1";
656
+ slideLayer.style.width = "100%";
657
+ slideLayer.style.height = "100%";
658
+ stage.appendChild(bgLayer);
659
+ stage.appendChild(slideLayer);
633
660
  root.appendChild(stage);
634
661
  function clear() {
635
- stage.innerHTML = "";
662
+ slideLayer.innerHTML = "";
636
663
  }
637
664
  function destroy() {
638
665
  root.innerHTML = "";
639
666
  }
640
667
  return {
641
- el: stage,
668
+ el: slideLayer,
642
669
  clear,
643
670
  destroy
644
671
  };
@@ -646,7 +673,7 @@ var TaleemPlayer = (() => {
646
673
 
647
674
  // src/engines/player/player.js
648
675
  function createTaleemPlayer({ mount, deck }) {
649
- const stage = createStage(mount);
676
+ const stage = createStage(mount, deck.background);
650
677
  let lastSlide = null;
651
678
  let lastRenderedKey = null;
652
679
  function getSlideAtTime(deck2, time) {
@@ -814,5 +841,13 @@ var TaleemPlayer = (() => {
814
841
  }
815
842
  return deck;
816
843
  }
844
+
845
+ // src/utils/getDeckEndTime.js
846
+ function getDeckEndTime(deck) {
847
+ if (!deck || !deck.deck || deck.deck.length === 0) {
848
+ return 0;
849
+ }
850
+ return deck.deck[deck.deck.length - 1].end;
851
+ }
817
852
  return __toCommonJS(index_exports);
818
853
  })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taleem-player",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "type": "module",
5
5
  "main": "./dist/taleem-player.umd.js",
6
6
  "module": "./dist/taleem-player.esm.js",
@@ -12,7 +12,6 @@
12
12
  "./validate": {
13
13
  "import": "./dist/validation/validateDeckV1.js"
14
14
  },
15
-
16
15
  "./schema": {
17
16
  "import": "./dist/validation/zodDeckV1.js"
18
17
  },
@@ -30,7 +29,7 @@
30
29
  },
31
30
  "dependencies": {
32
31
  "taleem-core": "^1.4.3",
33
- "taleem-slides": "^0.6.2-rc.6"
32
+ "taleem-slides": "file:../taleem-slides"
34
33
  },
35
34
  "devDependencies": {
36
35
  "esbuild": "^0.27.2",