#import "utils.typ": *

= Bibliography management <bibliography-management>
- New bibliography engine based on #link("https://citationstyles.org/")[CSL] (Citation Style Language). Ships with about 100 commonly used citation styles and can load custom `.csl` files.
- Added new @cite.form[`form`] argument to the `cite` function to produce different forms of citations (e.g. for producing a citation suitable for inclusion in prose)
- The @cite function now takes only a single label/key instead of allowing multiple. Adjacent citations are merged and formatted according to the citation style's rules automatically. This works both with the reference syntax and explicit calls to the `cite` function. *(Breaking change)*
- The `cite` function now takes a @label[label] instead of a string *(Breaking change)*
- Added @bibliography.full[`full`] argument to bibliography function to print the full bibliography even if not all works were cited
- Bibliography entries can now contain Typst equations (wrapped in `[$..$]` just like in markup), this works both for `.yaml` and `.bib` bibliographies
- The hayagriva YAML format was improved. See its #link("https://github.com/typst/hayagriva/blob/main/CHANGELOG.md")[changelog] for more details. *(Breaking change)*
- A few bugs with `.bib` file parsing were fixed
- Removed `brackets` argument of `cite` function in favor of `form`

= Visualization <visualization>
- Gradients and colors (thanks to #gh("Dherse"))
  - Added support for @gradient[gradients] on shapes and text
  - Supports linear, radial, and conic gradients
  - Added support for defining colors in more color spaces, including @color.oklab[Oklab], @color.linear-rgb[Linear RGB(A)], @color.hsl[HSL], and @color.hsv[HSV]
  - Added @color.saturate[`saturate`], @color.desaturate[`desaturate`], and @color.rotate[`rotate`] functions on colors
  - Added @color:predefined-color-maps[`color.map`] module with predefined color maps that can be used with gradients
  - Rename `kind` function on colors to @color.space[`space`]
  - Removed `to-rgba`, `to-cmyk`, and `to-luma` functions in favor of a new @color.components[`components`] function
- Improved rendering of @rect[rectangles] with corner radius and varying stroke widths
- Added support for properly clipping @box.clip[boxes] and @block.clip[blocks] with a border radius
- Added `background` parameter to @overline, @underline, and @strike functions
- Fixed inaccurate color embedding in PDFs
- Fixed ICC profile handling for images embedded in PDFs

= Text and Layout <text-and-layout>
- Added support for automatically adding proper @text.cjk-latin-spacing[spacing] between CJK and Latin text (enabled by default)
- Added support for automatic adjustment of more CJK punctuation
- Added @quote element for inserting inline and block quotes with optional attributions
- Added @raw.line element for customizing the display of individual lines of raw text, e.g. to add line numbers while keeping proper syntax highlighting
- Added support for per-side @table.inset[inset] customization to table function
- Added Hungarian and Romanian translations
- Added support for Czech hyphenation
- Added support for setting custom @smartquote[smart quotes]
- The default @figure.caption.separator[figure separator] now reacts to the currently set language and region
- Improved line breaking of links / URLs (especially helpful for bibliographies with many URLs)
- Improved handling of consecutive hyphens in justification algorithm
- Fixed interaction of justification and hanging indent
- Fixed a bug with line breaking of short lines without spaces when justification is enabled
- Fixed font fallback for hyphen generated by hyphenation
- Fixed handling of word joiner and other no-break characters during hyphenation
- Fixed crash when hyphenating after an empty line
- Fixed line breaking of composite emoji like 🏳️‍🌈
- Fixed missing text in some SVGs
- Fixed font fallback in SVGs
- Fixed behavior of @pagebreak.to[`to`] argument on `pagebreak` function
- Fixed `{set align(..)}` for equations
- Fixed spacing around @place[placed] elements
- Fixed coalescing of @block.above[`above`] and @block.below[`below`] spacing if given in em units and the font sizes differ
- Fixed handling of `extent` parameter of @underline, @overline, and @strike functions
- Fixed crash for @place.float[floating placed elements] with no specified vertical alignment
- Partially fixed a bug with citations in footnotes

= Math <math>
- Added `gap` argument for @math.vec.gap[`vec`], @math.mat.gap[`mat`], and @math.cases.gap[`cases`] function
- Added `size` argument for @math.abs[`abs`], @math.norm[`norm`], @math.floor[`floor`], @math.ceil[`ceil`], and @math.round[`round`] functions
- Added @math.cases.reverse[`reverse`] parameter to cases function
- Added support for multinomial coefficients to @math.binom[`binom`] function
- Removed `rotation` argument on @math.cancel[`cancel`] function in favor of a new and more flexible `angle` argument *(Breaking change)*
- Added `wide` constant, which inserts twice the spacing of `quad`
- Added `csch` and `sech` @math.op[operators]
- `↼`, `⇀`, `↔`, and `⟷` can now be used as @math.accent[accents]
- Added `integral.dash`, `integral.dash.double`, and `integral.slash` @sym[symbols]
- Added support for specifying negative indices for @math.mat.augment[augmentation] lines to position the line from the back
- Fixed default color of matrix @math.mat.augment[augmentation] lines
- Fixed attachment of primes to inline expressions
- Math content now respects the text @text.baseline[baseline] setting

= Performance <performance>
- Fixed a bug related to show rules in templates which would effectively disable incremental compilation in affected documents
- Micro-optimized code in several hot paths, which brings substantial performance gains, in particular in incremental compilations
- Improved incremental parsing, which affects the whole incremental compilation pipeline
- Added support for incremental parsing in the CLI
- Added support for incremental SVG encoding during PDF export, which greatly improves export performance for documents with many SVG

= Tooling and Diagnostics <tooling-and-diagnostics>
- Improved autocompletion for variables that are in-scope
- Added autocompletion for package imports
- Added autocompletion for @label[labels]
- Added tooltip that shows which variables a function captures (when hovering over the equals sign or arrow of the function)
- Diagnostics are now deduplicated
- Improved diagnostics when trying to apply unary `+` or `-` to types that only support binary `+` and `-`
- Error messages now state which label or citation key isn't present in the document or its bibliography
- Fixed a bug where function argument parsing errors were shadowed by function execution errors (e.g. when trying to call @array.sorted and passing the key function as a positional argument instead of a named one).

= Export <export>
- Added support for configuring the document's creation @document.date[`date`]. If the `date` is set to `{auto}` (the default), the PDF's creation date will be set to the current date and time.
- Added support for configuring document @document.keywords[`keywords`]
- Generated PDFs now contain PDF document IDs
- The PDF creator tool metadata now includes the Typst version

= Web app <web-app>
- Added version picker to pin a project to an older compiler version (with support for Typst 0.6.0+)
- Fixed desyncs between editor and compiler and improved overall stability
- The app now continues to highlight the document when typing while the document is being compiled

= Command line interface <command-line-interface>
- Added support for discovering fonts through fontconfig
- Now clears the screen instead of resetting the terminal
- Now automatically picks correct file extension for selected output format
- Now only regenerates images for changed pages when using `typst watch` with PNG or SVG export

= Miscellaneous Improvements <miscellaneous-improvements>
- Added @version type and `sys.version` constant specifying the current compiler version. Can be used to gracefully support multiple versions.
- The U+2212 MINUS SIGN is now used when displaying a numeric value, in the @repr of any numeric value and to replace a normal hyphen in text mode when before a digit. This improves, in particular, how negative integer values are displayed in math mode.
- Added support for specifying a default value instead of failing for `remove` function in @array.remove[array] and @dictionary.remove[dictionary]
- Simplified Page Setup Guide examples
- Switched the documentation from using the word "hashtag" to the word "hash" where appropriate
- Added support for @array.zip without any further arguments
- Fixed crash when a plugin tried to read out of bounds memory
- Fixed crashes when handling infinite @length[lengths]
- Fixed introspection (mostly bibliography) bugs due to weak page break close to the end of the document

= Development <development>
- Extracted `typst::ide` into separate `typst_ide` crate
- Removed a few remaining `'static` bounds on `&dyn World`
- Removed unnecessary dependency, which reduces the binary size
- Fixed compilation of `typst` by itself (without `typst-library`)
- Fixed warnings with Nix flake when using `lib.getExe`
