# mirtCAT 1.10

- Time remaining now reported in real-time, where now the last ten minutes of a GUI session prints
  the minutes and seconds reminaing 

- Re-work the `updateDesign()` function to more naturally move through the CAT session manually.
  Previous response and selected item arguments now replaced with `new_response` and `new_item`, 
  respectively, and example documentation updated to reflect this change

- `ordered` and `unordered` constraints no longer stop in the middle of testlet set, 
  thereby ignoring other stoping criteria (suggested by Christoph König)

- `choiceNames` and `choiceValues` inputs required additional unnaming (reported by Ryan Kelley)

- Up to three attempts are allowed when users are required to provide a password (requested by Aron Fi)

- `createShinyGUI()` now contains a `host_server` logical argument to indicate whether the GUI
  is hosted on a remote server or locally. This triggers whether `shiny::stopApp()` should be
  executed upon completion (on servers this should be executed to avoid stopping the app
  when multiple users are active)

- previously provided `sessionName` argument now removed in favour of handling this feature 
  in the back-end. This helped patch a bug related to multiple instances of the GUI on 
  a single server (reported by Daniel Sommerhoff)

- `thetas.start` now accepts a matrix input for simulations with different latent trait starting values.
  Note that this also will affect the `start_item` criteria as well since the optimal first item
  will incorporate the new starting trait location (requested by Niek Frans)

# mirtCAT 1.9.3

- Added a element to `person` objects and results return from GUI version of `mirtCAT()` called
  `clientData`, which pertains to the character vector information from shiny's `session$clientData`
  component (requested by Felix Fischer and Daniel Sommerhoff)

- Allow multiple CAT session to be run during the same R session. This is primarily an update 
  for users interested in hosting `mirtCAT` on a single server where multiple users can be processed
  at the same time
  
- Fix `design_elements` global dependency between objects (reported by Felix Fisher)

# mirtCAT 1.8

- default wrapper to `Questions` element in `df` input now uses `shiny::HTML` rather than the previous
  `shiny::p`. This allows for HTML code to more naturally be included, as well as the use of `shiny` 
  tag constructor functions when used in concert with `as.character()`. This deprecates the previous
  `df$StemExpressions` format 
  
- list inputs  for `choiceValues` and `choiceNames` can accept named input elements
  that match the associated rownames in the `df` input to avoid the use of placeholders

- The final page splash screen now removes the `Next` button to avoid confusion (suggested by 
  Daniel Sommerhoff). Applications must be explicitly closed now by the user, and consequently
  the `stopApp` logical to the `shinyGUI` list has been deprecated
  
- Fixed the random item selection exposure control, which was selection suboptimal items instead
  (reported by @machow on Github)

- When Type input is `text` or `textArea` and `forced_choice = TRUE` then blocks of text input
  will also now be required. Otherwise, a message will be printed to the GUI

# mirtCAT 1.7

- message added in red whenever selection conditions not met (e.g., when using forced choice, rating
  scale options, or new mastery input)

- added an optioanl `Mastery` input colum to `df` to prevent the GUI from continuing until
  the item is answered correctly (not useful for CATs, but supported for teaching interfaces)

- added a `rankselect` GUI input to `df$Type` to create a list of rank-orded selection options
  corresponding to the input options

- Fix bug when using sequentially scored test without forced choice (reported by Aron Fink)

# mirtCAT 1.6

- add `Timer` option to `df` intput to set time limits for select items

- iterative algorithms now use the previous `theta` estimates as the starting values when locating
  the updated estimates

- fix selection bug when using prior covariance matrix selection rules (reported by Johan Braeken)

- `computeCriteria()` now respects the `subset` argument (reported by Johan Braeken)

# mirtCAT 1.5

- new `choiceNames` and `choiceValues` inputs to `shinyGUI` list to allow HTML stems for radio buttons and checkboxes
  (e.g., see the new arguments in `help(radioButtons)`)

- rotate x-axis 90 degrees in `plot()` generic by default

- `start_item` can now be a vector to change the starting item for each off-line response pattern input in Monte 
  Carlo simulations

- fixed off-line starting item when set to `'random'`, which previously set each participant's start item the same 
  (reported by Okan Bulut)

- internal updating function for `person` class to avoid direct assignment in `customUpdateThetas()` function

# mirtCAT 1.4

- warning message and slot included in GUI results when session terminated unexpectedly

- fix min items combination when using a `preCAT` list input (total min items is now the sum of both stages)

- fix scoping bug when hosting GUI on server (reported by Murat Doğan ŞAHİN)

