@tonguetoquill/collection 0.2.5-beta.1 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +39 -39
  3. package/index.d.ts +2 -2
  4. package/index.js +8 -8
  5. package/package.json +41 -41
  6. package/quills/af4141/0.1.0/Quill.yaml +92 -88
  7. package/quills/af4141/0.1.0/assets/GNU General Public License.txt +340 -0
  8. package/quills/af4141/0.1.0/assets/NimbusRomNo9L-Med.otf +0 -0
  9. package/quills/af4141/0.1.0/assets/NimbusRomNo9L-MedIta.otf +0 -0
  10. package/quills/af4141/0.1.0/assets/NimbusRomNo9L-Reg.otf +0 -0
  11. package/quills/af4141/0.1.0/assets/NimbusRomNo9L-RegIta.otf +0 -0
  12. package/quills/af4141/0.1.0/design/TASK.md +19 -19
  13. package/quills/af4141/0.1.0/example.md +35 -35
  14. package/quills/af4141/0.1.0/packages/typst-af4141/FIELDS.json +3169 -3169
  15. package/quills/af4141/0.1.0/packages/typst-af4141/form.typ +538 -538
  16. package/quills/af4141/0.1.0/packages/typst-af4141/lib.typ +227 -227
  17. package/quills/af4141/0.1.0/packages/typst-af4141/typst.toml +7 -7
  18. package/quills/af4141/0.1.0/plate.typ +50 -48
  19. package/quills/classic_resume/0.1.0/Quill.yaml +118 -118
  20. package/quills/classic_resume/0.1.0/example.md +232 -232
  21. package/quills/classic_resume/0.1.0/packages/ttq-classic-resume/LICENSE +21 -21
  22. package/quills/classic_resume/0.1.0/packages/ttq-classic-resume/README.md +38 -38
  23. package/quills/classic_resume/0.1.0/packages/ttq-classic-resume/src/components.typ +184 -184
  24. package/quills/classic_resume/0.1.0/packages/ttq-classic-resume/src/layout.typ +42 -42
  25. package/quills/classic_resume/0.1.0/packages/ttq-classic-resume/src/lib.typ +5 -5
  26. package/quills/classic_resume/0.1.0/packages/ttq-classic-resume/typst.toml +26 -26
  27. package/quills/classic_resume/0.1.0/plate.typ +44 -44
  28. package/quills/cmu_letter/0.1.0/.quillignore +30 -30
  29. package/quills/cmu_letter/0.1.0/Quill.yaml +64 -64
  30. package/quills/cmu_letter/0.1.0/assets/cmu-wordmark.svg +174 -174
  31. package/quills/cmu_letter/0.1.0/example.md +30 -30
  32. package/quills/cmu_letter/0.1.0/packages/tonguetoquill-cmu-letter/LICENSE +21 -21
  33. package/quills/cmu_letter/0.1.0/packages/tonguetoquill-cmu-letter/fonts/README.txt +100 -100
  34. package/quills/cmu_letter/0.1.0/packages/tonguetoquill-cmu-letter/src/backmatter.typ +13 -13
  35. package/quills/cmu_letter/0.1.0/packages/tonguetoquill-cmu-letter/src/config.typ +39 -39
  36. package/quills/cmu_letter/0.1.0/packages/tonguetoquill-cmu-letter/src/frontmatter.typ +72 -72
  37. package/quills/cmu_letter/0.1.0/packages/tonguetoquill-cmu-letter/src/lib.typ +47 -47
  38. package/quills/cmu_letter/0.1.0/packages/tonguetoquill-cmu-letter/src/mainmatter.typ +42 -42
  39. package/quills/cmu_letter/0.1.0/packages/tonguetoquill-cmu-letter/src/primitives.typ +70 -70
  40. package/quills/cmu_letter/0.1.0/packages/tonguetoquill-cmu-letter/src/utils.typ +85 -85
  41. package/quills/cmu_letter/0.1.0/packages/tonguetoquill-cmu-letter/typst.toml +17 -17
  42. package/quills/cmu_letter/0.1.0/plate.typ +19 -19
  43. package/quills/taro/0.1.0/Quill.yaml +29 -29
  44. package/quills/taro/0.1.0/example.md +26 -26
  45. package/quills/taro/0.1.0/plate.typ +31 -31
  46. package/quills/usaf_memo/0.1.0/.quillignore +30 -30
  47. package/quills/usaf_memo/0.1.0/Quill.yaml +209 -209
  48. package/quills/usaf_memo/0.1.0/example.md +54 -54
  49. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/LICENSE +21 -21
  50. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/fonts/Cinzel/LICENSE +93 -93
  51. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/fonts/CopperplateCC/LICENSE.md +79 -79
  52. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/GNU General Public License.txt +339 -339
  53. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/src/backmatter.typ +28 -28
  54. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/src/body.typ +332 -332
  55. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/src/config.typ +63 -63
  56. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/src/frontmatter.typ +114 -114
  57. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/src/indorsement.typ +118 -118
  58. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/src/lib.typ +55 -55
  59. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/src/mainmatter.typ +32 -32
  60. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/src/primitives.typ +272 -272
  61. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/src/utils.typ +377 -377
  62. package/quills/usaf_memo/0.1.0/packages/tonguetoquill-usaf-memo/typst.toml +16 -16
  63. package/quills/usaf_memo/0.1.0/plate.typ +74 -74
  64. package/quills/usaf_memo/0.2.0/.quillignore +30 -30
  65. package/quills/usaf_memo/0.2.0/Quill.yaml +219 -219
  66. package/quills/usaf_memo/0.2.0/example.md +55 -55
  67. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/.gitignore +6 -6
  68. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/LICENSE +21 -21
  69. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/Cinzel/LICENSE +93 -93
  70. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/CopperplateCC/LICENSE.md +79 -79
  71. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/fonts/NimbusRomanNo9L/GNU General Public License.txt +339 -339
  72. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/backmatter.typ +28 -28
  73. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/body.typ +333 -333
  74. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/config.typ +64 -64
  75. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/frontmatter.typ +114 -114
  76. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/indorsement.typ +118 -118
  77. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/lib.typ +55 -55
  78. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/mainmatter.typ +32 -32
  79. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/primitives.typ +293 -293
  80. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/utils.typ +374 -374
  81. package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/typst.toml +27 -27
  82. package/quills/usaf_memo/0.2.0/plate.typ +75 -75
  83. package/templates/af4141.md +88 -88
  84. package/templates/cmu_letter_template.md +37 -37
  85. package/templates/loc.md +78 -78
  86. package/templates/pass_request.md +43 -43
  87. package/templates/rebuttal.md +55 -55
  88. package/templates/taro.md +26 -26
  89. package/templates/templates.json +49 -55
  90. package/templates/usaf_template.md +23 -23
  91. package/templates/ussf_template.md +29 -29
  92. package/quills/daf4392/0.1.0/Quill.yaml +0 -110
  93. package/quills/daf4392/0.1.0/assets/arimo-v35-latin-700.ttf +0 -0
  94. package/quills/daf4392/0.1.0/assets/arimo-v35-latin-700italic.ttf +0 -0
  95. package/quills/daf4392/0.1.0/assets/arimo-v35-latin-italic.ttf +0 -0
  96. package/quills/daf4392/0.1.0/assets/arimo-v35-latin-regular.ttf +0 -0
  97. package/quills/daf4392/0.1.0/assets/page1.png +0 -0
  98. package/quills/daf4392/0.1.0/example.md +0 -33
  99. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/FIELDS.json +0 -9
  100. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/form.typ +0 -14
  101. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/lib.typ +0 -227
  102. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/out/debug.typ +0 -4
  103. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/out/example.typ +0 -4
  104. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/page1.png +0 -0
  105. package/quills/daf4392/0.1.0/packages/daf4392page2_pkg/typst.toml +0 -7
  106. package/quills/daf4392/0.1.0/plate.typ +0 -60
  107. package/templates/daf4392.md +0 -33
