···2121 <section id="part1" class="exercise-part">
2222 <h2>Part 1: Initial Sorting</h2>
2323 <div class="columns">
2424+ <div class="column" data-column="unassigned">
2525+ <h3>Unassigned</h3>
2626+ <div id="part1-unassignedContainer" class="card-container"></div>
2727+ </div>
2428 <div class="column" data-column="veryImportant">
2529 <h3>Very important to me</h3>
2626- <div class="card-container" id="veryImportantContainer"></div>
3030+ <div id="part1-veryImportantContainer" class="card-container"></div>
2731 </div>
2832 <div class="column" data-column="important">
2933 <h3>Important to me</h3>
3030- <div class="card-container" id="importantContainer"></div>
3434+ <div id="part1-importantContainer" class="card-container"></div>
3135 </div>
3236 <div class="column" data-column="notImportant">
3337 <h3>Not important to me</h3>
3434- <div class="card-container" id="notImportantContainer"></div>
3838+ <div id="part1-notImportantContainer" class="card-container"></div>
3539 </div>
3640 </div>
3741 <button id="toPart2">Next</button>
···4347 <p>Take the values from the "Not important to me" and "Important to me" columns and put them aside.</p>
4448 <p>Create 3 columns again: "Very important to me", "Important to me" and "Not important to me" and do the same exercise as you did in Part 1, but with the "Very important to me" values only.</p>
4549 <div class="columns">
5050+ <div class="column" data-column="unassigned">
5151+ <h3>Unassigned</h3>
5252+ <div id="part2-unassignedContainer" class="card-container"></div>
5353+ </div>
4654 <div class="column" data-column="veryImportant">
4755 <h3>Very important to me</h3>
4848- <div class="card-container" id="veryImportantContainer"></div>
5656+ <div id="part2-veryImportantContainer" class="card-container"></div>
4957 </div>
5058 <div class="column" data-column="important">
5159 <h3>Important to me</h3>
5252- <div class="card-container" id="importantContainer"></div>
6060+ <div id="part2-importantContainer" class="card-container"></div>
5361 </div>
5462 <div class="column" data-column="notImportant">
5563 <h3>Not important to me</h3>
5656- <div class="card-container" id="notImportantContainer"></div>
6464+ <div id="part2-notImportantContainer" class="card-container"></div>
5765 </div>
5866 </div>
5967 <button id="backToPart1">Back</button>
+106-19
index.ts
···9494 "CARING",
9595 "CHALLENGE",
9696 "CHANGE",
9797- "COMFORT",
9797+ // "COMFORT",
9898 // "COMMITMENT",
9999 // "COMPASSION",
100100 // "CONTRIBUTION",
···200200 document.getElementById("toPart2")?.addEventListener("click", () => {
201201 const newState = this.undoManager.getState();
202202 newState.currentPart = "part2";
203203- // In Part2, we only keep the "veryImportant" cards and move them to "unassigned"
204204- newState.cards = newState.cards
205205- .filter((c) => c.column === "veryImportant")
206206- .map((c) => ({ ...c, column: "unassigned" }));
203203+204204+ // Get all cards that were in "veryImportant" from Part 1
205205+ const veryImportantCards = newState.cards.filter(card => card.column === "veryImportant");
206206+207207+ // Move these cards to "unassigned" and remove all other cards
208208+ newState.cards = veryImportantCards.map(card => ({
209209+ ...card,
210210+ column: "unassigned"
211211+ }));
212212+213213+ // Log the state for debugging
214214+ console.log("Transitioning to Part 2:", {
215215+ totalCards: newState.cards.length,
216216+ cards: newState.cards.map(c => ({ name: c.name, column: c.column }))
217217+ });
218218+207219 this.updateState(newState);
208220 });
209221 document.getElementById("backToPart1")?.addEventListener("click", () => {
···356368 partElem.style.display = "block";
357369 }
358370 // Render cards for the current part.
359359- if (this.state.currentPart === "part1" || this.state.currentPart === "part2") {
360360- // Clear containers
371371+ if (this.state.currentPart === "part1") {
372372+ // Clear containers for Part 1
373373+ [
374374+ "part1-unassignedContainer",
375375+ "part1-veryImportantContainer",
376376+ "part1-importantContainer",
377377+ "part1-notImportantContainer",
378378+ ].forEach((id) => {
379379+ const container = document.getElementById(id);
380380+ if (container) container.innerHTML = "";
381381+ });
382382+ // Render each card into its Part 1 container.
383383+ this.state.cards.forEach((card) => {
384384+ const containerId = "part1-" + card.column + "Container"; // Use Part 1 prefix
385385+ const container = document.getElementById(containerId);
386386+ if (container) {
387387+ const cardElem = document.createElement("div");
388388+ cardElem.className = "card";
389389+ cardElem.draggable = true;
390390+ cardElem.textContent = card.name;
391391+ cardElem.dataset.cardId = card.id.toString();
392392+ cardElem.addEventListener("dragstart", (e) => {
393393+ e.dataTransfer?.setData("text/plain", card.id.toString());
394394+ });
395395+ container.appendChild(cardElem);
396396+ }
397397+ });
398398+ } else if (this.state.currentPart === "part2") {
399399+ // Clear containers for Part 2
361400 [
362362- "unassignedContainer",
363363- "veryImportantContainer",
364364- "importantContainer",
365365- "notImportantContainer",
401401+ "part2-unassignedContainer",
402402+ "part2-veryImportantContainer",
403403+ "part2-importantContainer",
404404+ "part2-notImportantContainer",
366405 ].forEach((id) => {
367406 const container = document.getElementById(id);
368407 if (container) container.innerHTML = "";
369408 });
370370- // Render each card into its container.
409409+410410+ // Log the state for debugging (can be removed later)
411411+ // console.log("Rendering Part 2:", {
412412+ // totalCards: this.state.cards.length,
413413+ // cards: this.state.cards.map(c => ({ name: c.name, column: c.column }))
414414+ // });
415415+416416+ // In Part 2, show all cards in their current Part 2 columns
371417 this.state.cards.forEach((card) => {
372372- const containerId = card.column + "Container";
418418+ const containerId = "part2-" + card.column + "Container"; // Use Part 2 prefix
373419 const container = document.getElementById(containerId);
374420 if (container) {
375421 const cardElem = document.createElement("div");
···381427 e.dataTransfer?.setData("text/plain", card.id.toString());
382428 });
383429 container.appendChild(cardElem);
430430+ } else {
431431+ // Log error if container not found (can be removed later)
432432+ // console.error(`Container not found for card ${card.name} in column ${card.column}`);
384433 }
385434 });
386435 } else if (this.state.currentPart === "part3") {
···412461 if (finalStatements) {
413462 finalStatements.innerHTML = "";
414463 const coreCards = this.state.cards.filter((c) => c.column === "core");
415415- coreCards.forEach((card) => {
464464+465465+ // Sort coreCards alphabetically by name for consistent order and tab index
466466+ coreCards.sort((a, b) => a.name.localeCompare(b.name));
467467+468468+ coreCards.forEach((card, index) => {
416469 const wrapper = document.createElement("div");
417470 wrapper.className = "final-statement";
418471 const label = document.createElement("label");
···420473 const input = document.createElement("input");
421474 input.type = "text";
422475 input.value = this.state.finalStatements[card.id] || "";
476476+ input.tabIndex = index + 1; // Set explicit tabindex for inputs (1 to N)
423477 input.addEventListener("change", () => {
424478 const newState = this.undoManager.getState();
425479 newState.finalStatements[card.id] = input.value;
···429483 wrapper.appendChild(input);
430484 finalStatements.appendChild(wrapper);
431485 });
486486+487487+ // Set tabindex for buttons after the inputs
488488+ const backBtn = document.getElementById("backToPart3") as HTMLButtonElement | null;
489489+ const finishBtn = document.getElementById("finish") as HTMLButtonElement | null;
490490+ const nextTabIndex = coreCards.length + 1;
491491+ if (finishBtn) finishBtn.tabIndex = nextTabIndex; // Finish button comes next
492492+ if (backBtn) backBtn.tabIndex = nextTabIndex + 1; // Back button comes after Finish
432493 }
433494 } else if (this.state.currentPart === "review") {
434495 const reviewContent = document.getElementById("reviewContent");
···439500 const grid = document.createElement("div");
440501 grid.className = "values-grid";
441502442442- // Create sections for each category
503503+ // Create sections for core values and additional values
443504 const categories = [
444505 { title: "Core Values (F*CK YEAH)", column: "core" },
445445- { title: "Important To Me", column: "important" },
446446- { title: "Very Important To Me", column: "veryImportant" },
447447- { title: "Not Important To Me", column: "notImportant" }
506506+ { title: "Also Something I Want", column: "additional" }
448507 ];
449508450509 categories.forEach(category => {
···514573 }
515574 }
516575576576+ // Test Part 1 to Part 2 transition
577577+ const app = new App();
578578+ const initialState = app.undoManager.getState();
579579+580580+ // Test initial state
581581+ assert(initialState.currentPart === "part1", "Initial part should be part1");
582582+ assert(initialState.cards.length > 0, "Should have cards in initial state");
583583+ assert(initialState.cards.every(c => c.column === "unassigned"), "All cards should start in unassigned");
584584+585585+ // Test moving cards in Part 1
586586+ const part1State = app.undoManager.getState();
587587+ part1State.cards[0].column = "veryImportant";
588588+ app.updateState(part1State);
589589+590590+ // Test transition to Part 2
591591+ const toPart2State = app.undoManager.getState();
592592+ toPart2State.currentPart = "part2";
593593+ const veryImportantCards = toPart2State.cards.filter(card => card.column === "veryImportant");
594594+ toPart2State.cards = veryImportantCards.map(card => ({
595595+ ...card,
596596+ column: "unassigned"
597597+ }));
598598+ app.updateState(toPart2State);
599599+600600+ const part2State = app.undoManager.getState();
601601+ assert(part2State.currentPart === "part2", "Should be in part2 after transition");
602602+ assert(part2State.cards.length > 0, "Should have cards in part2");
603603+ assert(part2State.cards.every(c => c.column === "unassigned"), "All cards should be in unassigned in part2");
604604+517605 // Test UndoManager
518518- const initialState = { value: 1 };
519606 const um = new UndoManager(initialState);
520607 let state = um.getState();
521608 assert(state.value === 1, "Initial state should be 1");