- when a tab is closed early in the GUI the session now calls `stopApp()`

- new `customUpdateThetas` function input to `design` to create a map of how the latent trait estimates should
  be updated throughout the session. To better expose the internals, the previous `Update.thetas()` function
  associated with a `person` class is now available as a slot in the `design` internal object

- added `subset` and `info_mats` to `computeCriteria()` to compute the desired criteria on item subsets only
  and to return the information matrices used to compute criteria such as Drule, Trule, etc 
  (requested by Johan Braeken)

# mirtCAT 1.3

- removed support for a list input for `df` object in place of a more flexible format which supports
  the arbitrary creation of user-defined item formats through the new `customTypes` argument. This 
  is to be used in conjunction with the `df$Type` input to pair the respective inputs

- added `time_before_answer` to `shinyGUI` list to include a require number of seconds to wait 
  before a valid/omitted response can be accepted

- add `textAreaInput` support to GUI for include text-boxes as possible inputs

- `df$StemExpression` is now instead a logical vector used to indicate whether 
  the questions definition should be evaluated in R first

- added `AnswerFun` input to allow for user-defined functions for each respective item to 
  determine whether the answer provided is correct or incorrect. Mainly useful for text-based 
  items (suggested by Anna Mikolajetz)
  
- added a `theme` input to `shinyGUI` to support predefined themes from the "shinythemes" package

# mirtCAT 1.2

- `progress` logical added to `mirtCAT()` to print the progress of Monte Carlo simulations
  with the `pbapply` package

- Shadow testing and optimal test assembly designs supported by adding `constr_fun` input to 
  `mirtCAT()` and `objective` input to `findNextItem()`. See the `findNextItem()` documentation
  for details and examples

- `computeCriteria()` function added to return all the criteria values (e.g.,
  maximum information) associated with each respective item

- population-level Theta terms tracked internally for Monte Carlo simulations because
  `generate_pattern()` now stores the respective population values as a silent attribute. 
  Will now be displayed in summary/print/plot outputs, where applicable

- allow the internal `design` object to be modified through the `customNextItem()` function 

- added an `extract.mirtCAT()` function to better document and extract the components
  of the `person`, `design`, and `test` objects in `customNextItem()`. Allows for safer 
  and easier customization of item selection maps

- new `test_properties` and `person_properties` inputs to `design` element to allow for 
  prior information about the test/persons (e.g., selecting particular items based on 
  prior demographic information). Intended for use with a `customNextItem()` 
  function definition

# mirtCAT 1.1

- added `StemExpression` to `df` input to support arbitrary R expressions for stems to 
  be rendered with standard R code. Allows for inputs such as audio, video, etc, 
  as well through the use of a suitable `tags$FUN(...)`

- new `password` input to `shinyGUI` list to allow login and password gates. Useful when hosting 
  CAT on a server with potentially sensitive items

- default `shiny` stem wrapper function for `df` when it is a `data.frame` is now exposed via the 
  `stem_default_format` input to `shinyGUI`

- MathJax is now explicitly supported in the item stems and response options. 
  As before, users can provide a manual list explicitly defining the `shiny` functions; 
  however, if a `data.frame` object is used then the stems/responses
  will be automatically wrapped within a suitable `shiny::withMathJax()` function to render the output

- mental preparation screen now disabled for non-scored tests when 
  the `mo` object is omitted (i.e., equivalent to setting 
  `shinyGUI = list(begin_message = "")`)

- `'select'` Type input to `df` now uses a blank option as the default to avoid 
  clicking through accidentally. Also works better with the `forced_choice` default

# mirtCAT 1.0

- released for JSS publication

# mirtCAT 0.9

- fix MLWI/MPWI selection criteria

- `findNextItem()` is allowed to return all items given the selection criteria

# Changes in mirtCAT 0.8

- include `constraints` option for `excluded` items (useful for re-testing situations where 
  item selection is from the same bank of items but previously answered items should not appear)

- new `'none'` presentation Type to allow empty material with no responses (mainly for presenting 
  reading passages or other testlet-based items). Useful when used in conjunction with the 
  `constraints` input from the `design` list so that these items have predictable dependent 
  pairings (or can be used with the `customNextItem` form as well for explicit dependencies)

- `shinyGUI` input gained a `ui` element to allow users to completely customize the graphical UI 
  with shiny code

- added `customNextItem` function to allow a completely customized method for declaring the 
  item selection scheme

- support `checkbox` input type for `checkboxGroupInput()` function. Supplying one or more 
  answers will score the items in a partial credit style

