@airmark/quiver 0.16.0 → 0.19.0
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.
- package/README.md +0 -1
- package/package.json +6 -5
- package/quills/af4141/0.1.0/Quill.yaml +1 -2
- package/quills/af4141/0.1.0/plate.typ +1 -1
- package/quills/daf1206/0.1.0/Quill.yaml +1 -2
- package/quills/daf4392/0.1.0/Quill.yaml +1 -2
- package/quills/usaf_memo/0.2.0/Quill.yaml +1 -2
- package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/body.typ +1 -1
- package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/indorsement.typ +1 -1
- package/quills/usaf_memo/0.2.0/packages/tonguetoquill-usaf-memo/src/primitives.typ +3 -1
- package/quills/usaf_memo/0.2.0/plate.typ +1 -1
- package/quills/af4141/0.1.0/example.md +0 -86
- package/quills/daf1206/0.1.0/example.md +0 -23
- package/quills/daf4392/0.1.0/example.md +0 -34
- package/quills/usaf_memo/0.2.0/example.md +0 -56
package/README.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@airmark/quiver",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "Airmark Quiver — Air Force and DAF document Quills for Quillmark.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -16,11 +16,12 @@
|
|
|
16
16
|
"node": ">=24"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@quillmark/quiver": "^0.
|
|
20
|
-
"@quillmark/wasm": "0.
|
|
19
|
+
"@quillmark/quiver": "^0.11.0",
|
|
20
|
+
"@quillmark/wasm": "^0.80.0"
|
|
21
21
|
},
|
|
22
22
|
"scripts": {
|
|
23
|
-
"test": "
|
|
23
|
+
"test": "quiver test",
|
|
24
|
+
"preview": "quiver preview",
|
|
24
25
|
"release:patch": "npm version patch -m \"chore(release): %s\" && git push --follow-tags",
|
|
25
26
|
"release:minor": "npm version minor -m \"chore(release): %s\" && git push --follow-tags"
|
|
26
27
|
},
|
|
@@ -35,6 +36,6 @@
|
|
|
35
36
|
"license": "Apache-2.0",
|
|
36
37
|
"repository": {
|
|
37
38
|
"type": "git",
|
|
38
|
-
"url": "https://github.com/
|
|
39
|
+
"url": "https://github.com/tonguetoquill/airmark-quiver"
|
|
39
40
|
}
|
|
40
41
|
}
|
|
@@ -3,7 +3,6 @@ quill:
|
|
|
3
3
|
version: 0.1.0
|
|
4
4
|
backend: typst
|
|
5
5
|
plate_file: plate.typ
|
|
6
|
-
example_file: example.md
|
|
7
6
|
description: "AF Form 4141 — Individual's Record of Duties and Experience, Ground Environment Personnel"
|
|
8
7
|
|
|
9
8
|
main:
|
|
@@ -28,7 +27,7 @@ main:
|
|
|
28
27
|
type: string
|
|
29
28
|
description: Commander's authentication entry on page 1.
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
card_kinds:
|
|
32
31
|
experience:
|
|
33
32
|
description: Each card represents one row in the Record of Experience table. Rows fill page 1 (up to 16 rows) then page 2 (up to 21 rows), for a maximum of 37 rows.
|
|
34
33
|
ui:
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
#if "grade" in data { vals.insert("commonforms_text_p1_3", data.grade) }
|
|
36
36
|
#if "commanders_auth" in data { vals.insert("commonforms_text_p1_116", data.commanders_auth) }
|
|
37
37
|
|
|
38
|
-
// --- Experience table rows from
|
|
38
|
+
// --- Experience table rows from CARDS ---
|
|
39
39
|
// The form supports 16 rows on page 1 and 21 rows on page 2 (37 total).
|
|
40
40
|
// Overflow rows are silently ignored.
|
|
41
41
|
#let max-rows = 37
|
|
@@ -3,7 +3,6 @@ quill:
|
|
|
3
3
|
version: 0.1.0
|
|
4
4
|
backend: typst
|
|
5
5
|
plate_file: plate.typ
|
|
6
|
-
example_file: example.md
|
|
7
6
|
description: "DAF Form 1206 — Nomination for Award"
|
|
8
7
|
|
|
9
8
|
main:
|
|
@@ -39,7 +38,7 @@ main:
|
|
|
39
38
|
unit_commander_rank_name_and_telephone:
|
|
40
39
|
type: string
|
|
41
40
|
|
|
42
|
-
|
|
41
|
+
card_kinds:
|
|
43
42
|
accomplishments_continued:
|
|
44
43
|
description: Optional. Add this card only when page 2 overflow is required. Use the card body for continued bullets. Rank/name on page 2 matches the main nominee line automatically.
|
|
45
44
|
ui:
|
|
@@ -3,7 +3,6 @@ quill:
|
|
|
3
3
|
version: 0.1.0
|
|
4
4
|
backend: typst
|
|
5
5
|
plate_file: plate.typ
|
|
6
|
-
example_file: example.md
|
|
7
6
|
description: "DAF Form 4392 - Pre-Departure Safety Briefing (Page 2)"
|
|
8
7
|
|
|
9
8
|
main:
|
|
@@ -81,7 +80,7 @@ main:
|
|
|
81
80
|
type: string
|
|
82
81
|
description: "Put in your Emergency Contact's Phone Number."
|
|
83
82
|
|
|
84
|
-
|
|
83
|
+
card_kinds:
|
|
85
84
|
itinerary:
|
|
86
85
|
description: "Each card represents one row in the travel itinerary table. Up to 10 rows are supported."
|
|
87
86
|
ui:
|
|
@@ -3,7 +3,6 @@ quill:
|
|
|
3
3
|
version: 0.2.0
|
|
4
4
|
backend: typst
|
|
5
5
|
plate_file: plate.typ
|
|
6
|
-
example_file: example.md
|
|
7
6
|
description: U.S. Air Force and Space Force Official Memorandum
|
|
8
7
|
|
|
9
8
|
main:
|
|
@@ -182,7 +181,7 @@ main:
|
|
|
182
181
|
compact: true
|
|
183
182
|
description: "Optional marking appended after double slash (e.g. NF with classification CUI renders as CUI//NF). Leave blank to show only the classification with no //."
|
|
184
183
|
|
|
185
|
-
|
|
184
|
+
card_kinds:
|
|
186
185
|
indorsement:
|
|
187
186
|
description: Chain of routing endorsements. Each endorsement block adds an official response or forwarding action to the original memo.
|
|
188
187
|
ui:
|
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
context {
|
|
201
201
|
let heading_buffer = none
|
|
202
202
|
// Filter out zero-width paragraphs so that an empty body (e.g. empty
|
|
203
|
-
// string from a
|
|
203
|
+
// string from a KIND with no text) emits nothing and collapses to zero
|
|
204
204
|
// vertical space. Tables are always kept regardless of measured width.
|
|
205
205
|
let items = PAR_BUFFER.get().filter(item =>
|
|
206
206
|
item.kind == "table" or measure(item.content).width > 0pt
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
let ind_from = first-or-value(from)
|
|
47
47
|
let ind_for = to
|
|
48
48
|
|
|
49
|
-
// An empty body (e.g. a
|
|
49
|
+
// An empty body (e.g. a KIND with only an action selected and no markdown
|
|
50
50
|
// body) collapses to zero rendered layout via render-body's filter. To
|
|
51
51
|
// make the "empty body takes no layout space" guarantee end-to-end, also
|
|
52
52
|
// suppress the spacing the surrounding code reserves *for* the body:
|
|
@@ -353,7 +353,9 @@
|
|
|
353
353
|
(if attachment-count == 1 { "Attachment" } else { str(attachment-count) + " Attachments" })
|
|
354
354
|
+ " (listed on next page):"
|
|
355
355
|
)
|
|
356
|
-
|
|
356
|
+
// AFH 33-337: a single attachment is not numbered; numbering applies to two or more.
|
|
357
|
+
let numbering-style = if attachment-count == 1 { none } else { "1." }
|
|
358
|
+
render-backmatter-section(attachments, section-label, numbering-style: numbering-style, continuation-label: continuation-label)
|
|
357
359
|
}
|
|
358
360
|
|
|
359
361
|
if cc != none and cc.len() > 0 {
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
..if "attachments" in data { (attachments: data.attachments) },
|
|
70
70
|
)
|
|
71
71
|
|
|
72
|
-
// Indorsements - iterate through CARDS array and filter by CARD
|
|
72
|
+
// Indorsements - iterate through CARDS array and filter by CARD tag
|
|
73
73
|
#for (i, card) in data.CARDS.enumerate() {
|
|
74
74
|
if card.CARD == "indorsement" {
|
|
75
75
|
// The quillmark helper leaves an unset/whitespace-only markdown body as
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
QUILL: af4141@0.1
|
|
3
|
-
# EDIT: Full name in Last, First, Middle Initial format
|
|
4
|
-
name: "LAST, FIRST M."
|
|
5
|
-
# EDIT: Unit of assignment (e.g., "1 ACCS/DOT", "726 ACS/MOC")
|
|
6
|
-
unit: "UNIT/SYMBOL"
|
|
7
|
-
# EDIT: Current grade or CCC level (e.g., "SSgt", "GS-12", "3")
|
|
8
|
-
grade: "GRADE"
|
|
9
|
-
# EDIT: Commander's authentication entry — often a commander's name/signature block or "Verified by unit commander"
|
|
10
|
-
commanders_auth: ""
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
<!-- ═══════════════════════════════════════════════════════════════
|
|
14
|
-
RECORD OF EXPERIENCE CARDS
|
|
15
|
-
Each card below becomes one row in the experience table.
|
|
16
|
-
Page 1 holds up to 16 rows; Page 2 holds up to 21 rows (37 max).
|
|
17
|
-
|
|
18
|
-
Required reportable actions include:
|
|
19
|
-
• Initial/subsequent duty assignment
|
|
20
|
-
• Written and/or positional upgrade evaluations
|
|
21
|
-
• Certification events (Mission Ready, Senior Director, etc.)
|
|
22
|
-
• Downgrade or decertification
|
|
23
|
-
• PCS/PCA departure
|
|
24
|
-
• Temporary duty of significant duration
|
|
25
|
-
• Any other commander-directed entry
|
|
26
|
-
|
|
27
|
-
Leave blank any columns that do not apply to a given entry.
|
|
28
|
-
═══════════════════════════════════════════════════════════════ -->
|
|
29
|
-
|
|
30
|
-
<!-- Example 1: Initial assignment to a unit -->
|
|
31
|
-
---
|
|
32
|
-
CARD: experience
|
|
33
|
-
date: 2025-01-15
|
|
34
|
-
action: "Assigned to 1 ACCS/DOT as Weapons Director"
|
|
35
|
-
written_grade: ""
|
|
36
|
-
written_grade_date: 2025-01-15
|
|
37
|
-
positional_grade: ""
|
|
38
|
-
positional_grade_date: 2025-01-15
|
|
39
|
-
auth_or_remarks: "Initial assignment"
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
<!-- Example 2: Written upgrade evaluation -->
|
|
43
|
-
---
|
|
44
|
-
CARD: experience
|
|
45
|
-
date: 2025-03-15
|
|
46
|
-
action: "Completed written upgrade evaluation for 3-Level"
|
|
47
|
-
written_grade: "3"
|
|
48
|
-
written_grade_date: 2025-03-15
|
|
49
|
-
positional_grade: ""
|
|
50
|
-
positional_grade_date: 2025-03-15
|
|
51
|
-
auth_or_remarks: "Per AFMAN 13-1CRCV1"
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
<!-- Example 3: Positional (live-environment) upgrade / certification -->
|
|
55
|
-
---
|
|
56
|
-
CARD: experience
|
|
57
|
-
date: 2025-06-20
|
|
58
|
-
action: "Certified Mission Ready — positional upgrade"
|
|
59
|
-
written_grade: ""
|
|
60
|
-
written_grade_date: 2025-06-20
|
|
61
|
-
positional_grade: "4"
|
|
62
|
-
positional_grade_date: 2025-06-20
|
|
63
|
-
auth_or_remarks: "SSgt Jones, T.R."
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
<!-- Example 4: Combined written + positional upgrade (both columns filled) -->
|
|
67
|
-
---
|
|
68
|
-
CARD: experience
|
|
69
|
-
date: 2025-08-01
|
|
70
|
-
action: "Upgrade evaluation — written and positional"
|
|
71
|
-
written_grade: "4"
|
|
72
|
-
written_grade_date: 2025-08-01
|
|
73
|
-
positional_grade: "4"
|
|
74
|
-
positional_grade_date: 2025-08-01
|
|
75
|
-
auth_or_remarks: "Verified by unit commander"
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
<!-- Example 5: PCS departure — no written/positional grade; omit grade dates (or use "") -->
|
|
79
|
-
---
|
|
80
|
-
CARD: experience
|
|
81
|
-
date: 2025-09-01
|
|
82
|
-
action: "PCS to 726 ACS/MOC, Tinker AFB OK"
|
|
83
|
-
written_grade: ""
|
|
84
|
-
positional_grade: ""
|
|
85
|
-
auth_or_remarks: "Outprocessed 1 ACCS/DOT"
|
|
86
|
-
---
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
QUILL: daf1206@0.1.0
|
|
3
|
-
award: "CY2018 Stripes for Exceptional Performers II Board"
|
|
4
|
-
category_if_applicable: "Senior Master Sgt"
|
|
5
|
-
award_period: "N/A"
|
|
6
|
-
rankname_of_nominee: "Smith, John Q., SMSgt"
|
|
7
|
-
majcom_fldcom_foa_or_dru: "MAJCOM of Assignment"
|
|
8
|
-
dafsc_duty_title: "3F071/NCOIC, 123rd Force Support Squadron"
|
|
9
|
-
nominees_telephone_dsn_commercial: "DSN XXXX-XXXX, Comm (XXX) XXX-XXXX"
|
|
10
|
-
unit_office_symbol_street_address_base_state_zip: "123 FSS/FMSPD, Someplace AFB, CO XXXXX"
|
|
11
|
-
unit_commander_rank_name_and_telephone: "Lt Col Jane C. Doe, DSN XXX-XXXXXXX, Comm (XXX) XXX-XXXX"
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
Use this main body for page 1 accomplishments.
|
|
15
|
-
- Keep bullet format.
|
|
16
|
-
- Replace all placeholder values.
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
CARD: accomplishments_continued
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
Use this card body only if page 2 overflow is needed.
|
|
23
|
-
- Add continuation bullets here.
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
QUILL: daf4392
|
|
3
|
-
|
|
4
|
-
transportation_mode: "other"
|
|
5
|
-
departure_date: 2026-03-26
|
|
6
|
-
final_destination: "123 Sesame St, Fake City, MS"
|
|
7
|
-
notes: "Visiting Donald Duck over 3 day weekend."
|
|
8
|
-
organization: "333 TRS"
|
|
9
|
-
briefed_date: 2026-03-25
|
|
10
|
-
briefee_name: "Doe, Jane"
|
|
11
|
-
briefee_grade: "O-1"
|
|
12
|
-
briefer_name: ""
|
|
13
|
-
briefer_grade: ""
|
|
14
|
-
emergency_contact_name: "John Doe"
|
|
15
|
-
emergency_contact_phone: "999-999-9999"
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
CARD: itinerary
|
|
20
|
-
date: 2026-03-26
|
|
21
|
-
departure_point: "Biloxi, MS"
|
|
22
|
-
arrival_point: "Fake City, MS"
|
|
23
|
-
rest_length: "2 days"
|
|
24
|
-
mileage: "250"
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
CARD: itinerary
|
|
29
|
-
date: 2026-03-29
|
|
30
|
-
departure_point: "Fake City, MS"
|
|
31
|
-
arrival_point: "Biloxi, MS"
|
|
32
|
-
rest_length: "0"
|
|
33
|
-
mileage: "0"
|
|
34
|
-
---
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# Essential
|
|
3
|
-
#===========
|
|
4
|
-
QUILL: usaf_memo@0.2.0
|
|
5
|
-
letterhead_title: DEPARTMENT OF THE AIR FORCE
|
|
6
|
-
letterhead_caption:
|
|
7
|
-
- HEADQUARTERS YOUR UNIT NAME
|
|
8
|
-
date: 2504-10-05
|
|
9
|
-
memo_for:
|
|
10
|
-
- ORG/SYMBOL # Organization/office symbol in UPPERCASE
|
|
11
|
-
# - DISTRIBUTION # For numerous recipients, use 'DISTRIBUTION' and list them below
|
|
12
|
-
memo_from:
|
|
13
|
-
- ORG/SYMBOL
|
|
14
|
-
- Organization Name
|
|
15
|
-
- 123 Street Ave
|
|
16
|
-
- City ST 12345-6789
|
|
17
|
-
subject: Subject of the Memorandum
|
|
18
|
-
|
|
19
|
-
# Optional
|
|
20
|
-
#===========
|
|
21
|
-
references:
|
|
22
|
-
- AFM 33-326, 31 July 2019, Preparing Official Communications
|
|
23
|
-
cc:
|
|
24
|
-
- ORG/SYMBOL
|
|
25
|
-
distribution:
|
|
26
|
-
- 1st ORG/SYMBOL
|
|
27
|
-
attachments:
|
|
28
|
-
- Attachment description, YYYY MMM DD
|
|
29
|
-
signature_block:
|
|
30
|
-
- FIRST M. LAST, Rank, USAF
|
|
31
|
-
- Duty Title
|
|
32
|
-
tag_line: Aim High
|
|
33
|
-
classification: UNCLASSIFIED
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
The `usaf_memo` Quill package takes care of all 33-337 formatting details. Focus on the content.
|
|
37
|
-
|
|
38
|
-
**Numbering** Top-level paragraphs like this one are automatically numbered. NEVER manually number your paragraphs.
|
|
39
|
-
|
|
40
|
-
- Use bullets for hierarchical paragraph nesting. These are automatically numbered or lettered as well.
|
|
41
|
-
- Up to five levels of paragraphs are supported
|
|
42
|
-
|
|
43
|
-
Do not include a complimentary close (e.g. "Respectfully,") in official memorandums.
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
CARD: indorsement
|
|
47
|
-
for: ORG/SYMBOL
|
|
48
|
-
format: standard
|
|
49
|
-
from: ORG/SYMBOL
|
|
50
|
-
action: undecided
|
|
51
|
-
signature_block:
|
|
52
|
-
- FIRST M. LAST, Rank, USAF
|
|
53
|
-
- Duty Title
|
|
54
|
-
---
|
|
55
|
-
|
|
56
|
-
This body and the metdata above are an indorsement card. Multiple or no indorsements cards can be used.
|