#import "utils.typ": *

= March 28, 2023 <march-28-2023>
- *Breaking changes:*
  - Enumerations now require a space after their marker, that is, `[1.ok]` must now be written as `[1. ok]`
  - Changed default style for @terms[term lists]: Does not include a colon anymore and has a bit more indent

- Command line interface
  - Added `--font-path` argument for CLI
  - Embedded default fonts in CLI binary
  - Fixed build of CLI if `git` is not installed

- Miscellaneous improvements
  - Added support for disabling @math.mat[matrix] and @math.vec[vector] delimiters. Generally with `[#set math.mat(delim: none)]` or one-off with `[$mat(delim: #none, 1, 2; 3, 4)$]`.
  - Added @terms.separator[`separator`] argument to term lists
  - Added @math.round[`round`] function for equations
  - Numberings now allow zeros. To reset a counter, you can write `[#counter(..).update(0)]`
  - Added documentation for `{page()}` and `{position()}` methods on @location type
  - Added symbols for double, triple, and quadruple dot accent
  - Added smart quotes for Norwegian Bokmål
  - Added Nix flake
  - Fixed bibliography ordering in IEEE style
  - Fixed parsing of decimals in math: `[$1.2/3.4$]`
  - Fixed parsing of unbalanced delimiters in fractions: `[$1/(2 (x)$]`
  - Fixed unexpected parsing of numbers as enumerations, e.g. in `[1.2]`
  - Fixed combination of page fill and header
  - Fixed compiler crash if @repeat is used in page with automatic width
  - Fixed @math.mat[matrices] with explicit delimiter
  - Fixed @terms.indent[`indent`] property of term lists
  - Numerous documentation fixes
  - Links in bibliographies are now affected by link styling
  - Fixed hovering over comments in web app

= March 21, 2023 <march-21-2023>
- Reference and bibliography management
  - @bibliography[Bibliographies] and @cite[citations] (currently supported styles are APA, Chicago Author Date, IEEE, and MLA)
  - You can now @ref[reference] sections, figures, formulas, and works from the bibliography with `[@label]`
  - You can make an element referenceable with a label:
    - `[= Introduction <intro>]`
    - `[$ A = pi r^2 $ <area>]`

