diff --git a/packages/preview/breezy-report/0.1.0/LICENSE b/packages/preview/breezy-report/0.1.0/LICENSE new file mode 100644 index 0000000000..322b3d4eb4 --- /dev/null +++ b/packages/preview/breezy-report/0.1.0/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Breanna Barraclough + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/preview/breezy-report/0.1.0/README.md b/packages/preview/breezy-report/0.1.0/README.md new file mode 100644 index 0000000000..b8912d1ba7 --- /dev/null +++ b/packages/preview/breezy-report/0.1.0/README.md @@ -0,0 +1,48 @@ +# breezy-report + +A clean, colour-customisable engineering report template for Typst. Designed for university assignment submissions. The submission date is auto-populated, but can be overridden. + +## Usage + +```typst +#import "@preview/breezy-report:0.1.0": breezy, end-breezy + +#show: breezy.with( + semester: "Semester 1 2026", + courseCode: "ENGE500", + courseName: "Engineering Mathematics I", + title: "My Report: With an extended title", + studentID: "12345678", + author: "Jane Smith", + accentColour: rgb("#300649"), +) + +//Your content goes here + +//If you need to include references, add the following after the rest of your body. The end-breezy function removes the top bar from appearing on the reference pages. + +#end-breezy() +#pagebreak() +#bibliography("ref.bib", style: "ieee", title: "References") +``` + +## Parameters + +| Parameter | Default | Description | +|---|---|---| +| `accentColour` | `rgb("#300649")` | Primary accent colour | +| `tableHeaderTextColour` | `white` | Table header text colour | +| `date` | datetime.today() | Date for the title page. Override with `date: datetime(day: #, month: #, year: ####)`| + + +## Default fonts + - **Georgia**: Body text. + - **Montserrat**: Headings and title page. Must be installed locally - download from [Google Fonts](https://fonts.google.com/specimen/Montserrat). + - **Arial**. Fallback font for headings & title page is Montserrat is not installed. + +## Example pages +![An example title page from the breezy-report template with dark purple bars across the top and bottom of the page, with the student name, ID, course name and course ID overlayed. The title is in the centre of the page.](imgs/1.png) + +![An example contents page from the breezy-report template.](imgs/2.png) + +![An example page from the breezy-report template. A dark purple bar is the page header with the course ID and assignment title on the left, the student ID on the right. List items, the headings, and the table headers are coloured in the accent colour of dark purple. Code block has a light purple background with slightly rounded corners.](imgs/3.png) diff --git a/packages/preview/breezy-report/0.1.0/imgs/1.png b/packages/preview/breezy-report/0.1.0/imgs/1.png new file mode 100644 index 0000000000..8a46268e7b Binary files /dev/null and b/packages/preview/breezy-report/0.1.0/imgs/1.png differ diff --git a/packages/preview/breezy-report/0.1.0/imgs/2.png b/packages/preview/breezy-report/0.1.0/imgs/2.png new file mode 100644 index 0000000000..50e90e424e Binary files /dev/null and b/packages/preview/breezy-report/0.1.0/imgs/2.png differ diff --git a/packages/preview/breezy-report/0.1.0/imgs/3.png b/packages/preview/breezy-report/0.1.0/imgs/3.png new file mode 100644 index 0000000000..19ad88f216 Binary files /dev/null and b/packages/preview/breezy-report/0.1.0/imgs/3.png differ diff --git a/packages/preview/breezy-report/0.1.0/template.typ b/packages/preview/breezy-report/0.1.0/template.typ new file mode 100644 index 0000000000..3844334c8c --- /dev/null +++ b/packages/preview/breezy-report/0.1.0/template.typ @@ -0,0 +1,222 @@ +// breezy-report: A clean colour-customisable engineering report template +// Author: Breanna Barraclough +// License: MIT-0 + +#let in-body = state("in-body", false) + +#let end-breezy(bib-file: none) = { + in-body.update(false) +} +#let breezy( + semester: "Semester 1, 20##", + date: datetime.today(), + course-code: "ENGE500", + course-name: "Course Name", + title:"Report Title: The purpose of the report", + student-id:"########", + author:"Author Name", + accent-colour:rgb("#300649"), + table-header-text-colour:white, + report +) = [ + #let headingFont = ("Montserrat","Arial") + + #let secondaryColour = accent-colour.lighten(20%) + + #set par(leading: 0.75em, spacing: 1.2em) + + #show heading: it => block( + above:1.5em, + below:1em, + text(font: headingFont,fill:accent-colour,it) + ) + + #set heading( + numbering: "1.", + ) + + #show raw.where(block:true): it => block( + fill: accent-colour.lighten(90%), + inset:12pt, + radius:3pt, + width:100%, + text(fill:luma(15%),it) + ) + + #set text(font:"Georgia") + #set line(length:100%) + + #set list( + marker: ( + [#text(fill: accent-colour)[•]], + [#text(fill: accent-colour)[‣]], + [#text(fill: accent-colour)[–]] + ) + ) + + + //Colours all supplements to the accent colour + #show figure.caption: it => [ + #text(fill: accent-colour)[#it.supplement #it.counter.display(it.numbering)]#it.separator#it.body + ] + + #show ref: it => text(fill: accent-colour, it) + #show cite: it => text(fill: accent-colour, it) + + #show link: it => text(fill:accent-colour,it) + + // Provide custom supplements for each figure type + #show figure.where(kind: image): set figure(supplement: [Fig.]) + #show figure.where(kind: table): set figure(supplement: [Tab.]) + #set math.equation(numbering: "(1)", supplement: [Eq.]) + #show figure.where(kind: "code"): set figure(supplement: [Snip.]) + + // Custom table settings where the heading is bold, white, serif font. Table has dark gray borders and left-aligned text. + #show table.cell.where(y: 0): set text( + weight: "bold", + font:headingFont, + fill: table-header-text-colour + ) + #set table( + stroke:0.5pt + accent-colour.lighten(50%), + fill: (x,y) => { + if y == 0 {accent-colour} + }, + inset:5pt, + align:left + ) + + // Page settings + + #set page( + paper: "a4", + margin: (top: 2.5cm, bottom: 2.5cm, left: 2cm, right: 2cm), + + // Header design, applied to all but first page + header: context { + if (in-body.get()){ + [ + #place( + top + left, + dx: -2cm, + dy: 0pt, + block( + width: 100% + 4.1cm, + height: 1.75cm, + fill: accent-colour + ) + ) + #set text(fill: accent-colour.lighten(90%)) + #align(horizon)[ + #grid( + columns: (1fr, auto), + [ + #course-code + #{ let parts = title.split(":") + parts.at(0) + } + ], + [ + ID: #student-id + ] + ) + ] + ] + } else { [] } + }, + ) + + // Cover page + + #place( + top+left, + dx:-2cm, + dy:-2.5cm, + block( + width:100% + 4.1cm, + height:6cm, + fill:accent-colour, + inset:(x:2.5cm,y:1.5cm), + align(bottom)[ + #text(size:20pt,weight:"bold",font:headingFont,fill:white)[#course-name] + #v(-0.5em) + #text(size:14pt,weight:"bold",font:headingFont,fill:accent-colour.lighten(70%))[#course-code] + ] + ) + ) + + #align(center + horizon)[ + #text(size:12pt,font:headingFont,fill:accent-colour.lighten(25%))[#semester] + #v(1em) + #text(size:28pt,font:headingFont,fill:accent-colour,weight:"bold")[#title] + #v(0.5em) + #line(length:40%,stroke:accent-colour.lighten(60%)) + ] + + #place( + bottom+left, + dx:-2cm, + dy:2.5cm, + block( + width:100% + 4.1cm, + height:3.5cm, + fill:accent-colour, + inset:(x:2.5cm,y:1cm), + align(horizon)[ + #grid( + columns:(1fr,auto), + align:horizon, + [ + #text(size:14pt,font:headingFont,fill:white,weight:"bold")[#author] + #v(-0.5em) + #text(size:11pt,font:headingFont,fill:accent-colour.lighten(70%))[Student ID: #student-id] + ], + [ + #text(size:11pt,font:headingFont,fill:accent-colour.lighten(94%))[ *Submission date:* \ + #date.display("[day]/[month]/[year]")] + ] + ) + ] + ) + + ) + + #pagebreak() + + // Create page number in footer, removing title page from the count + + #counter(page).update(1) + #set page( + footer: context{ + align(center, + text(fill:accent-colour)[-- #counter(page).get().first() --] + ) + }, + ) + +#outline() + + // Only display the table of contents for tables, figures if there are any + + #context{ + + if counter(figure.where(kind:image)).final().at(0) > 0 { + outline( + title:"List of Figures", + target: figure.where(kind:image) + ) + } + + if counter(figure.where(kind:table)).final().at(0) > 0 { + outline( + title:"List of Tables", + target: figure.where(kind:table) + ) + } + } + + #in-body.update(true) + + #pagebreak() + #report +] \ No newline at end of file diff --git a/packages/preview/breezy-report/0.1.0/template/main.typ b/packages/preview/breezy-report/0.1.0/template/main.typ new file mode 100644 index 0000000000..579dcf721c --- /dev/null +++ b/packages/preview/breezy-report/0.1.0/template/main.typ @@ -0,0 +1,52 @@ +#import "@preview/breezy-report:0.1.0": breezy, end-breezy + +#show: breezy.with( + semester:"Semester 1 2026", + course-code: "ENGE500", + course-name: "Course Name", + title: "Report Title: The purpose of the report", + student-id: "12345678", + author: "Student Name", +) + += Section +#lorem(40) +- List item 1 +- List item 2 + - List item sub 1 + - List item sub 2 +- List item 3 + +#lorem(20) + +== Subsection +#lorem(60) +#figure( + table( + columns:(1fr,1fr), + [Heading 1],[Heading 2], + [#lorem(10)],[#lorem(5)] +), +caption:"Caption for a table." +) += Section +#lorem(40) + +```c +#int main() +{ + int count = 0; + + while (1) + { + for (int i = 0; i < 5; i++) + { + printf(count); + count++; + } + } +} + +``` + +#end-breezy() \ No newline at end of file diff --git a/packages/preview/breezy-report/0.1.0/typst.toml b/packages/preview/breezy-report/0.1.0/typst.toml new file mode 100644 index 0000000000..bc2cbc1a86 --- /dev/null +++ b/packages/preview/breezy-report/0.1.0/typst.toml @@ -0,0 +1,20 @@ +[package] +name = "breezy-report" +version = "0.1.0" +entrypoint = "template.typ" +authors = ["Breanna Barraclough "] +license = "MIT" +description = "Clean, colour-customisable engineering report template for university submissions." +repository = "https://github.com/brebarra/breezy-report" +keywords = ["report","assignment","university"] +categories = ["report"] +exclude = [ + "imgs/2.png", + "imgs/3.png" +] + + +[template] +path = "template" +entrypoint = "main.typ" +thumbnail = "imgs/1.png" \ No newline at end of file