@@ -1,184 +1,184 @@
1
- // components.typ
2
- #import "layout.typ": config, vgap
3
-
4
- // --- Utility Functions ---
5
-
6
- // Horizontal Rule
7
- #let hrule = {
8
- line(length: 100%, stroke: 0.75pt)
9
- v(-2pt)
10
- }
11
-
12
- // --- Constants ---
13
- #let bullet_marker_width = 3.5pt
14
- #let bullet_body_indent = 0.8em
15
- #let bullet_text_offset = bullet_marker_width + bullet_body_indent
16
-
17
- // --- Component Exports ---
18
-
19
- // Resume Header
20
- #let resume-header(name: "", contacts: ()) = {
21
- set align(left)
22
-
23
- // Name
24
- block(text(size: 18pt, weight: "bold", name))
25
-
26
- set text(size: config.base-size, weight: "regular")
27
-
28
- vgap(config.entry-spacing)
29
-
30
- // Contacts
31
- // Separator: ' ❖ '
32
- for i in range(0, contacts.len()) {
33
- let contact = contacts.at(i)
34
- if i > 0 {
35
- [~~#text("❖", size: 8pt)~~#contact]
36
- } else {
37
- [#contact]
38
- }
39
- }
40
-
41
- //block(contact_text)
42
- }
43
-
44
-
45
- // Section Header
46
- #let section-header(title, extra: none) = {
47
- vgap(config.section-spacing)
48
- set align(left)
49
-
50
- // Title
51
- block({
52
- text(weight: "bold", upper(title))
53
- if extra != none {
54
- text(weight: "bold", " " + extra)
55
- }
56
- })
57
-
58
- hrule
59
- }
60
-
61
- // Timeline Entry
62
- #let timeline-entry(
63
- heading-left: "",
64
- heading-right: "",
65
- subheading-left: none,
66
- subheading-right: none,
67
- body: none,
68
- ) = {
69
- vgap(config.entry-spacing)
70
- block(breakable: false, {
71
- // Header Grid (combined for alignment and spacing)
72
- let cells = (
73
- align(left, text(weight: "bold", heading-left)),
74
- align(right, text(weight: "bold", heading-right)),
75
- )
76
-
77
- if subheading-left != none or subheading-right != none {
78
- cells.push(align(left, text(style: "italic", subheading-left)))
79
- cells.push(align(right, text(style: "italic", subheading-right)))
80
- }
81
-
82
- grid(
83
- columns: (1fr, auto),
84
- row-gutter: config.leading, // Use global vertical rhythm
85
- ..cells,
86
- )
87
-
88
- // Body content (Optional)
89
- if body != none {
90
- // Style native Typst lists to match previous bullet styling
91
- show list: set list(
92
- marker: box(fill: black, width: bullet_marker_width, height: bullet_marker_width, radius: 0pt, baseline: .5em),
93
- body-indent: bullet_body_indent,
94
- indent: 0em,
95
- )
96
-
97
- body
98
- }
99
- })
100
- }
101
-
102
- // Unified Table Component
103
- // Auto-detects structure from item shape:
104
- // Categorized: ((category: content, text: content), ...)
105
- // Flat: (content, content, ...)
106
- #let table(items: (), columns: 2) = {
107
- if items.len() == 0 { return }
108
-
109
- // Auto-detect from item shape
110
- let is_categorized = (
111
- type(items.at(0)) == dictionary and "category" in items.at(0)
112
- )
113
-
114
- vgap(config.entry-spacing)
115
-
116
- let render_cell(item) = {
117
- if is_categorized {
118
- block({
119
- text(weight: "bold", item.category)
120
- linebreak()
121
- item.text
122
- })
123
- } else {
124
- item
125
- }
126
- }
127
-
128
- pad(
129
- left: bullet_text_offset,
130
- grid(
131
- columns: (1fr,) * columns,
132
- row-gutter: if is_categorized {
133
- config.leading + config.entry-spacing
134
- } else {
135
- config.leading
136
- },
137
- column-gutter: 1em,
138
- ..items.map(render_cell),
139
- ),
140
- )
141
- }
142
-
143
- // Backward compatibility shims (deprecated)
144
- // These will be removed in a future major version
145
-
146
-
147
- // Project Entry (PROJECTS section)
148
- #let project-entry(
149
- name: "",
150
- url: none,
151
- body: none,
152
- ) = {
153
- vgap(config.entry-spacing)
154
- block(breakable: false, {
155
- // Header Grid
156
- grid(
157
- columns: (1fr, auto),
158
- row-gutter: config.leading,
159
- align(left, text(weight: "bold", name)),
160
- align(right, {
161
- if url != none {
162
- // Only hyperlink if it looks like a URL
163
- if url.starts-with("http") {
164
- text(size: 8pt, font: "Courier New", emph(link(url)[#url]))
165
- } else {
166
- text(size: 8pt, font: "Courier New", url)
167
- }
168
- }
169
- }),
170
- )
171
-
172
- // Body content (Optional)
173
- if body != none {
174
- // Style native Typst lists to match previous bullet styling
175
- show list: set list(
176
- marker: box(fill: black, width: bullet_marker_width, height: bullet_marker_width, radius: 0pt, baseline: .5em),
177
- body-indent: bullet_body_indent,
178
- indent: 0em,
179
- )
180
-
181
- body
182
- }
183
- })
184
- }
1
+ // components.typ
2
+ #import "layout.typ": config, vgap
3
+
4
+ // --- Utility Functions ---
5
+
6
+ // Horizontal Rule
7
+ #let hrule = {
8
+ line(length: 100%, stroke: 0.75pt)
9
+ v(-2pt)
10
+ }
11
+
12
+ // --- Constants ---
13
+ #let bullet_marker_width = 3.5pt
14
+ #let bullet_body_indent = 0.8em
15
+ #let bullet_text_offset = bullet_marker_width + bullet_body_indent
16
+
17
+ // --- Component Exports ---
18
+
19
+ // Resume Header
20
+ #let resume-header(name: "", contacts: ()) = {
21
+ set align(left)
22
+
23
+ // Name
24
+ block(text(size: 18pt, weight: "bold", name))
25
+
26
+ set text(size: config.base-size, weight: "regular")
27
+
28
+ vgap(config.entry-spacing)
29
+
30
+ // Contacts
31
+ // Separator: ' ❖ '
32
+ for i in range(0, contacts.len()) {
33
+ let contact = contacts.at(i)
34
+ if i > 0 {
35
+ [~~#text("❖", size: 8pt)~~#contact]
36
+ } else {
37
+ [#contact]
38
+ }
39
+ }
40
+
41
+ //block(contact_text)
42
+ }
43
+
44
+
45
+ // Section Header
46
+ #let section-header(title, extra: none) = {
47
+ vgap(config.section-spacing)
48
+ set align(left)
49
+
50
+ // Title
51
+ block({
52
+ text(weight: "bold", upper(title))
53
+ if extra != none {
54
+ text(weight: "bold", " " + extra)
55
+ }
56
+ })
57
+
58
+ hrule
59
+ }
60
+
61
+ // Timeline Entry
62
+ #let timeline-entry(
63
+ heading-left: "",
64
+ heading-right: "",
65
+ subheading-left: none,
66
+ subheading-right: none,
67
+ body: none,
68
+ ) = {
69
+ vgap(config.entry-spacing)
70
+ block(breakable: false, {
71
+ // Header Grid (combined for alignment and spacing)
72
+ let cells = (
73
+ align(left, text(weight: "bold", heading-left)),
74
+ align(right, text(weight: "bold", heading-right)),
75
+ )
76
+
77
+ if subheading-left != none or subheading-right != none {
78
+ cells.push(align(left, text(style: "italic", subheading-left)))
79
+ cells.push(align(right, text(style: "italic", subheading-right)))
80
+ }
81
+
82
+ grid(
83
+ columns: (1fr, auto),
84
+ row-gutter: config.leading, // Use global vertical rhythm
85
+ ..cells,
86
+ )
87
+
88
+ // Body content (Optional)
89
+ if body != none {
90
+ // Style native Typst lists to match previous bullet styling
91
+ show list: set list(
92
+ marker: box(fill: black, width: bullet_marker_width, height: bullet_marker_width, radius: 0pt, baseline: .5em),
93
+ body-indent: bullet_body_indent,
94
+ indent: 0em,
95
+ )
96
+
97
+ body
98
+ }
99
+ })
100
+ }
101
+
102
+ // Unified Table Component
103
+ // Auto-detects structure from item shape:
104
+ // Categorized: ((category: content, text: content), ...)
105
+ // Flat: (content, content, ...)
106
+ #let table(items: (), columns: 2) = {
107
+ if items.len() == 0 { return }
108
+
109
+ // Auto-detect from item shape
110
+ let is_categorized = (
111
+ type(items.at(0)) == dictionary and "category" in items.at(0)
112
+ )
113
+
114
+ vgap(config.entry-spacing)
115
+
116
+ let render_cell(item) = {
117
+ if is_categorized {
118
+ block({
119
+ text(weight: "bold", item.category)
120
+ linebreak()
121
+ item.text
122
+ })
123
+ } else {
124
+ item
125
+ }
126
+ }
127
+
128
+ pad(
129
+ left: bullet_text_offset,
130
+ grid(
131
+ columns: (1fr,) * columns,
132
+ row-gutter: if is_categorized {
133
+ config.leading + config.entry-spacing
134
+ } else {
135
+ config.leading
136
+ },
137
+ column-gutter: 1em,
138
+ ..items.map(render_cell),
139
+ ),
140
+ )
141
+ }
142
+
143
+ // Backward compatibility shims (deprecated)
144
+ // These will be removed in a future major version
145
+
146
+
147
+ // Project Entry (PROJECTS section)
148
+ #let project-entry(
149
+ name: "",
150
+ url: none,
151
+ body: none,
152
+ ) = {
153
+ vgap(config.entry-spacing)
154
+ block(breakable: false, {
155
+ // Header Grid
156
+ grid(
157
+ columns: (1fr, auto),
158
+ row-gutter: config.leading,
159
+ align(left, text(weight: "bold", name)),
160
+ align(right, {
161
+ if url != none {
162
+ // Only hyperlink if it looks like a URL
163
+ if url.starts-with("http") {
164
+ text(size: 8pt, font: "Courier New", emph(link(url)[#url]))
165
+ } else {
166
+ text(size: 8pt, font: "Courier New", url)
167
+ }
168
+ }
169
+ }),
170
+ )
171
+
172
+ // Body content (Optional)
173
+ if body != none {
174
+ // Style native Typst lists to match previous bullet styling
175
+ show list: set list(
176
+ marker: box(fill: black, width: bullet_marker_width, height: bullet_marker_width, radius: 0pt, baseline: .5em),
177
+ body-indent: bullet_body_indent,
178
+ indent: 0em,
179
+ )
180
+
181
+ body
182
+ }
183
+ })
184
+ }
@@ -1,42 +1,42 @@
1
- // layout.typ
2
-
3
- // --- Configurations ---
4
- #let config = (
5
- font: "eb garamond",
6
- base-size: 12pt,
7
- leading: 0.5em, // Global spacing value (vertical rhythm)
8
- section-spacing: 5pt,
9
- entry-spacing: 5pt,
10
- margin: 0.5in,
11
- )
12
-
13
- // --- Utility Functions ---
14
- #let vgap(amount) = v(amount)
15
-
16
- // --- Resume Show Rule (Global Setup) ---
17
- #let resume(content) = {
18
- set page(
19
- paper: "us-letter",
20
- margin: config.margin,
21
- )
22
-
23
- set text(
24
- font: config.font,
25
- size: config.base-size,
26
- )
27
-
28
- set par(
29
- leading: config.leading,
30
- justify: false,
31
- spacing: config.leading, // Space between paragraphs
32
- )
33
-
34
- // Enforce global block spacing for vertical rhythm
35
- set block(above: config.leading, below: config.leading)
36
- set list(spacing: config.leading)
37
-
38
- // Hyperlinks should be standard black text
39
- show link: set text(fill: black)
40
-
41
- content
42
- }
1
+ // layout.typ
2
+
3
+ // --- Configurations ---
4
+ #let config = (
5
+ font: "eb garamond",
6
+ base-size: 12pt,
7
+ leading: 0.5em, // Global spacing value (vertical rhythm)
8
+ section-spacing: 5pt,
9
+ entry-spacing: 5pt,
10
+ margin: 0.5in,
11
+ )
12
+
13
+ // --- Utility Functions ---
14
+ #let vgap(amount) = v(amount)
15
+
16
+ // --- Resume Show Rule (Global Setup) ---
17
+ #let resume(content) = {
18
+ set page(
19
+ paper: "us-letter",
20
+ margin: config.margin,
21
+ )
22
+
23
+ set text(
24
+ font: config.font,
25
+ size: config.base-size,
26
+ )
27
+
28
+ set par(
29
+ leading: config.leading,
30
+ justify: false,
31
+ spacing: config.leading, // Space between paragraphs
32
+ )
33
+
34
+ // Enforce global block spacing for vertical rhythm
35
+ set block(above: config.leading, below: config.leading)
36
+ set list(spacing: config.leading)
37
+
38
+ // Hyperlinks should be standard black text
39
+ show link: set text(fill: black)
40
+
41
+ content
42
+ }
@@ -1,5 +1,5 @@
1
- // lib.typ
2
- // Classic Resume Template Logic
3
-
4
- #import "layout.typ": config, resume
5
- #import "components.typ": project-entry, resume-header, section-header, table, timeline-entry
1
+ // lib.typ
2
+ // Classic Resume Template Logic
3
+
4
+ #import "layout.typ": config, resume
5
+ #import "components.typ": project-entry, resume-header, section-header, table, timeline-entry
@@ -1,26 +1,26 @@
1
- [package]
2
- name = "ttq-classic-resume"
3
- version = "0.1.0"
4
- compiler = "0.14.0"
5
- entrypoint = "src/lib.typ"
6
- repository = "https://github.com/nibsbin/ttq-classic-resume"
7
- authors = ["Nibs"]
8
- license = "MIT"
9
- description = "A clean and modern resume."
10
-
11
- keywords = [
12
- "resume",
13
- "cv",
14
- "curriculum vitae",
15
- "job",
16
- "career",
17
- "professional",
18
- "template",
19
- ]
20
- categories = ["cv"]
21
- disciplines = ["business", "computer-science", "engineering", "communication"]
22
-
23
- [template]
24
- path = "template"
25
- entrypoint = "resume.typ"
26
- thumbnail = "thumbnail.png"
1
+ [package]
2
+ name = "ttq-classic-resume"
3
+ version = "0.1.0"
4
+ compiler = "0.14.0"
5
+ entrypoint = "src/lib.typ"
6
+ repository = "https://github.com/nibsbin/ttq-classic-resume"
7
+ authors = ["Nibs"]
8
+ license = "MIT"
9
+ description = "A clean and modern resume."
10
+
11
+ keywords = [
12
+ "resume",
13
+ "cv",
14
+ "curriculum vitae",
15
+ "job",
16
+ "career",
17
+ "professional",
18
+ "template",
19
+ ]
20
+ categories = ["cv"]
21
+ disciplines = ["business", "computer-science", "engineering", "communication"]
22
+
23
+ [template]
24
+ path = "template"
25
+ entrypoint = "resume.typ"
26
+ thumbnail = "thumbnail.png"
@@ -1,44 +1,44 @@
1
- #import "@local/quillmark-helper:0.1.0": data, eval-markup, parse-date
2
- #import "@local/ttq-classic-resume:0.1.0": *
3
-
4
- #show: resume
5
-
6
- #resume-header(
7
- name: data.name,
8
- contacts: data.contacts,
9
- )
10
-
11
- #for card in data.CARDS {
12
- if "title" in card and card.title != "" {
13
- section-header(card.title)
14
- }
15
-
16
- if card.CARD == "experience_section" {
17
- timeline-entry(
18
- heading-left: card.at("headingLeft", default: ""),
19
- heading-right: card.at("headingRight", default: ""),
20
- subheading-left: card.at("subheadingLeft", default: none),
21
- subheading-right: card.at("subheadingRight", default: none),
22
- body: eval-markup(card.at("BODY", default: "")),
23
- )
24
- } else if card.CARD == "skills_section" {
25
- table(
26
- columns: 2,
27
- items: card.cells.map(item => (
28
- category: item.category,
29
- text: item.skills,
30
- ))
31
- )
32
- } else if card.CARD == "projects_section" {
33
- project-entry(
34
- name: card.name,
35
- url: card.at("url", default: none),
36
- body: eval-markup(card.at("BODY", default: "")),
37
- )
38
- } else if card.CARD == "certifications_section" {
39
- table(
40
- columns: 2,
41
- items: card.cells
42
- )
43
- }
44
- }
1
+ #import "@local/quillmark-helper:0.1.0": data, eval-markup, parse-date
2
+ #import "@local/ttq-classic-resume:0.1.0": *
3
+
4
+ #show: resume
5
+
6
+ #resume-header(
7
+ name: data.name,
8
+ contacts: data.contacts,
9
+ )
10
+
11
+ #for card in data.CARDS {
12
+ if "title" in card and card.title != "" {
13
+ section-header(card.title)
14
+ }
15
+
16
+ if card.CARD == "experience_section" {
17
+ timeline-entry(
18
+ heading-left: card.at("headingLeft", default: ""),
19
+ heading-right: card.at("headingRight", default: ""),
20
+ subheading-left: card.at("subheadingLeft", default: none),
21
+ subheading-right: card.at("subheadingRight", default: none),
22
+ body: eval-markup(card.at("BODY", default: "")),
23
+ )
24
+ } else if card.CARD == "skills_section" {
25
+ table(
26
+ columns: 2,
27
+ items: card.cells.map(item => (
28
+ category: item.category,
29
+ text: item.skills,
30
+ ))
31
+ )
32
+ } else if card.CARD == "projects_section" {
33
+ project-entry(
34
+ name: card.name,
35
+ url: card.at("url", default: none),
36
+ body: eval-markup(card.at("BODY", default: "")),
37
+ )
38
+ } else if card.CARD == "certifications_section" {
39
+ table(
40
+ columns: 2,
41
+ items: card.cells
42
+ )
43
+ }
44
+ }
@@ -1,31 +1,31 @@
1
- # Example .quillignore for usaf_memo template
2
- # This demonstrates the .quillignore functionality
3
-
4
- # Ignore temporary and backup files
5
- *.tmp
6
- *.bak
7
- *~
8
- *.swp
9
-
10
- # Ignore build artifacts
11
- target/
12
- dist/
13
- build/
14
-
15
- # Ignore OS-specific files
16
- .DS_Store
17
- Thumbs.db
18
- desktop.ini
19
-
20
- # Ignore version control
21
- .git/
22
- .svn/
23
-
24
- # Ignore editor files
25
- .vscode/
26
- .idea/
27
- *.sublime-*
28
-
29
- # Ignore log files
30
- *.log
1
+ # Example .quillignore for usaf_memo template
2
+ # This demonstrates the .quillignore functionality
3
+
4
+ # Ignore temporary and backup files
5
+ *.tmp
6
+ *.bak
7
+ *~
8
+ *.swp
9
+
10
+ # Ignore build artifacts
11
+ target/
12
+ dist/
13
+ build/
14
+
15
+ # Ignore OS-specific files
16
+ .DS_Store
17
+ Thumbs.db
18
+ desktop.ini
19
+
20
+ # Ignore version control
21
+ .git/
22
+ .svn/
23
+
24
+ # Ignore editor files
25
+ .vscode/
26
+ .idea/
27
+ *.sublime-*
28
+
29
+ # Ignore log files
30
+ *.log
31
31
  logs/