- Introspection system for interactions between different parts of the document
  - @counter function
    - Access and modify counters for pages, headings, figures, and equations
    - Define and use your own custom counters
    - Time travel: Find out what the counter value was or will be at some other point in the document (e.g. when you're building a list of figures, you can determine the value of the figure counter at any given figure).
    - Counters count in layout order and not in code order
  - @state function
    - Manage arbitrary state across your document
    - Time travel: Find out the value of your state at any position in the document
    - State is modified in layout order and not in code order
  - @query function
    - Find all occurrences of an element or a label, either in the whole document or before/after some location
    - Link to elements, find out their position on the pages and access their fields
    - Example use cases: Custom list of figures or page header with current chapter title
  - @locate function
    - Determines the location of itself in the final layout
    - Can be accessed to get the `page` and `x`, `y` coordinates
    - Can be used with counters and state to find out their values at that location
    - Can be used with queries to find elements before or after its location

- New @measure function
  - Measure the layouted size of elements
  - To be used in combination with the new `style` function that lets you generate different content based on the style context something is inserted into (because that affects the measured size of content)

- Exposed content representation
  - Content is not opaque anymore
  - Content can be compared for equality
  - The tree of content elements can be traversed with code
  - Can be observed in hover tooltips or with @repr
  - New @content[methods] on content: `func`, `has`, `at`, and `location`
  - All optional fields on elements are now settable
  - More uniform field names (`heading.title` becomes `heading.body`, `list.items` becomes `list.children`, and a few more changes)

- Further improvements
  - Added @figure function
  - Added @math.equation.numbering[`numbering`] parameter on equation function
  - Added @page.numbering[`numbering`] and @page.number-align[`number-align`] parameters on page function
  - The page function's @page.header[`header`] and @page.footer[`footer`] parameters do not take functions anymore. If you want to customize them based on the page number, use the new @page.numbering[`numbering`] parameter or @counter function instead.
  - Added @page.footer-descent[`footer-descent`] and @page.header-ascent[`header-ascent`] parameters
  - Better default alignment in header and footer
  - Fixed Arabic vowel placement
  - Fixed PDF font embedding issues
  - Renamed `math.formula` to @math.equation
  - Font family must be a named argument now: `[#set text(font: "..")]`
  - Added support for @par.hanging-indent[hanging indent]
  - Renamed paragraph `indent` to @par.first-line-indent[`first-line-indent`]
  - More accurate @calc.log[logarithm] when base is `2` or `10`
  - Improved some error messages
  - Fixed layout of @terms list

- Web app improvements
  - Added template gallery
  - Added buttons to insert headings, equations, raw blocks, and references
  - Jump to the source of something by clicking on it in the preview panel (works for text, equations, images, and more)
  - You can now upload your own fonts and use them in your project
  - Hover debugging and autocompletion now takes multiple files into account and works in show rules
  - Hover tooltips now automatically collapse multiple consecutive equal values
  - The preview now automatically scrolls to the right place when you type
  - Links are now clickable in the preview area
  - Toolbar, preview, and editor can now all be hidden
  - Added autocompletion for raw block language tags
  - Added autocompletion in SVG files
  - New back button instead of four-dots button
  - Lots of bug fixes

= February 25, 2023 <february-25-2023>
- Font changes
  - New default font: Linux Libertine
  - New default font for raw blocks: DejaVu Sans Mono
  - New default font for math: Book weight of New Computer Modern Math
  - Lots of new math fonts available
  - Removed Latin Modern fonts in favor of New Computer Modern family
  - Removed unnecessary smallcaps fonts which are already accessible through the corresponding main font and the @smallcaps function
- Improved default spacing for headings
- Added @panic function
- Added @str.clusters[`clusters`] and @str.codepoints[`codepoints`] methods for strings
- Support for multiple authors in @document.author[`set document`]
- Fixed crash when string is accessed at a position that is not a char boundary
- Fixed semicolon parsing in `[#var ;]`
- Fixed incremental parsing when inserting backslash at end of `[#"abc"]`
- Fixed names of a few font families (including Noto Sans Symbols and New Computer Modern families)
- Fixed autocompletion for font families
- Improved incremental compilation for user-defined functions

= February 15, 2023 <february-15-2023>
- @box[Box] and @block[block] have gained `fill`, `stroke`, `radius`, and `inset` properties
- Blocks may now be explicitly sized, fixed-height blocks can still break across pages
- Blocks can now be configured to be @block.breakable[`breakable`] or not
- @enum.numbering[Numbering style] can now be configured for nested enums
- @list.marker[Markers] can now be configured for nested lists
- The @eval function now expects code instead of markup and returns an arbitrary value. Markup can still be evaluated by surrounding the string with brackets.
- PDFs generated by Typst now contain XMP metadata
- Link boxes are now disabled in PDF output
- Tables don't produce small empty cells before a pagebreak anymore
- Fixed raw block highlighting bug

= February 12, 2023 <february-12-2023>
- Shapes, images, and transformations (move/rotate/scale/repeat) are now block-level. To integrate them into a paragraph, use a @box as with other elements.
- A colon is now required in an "everything" show rule: Write `{show: it => ..}` instead of `{show it => ..}`. This prevents intermediate states that ruin your whole document.
- Non-math content like a shape or table in a math formula is now centered vertically
- Support for widow and orphan prevention within containers
- Support for @text.dir[RTL] in lists, grids, and tables
- Support for explicit `{auto}` sizing for boxes and shapes
- Support for fractional (i.e. `{1fr}`) widths for boxes
- Fixed bug where columns jump to next page
- Fixed bug where list items have no leading
- Fixed relative sizing in lists, squares and grid auto columns
- Fixed relative displacement in @place function
- Fixed that lines don't have a size
- Fixed bug where `{set document(..)}` complains about being after content
- Fixed parsing of `{not in}` operation
- Fixed hover tooltips in math
- Fixed bug where a heading show rule may not contain a pagebreak when an outline is present
- Added @box.baseline[`baseline`] property on @box
- Added @math.op[`tg`] and @math.op[`ctg`] operators in math
- Added delimiter setting for @math.cases[`cases`] function
- Parentheses are now included when accepting a function autocompletion

= February 2, 2023 <february-2-2023>
- Merged text and math symbols, renamed a few symbols (including `infty` to `infinity` with the alias `oo`)
- Fixed missing italic mappings
- Math italics correction is now applied properly
- Parentheses now scale in `[$zeta(x/2)$]`
- Fixed placement of large root index
- Fixed spacing in `[$abs(-x)$]`
- Fixed inconsistency between text and identifiers in math
- Accents are now ignored when positioning superscripts
- Fixed vertical alignment in matrices
- Fixed `text` set rule in `raw` show rule
- Heading and list markers now parse consistently
- Allow arbitrary math directly in content

= January 30, 2023 <january-30-2023>
#link("https://typst.app/blog/2023/january-update")[Go to the announcement blog post.]
- New expression syntax in markup/math
  - Blocks cannot be directly embedded in markup anymore
  - Like other expressions, they now require a leading hash
  - More expressions available with hash, including literals (`[#"string"]`) as well as field access and method call without space: `[#emoji.face]`
- New import syntax
  - `[#import "module.typ"]` creates binding named `module`
  - `[#import "module.typ": a, b]` or `[#import "module.typ": *]` to import items
  - `[#import emoji: face, turtle]` to import from already bound module
- New symbol handling
  - Removed symbol notation
  - Symbols are now in modules: `{sym}`, `{emoji}`, and `{math}`
  - Math module also reexports all of `{sym}`
  - Modified through field access, still order-independent
  - Unknown modifiers are not allowed anymore
  - Support for custom symbol definitions with `symbol` function
  - Symbols now listed in documentation
- New `{math}` module
  - Contains all math-related functions
  - Variables and function calls directly in math (without hash) access this module instead of the global scope, but can also access local variables
  - Can be explicitly used in code, e.g. `[#set math.vec(delim: "[")]`
- Delimiter matching in math
  - Any opening delimiters matches any closing one
  - When matched, they automatically scale
  - To prevent scaling, escape them
  - To forcibly match two delimiters, use `lr` function
  - Line breaks may occur between matched delimiters
  - Delimiters may also be unbalanced
  - You can also use the `lr` function to scale the brackets (or just one bracket) to a specific size manually
- Multi-line math with alignment
  - The `\` character inserts a line break
  - The `&` character defines an alignment point
  - Alignment points also work for underbraces, vectors, cases, and matrices
  - Multiple alignment points are supported
- More capable math function calls
  - Function calls directly in math can now take code expressions with hash
  - They can now also take named arguments
  - Within math function calls, semicolons turn preceding arguments to arrays to support matrices: `[$mat(1, 2; 3, 4)$]`
- Arbitrary content in math
  - Text, images, and other arbitrary content can now be embedded in math
  - Math now also supports font fallback to support e.g. CJK and emoji
- More math features
  - New text operators: `op` function, `lim`, `max`, etc.
  - New matrix function: `mat`
  - New n-ary roots with `root` function: `[$root(3, x)$]`
  - New under- and overbraces, -brackets, and -lines
  - New `abs` and `norm` functions
  - New shorthands: `[|`, `|]`, and `||`
  - New `attach` function, overridable attachments with `script` and `limit`
  - Manual spacing in math, with `h`, `thin`, `med`, `thick` and `quad`
  - Symbols and other content may now be used like a function, e.g. `[$zeta(x)$]`
  - Added Fira Math font, removed Noto Sans Math font
  - Support for alternative math fonts through `[#show math.formula: set text("Fira Math")]`
- More library improvements
  - New `calc` module, `abs`, `min`, `max`, `even`, `odd` and `mod` moved there
  - New `message` argument on `{assert}` function
  - The `pairs` method on dictionaries now returns an array of length-2 arrays instead of taking a closure
  - The method call `{dict.at("key")}` now always fails if `"key"` doesn't exist Previously, it was allowed in assignments. Alternatives are `{dict.key = x}` and `{dict.insert("key", x)}`.
- Smarter editor functionality
  - Autocompletion for local variables
  - Autocompletion for methods available on a value
  - Autocompletion for symbols and modules
  - Autocompletion for imports
  - Hover over an identifier to see its value(s)
- Further editor improvements
  - New Font menu with previews
  - Single projects may now be shared with share links
  - New dashboard experience if projects are shared with you
  - Keyboard Shortcuts are now listed in the menus and there are more of them
  - New Offline indicator
  - Tooltips for all buttons
  - Improved account protection
  - Moved Status indicator into the error list button
- Further fixes
  - Multiple bug fixes for incremental parser
  - Fixed closure parameter capturing
  - Fixed tons of math bugs
  - Bugfixes for performance, file management, editing reliability
  - Added redirection to the page originally navigated to after signin