- include missing input options in `df` input for `shiny` (e.g., width, placeholder, inline). 
  Removed `'radio_inline'` input because this can now be accomplished by passing 
  `Type = 'radio'` and `inline = TRUE`

# Changes in mirtCAT 0.6

- added `getPerson()` function to assign a person object following the use of `createShinyGUI`

- the `raw_responses` vector returned for each participant is now a character vector instead of an 
  integer

- added `slider` Type input for `sliderInput` rating scale questions

- `resume_file` removed, now if an associated `temp_file` is detected it will be used to resume
  the GUI session

- new `begin_message` input to `shinyGUI` to change message prior to starting the CAT

- changed `lastpage` element in `shinyGUI` input from a list to a function to allow messages 
  containing information pertaining to the session

# Changes in mirtCAT 0.5

- fix bug when using SH exposure control when the pool runs out of items

- add `delta_thetas` argument to design list to stop CAT if change between latent trait updates
  is less than this distance criteria

- include more functions to allow easier web hosting in locations such as `shinyapps.io`. Namely,
  `mirtCAT_preamble()` and `createShinyGUI()`

- graphical images (png, gif, and jpeg) no longer supported. Stems preferably should in HTML 
  for best results and control

- Stem paths can now point to and render HTML and markdown files in the GUI

- `df` input can now be a list for including more fine tuned shiny inputs

- check for the existence of graphical item stems, and allow relative or absolute paths

## BUGFIX

- fix stem location bug, and add better aspect ratio

- the `summary(mod, sort=FALSE)` argument returned a NULL object instead of the unsorted response.
  This has been patched and is now tested for
  
- when no `df` is supplied, check that the responses are in a plausible range 
  (reported by Gerard Flens)

# Changes in mirtCAT 0.4.2

- `forced_choice` argument for shinyGUI input to state whether response for each item are 
  required (for CATs, this should always be TRUE)

- response in GUI now are blank by default

- in `preCAT` list input change `nitems` to `min_items` and `max_items` for better control. Also 
  include a `response_variance` logical to terminate the preCAT stage when variability in the 
  the response options occurs (so that ML estimation becomes plausible)

- include Sympson-Hetter method of item exposure control

- major re-write of shiny inputs. Now the questions, answers, and options are all supplied through
  a `data.frame` object for better clarity, and all shiny inputs regarding the questions, image 
  locations, etc, are specified in this object
  
- `mirt_object` input renamed to `mo` for short

- the `local_pattern` input now accepts a matrix of response patterns for running simulation 
  designs. Returns a list of person objects instead of a single object
  
- `generate_pattern()` now supports multiple Theta inputs specifically for simulation designs

- `start_item` input now accepts character value inputs (in addition to explicit numeric inputs)
  corresponding to the `criteria` argument. This allows the first item to be selected using the 
  (adaptive) selection criteria

- added `generate.mirt_object()` function to build the required `mirt_object` input given
  population parameters
  
- new `cl` argument in `mirtCAT()` for passing a parallel cluster object defined from the 
  parallel package. Used to run simulation designs with parallel architecture for better speed
  
- by default, the demographics page is no longer generated in the GUI  

# Changes in mirtCAT 0.3

- `item_answers` can now be a list input, indicating that more than one correct answer is
  possible for a given item

- allow the first page and demographics page to be skipped by passing empty list arguments 

- added 'fixed' method to keep latent trait estimates at fixed values (useful for preCAT)

- Fisher information matrix added for remaining multidimensional models supported by `mirt`,
  including custom item types

- add 'Arule' and 'APrule' for minimum trace criteria of asymptotic covariance matrix

# Changes in mirtCAT 0.2

- temporary files can now be saved while the GUI is running, and restored at a later time

- more estimation options can be passed to `fscores()` via the ... argument

- sensitive objects are now removed from the package namespace when the `mirtCAT()` finishes 
  unsuccessfully 

- categories are always returned with based 1 for first response in the GUI

- add content balancing option

- various bug fixes, and update documentation

- new `findNextItem()` input for users to locate the next item to administer (likely for custom
  CAT interfaces that do not use the Shiny package). Can be updated with the `updateDesign()` 
  function
  
- moved 'Next' button in the web interface to the left panel box so that it will always remain in 
  the same location
  
- support CSS customization

- switch multidimensional selection criteria to use analytical expressions rather than numerical.
  Several multivariate Fisher information matrix computation currently not supported analytically,
  but will be steadily added.
  
- add classification capabilities to `design` list input
