{"version":3,"file":"dereekb-dbx-form-quiz.mjs","sources":["../../../../packages/dbx-form/quiz/src/lib/store/quiz.store.ts","../../../../packages/dbx-form/quiz/src/lib/store/quiz.accessor.ts","../../../../packages/dbx-form/quiz/src/lib/container/quiz.component.ts","../../../../packages/dbx-form/quiz/src/lib/container/quiz.component.html","../../../../packages/dbx-form/quiz/src/lib/component/quiz.answer.number.component.ts","../../../../packages/dbx-form/quiz/src/lib/component/quiz.answer.number.component.html","../../../../packages/dbx-form/quiz/src/lib/component/quiz.answer.multiplechoice.component.ts","../../../../packages/dbx-form/quiz/src/lib/component/quiz.answer.multiplechoice.component.html","../../../../packages/dbx-form/quiz/src/lib/component/quiz.prequiz.intro.component.ts","../../../../packages/dbx-form/quiz/src/lib/component/quiz.prequiz.intro.component.html","../../../../packages/dbx-form/quiz/src/lib/component/quiz.question.text.component.ts","../../../../packages/dbx-form/quiz/src/lib/component/quiz.question.text.component.html","../../../../packages/dbx-form/quiz/src/lib/component/quiz.postquiz.component.ts","../../../../packages/dbx-form/quiz/src/lib/component/quiz.postquiz.component.html","../../../../packages/dbx-form/quiz/src/lib/component/quiz.reset.button.component.ts","../../../../packages/dbx-form/quiz/src/lib/component/quiz.score.component.ts","../../../../packages/dbx-form/quiz/src/lib/quiz.util.ts","../../../../packages/dbx-form/quiz/src/dereekb-dbx-form-quiz.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { type QuestionIndex, type Quiz, type QuizAnswer, type QuizQuestion, type QuizQuestionId, type QuizQuestionIdIndexPair, type QuizQuestionWithIndex } from './quiz';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { type ArrayOrValue, asArray, type Configurable, type Maybe } from '@dereekb/util';\nimport { combineLatest, distinctUntilChanged, map, type Observable, of, shareReplay, switchMap } from 'rxjs';\nimport { asObservable, type ObservableOrValue } from '@dereekb/rxjs';\n\n/**\n * Internal state shape managed by QuizStore.\n */\nexport interface QuizStoreState {\n  /**\n   * Map of questions, keyed by id.\n   *\n   * Unset if the quiz is not yet set.\n   */\n  readonly questionMap?: Maybe<ReadonlyMap<QuizQuestionId, QuizQuestion>>;\n  /**\n   * Started quiz\n   */\n  readonly startedQuiz: boolean;\n  /**\n   * Questions that have been answered, sorted by index.\n   */\n  readonly completedQuestions: QuizQuestionIdIndexPair[];\n  /**\n   * Questions that are remaining to be answered, sorted by index.\n   */\n  readonly unansweredQuestions: QuizQuestionIdIndexPair[];\n  /**\n   * Map of current answers.\n   */\n  readonly answers: ReadonlyMap<QuizQuestionId, QuizAnswer>;\n  /**\n   * The current index that corresponds with the selected question.\n   *\n   * If null, defaults to the first question.\n   *\n   * If greater than the total number of questions, then the quiz is considered complete.\n   */\n  readonly questionIndex?: Maybe<QuestionIndex>;\n  /**\n   * If true, the quiz is locked from navigation.\n   *\n   * Typically used while submitting the quiz.\n   */\n  readonly lockQuizNavigation?: boolean;\n  /**\n   * If true, the quiz has been marked as submitted.\n   */\n  readonly submittedQuiz?: boolean;\n  /**\n   * The current/active quiz.\n   */\n  readonly quiz?: Maybe<Quiz>;\n  /**\n   * If true, allows going back to visit previous questions.\n   */\n  readonly allowVisitingPreviousQuestion: boolean;\n  /**\n   * If true, automatically advances to the next question when an answer is set.\n   */\n  readonly autoAdvanceToNextQuestion: boolean;\n  /**\n   * Whether or not skipping questions is allowed.\n   *\n   * Defaults to false.\n   */\n  readonly allowSkipQuestion: boolean;\n}\n\n/**\n * Lookup input for retrieving an answer by question id, index, or the current question.\n * Provide exactly one of `id`, `index`, or `currentIndex`.\n */\nexport interface QuizStoreAnswerLookupInput extends Partial<QuizQuestionIdIndexPair> {\n  readonly currentIndex?: boolean;\n}\n\n/**\n * NgRx ComponentStore that manages quiz lifecycle: question navigation, answer tracking,\n * submission state, and navigation locking.\n *\n * Provided at the component level by `QuizComponent`.\n *\n * @example\n * ```ts\n * // Access from a child component via DI:\n * readonly quizStore = inject(QuizStore);\n * this.quizStore.startQuiz();\n * this.quizStore.updateAnswerForCurrentQuestion(5);\n * ```\n */\n@Injectable()\nexport class QuizStore extends ComponentStore<QuizStoreState> {\n  constructor() {\n    super({\n      quiz: undefined,\n      startedQuiz: false,\n      submittedQuiz: false,\n      answers: new Map(),\n      questionIndex: undefined,\n      unansweredQuestions: [],\n      completedQuestions: [],\n      questionMap: undefined,\n      autoAdvanceToNextQuestion: true,\n      allowVisitingPreviousQuestion: true,\n      allowSkipQuestion: false\n    });\n  }\n\n  readonly quiz$ = this.select((state) => state.quiz);\n  readonly titleDetails$ = this.quiz$.pipe(map((quiz) => quiz?.titleDetails));\n  readonly questions$ = this.quiz$.pipe(map((quiz) => quiz?.questions ?? []));\n  readonly startedQuiz$ = this.select((state) => state.startedQuiz);\n  readonly lockQuizNavigation$ = this.select((state) => state.lockQuizNavigation);\n  readonly submittedQuiz$ = this.select((state) => state.submittedQuiz);\n  readonly answers$ = this.select((state) => state.answers);\n  readonly questionIndex$ = this.select((state) => state.questionIndex ?? 0);\n  readonly completedQuestions$ = this.select((state) => state.completedQuestions);\n  readonly unansweredQuestions$ = this.select((state) => state.unansweredQuestions);\n  readonly hasAnswerForEachQuestion$ = this.select((state) => state.unansweredQuestions.length === 0);\n  readonly isAtEndOfQuestions$ = this.select((state) => (state.questionIndex ?? 0) >= (state.quiz?.questions.length ?? 0));\n\n  readonly canGoToPreviousQuestion$ = this.select((state) => !state.lockQuizNavigation && state.allowVisitingPreviousQuestion && state.questionIndex != null && state.questionIndex > 0);\n  readonly canGoToNextQuestion$ = this.select((state) => {\n    const newQuestionIndex = computeAdvanceIndexOnState(state, 1);\n    return !state.lockQuizNavigation && state.questionIndex != null && newQuestionIndex != null && newQuestionIndex > state.questionIndex;\n  });\n\n  readonly currentQuestion$: Observable<Maybe<QuizQuestionWithIndex>> = combineLatest([this.questions$, this.questionIndex$]).pipe(\n    map(([questions, questionIndex]) => {\n      const question = questions[questionIndex];\n      let result: Maybe<QuizQuestionWithIndex>;\n\n      if (question) {\n        result = {\n          ...question,\n          index: questionIndex\n        };\n      }\n\n      return result;\n    }),\n    distinctUntilChanged(),\n    shareReplay(1)\n  );\n\n  /**\n   * Returns a reactive observable of the answer for a given question, looked up by id, index, or the current question.\n   *\n   * @param lookupInput - Lookup criteria specifying which question's answer to retrieve.\n   * @param lookupInput - Lookup criteria specifying which question's answer to retrieve.\n   * @returns An observable that emits the current answer for the specified question, or undefined if not answered.\n   *\n   * @example\n   * ```ts\n   * // By current question:\n   * store.answerForQuestion({ currentIndex: true }).subscribe(answer => console.log(answer));\n   * // By question id:\n   * store.answerForQuestion({ id: 'q1' }).subscribe(answer => console.log(answer));\n   * ```\n   */\n  answerForQuestion(lookupInput: ObservableOrValue<QuizStoreAnswerLookupInput>): Observable<Maybe<QuizAnswer>> {\n    return asObservable(lookupInput).pipe(\n      switchMap((lookup) => {\n        const { id, index, currentIndex } = lookup;\n        let result: Observable<Maybe<QuizAnswer>>;\n\n        if (currentIndex) {\n          result = this.currentQuestion$.pipe(switchMap((question) => this.answerForQuestion({ index: question?.index })));\n        } else if (id != null) {\n          result = this.answers$.pipe(map((answers) => answers.get(id)));\n        } else if (index == null) {\n          result = of(undefined);\n        } else {\n          result = this.questions$.pipe(\n            switchMap((questions) => {\n              const question = questions[index];\n              let result: Observable<Maybe<QuizAnswer>>;\n\n              if (question) {\n                result = this.answerForQuestion({ id: question.id });\n              } else {\n                result = of(undefined);\n              }\n\n              return result;\n            })\n          );\n        }\n\n        return result;\n      }),\n      distinctUntilChanged(),\n      shareReplay(1)\n    );\n  }\n\n  readonly startQuiz = this.updater((state) => startQuizOnState(state));\n  readonly setQuiz = this.updater((state, quiz: Maybe<Quiz>) => setQuizOnState(state, quiz));\n\n  /**\n   * Resets the quiz entirely, back to the pre-quiz state.\n   */\n  readonly resetQuiz = this.updater((state) => resetQuizOnState(state));\n\n  /**\n   * Restarts the quiz to the first question.\n   */\n  readonly restartQuizToFirstQuestion = this.updater((state) => restartQuizToFirstQuestionOnState(state));\n\n  readonly setAnswers = this.updater((state, answers: Maybe<QuizAnswer[]>) => setAnswersOnState(state, answers));\n  readonly updateAnswers = this.updater((state, answers: Maybe<QuizAnswer[]>) => updateAnswersOnState(state, answers));\n  readonly updateAnswerForCurrentQuestion = this.updater((state, answerData: unknown) => updateAnswerForCurrentQuestionOnState(state, answerData));\n  readonly setQuestionIndex = this.updater((state, questionIndex: QuestionIndex) => ({ ...state, questionIndex }));\n  readonly setAutoAdvanceToNextQuestion = this.updater((state, autoAdvanceToNextQuestion: boolean) => ({ ...state, autoAdvanceToNextQuestion }));\n  readonly setAllowSkipQuestion = this.updater((state, allowSkipQuestion: boolean) => ({ ...state, allowSkipQuestion }));\n  readonly setAllowVisitingPreviousQuestion = this.updater((state, allowVisitingPreviousQuestion: boolean) => ({ ...state, allowVisitingPreviousQuestion }));\n\n  readonly goToNextQuestion = this.updater((state) => advanceQuestionOnState(state, 1));\n  readonly goToPreviousQuestion = this.updater((state) => advanceQuestionOnState(state, -1));\n\n  readonly setLockQuizNavigation = this.updater((state, lockQuizNavigation: boolean) => ({ ...state, lockQuizNavigation }));\n  readonly setSubmittedQuiz = this.updater((state, submittedQuiz: boolean) => ({ ...state, submittedQuiz }));\n}\n\nfunction computeAdvanceIndexOnState(state: QuizStoreState, advancement: number): Maybe<QuestionIndex> {\n  const { questionIndex, allowSkipQuestion, unansweredQuestions, lockQuizNavigation } = state;\n  const maxQuestionIndex = state.quiz?.questions.length;\n\n  let newQuestionIndex: Maybe<QuestionIndex>;\n\n  if (maxQuestionIndex != null && questionIndex != null && !lockQuizNavigation) {\n    let maxAllowedIndex = maxQuestionIndex;\n\n    if (!allowSkipQuestion) {\n      maxAllowedIndex = unansweredQuestions[0]?.index ?? maxQuestionIndex;\n    }\n\n    newQuestionIndex = Math.max(0, Math.min(maxAllowedIndex, questionIndex + advancement));\n  }\n\n  return newQuestionIndex;\n}\n\nfunction advanceQuestionOnState(state: QuizStoreState, advancement: number): QuizStoreState {\n  const newQuestionIndex = computeAdvanceIndexOnState(state, advancement);\n\n  let nextState: QuizStoreState = state;\n\n  if (newQuestionIndex != null) {\n    nextState = {\n      ...state,\n      questionIndex: newQuestionIndex\n    };\n  }\n\n  return nextState;\n}\n\nfunction startQuizOnState(state: QuizStoreState): QuizStoreState {\n  const { startedQuiz } = state;\n  let nextState: QuizStoreState = state;\n\n  if (!startedQuiz) {\n    nextState = {\n      ...state,\n      startedQuiz: true,\n      submittedQuiz: false,\n      lockQuizNavigation: false,\n      questionIndex: 0\n    };\n  }\n\n  return nextState;\n}\n\nfunction resetQuizOnState(state: QuizStoreState): QuizStoreState {\n  return {\n    ...restartQuizToFirstQuestionOnState(state),\n    startedQuiz: false\n  };\n}\n\nfunction restartQuizToFirstQuestionOnState(state: QuizStoreState): QuizStoreState {\n  return setAnswersOnState(\n    startQuizOnState({\n      ...state,\n      startedQuiz: false\n    }),\n    []\n  );\n}\n\nfunction setQuizOnState(state: QuizStoreState, quiz?: Maybe<Quiz>): QuizStoreState {\n  let questionMap: Maybe<ReadonlyMap<QuizQuestionId, QuizQuestion>> = undefined;\n  const currentAnswers = Array.from(state.answers.values());\n\n  if (quiz?.questions) {\n    questionMap = new Map(quiz.questions.map((question) => [question.id, question]));\n  }\n\n  return setAnswersOnState({ ...state, quiz, questionMap }, currentAnswers);\n}\n\nfunction setAnswersOnState(state: QuizStoreState, newAnswers: Maybe<ArrayOrValue<QuizAnswer>>): QuizStoreState {\n  return updateAnswersOnState(\n    {\n      ...state,\n      answers: new Map()\n    },\n    newAnswers\n  );\n}\n\nfunction updateAnswerForCurrentQuestionOnState(state: QuizStoreState, answerData: unknown): QuizStoreState {\n  const { questionIndex } = state;\n  let nextState: Configurable<QuizStoreState> = state;\n\n  if (questionIndex != null) {\n    const currentQuestion = state.quiz?.questions[questionIndex];\n\n    if (currentQuestion) {\n      const answer: QuizAnswer = {\n        id: currentQuestion.id,\n        data: answerData\n      };\n\n      nextState = updateAnswersOnState(state, [answer]);\n\n      if (state.autoAdvanceToNextQuestion) {\n        nextState.questionIndex = questionIndex + 1;\n      }\n    }\n  }\n\n  return nextState;\n}\n\nfunction updateAnswersOnState(state: QuizStoreState, inputAnswers: Maybe<ArrayOrValue<QuizAnswer>>): QuizStoreState {\n  const { quiz, answers: currentAnswers } = state;\n\n  const answers = new Map(currentAnswers);\n\n  asArray(inputAnswers).forEach((answer) => {\n    answers.set(answer.id, answer);\n  });\n\n  const completedQuestions: QuizQuestionIdIndexPair[] = [];\n  const unansweredQuestions: QuizQuestionIdIndexPair[] = [];\n\n  if (quiz?.questions) {\n    quiz.questions.forEach((question, index) => {\n      if (answers.has(question.id)) {\n        completedQuestions.push({ id: question.id, index });\n      } else {\n        unansweredQuestions.push({ id: question.id, index });\n      }\n    });\n  }\n\n  return { ...state, unansweredQuestions, completedQuestions, answers };\n}\n","import { type Maybe } from '@dereekb/util';\nimport { type Observable, type Subscription } from 'rxjs';\nimport { type QuizQuestion, type QuizAnswer, type Quiz } from './quiz';\nimport { type Provider } from '@angular/core';\nimport { QuizStore } from './quiz.store';\n\n/**\n * Abstract accessor injected into answer/question child components to read the current question\n * and write answers back to the QuizStore without coupling to it directly.\n *\n * Use `provideCurrentQuestionQuizQuestionAccessor()` to bind this to the store's current question.\n */\nexport abstract class QuizQuestionAccessor<T = unknown> {\n  /**\n   * The active quiz definition.\n   */\n  abstract readonly quiz$: Observable<Maybe<Quiz>>;\n\n  /**\n   * The question this accessor is bound to.\n   */\n  abstract readonly question$: Observable<Maybe<QuizQuestion>>;\n\n  /**\n   * The current answer for this question, or undefined if unanswered.\n   */\n  abstract readonly answer$: Observable<Maybe<QuizAnswer<T>>>;\n\n  /**\n   * Submits an answer value for this question.\n   */\n  abstract setAnswer(answer: T): void;\n\n  /**\n   * Binds an observable source whose emissions are forwarded as answer updates.\n   */\n  abstract setAnswerSource(answer: Observable<T>): Subscription;\n}\n\n/**\n * Provides QuizQuestionAccessor bound to the current question in QuizStore.\n *\n * @returns An Angular provider that binds QuizQuestionAccessor to the current quiz question.\n *\n * @usage\n * ```typescript\n * @Component ({\n *   providers: [QuizStore, provideCurrentQuestionQuizQuestionAccessor()]\n * })\n * ```\n */\nexport function provideCurrentQuestionQuizQuestionAccessor<T = unknown>(): Provider {\n  return {\n    provide: QuizQuestionAccessor,\n    useFactory: (quizStore: QuizStore) => {\n      return {\n        quiz$: quizStore.quiz$,\n        question$: quizStore.currentQuestion$,\n        answer$: quizStore.answerForQuestion({ currentIndex: true }),\n        setAnswer: (answer: T) => quizStore.updateAnswerForCurrentQuestion(answer),\n        setAnswerSource: (answer: Observable<T>) => quizStore.updateAnswerForCurrentQuestion(answer)\n      };\n    },\n    deps: [QuizStore]\n  };\n}\n","import { Component, computed, effect, inject, input, type Signal } from '@angular/core';\nimport { QuizStore } from '../store/quiz.store';\nimport { type Maybe } from '@dereekb/util';\nimport { type Quiz } from '../store/quiz';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { combineLatest, first, map, type Observable, switchMap } from 'rxjs';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { provideCurrentQuestionQuizQuestionAccessor } from '../store/quiz.accessor';\nimport { DbxButtonModule, DbxWindowKeyDownListenerDirective } from '@dereekb/dbx-web';\n\n/**\n * Lifecycle state of the quiz container view.\n */\nexport type QuizComponentState = 'init' | 'pre-quiz' | 'quiz' | 'post-quiz';\n\n/**\n * Discriminated union of view configs, one per quiz lifecycle state.\n */\nexport type QuizComponentViewConfig = QuizComponentViewInitConfig | QuizComponentViewPreQuizConfig | QuizComponentViewQuizConfig | QuizComponentViewPostQuizConfig;\n\nexport interface QuizComponentViewInitConfig {\n  readonly state: 'init';\n}\n\nexport interface QuizComponentViewPreQuizConfig {\n  readonly state: 'pre-quiz';\n  readonly preQuizComponent?: Maybe<DbxInjectionComponentConfig>;\n}\n\nexport interface QuizComponentViewQuizConfig {\n  readonly state: 'quiz';\n  readonly questionComponent?: Maybe<DbxInjectionComponentConfig>;\n  readonly answerComponent?: Maybe<DbxInjectionComponentConfig>;\n}\n\nexport interface QuizComponentViewPostQuizConfig {\n  readonly state: 'post-quiz';\n  readonly resultsComponent?: Maybe<DbxInjectionComponentConfig>;\n}\n\n/**\n * Top-level quiz container that orchestrates pre-quiz, active quiz, and post-quiz views.\n *\n * Provides its own `QuizStore` and `QuizQuestionAccessor`, so child components injected via\n * `DbxInjectionComponent` can access quiz state directly through DI.\n *\n * Supports keyboard navigation: Enter (start / next), ArrowLeft (previous), ArrowRight (next).\n *\n * @example\n * ```html\n * <dbx-quiz [quiz]=\"myQuiz\"></dbx-quiz>\n * ```\n */\n@Component({\n  selector: 'dbx-quiz',\n  templateUrl: './quiz.component.html',\n  imports: [DbxInjectionComponent, DbxButtonModule, DbxWindowKeyDownListenerDirective, NgTemplateOutlet],\n  providers: [QuizStore, provideCurrentQuestionQuizQuestionAccessor()]\n})\nexport class QuizComponent {\n  readonly quizStore = inject(QuizStore);\n  readonly quiz = input.required<Maybe<Quiz>>();\n\n  readonly keysFilter = ['Enter', 'ArrowLeft', 'ArrowRight'];\n\n  readonly quizEffect = effect(() => {\n    const quiz = this.quiz();\n    this.quizStore.setQuiz(quiz);\n  });\n\n  readonly quiz$ = toObservable(this.quiz);\n  readonly quizTitleSignal = computed(() => this.quiz()?.titleDetails.title);\n\n  readonly currentQuestionSignal = toSignal(this.quizStore.currentQuestion$);\n\n  readonly questionTitleSignal = computed(() => {\n    const currentQuestion = this.currentQuestionSignal();\n    return currentQuestion ? `Question ${currentQuestion.index + 1}` : '';\n  });\n\n  readonly startedQuiz$ = this.quizStore.startedQuiz$;\n  readonly currentQuestion$ = this.quizStore.currentQuestion$;\n\n  readonly canGoToPreviousQuestionSignal: Signal<boolean> = toSignal(this.quizStore.canGoToPreviousQuestion$, { initialValue: false });\n  readonly canGoToNextQuestionSignal: Signal<boolean> = toSignal(this.quizStore.canGoToNextQuestion$, { initialValue: false });\n\n  readonly viewConfig$: Observable<QuizComponentViewConfig> = this.startedQuiz$.pipe(\n    switchMap((started) => {\n      let result: Observable<QuizComponentViewConfig>;\n\n      if (started) {\n        result = combineLatest([this.quiz$, this.currentQuestion$, this.quizStore.isAtEndOfQuestions$]).pipe(\n          map(([quiz, currentQuestion, isAtEndOfQuestions]) => {\n            let viewConfig: QuizComponentViewConfig;\n\n            if (isAtEndOfQuestions) {\n              viewConfig = {\n                state: 'post-quiz',\n                resultsComponent: quiz?.resultsComponentConfig\n              };\n            } else {\n              viewConfig = {\n                state: 'quiz',\n                questionComponent: currentQuestion?.questionComponentConfig,\n                answerComponent: currentQuestion?.answerComponentConfig\n              };\n            }\n\n            return viewConfig;\n          })\n        );\n      } else {\n        result = this.quiz$.pipe(\n          map((quiz) => {\n            const viewConfig: QuizComponentViewPreQuizConfig = {\n              state: 'pre-quiz',\n              preQuizComponent: quiz?.preQuizComponentConfig\n            };\n\n            return viewConfig;\n          })\n        );\n      }\n\n      return result;\n    })\n  );\n\n  readonly viewConfigSignal: Signal<QuizComponentViewConfig> = toSignal(this.viewConfig$, { initialValue: { state: 'init' } });\n  readonly viewStateSignal: Signal<QuizComponentState> = computed(() => this.viewConfigSignal()?.state ?? 'init');\n\n  readonly preQuizComponentConfigSignal: Signal<Maybe<DbxInjectionComponentConfig>> = computed(() => (this.viewConfigSignal() as QuizComponentViewPreQuizConfig)?.preQuizComponent);\n  readonly questionComponentConfigSignal: Signal<Maybe<DbxInjectionComponentConfig>> = computed(() => (this.viewConfigSignal() as QuizComponentViewQuizConfig)?.questionComponent);\n  readonly answerComponentConfigSignal: Signal<Maybe<DbxInjectionComponentConfig>> = computed(() => (this.viewConfigSignal() as QuizComponentViewQuizConfig)?.answerComponent);\n  readonly resultsComponentConfigSignal: Signal<Maybe<DbxInjectionComponentConfig>> = computed(() => (this.viewConfigSignal() as QuizComponentViewPostQuizConfig)?.resultsComponent);\n\n  handleKeyDown(event: KeyboardEvent) {\n    const code = event.code;\n\n    switch (code) {\n      case 'Enter':\n        this.quizStore.startedQuiz$.pipe(first()).subscribe((started) => {\n          if (started) {\n            this.clickNextQuestion();\n          } else {\n            this.quizStore.startQuiz();\n          }\n        });\n        break;\n      case 'ArrowLeft':\n        this.clickPreviousQuestion();\n        break;\n      case 'ArrowRight':\n        this.clickNextQuestion();\n        break;\n    }\n  }\n\n  clickPreviousQuestion() {\n    this.quizStore.goToPreviousQuestion();\n  }\n\n  clickNextQuestion() {\n    this.quizStore.goToNextQuestion();\n  }\n}\n","<div class=\"dbx-quiz\" (dbxWindowKeyDownListener)=\"handleKeyDown($event)\" [dbxWindowKeyDownFilter]=\"keysFilter\">\n  @switch (viewStateSignal()) {\n    @case ('pre-quiz') {\n      <ng-container *ngTemplateOutlet=\"preQuizTemplate\"></ng-container>\n    }\n    @case ('quiz') {\n      <ng-container *ngTemplateOutlet=\"quizTemplate\"></ng-container>\n    }\n    @case ('post-quiz') {\n      <ng-container *ngTemplateOutlet=\"postQuizTemplate\"></ng-container>\n    }\n  }\n</div>\n\n<!-- Pre-Quiz -->\n<ng-template #preQuizTemplate>\n  <div class=\"dbx-quiz-pre-quiz\">\n    <dbx-injection [config]=\"preQuizComponentConfigSignal()\"></dbx-injection>\n  </div>\n</ng-template>\n\n<!-- Quiz -->\n<ng-template #quizTemplate>\n  <div class=\"dbx-quiz-quiz\">\n    <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n    <div class=\"dbx-quiz-question dbx-pb3\">\n      <h4 class=\"dbx-quiz-question-title\">{{ questionTitleSignal() }}</h4>\n      <dbx-injection [config]=\"questionComponentConfigSignal()\"></dbx-injection>\n    </div>\n    <div class=\"dbx-quiz-answer dbx-pt3\">\n      <dbx-injection [config]=\"answerComponentConfigSignal()\"></dbx-injection>\n    </div>\n  </div>\n</ng-template>\n\n<!-- Post-Quiz -->\n<ng-template #postQuizTemplate>\n  <div class=\"dbx-quiz-post-quiz\">\n    <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n    <dbx-injection [config]=\"resultsComponentConfigSignal()\"></dbx-injection>\n  </div>\n</ng-template>\n\n<!-- Header Template -->\n<ng-template #headerTemplate>\n  <div class=\"dbx-quiz-header\">\n    <div class=\"dbx-flex-group\">\n      <dbx-button [disabled]=\"!canGoToPreviousQuestionSignal()\" icon=\"arrow_back\" (buttonClick)=\"clickPreviousQuestion()\"></dbx-button>\n      <span class=\"spacer\"></span>\n      <span class=\"mat-h2\">{{ quizTitleSignal() }}</span>\n      <span class=\"spacer\"></span>\n      <dbx-button [disabled]=\"!canGoToNextQuestionSignal()\" icon=\"arrow_forward\" (buttonClick)=\"clickNextQuestion()\"></dbx-button>\n    </div>\n  </div>\n</ng-template>\n","import { Component, computed, inject, model } from '@angular/core';\nimport { DbxButtonModule, DbxWindowKeyDownListenerDirective } from '@dereekb/dbx-web';\nimport { QuizQuestionAccessor } from '../store/quiz.accessor';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { type Maybe, range, type RangeInput } from '@dereekb/util';\n\n/**\n * Named preset for common number ranges.\n */\nexport type QuizAnswerNumberComponentPreset = 'oneToFive';\n\n/**\n * Configuration for the number answer component. Provide a preset, explicit range, or arbitrary numbers.\n */\nexport interface QuizAnswerNumberComponentConfig {\n  /**\n   * Uses a preset to compute the range/numbers.\n   */\n  readonly preset?: QuizAnswerNumberComponentPreset;\n  /**\n   * Range configuration\n   */\n  readonly range?: RangeInput;\n  /**\n   * Arbitrary array of numbers\n   */\n  readonly numbers?: number[];\n}\n\ninterface QuizAnswerNumberChoice {\n  readonly number: number;\n  readonly selected?: boolean;\n}\n\n/**\n * Answer component that displays configurable number buttons.\n *\n * @usage\n * Used as an answer component in a QuizQuestion's answerComponentConfig.\n * Defaults to 1-5 range if no config is provided.\n *\n * ```typescript\n * answerComponentConfig: {\n *   componentClass: QuizAnswerNumberComponent,\n *   init: (instance: QuizAnswerNumberComponent) => {\n *     instance.config.set({ range: { start: 1, end: 11 } });\n *   }\n * }\n * ```\n */\n@Component({\n  templateUrl: './quiz.answer.number.component.html',\n  imports: [DbxButtonModule, DbxWindowKeyDownListenerDirective]\n})\nexport class QuizAnswerNumberComponent {\n  readonly questionAccessor = inject<QuizQuestionAccessor<number>>(QuizQuestionAccessor);\n\n  readonly config = model<Maybe<QuizAnswerNumberComponentConfig>>();\n\n  readonly currentAnswerSignal = toSignal(this.questionAccessor.answer$);\n  readonly currentAnswerValueSignal = computed(() => this.currentAnswerSignal()?.data);\n\n  readonly choicesSignal = computed(() => {\n    const { range: inputRange, numbers: inputNumbers, preset } = this.config() ?? { preset: 'oneToFive' };\n    const currentAnswer = this.currentAnswerValueSignal();\n\n    let useRange: Maybe<RangeInput>;\n    let useNumbers: Maybe<number[]>;\n\n    if (preset) {\n      switch (preset) {\n        case 'oneToFive':\n        default:\n          useRange = { start: 1, end: 6 };\n          break;\n      }\n    } else if (inputRange) {\n      useRange = inputRange;\n    } else if (inputNumbers) {\n      useNumbers = inputNumbers;\n    }\n\n    let numbers: number[];\n\n    if (useRange) {\n      numbers = range(useRange);\n    } else if (useNumbers) {\n      numbers = useNumbers ?? [];\n    } else {\n      numbers = [];\n    }\n\n    const choices: QuizAnswerNumberChoice[] = numbers.map((number) => {\n      return {\n        number,\n        selected: currentAnswer === number\n      };\n    });\n\n    return choices;\n  });\n\n  readonly relevantKeysSignal = computed<string[]>(() => {\n    const choices = this.choicesSignal();\n    return choices.map((choice) => choice.number.toString());\n  });\n\n  clickedAnswer(answer: number) {\n    this.questionAccessor.setAnswer(answer);\n  }\n\n  handleKeyDown(event: KeyboardEvent) {\n    const number = Number(event.key);\n    if (!Number.isNaN(number)) {\n      this.clickedAnswer(number);\n    }\n  }\n}\n","<div class=\"dbx-quiz-answer-number\" (dbxWindowKeyDownListener)=\"handleKeyDown($event)\" [dbxWindowKeyDownFilter]=\"relevantKeysSignal()\">\n  <div class=\"dbx-quiz-answer-number-buttons dbx-button-wrap-group\" role=\"radiogroup\" aria-label=\"Answer choices\">\n    @for (choice of choicesSignal(); track choice.number) {\n      <dbx-button role=\"radio\" [attr.aria-checked]=\"choice.selected\" [attr.aria-label]=\"'' + choice.number\" [color]=\"choice.selected ? 'accent' : 'primary'\" [raised]=\"true\" (buttonClick)=\"clickedAnswer(choice.number)\">{{ choice.number }}</dbx-button>\n    }\n  </div>\n</div>\n","import { Component, computed, inject, model } from '@angular/core';\nimport { DbxButtonModule, DbxWindowKeyDownListenerDirective } from '@dereekb/dbx-web';\nimport { type Maybe, range } from '@dereekb/util';\nimport { QuizQuestionAccessor } from '../store/quiz.accessor';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nconst MULTIPLE_CHOICE_LETTERS = `abcdefghijklmnopqrstuvwxyz`;\n\n/**\n * Upper-case letter label for a multiple choice option (e.g. \"A\", \"B\").\n */\nexport type MultipleChoiceLetter = string;\n\n/**\n * Display text for a single multiple choice option.\n */\nexport type MultipleChoiceText = string;\n\n/**\n * Answer data stored when a multiple choice option is selected.\n */\nexport interface MultipleChoiceAnswer {\n  readonly isCorrectAnswer: boolean;\n  readonly letter: MultipleChoiceLetter;\n  readonly text: MultipleChoiceText;\n}\n\n/**\n * Configuration for the multiple choice answer component.\n */\nexport interface QuizAnswerMultipleChoiceComponentConfig {\n  /**\n   * Ordered list of answer option texts. Letters are auto-assigned A, B, C, etc.\n   */\n  readonly answerText: readonly MultipleChoiceText[];\n  /**\n   * Zero-based index of the correct answer, used to set `isCorrectAnswer` on the stored answer.\n   */\n  readonly correctAnswerIndex?: number;\n}\n\ninterface QuizAnswerMultipleChoice extends MultipleChoiceAnswer {\n  readonly selected?: boolean;\n}\n\n/**\n * Answer component that displays multiple choice letter-labeled buttons.\n *\n * @usage\n * Used as an answer component in a QuizQuestion's answerComponentConfig.\n * Supports keyboard shortcuts (pressing the letter key selects that answer).\n *\n * ```typescript\n * answerComponentConfig: {\n *   componentClass: QuizAnswerMultipleChoiceComponent,\n *   init: (instance: QuizAnswerMultipleChoiceComponent) => {\n *     instance.config.set({\n *       answerText: ['Option A', 'Option B', 'Option C'],\n *       correctAnswerIndex: 1\n *     });\n *   }\n * }\n * ```\n */\n@Component({\n  templateUrl: './quiz.answer.multiplechoice.component.html',\n  imports: [DbxButtonModule, DbxWindowKeyDownListenerDirective]\n})\nexport class QuizAnswerMultipleChoiceComponent {\n  readonly questionAccessor = inject<QuizQuestionAccessor<QuizAnswerMultipleChoice>>(QuizQuestionAccessor);\n\n  readonly config = model<Maybe<QuizAnswerMultipleChoiceComponentConfig>>();\n\n  readonly currentAnswerSignal = toSignal(this.questionAccessor.answer$);\n  readonly currentAnswerValueSignal = computed(() => this.currentAnswerSignal()?.data);\n\n  readonly choicesSignal = computed(() => {\n    const config = this.config();\n\n    const currentAnswer = this.currentAnswerValueSignal();\n    const answers = config?.answerText ?? [];\n    const correctAnswerIndex = config?.correctAnswerIndex;\n\n    const choices: QuizAnswerMultipleChoice[] = answers.map((text, i) => {\n      const letter = MULTIPLE_CHOICE_LETTERS[i];\n\n      return {\n        letter: MULTIPLE_CHOICE_LETTERS[i].toUpperCase(),\n        text,\n        selected: currentAnswer?.letter === letter,\n        isCorrectAnswer: correctAnswerIndex === i\n      };\n    });\n\n    return choices;\n  });\n\n  readonly relevantKeysSignal = computed<string[]>(() => {\n    const answersCount = this.config()?.answerText.length ?? 0;\n    const relevantKeys = [];\n\n    const numbersRange = answersCount > 0 ? range(1, answersCount + 1) : [];\n\n    for (const number of numbersRange) {\n      const answerLetter = MULTIPLE_CHOICE_LETTERS[number - 1];\n      relevantKeys.push(answerLetter);\n    }\n\n    return relevantKeys;\n  });\n\n  clickedAnswer(answer: QuizAnswerMultipleChoice) {\n    this.questionAccessor.setAnswer(answer);\n  }\n\n  handleKeyDown(event: KeyboardEvent) {\n    if (event.key.length === 1) {\n      const choices = this.choicesSignal();\n      const selectedLetter = event.key.toUpperCase();\n      const choice = choices.find((x) => x.letter === selectedLetter);\n\n      if (choice) {\n        this.clickedAnswer(choice);\n      }\n    }\n  }\n}\n","<div class=\"dbx-quiz-answer-multiplechoice\" (dbxWindowKeyDownListener)=\"handleKeyDown($event)\" [dbxWindowKeyDownFilter]=\"relevantKeysSignal()\">\n  <div class=\"dbx-quiz-answer-multiplechoice-buttons dbx-button-column dbx-button-wide\" role=\"radiogroup\" aria-label=\"Answer choices\">\n    @for (choice of choicesSignal(); track choice.letter) {\n      <dbx-button class=\"dbx-w100\" role=\"radio\" [attr.aria-checked]=\"choice.selected\" [attr.aria-label]=\"choice.letter + ') ' + choice.text\" [color]=\"choice.selected ? 'accent' : 'primary'\" [raised]=\"true\" (buttonClick)=\"clickedAnswer(choice)\">\n        <div class=\"dbx-quiz-answer-multiplechoice-button-content\">\n          <span class=\"dbx-quiz-answer-multiplechoice-button-letter\">{{ choice.letter }})</span>\n          <span class=\"dbx-quiz-answer-multiplechoice-button-text\">{{ choice.text }}</span>\n        </div>\n      </dbx-button>\n    }\n  </div>\n</div>\n","import { Component, computed, inject, model } from '@angular/core';\nimport { QuizStore } from '../store/quiz.store';\nimport { DbxButtonModule } from '@dereekb/dbx-web';\nimport { type Maybe, type MaybeMap } from '@dereekb/util';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { type QuizTitleDetails } from '../store/quiz';\n\n/**\n * Config for the pre-quiz intro component.\n *\n * Overrides the title details.\n */\nexport type QuizPreQuizIntroConfig = Partial<MaybeMap<QuizTitleDetails>>;\n\n/**\n * Pre-quiz intro component that displays the quiz title, subtitle, description, and a start button.\n *\n * @usage\n * Used as a preQuizComponentConfig in a Quiz definition.\n * Inherits title details from the quiz unless overridden via config.\n *\n * ```typescript\n * preQuizComponentConfig: {\n *   componentClass: QuizPreQuizIntroComponent,\n *   init: (instance: QuizPreQuizIntroComponent) => {\n *     instance.config.set({ subtitle: 'Custom subtitle' });\n *   }\n * }\n * ```\n */\n@Component({\n  templateUrl: './quiz.prequiz.intro.component.html',\n  imports: [DbxButtonModule]\n})\nexport class QuizPreQuizIntroComponent {\n  readonly quizStore = inject(QuizStore);\n\n  readonly config = model<Maybe<QuizPreQuizIntroConfig>>();\n  readonly quizTitleDetailsSignal = toSignal(this.quizStore.titleDetails$);\n\n  readonly configSignal = computed(() => {\n    const config = this.config();\n    const titleDetails = this.quizTitleDetailsSignal();\n\n    return {\n      title: config?.title ?? titleDetails?.title,\n      subtitle: config?.subtitle ?? titleDetails?.subtitle,\n      description: config?.description ?? titleDetails?.description\n    };\n  });\n\n  readonly titleSignal = computed(() => this.configSignal()?.title);\n  readonly subtitleSignal = computed(() => this.configSignal()?.subtitle);\n  readonly descriptionSignal = computed(() => this.configSignal()?.description);\n}\n","<div>\n  <div>\n    <h1>{{ titleSignal() }}</h1>\n    <h2>{{ subtitleSignal() }}</h2>\n    <p>{{ descriptionSignal() }}</p>\n  </div>\n  <div>\n    <dbx-button [raised]=\"true\" (buttonClick)=\"quizStore.startQuiz()\" text=\"Start Quiz\"></dbx-button>\n  </div>\n</div>\n","import { Component, computed, model } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\n\n/**\n * Configuration for the text-based question display. Used with `quizAgreementPrompt()` and\n * `quizFrequencyPrompt()` helpers for Likert-scale questions.\n */\nexport interface QuizQuestionTextComponentConfig {\n  /**\n   * Instructional prompt displayed above the main text (e.g. \"Rate how much you agree:\").\n   */\n  readonly prompt?: string;\n  /**\n   * The primary question or statement text.\n   */\n  readonly text: string;\n  /**\n   * Scale guidance displayed below the text (e.g. \"1 = Strongly Disagree, 5 = Strongly Agree\").\n   */\n  readonly guidance?: string;\n}\n\n/**\n * Question component that displays text with optional prompt and guidance.\n *\n * @usage\n * Used as a questionComponentConfig in a QuizQuestion definition.\n *\n * ```typescript\n * questionComponentConfig: {\n *   componentClass: QuizQuestionTextComponent,\n *   init: (instance: QuizQuestionTextComponent) => {\n *     instance.config.set({ text: 'How do you handle ambiguity?', prompt: 'Rate yourself:', guidance: '1=Never, 5=Always' });\n *   }\n * }\n * ```\n */\n@Component({\n  templateUrl: './quiz.question.text.component.html'\n})\nexport class QuizQuestionTextComponent {\n  readonly config = model<Maybe<QuizQuestionTextComponentConfig>>();\n\n  readonly promptSignal = computed(() => this.config()?.prompt);\n  readonly textSignal = computed(() => this.config()?.text);\n  readonly guidanceSignal = computed(() => this.config()?.guidance);\n}\n","<div class=\"dbx-quiz-question-text\" role=\"group\" aria-label=\"Question\">\n  <div class=\"dbx-quiz-question-text-content\">\n    @if (promptSignal() !== null) {\n      <div class=\"dbx-hint dbx-pb3\" aria-label=\"Prompt\">{{ promptSignal() }}</div>\n    }\n    <div class=\"dbx-pb3\">{{ textSignal() }}</div>\n    @if (guidanceSignal() !== null) {\n      <div class=\"dbx-small dbx-hint\" role=\"note\">{{ guidanceSignal() }}</div>\n    }\n  </div>\n</div>\n","import { Component, computed, inject, input } from '@angular/core';\nimport { DbxActionModule, DbxButtonModule } from '@dereekb/dbx-web';\nimport { QuizStore } from '../store/quiz.store';\nimport { type Work } from '@dereekb/rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { type DbxActionSuccessHandlerFunction } from '@dereekb/dbx-core';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/**\n * Submission lifecycle state within the post-quiz view.\n */\nexport type DbxQuizPostQuizState = 'presubmit' | 'postsubmit';\n\n/**\n * Post-quiz component that handles quiz submission and displays pre/post submit content.\n *\n * @usage\n * Use as a wrapper in your results component template:\n *\n * ```html\n * <dbx-quiz-post-quiz [handleSubmitQuiz]=\"handleSubmitQuiz\">\n *   <div presubmit>Pre-submit content...</div>\n *   <div postsubmit>Post-submit content (scores, etc.)...</div>\n * </dbx-quiz-post-quiz>\n * ```\n */\n@Component({\n  selector: 'dbx-quiz-post-quiz',\n  templateUrl: './quiz.postquiz.component.html',\n  imports: [DbxButtonModule, DbxActionModule, NgTemplateOutlet]\n})\nexport class DbxQuizPostQuizComponent {\n  readonly quizStore = inject(QuizStore);\n\n  readonly quizSubmittedSignal = toSignal(this.quizStore.submittedQuiz$);\n\n  readonly stateSignal = computed(() => {\n    const submitted = this.quizSubmittedSignal();\n\n    return submitted ? 'postsubmit' : 'presubmit';\n  });\n\n  readonly handleSubmitQuiz = input<Work<void>>();\n\n  readonly handleSubmitQuizButton: Work<void> = (_, context) => {\n    this.quizStore.setLockQuizNavigation(true);\n    const handler = this.handleSubmitQuiz();\n\n    if (handler) {\n      return handler(_, context);\n    }\n\n    context.reject();\n  };\n\n  readonly handleSubmitQuizSuccess: DbxActionSuccessHandlerFunction = () => {\n    this.quizStore.setSubmittedQuiz(true);\n  };\n}\n","<div class=\"dbx-post-quiz text-center\" role=\"status\" aria-live=\"polite\">\n  <h3>Quiz Completed</h3>\n  <div>\n    <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n    @if (stateSignal() === 'presubmit') {\n      <ng-container *ngTemplateOutlet=\"preSubmitTemplate\"></ng-container>\n    } @else {\n      <ng-container *ngTemplateOutlet=\"postSubmitTemplate\"></ng-container>\n    }\n  </div>\n</div>\n\n<!-- Pre-Submit -->\n<ng-template #preSubmitTemplate>\n  <ng-content select=\"[presubmit]\"></ng-content>\n  @if (handleSubmitQuiz()) {\n    <div class=\"dbx-post-quiz-submit\">\n      <div dbxAction dbxActionLogger dbxActionValue dbxActionSnackbarError [dbxActionHandler]=\"handleSubmitQuizButton\" [dbxActionSuccessHandler]=\"handleSubmitQuizSuccess\">\n        <dbx-button [disabled]=\"quizSubmittedSignal()\" [raised]=\"true\" dbxActionButton>Submit Quiz</dbx-button>\n      </div>\n    </div>\n  }\n</ng-template>\n\n<!-- Post-Submit -->\n<ng-template #postSubmitTemplate>\n  <ng-content select=\"[postsubmit]\"></ng-content>\n</ng-template>\n\n<!-- Content -->\n<ng-template #contentTemplate>\n  <ng-content></ng-content>\n</ng-template>\n","import { Component, inject, input } from '@angular/core';\nimport { DbxActionModule, DbxButtonModule } from '@dereekb/dbx-web';\nimport { QuizStore } from '../store/quiz.store';\nimport { type Work } from '@dereekb/rxjs';\n\n/**\n * Button component that restarts the quiz to the first question.\n *\n * @usage\n * ```html\n * <dbx-quiz-reset-button buttonText=\"Try Again\"></dbx-quiz-reset-button>\n * ```\n */\n@Component({\n  selector: 'dbx-quiz-reset-button',\n  template: `\n    <div class=\"dbx-quiz-reset-button\">\n      <div dbxAction dbxActionLogger dbxActionValue dbxActionSnackbarError [dbxActionHandler]=\"handleResetQuizButton\">\n        <dbx-button [raised]=\"true\" [text]=\"buttonText()\" dbxActionButton></dbx-button>\n      </div>\n    </div>\n  `,\n  imports: [DbxButtonModule, DbxActionModule]\n})\nexport class DbxQuizResetButtonComponent {\n  readonly quizStore = inject(QuizStore);\n\n  readonly buttonText = input<string>(`Restart Quiz`);\n\n  readonly handleResetQuizButton: Work<void> = (_, context) => {\n    this.quizStore.restartQuizToFirstQuestion();\n    context.success();\n  };\n}\n","import { Component, computed, input } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxQuizResetButtonComponent } from './quiz.reset.button.component';\n\n/**\n * Input data for rendering the quiz score display.\n */\nexport interface DbxQuizScoreInput {\n  /**\n   * Whether to show the retake/reset button.\n   */\n  readonly showRetakeButton?: boolean;\n  /**\n   * Feedback text to display.\n   */\n  readonly feedbackText: string;\n  /**\n   * Optional subtitle text.\n   */\n  readonly subtitle?: Maybe<string>;\n  /**\n   * The score achieved.\n   */\n  readonly score: number;\n  /**\n   * The maximum possible score.\n   */\n  readonly maxScore: number;\n}\n\n/**\n * Generic quiz score display component.\n *\n * @usage\n * ```html\n * <dbx-quiz-score [input]=\"scoreInput\"></dbx-quiz-score>\n * ```\n */\n@Component({\n  selector: 'dbx-quiz-score',\n  template: `\n    <div class=\"dbx-quiz-score\">\n      <h3 class=\"dbx-quiz-score-score\">{{ scoreSignal() }}/{{ maxScoreSignal() }}</h3>\n      <p class=\"dbx-quiz-score-text\">{{ feedbackTextSignal() }}</p>\n      @if (subtitleSignal()) {\n        <p class=\"dbx-quiz-score-subtitle\">{{ subtitleSignal() }}</p>\n      }\n      @if (showRetakeButtonSignal()) {\n        <dbx-quiz-reset-button buttonText=\"Retake Quiz\"></dbx-quiz-reset-button>\n      }\n    </div>\n  `,\n  imports: [DbxQuizResetButtonComponent]\n})\nexport class DbxQuizScoreComponent {\n  readonly input = input<Maybe<DbxQuizScoreInput>>();\n\n  readonly scoreSignal = computed(() => this.input()?.score);\n  readonly maxScoreSignal = computed(() => this.input()?.maxScore);\n  readonly feedbackTextSignal = computed(() => this.input()?.feedbackText ?? '');\n  readonly subtitleSignal = computed(() => this.input()?.subtitle);\n  readonly showRetakeButtonSignal = computed(() => this.input()?.showRetakeButton);\n}\n","import { type QuizQuestionTextComponentConfig } from './component/quiz.question.text.component';\n\n/**\n * Creates a Likert scale question config with agreement prompt (Strongly Disagree to Strongly Agree).\n *\n * @param text - The statement to rate agreement on.\n * @param text - The statement to rate agreement on.\n * @returns A quiz question config with an agreement-based prompt and guidance text.\n *\n * @example\n * ```ts\n * instance.config.set(quizAgreementPrompt('I feel confident leading under pressure.'));\n * // { prompt: 'Please rate how much you agree...', text: '...', guidance: '1 = Strongly Disagree, 5 = Strongly Agree' }\n * ```\n */\nexport function quizAgreementPrompt(text: string): QuizQuestionTextComponentConfig {\n  return {\n    prompt: 'Please rate how much you agree with the following statement:',\n    text,\n    guidance: '1 = Strongly Disagree, 5 = Strongly Agree'\n  };\n}\n\n/**\n * Creates a Likert scale question config with frequency prompt (Never to Always).\n *\n * @param text - The statement to rate frequency on.\n * @param text - The statement to rate frequency on.\n * @returns A quiz question config with a frequency-based prompt and guidance text.\n *\n * @example\n * ```ts\n * instance.config.set(quizFrequencyPrompt('I break vague direction into first steps.'));\n * // { prompt: 'Please rate how much you agree...', text: '...', guidance: '1 = Never, 5 = Always' }\n * ```\n */\nexport function quizFrequencyPrompt(text: string): QuizQuestionTextComponentConfig {\n  return {\n    prompt: 'Please rate how much you agree with the following statement:',\n    text,\n    guidance: '1 = Never, 5 = Always'\n  };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}