@tonguetoquill/collection 0.5.0 → 0.6.1

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 CHANGED
@@ -13,7 +13,9 @@ npm install @tonguetoquill/collection
13
13
 
14
14
  This package doesn't export any logic. Instead, it exports two string constants—`QUILLS_DIR` and `TEMPLATES_DIR`—that represent the absolute file paths to the bundled quills and templates on your local filesystem.
15
15
 
16
- You can use `QUILLS_DIR` with the `FileSystemSource` from the [`@quillmark/registry`](https://www.npmjs.com/package/@quillmark/registry) package to load them into the engine.
16
+ Use [`@quillmark/registry`](https://www.npmjs.com/package/@quillmark/registry) and [`@quillmark/wasm`](https://www.npmjs.com/package/@quillmark/wasm) from npm alongside this package. The engine and registry APIs replace a separate Quillmark CLI install for Node.js workflows.
17
+
18
+ You can use `QUILLS_DIR` with the `FileSystemSource` from `@quillmark/registry` to load them into the engine.
17
19
 
18
20
  ```typescript
19
21
  import { Quillmark } from '@quillmark/wasm';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonguetoquill/collection",
3
- "version": "0.5.0",
3
+ "version": "0.6.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/nibsbin/tonguetoquill-collection.git"
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "dependencies": {},
38
38
  "devDependencies": {
39
- "@quillmark/registry": "^0.6.1",
40
- "@quillmark/wasm": "^0.41.0"
39
+ "@quillmark/registry": "^0.10.0",
40
+ "@quillmark/wasm": "^0.46.0"
41
41
  }
42
42
  }
@@ -3,33 +3,34 @@ Quill:
3
3
  version: 0.1.0
4
4
  backend: typst
5
5
  plate_file: plate.typ
6
- ui:
7
- hide_body: true
8
6
  example_file: example.md
9
7
  description: "AF Form 4141 — Individual's Record of Duties and Experience, Ground Environment Personnel"
10
8
 
11
- fields:
12
- name:
13
- title: Name (Last, First, MI)
14
- type: string
15
- required: true
16
- description: Full name in Last, First, Middle Initial format.
9
+ main:
10
+ ui:
11
+ hide_body: true
12
+ fields:
13
+ name:
14
+ title: Name (Last, First, MI)
15
+ type: string
16
+ required: true
17
+ description: Full name in Last, First, Middle Initial format.
17
18
 
18
- unit:
19
- title: Unit of Assignment
20
- type: string
21
- required: true
22
- description: Unit or organization of assignment.
19
+ unit:
20
+ title: Unit of Assignment
21
+ type: string
22
+ required: true
23
+ description: Unit or organization of assignment.
23
24
 
24
- grade:
25
- title: Grade/CCC Level
26
- type: string
27
- description: Current grade or CCC level.
25
+ grade:
26
+ title: Grade/CCC Level
27
+ type: string
28
+ description: Current grade or CCC level.
28
29
 
29
- commanders_auth:
30
- title: Commander's Record of Authentication
31
- type: string
32
- description: Commander's authentication entry on page 1.
30
+ commanders_auth:
31
+ title: Commander's Record of Authentication
32
+ type: string
33
+ description: Commander's authentication entry on page 1.
33
34
 
34
35
  cards:
35
36
  experience:
@@ -6,27 +6,28 @@ Quill:
6
6
  example_file: example.md
7
7
  description: A clean and modern classic resume template.
8
8
 
9
- fields:
10
- name:
11
- title: Full Name
12
- type: string
13
- required: true
14
- examples:
15
- - John Doe
16
- ui:
17
- group: Personal Info
9
+ main:
10
+ fields:
11
+ name:
12
+ title: Full Name
13
+ type: string
14
+ required: true
15
+ examples:
16
+ - John Doe
17
+ ui:
18
+ group: Personal Info
18
19
 
19
- contacts:
20
- title: Contact Information
21
- type: array
22
- required: true
23
- examples:
24
- - - john.doe@example.com
25
- - 123-456-7890
26
- - linkedin.com/in/johndoe
27
- ui:
28
- group: Personal Info
29
- description: List of contact details (email, phone, links, etc.)
20
+ contacts:
21
+ title: Contact Information
22
+ type: array
23
+ required: true
24
+ examples:
25
+ - - john.doe@example.com
26
+ - 123-456-7890
27
+ - linkedin.com/in/johndoe
28
+ ui:
29
+ group: Personal Info
30
+ description: List of contact details (email, phone, links, etc.)
30
31
 
31
32
  cards:
32
33
  experience_section:
@@ -6,59 +6,60 @@ Quill:
6
6
  example_file: example.md
7
7
  description: Typeset letters that comply with Carnegie Mellon University letterhead standards.
8
8
 
9
- fields:
10
- recipient:
11
- title: Recipient's name and address
12
- type: array
13
- examples:
14
- - - Mr. John Doe
15
- - 123 Main St
16
- - Anytown, USA
17
- ui:
18
- group: Essentials
19
- description: The recipient's name and full mailing address.
9
+ main:
10
+ fields:
11
+ recipient:
12
+ title: Recipient's name and address
13
+ type: array
14
+ examples:
15
+ - - Mr. John Doe
16
+ - 123 Main St
17
+ - Anytown, USA
18
+ ui:
19
+ group: Essentials
20
+ description: The recipient's name and full mailing address.
20
21
 
21
- signature_block:
22
- title: Signature block lines
23
- type: array
24
- examples:
25
- - - First M. Last
26
- - Title
27
- ui:
28
- group: Essentials
29
- description: "The signer's information. Line 1: Name. Line 2: Title."
22
+ signature_block:
23
+ title: Signature block lines
24
+ type: array
25
+ examples:
26
+ - - First M. Last
27
+ - Title
28
+ ui:
29
+ group: Essentials
30
+ description: "The signer's information. Line 1: Name. Line 2: Title."
30
31
 
31
- department:
32
- title: Name of the department or unit
33
- type: string
34
- examples:
35
- - Department of Electrical and Computer Engineering
36
- ui:
37
- group: Letterhead
38
- description: The department or organizational unit name for the letterhead.
32
+ department:
33
+ title: Name of the department or unit
34
+ type: string
35
+ examples:
36
+ - Department of Electrical and Computer Engineering
37
+ ui:
38
+ group: Letterhead
39
+ description: The department or organizational unit name for the letterhead.
39
40
 
40
- address:
41
- title: Sender's address lines
42
- type: array
43
- examples:
44
- - - 5000 Forbes Avenue
45
- - Pittsburgh, PA 15213-3890
46
- ui:
47
- group: Letterhead
48
- description: The sender's institutional mailing address.
41
+ address:
42
+ title: Sender's address lines
43
+ type: array
44
+ examples:
45
+ - - 5000 Forbes Avenue
46
+ - Pittsburgh, PA 15213-3890
47
+ ui:
48
+ group: Letterhead
49
+ description: The sender's institutional mailing address.
49
50
 
50
- url:
51
- title: Department or university URL
52
- type: string
53
- examples:
54
- - www.ece.cmu.edu
55
- ui:
56
- group: Letterhead
57
- description: The department or university website URL.
51
+ url:
52
+ title: Department or university URL
53
+ type: string
54
+ examples:
55
+ - www.ece.cmu.edu
56
+ ui:
57
+ group: Letterhead
58
+ description: The department or university website URL.
58
59
 
59
- date:
60
- title: Date of the letter
61
- type: date
62
- ui:
63
- group: Advanced
64
- description: The date to appear on the letter.
60
+ date:
61
+ title: Date of the letter
62
+ type: date
63
+ ui:
64
+ group: Advanced
65
+ description: The date to appear on the letter.
@@ -3,85 +3,101 @@ Quill:
3
3
  version: 0.1.0
4
4
  backend: typst
5
5
  plate_file: plate.typ
6
- ui:
7
- hide_body: true
8
6
  example_file: example.md
9
7
  description: "DAF Form 4392 - Pre-Departure Safety Briefing (Page 2)"
10
8
 
11
- fields:
12
- transportation_mode:
13
- title: Mode of Transportation
14
- type: string
15
- enum: [pmv, airplane, bus, train, motorcycle, other]
16
- required: true
17
- description: "Matches the check box."
9
+ main:
10
+ ui:
11
+ hide_body: true
12
+ fields:
13
+ transportation_mode:
14
+ title: Mode of Transportation
15
+ type: string
16
+ enum: [pmv, airplane, bus, train, motorcycle, other]
17
+ required: true
18
+ description: "Matches the check box."
18
19
 
19
- departure_date:
20
- title: Departure Date
21
- type: date
22
- required: true
23
- ui:
24
- compact: true
25
- description: "Date of initial departure."
26
20
 
27
- final_destination:
28
- title: Final Destination
29
- type: string
30
- required: true
31
- ui:
32
- compact: true
33
- description: "Final travel destination."
21
+ departure_date:
22
+ title: Departure Date
23
+ type: date
24
+ required: true
25
+ ui:
26
+ compact: true
27
+ description: "Date of initial departure."
34
28
 
35
- notes:
36
- title: Notes
37
- type: string
38
- description: "Additional notes or remarks for the travel."
29
+ final_destination:
30
+ title: Final Destination
31
+ type: string
32
+ required: true
33
+ ui:
34
+ compact: true
35
+ description: "Final travel destination."
39
36
 
40
- organization:
41
- title: Organization
42
- type: string
43
- required: true
44
- ui:
45
- compact: true
46
- description: "Unit / Organization conducting the brief."
37
+ dept_flight_num:
38
+ title: Departure Flight Number
39
+ type: string
40
+ ui:
41
+ compact: true
42
+ description: "Departure flight number."
47
43
 
48
- briefed_date:
49
- title: Date Briefed
50
- type: date
51
- required: true
52
- ui:
53
- compact: true
54
- description: "Date the brief took place."
44
+ arrival_flight_num:
45
+ title: Arrival Flight Number
46
+ type: string
47
+ ui:
48
+ compact: true
49
+ description: "Arrival flight number."
55
50
 
56
- briefee_name:
57
- title: Individual Receiving Brief (Name)
58
- type: string
59
- required: true
60
- ui:
61
- compact: true
62
- description: "Name (Last, First) of the individual receiving the brief."
51
+ notes:
52
+ title: Notes
53
+ type: string
54
+ description: "Additional notes or remarks for the travel."
63
55
 
64
- briefee_grade:
65
- title: Individual Receiving Brief (Grade)
66
- type: string
67
- ui:
68
- compact: true
69
- description: "Grade of the individual receiving the brief."
56
+ organization:
57
+ title: Organization
58
+ type: string
59
+ required: true
60
+ ui:
61
+ compact: true
62
+ description: "Unit / Organization."
63
+
64
+ briefed_date:
65
+ title: Date Briefed
66
+ type: date
67
+ required: true
68
+ ui:
69
+ compact: true
70
+ description: "Put in today's date."
71
+
72
+ briefee_name:
73
+ title: Individual Receiving Brief (Name)
74
+ type: string
75
+ required: true
76
+ ui:
77
+ compact: true
78
+ description: "Put in your Name (Last, First)."
79
+
80
+ briefee_grade:
81
+ title: Individual Receiving Brief (Grade)
82
+ type: string
83
+ ui:
84
+ compact: true
85
+ description: "Put in your Grade."
70
86
 
71
- emergency_contact_name:
72
- title: Emergency Contact Name
73
- type: string
74
- description: "Name of the emergency contact person at the bottom of the form."
87
+ emergency_contact_name:
88
+ title: Emergency Contact Name
89
+ type: string
90
+ description: "Put in your Emergency Contact Name."
75
91
 
76
- emergency_contact_phone:
77
- title: Emergency Contact Phone
78
- type: string
79
- description: "Phone number of the emergency contact person at the bottom of the form."
92
+ emergency_contact_phone:
93
+ title: Emergency Contact Phone
94
+ type: string
95
+ description: "Put in your Emergency Contact's Phone Number."
80
96
 
81
97
  cards:
82
98
  itinerary:
83
99
  title: Proposed Travel Itinerary
84
- description: "Each card represents one row in the travel itinerary table. Up to 5 rows are supported."
100
+ description: "Each card represents one row in the travel itinerary table. Up to 10 rows are supported."
85
101
  ui:
86
102
  hide_body: true
87
103
  fields:
@@ -112,11 +128,11 @@ cards:
112
128
  ui:
113
129
  group: Itinerary Entry
114
130
  compact: true
115
- description: "Duration of rest period."
131
+ description: "Duration of stay at arrival point"
116
132
  mileage:
117
133
  title: Approximate Mileage
118
134
  type: string
119
135
  ui:
120
136
  group: Itinerary Entry
121
137
  compact: true
122
- description: "Approximate mileage for this leg."
138
+ description: "Approximate mileage for this leg. No need to put in if not applicable such as flights."
@@ -20,7 +20,7 @@
20
20
 
21
21
  // Fields
22
22
  #tf(40pt, 100pt)[#data.at("departure_date", default: "")]
23
- #tf(120pt, 100pt)[#data.at("final_destination", default: "")]
23
+ #tf(123pt, 100pt)[#data.at("final_destination", default: "")]
24
24
 
25
25
  // Itinerary Rows (via CARDS)
26
26
  #{
@@ -29,11 +29,11 @@
29
29
  let dy-step = 40pt
30
30
  if "CARDS" in data {
31
31
  for card in data.CARDS {
32
- if card.CARD == "itinerary" and row < 5 {
32
+ if card.CARD == "itinerary" and row < 10 {
33
33
  let dy = dy-start + (row * dy-step)
34
34
  tf(80pt, dy)[#card.at("date", default: "")]
35
35
  tf(135pt, dy)[#card.at("departure_point", default: "")]
36
- tf(300pt, dy)[#card.at("arrival_point", default: "")]
36
+ tf(295pt, dy)[#card.at("arrival_point", default: "")]
37
37
  tf(450pt, dy)[#card.at("rest_length", default: "")]
38
38
  tf(515pt, dy)[#card.at("mileage", default: "")]
39
39
  row = row + 1
@@ -42,19 +42,27 @@
42
42
  }
43
43
  }
44
44
 
45
+ // Flight Info
46
+ #{
47
+ let d-flight = str(data.at("dept_flight_num", default: ""))
48
+ if d-flight != "" { tf(350pt, 545pt)[#text(weight: "bold")[Dept Flight:] #d-flight] }
49
+
50
+ let a-flight = str(data.at("arrival_flight_num", default: ""))
51
+ if a-flight != "" { tf(450pt, 545pt)[#text(weight: "bold")[Arr Flight:] #a-flight] }
52
+ }
53
+
45
54
  // Notes
46
- #tf(40pt, 360pt)[#block(width: 530pt)[#data.at("notes", default: "")]]
55
+ #tf(40pt, 565pt)[#block(width: 530pt)[#data.at("notes", default: "")]]
47
56
 
48
57
  // Acknowledgements
49
- #tf(40pt, 420pt)[#data.at("organization", default: "")]
50
- #tf(500pt, 420pt)[#data.at("briefed_date", default: "")]
58
+ #tf(40pt, 620pt)[#data.at("organization", default: "")]
59
+ #tf(500pt, 620pt)[#data.at("briefed_date", default: "")]
51
60
 
52
- #tf(40pt, 450pt)[#data.at("briefee_name", default: "")]
53
- #tf(270pt, 450pt)[#data.at("briefee_grade", default: "")]
61
+ #tf(40pt, 650pt)[#data.at("briefee_name", default: "")]
62
+ #tf(270pt, 650pt)[#data.at("briefee_grade", default: "")]
54
63
 
55
- #tf(40pt, 480pt)[#data.at("briefer_name", default: "")]
56
- #tf(270pt, 480pt)[#data.at("briefer_grade", default: "")]
64
+ #tf(40pt, 680pt)[#data.at("briefer_name", default: "")]
65
+ #tf(270pt, 680pt)[#data.at("briefer_grade", default: "")]
57
66
 
58
67
  // Emergency Contact
59
- #tf(40pt, 500pt)[#text(size: 16pt, weight: "bold")[EMERGENCY CONTACT]]
60
- #tf(40pt, 520pt)[#text(size: 12pt)[#data.at("emergency_contact_name", default: ""): #data.at("emergency_contact_phone", default: "")]]
68
+ #tf(40pt, 700pt)[#text(size: 10pt, weight: "bold")[EMERGENCY CONTACT:] #text(size: 10pt)[#data.at("emergency_contact_name", default: ""): #data.at("emergency_contact_phone", default: "")]]
@@ -6,17 +6,18 @@ Quill:
6
6
  example_file: example.md
7
7
  description: A simple document template for testing
8
8
 
9
- fields:
10
- author:
11
- title: Author of document
12
- type: string
13
- ice_cream:
14
- title: favorite ice cream flavor
15
- type: string
16
- default: taro
17
- title:
18
- title: title of document
19
- type: string
9
+ main:
10
+ fields:
11
+ author:
12
+ title: Author of document
13
+ type: string
14
+ ice_cream:
15
+ title: favorite ice cream flavor
16
+ type: string
17
+ default: taro
18
+ title:
19
+ title: title of document
20
+ type: string
20
21
 
21
22
  cards:
22
23
  quotes:
@@ -6,145 +6,146 @@ Quill:
6
6
  example_file: example.md
7
7
  description: Typesetted USAF Official Memorandum
8
8
 
9
- fields:
10
- memo_for:
11
- title: List of recipient organization(s)
12
- type: array
13
- required: true
14
- examples:
15
- - - ORG1/SYMBOL
16
- - ORG2/SYMBOL
17
- ui:
18
- group: Addressing
19
- description: "Organization/office symbol in UPPERCASE. To address a specific person, add their rank and name in parentheses (e.g., 'ORG/SYMBOL (LT COL JANE DOE)'). For numerous recipients, use 'DISTRIBUTION'."
9
+ main:
10
+ fields:
11
+ memo_for:
12
+ title: List of recipient organization(s)
13
+ type: array
14
+ required: true
15
+ examples:
16
+ - - ORG1/SYMBOL
17
+ - ORG2/SYMBOL
18
+ ui:
19
+ group: Addressing
20
+ description: "Organization/office symbol in UPPERCASE. To address a specific person, add their rank and name in parentheses (e.g., 'ORG/SYMBOL (LT COL JANE DOE)'). For numerous recipients, use 'DISTRIBUTION'."
20
21
 
21
- memo_from:
22
- title: "Sender information as array: [ORG/SYMBOL, 'Organization Name', 'Street Address', 'City State ZIP']"
23
- type: array
24
- required: true
25
- examples:
26
- - - ORG/SYMBOL
27
- - Organization Name
28
- - 123 Street Ave
29
- - City ST 12345-6789
30
- ui:
31
- group: Addressing
32
- description: If recipients are on the same installation, use only the office symbol. For recipients on other installations, include the full mailing address to enable return correspondence.
22
+ memo_from:
23
+ title: "Sender information as array: [ORG/SYMBOL, 'Organization Name', 'Street Address', 'City State ZIP']"
24
+ type: array
25
+ required: true
26
+ examples:
27
+ - - ORG/SYMBOL
28
+ - Organization Name
29
+ - 123 Street Ave
30
+ - City ST 12345-6789
31
+ ui:
32
+ group: Addressing
33
+ description: If recipients are on the same installation, use only the office symbol. For recipients on other installations, include the full mailing address to enable return correspondence.
33
34
 
34
- subject:
35
- title: Subject of the memo
36
- type: string
37
- required: true
38
- examples:
39
- - Subject of the Memorandum
40
- ui:
41
- group: Addressing
42
- description: Be brief and clear. Capitalize the first letter of each word except articles, prepositions, and conjunctions. Include suspense dates in parentheses if applicable.
35
+ subject:
36
+ title: Subject of the memo
37
+ type: string
38
+ required: true
39
+ examples:
40
+ - Subject of the Memorandum
41
+ ui:
42
+ group: Addressing
43
+ description: Be brief and clear. Capitalize the first letter of each word except articles, prepositions, and conjunctions. Include suspense dates in parentheses if applicable.
43
44
 
44
- signature_block:
45
- title: Signature block lines
46
- type: array
47
- required: true
48
- examples:
49
- - - "FIRST M. LAST, Rank, USSF"
50
- - Duty Title
51
- ui:
52
- group: Addressing
53
- description: "Line 1: Name in UPPERCASE as signed, grade, and service. Line 2: Duty title. Spell out 'Colonel' and general officer ranks."
45
+ signature_block:
46
+ title: Signature block lines
47
+ type: array
48
+ required: true
49
+ examples:
50
+ - - "FIRST M. LAST, Rank, USSF"
51
+ - Duty Title
52
+ ui:
53
+ group: Addressing
54
+ description: "Line 1: Name in UPPERCASE as signed, grade, and service. Line 2: Duty title. Spell out 'Colonel' and general officer ranks."
54
55
 
55
- letterhead_title:
56
- title: Title in letterhead
57
- type: string
58
- default: DEPARTMENT OF THE AIR FORCE
59
- ui:
60
- group: Letterhead
61
- description: Standard title. Only change for Joint Commands or DoW Agencies.
56
+ letterhead_title:
57
+ title: Title in letterhead
58
+ type: string
59
+ default: DEPARTMENT OF THE AIR FORCE
60
+ ui:
61
+ group: Letterhead
62
+ description: Standard title. Only change for Joint Commands or DoW Agencies.
62
63
 
63
- letterhead_caption:
64
- title: Letterhead caption line(s)
65
- type: array
66
- default:
67
- - HEADQUARTERS [UNIT NAME]
68
- ui:
69
- group: Letterhead
70
- description: The full organization name of your unit.
64
+ letterhead_caption:
65
+ title: Letterhead caption line(s)
66
+ type: array
67
+ default:
68
+ - HEADQUARTERS [UNIT NAME]
69
+ ui:
70
+ group: Letterhead
71
+ description: The full organization name of your unit.
71
72
 
72
- tag_line:
73
- title: Tag line at bottom of memo
74
- type: string
75
- default: ""
76
- ui:
77
- group: Letterhead
78
- description: Organizational motto at the bottom of the page.
73
+ tag_line:
74
+ title: Tag line at bottom of memo
75
+ type: string
76
+ default: ""
77
+ ui:
78
+ group: Letterhead
79
+ description: Organizational motto at the bottom of the page.
79
80
 
80
- date:
81
- title: Date of memo (YYYY-MM-DD); defaults to today
82
- type: string
83
- default: ""
84
- ui:
85
- group: Additional
86
- description: YYYY-MM-DD. Leave blank to use today's date.
81
+ date:
82
+ title: Date of memo (YYYY-MM-DD); defaults to today
83
+ type: string
84
+ default: ""
85
+ ui:
86
+ group: Additional
87
+ description: YYYY-MM-DD. Leave blank to use today's date.
87
88
 
88
- references:
89
- title: References for the memo
90
- type: array
91
- default: []
92
- examples:
93
- - - "AFM 33-326, 31 July 2019, Preparing Official Communications"
94
- ui:
95
- group: Additional
96
- description: "Cite by organization, type, date, and title."
89
+ references:
90
+ title: References for the memo
91
+ type: array
92
+ default: []
93
+ examples:
94
+ - - "AFM 33-326, 31 July 2019, Preparing Official Communications"
95
+ ui:
96
+ group: Additional
97
+ description: "Cite by organization, type, date, and title."
97
98
 
98
- cc:
99
- title: Carbon copy recipients
100
- type: array
101
- default: []
102
- examples:
103
- - - Rank and Name, ORG/SYMBOL
104
- ui:
105
- group: Additional
106
- description: List office symbols of recipients to receive copies.
99
+ cc:
100
+ title: Carbon copy recipients
101
+ type: array
102
+ default: []
103
+ examples:
104
+ - - Rank and Name, ORG/SYMBOL
105
+ ui:
106
+ group: Additional
107
+ description: List office symbols of recipients to receive copies.
107
108
 
108
- distribution:
109
- title: Distribution list. Used when "SEE DISTRIBUTION" is specified in `memo_for`.
110
- type: array
111
- default: []
112
- examples:
113
- - - ORG1/SYMBOL
114
- - ORG2/SYMBOL
115
- ui:
116
- group: Additional
117
- description: Complete list of recipients if 'SEE DISTRIBUTION' is used in the 'Memo For' field.
109
+ distribution:
110
+ title: Distribution list. Used when "SEE DISTRIBUTION" is specified in `memo_for`.
111
+ type: array
112
+ default: []
113
+ examples:
114
+ - - ORG1/SYMBOL
115
+ - ORG2/SYMBOL
116
+ ui:
117
+ group: Additional
118
+ description: Complete list of recipients if 'SEE DISTRIBUTION' is used in the 'Memo For' field.
118
119
 
119
- attachments:
120
- title: List of attachments
121
- type: array
122
- default: []
123
- examples:
124
- - - Attachment description, YYYY MMM DD
125
- ui:
126
- group: Additional
127
- description: List attachments in the order they are mentioned in the memo. Briefly describe each; do not use 'as stated' or abbreviations.
120
+ attachments:
121
+ title: List of attachments
122
+ type: array
123
+ default: []
124
+ examples:
125
+ - - Attachment description, YYYY MMM DD
126
+ ui:
127
+ group: Additional
128
+ description: List attachments in the order they are mentioned in the memo. Briefly describe each; do not use 'as stated' or abbreviations.
128
129
 
129
- classification:
130
- title: Classification level of the memo that displays in the banner
131
- type: string
132
- default: ""
133
- examples:
134
- - CONFIDENTIAL
135
- ui:
136
- group: Additional
137
- description: Follow AFI 31-401 and applicable DoD guidance for classification markings. Leave blank for unclassified.
130
+ classification:
131
+ title: Classification level of the memo that displays in the banner
132
+ type: string
133
+ default: ""
134
+ examples:
135
+ - CONFIDENTIAL
136
+ ui:
137
+ group: Additional
138
+ description: Follow AFI 31-401 and applicable DoD guidance for classification markings. Leave blank for unclassified.
138
139
 
139
- font_size:
140
- title: Font size for the memo text (int pt)
141
- type: number
142
- default: 11
143
- examples:
144
- - 11
145
- ui:
146
- group: Additional
147
- description: Font size for the memo text (pt).
140
+ font_size:
141
+ title: Font size for the memo text (int pt)
142
+ type: number
143
+ default: 11
144
+ examples:
145
+ - 11
146
+ ui:
147
+ group: Additional
148
+ description: Font size for the memo text (pt).
148
149
 
149
150
  cards:
150
151
  indorsement:
@@ -6,145 +6,146 @@ Quill:
6
6
  example_file: example.md
7
7
  description: Typesetted USAF Official Memorandum
8
8
 
9
- fields:
10
- memo_for:
11
- title: List of recipient organization(s)
12
- type: array
13
- required: true
14
- examples:
15
- - - ORG1/SYMBOL
16
- - ORG2/SYMBOL
17
- ui:
18
- group: Addressing
19
- description: "Organization/office symbol in UPPERCASE. To address a specific person, add their rank and name in parentheses (e.g., 'ORG/SYMBOL (LT COL JANE DOE)'). For numerous recipients, use 'DISTRIBUTION'."
9
+ main:
10
+ fields:
11
+ memo_for:
12
+ title: List of recipient organization(s)
13
+ type: array
14
+ required: true
15
+ examples:
16
+ - - ORG1/SYMBOL
17
+ - ORG2/SYMBOL
18
+ ui:
19
+ group: Addressing
20
+ description: "Organization/office symbol in UPPERCASE. To address a specific person, add their rank and name in parentheses (e.g., 'ORG/SYMBOL (LT COL JANE DOE)'). For numerous recipients, use 'DISTRIBUTION'."
20
21
 
21
- memo_from:
22
- title: "Sender information as array: [ORG/SYMBOL, 'Organization Name', 'Street Address', 'City State ZIP']"
23
- type: array
24
- required: true
25
- examples:
26
- - - ORG/SYMBOL
27
- - Organization Name
28
- - 123 Street Ave
29
- - City ST 12345-6789
30
- ui:
31
- group: Addressing
32
- description: If recipients are on the same installation, use only the office symbol. For recipients on other installations, include the full mailing address to enable return correspondence.
22
+ memo_from:
23
+ title: "Sender information as array: [ORG/SYMBOL, 'Organization Name', 'Street Address', 'City State ZIP']"
24
+ type: array
25
+ required: true
26
+ examples:
27
+ - - ORG/SYMBOL
28
+ - Organization Name
29
+ - 123 Street Ave
30
+ - City ST 12345-6789
31
+ ui:
32
+ group: Addressing
33
+ description: If recipients are on the same installation, use only the office symbol. For recipients on other installations, include the full mailing address to enable return correspondence.
33
34
 
34
- subject:
35
- title: Subject of the memo
36
- type: string
37
- required: true
38
- examples:
39
- - Subject of the Memorandum
40
- ui:
41
- group: Addressing
42
- description: Be brief and clear. Capitalize the first letter of each word except articles, prepositions, and conjunctions. Include suspense dates in parentheses if applicable.
35
+ subject:
36
+ title: Subject of the memo
37
+ type: string
38
+ required: true
39
+ examples:
40
+ - Subject of the Memorandum
41
+ ui:
42
+ group: Addressing
43
+ description: Be brief and clear. Capitalize the first letter of each word except articles, prepositions, and conjunctions. Include suspense dates in parentheses if applicable.
43
44
 
44
- signature_block:
45
- title: Signature block lines
46
- type: array
47
- required: true
48
- examples:
49
- - - "FIRST M. LAST, Rank, USSF"
50
- - Duty Title
51
- ui:
52
- group: Addressing
53
- description: "Line 1: Name in UPPERCASE as signed, grade, and service. Line 2: Duty title. Spell out 'Colonel' and general officer ranks."
45
+ signature_block:
46
+ title: Signature block lines
47
+ type: array
48
+ required: true
49
+ examples:
50
+ - - "FIRST M. LAST, Rank, USSF"
51
+ - Duty Title
52
+ ui:
53
+ group: Addressing
54
+ description: "Line 1: Name in UPPERCASE as signed, grade, and service. Line 2: Duty title. Spell out 'Colonel' and general officer ranks."
54
55
 
55
- letterhead_title:
56
- title: Title in letterhead
57
- type: string
58
- default: DEPARTMENT OF THE AIR FORCE
59
- ui:
60
- group: Letterhead
61
- description: Standard title. Only change for Joint Commands or DoW Agencies.
56
+ letterhead_title:
57
+ title: Title in letterhead
58
+ type: string
59
+ default: DEPARTMENT OF THE AIR FORCE
60
+ ui:
61
+ group: Letterhead
62
+ description: Standard title. Only change for Joint Commands or DoW Agencies.
62
63
 
63
- letterhead_caption:
64
- title: Letterhead caption line(s)
65
- type: array
66
- default:
67
- - HEADQUARTERS [UNIT NAME]
68
- ui:
69
- group: Letterhead
70
- description: The full organization name of your unit.
64
+ letterhead_caption:
65
+ title: Letterhead caption line(s)
66
+ type: array
67
+ default:
68
+ - HEADQUARTERS [UNIT NAME]
69
+ ui:
70
+ group: Letterhead
71
+ description: The full organization name of your unit.
71
72
 
72
- tag_line:
73
- title: Tag line at bottom of memo
74
- type: string
75
- default: ""
76
- ui:
77
- group: Letterhead
78
- description: Organizational motto at the bottom of the page.
73
+ tag_line:
74
+ title: Tag line at bottom of memo
75
+ type: string
76
+ default: ""
77
+ ui:
78
+ group: Letterhead
79
+ description: Organizational motto at the bottom of the page.
79
80
 
80
- date:
81
- title: Date of memo (YYYY-MM-DD); defaults to today
82
- type: string
83
- default: ""
84
- ui:
85
- group: Additional
86
- description: YYYY-MM-DD. Leave blank to use today's date.
81
+ date:
82
+ title: Date of memo (YYYY-MM-DD); defaults to today
83
+ type: string
84
+ default: ""
85
+ ui:
86
+ group: Additional
87
+ description: YYYY-MM-DD. Leave blank to use today's date.
87
88
 
88
- references:
89
- title: References for the memo
90
- type: array
91
- default: []
92
- examples:
93
- - - "AFM 33-326, 31 July 2019, Preparing Official Communications"
94
- ui:
95
- group: Additional
96
- description: "Cite by organization, type, date, and title."
89
+ references:
90
+ title: References for the memo
91
+ type: array
92
+ default: []
93
+ examples:
94
+ - - "AFM 33-326, 31 July 2019, Preparing Official Communications"
95
+ ui:
96
+ group: Additional
97
+ description: "Cite by organization, type, date, and title."
97
98
 
98
- cc:
99
- title: Carbon copy recipients
100
- type: array
101
- default: []
102
- examples:
103
- - - Rank and Name, ORG/SYMBOL
104
- ui:
105
- group: Additional
106
- description: List office symbols of recipients to receive copies.
99
+ cc:
100
+ title: Carbon copy recipients
101
+ type: array
102
+ default: []
103
+ examples:
104
+ - - Rank and Name, ORG/SYMBOL
105
+ ui:
106
+ group: Additional
107
+ description: List office symbols of recipients to receive copies.
107
108
 
108
- distribution:
109
- title: Distribution list. Used when "SEE DISTRIBUTION" is specified in `memo_for`.
110
- type: array
111
- default: []
112
- examples:
113
- - - ORG1/SYMBOL
114
- - ORG2/SYMBOL
115
- ui:
116
- group: Additional
117
- description: Complete list of recipients if 'SEE DISTRIBUTION' is used in the 'Memo For' field.
109
+ distribution:
110
+ title: Distribution list. Used when "SEE DISTRIBUTION" is specified in `memo_for`.
111
+ type: array
112
+ default: []
113
+ examples:
114
+ - - ORG1/SYMBOL
115
+ - ORG2/SYMBOL
116
+ ui:
117
+ group: Additional
118
+ description: Complete list of recipients if 'SEE DISTRIBUTION' is used in the 'Memo For' field.
118
119
 
119
- attachments:
120
- title: List of attachments
121
- type: array
122
- default: []
123
- examples:
124
- - - Attachment description, YYYY MMM DD
125
- ui:
126
- group: Additional
127
- description: List attachments in the order they are mentioned in the memo. Briefly describe each; do not use 'as stated' or abbreviations.
120
+ attachments:
121
+ title: List of attachments
122
+ type: array
123
+ default: []
124
+ examples:
125
+ - - Attachment description, YYYY MMM DD
126
+ ui:
127
+ group: Additional
128
+ description: List attachments in the order they are mentioned in the memo. Briefly describe each; do not use 'as stated' or abbreviations.
128
129
 
129
- classification:
130
- title: Classification level of the memo that displays in the banner
131
- type: string
132
- default: ""
133
- examples:
134
- - CONFIDENTIAL
135
- ui:
136
- group: Additional
137
- description: Follow AFI 31-401 and applicable DoD guidance for classification markings. Leave blank for unclassified.
130
+ classification:
131
+ title: Classification level of the memo that displays in the banner
132
+ type: string
133
+ default: ""
134
+ examples:
135
+ - CONFIDENTIAL
136
+ ui:
137
+ group: Additional
138
+ description: Follow AFI 31-401 and applicable DoD guidance for classification markings. Leave blank for unclassified.
138
139
 
139
- font_size:
140
- title: Font size for the memo text (int pt)
141
- type: number
142
- default: 11
143
- examples:
144
- - 11
145
- ui:
146
- group: Additional
147
- description: Font size for the memo text (pt).
140
+ font_size:
141
+ title: Font size for the memo text (int pt)
142
+ type: number
143
+ default: 11
144
+ examples:
145
+ - 11
146
+ ui:
147
+ group: Additional
148
+ description: Font size for the memo text (pt).
148
149
 
149
150
  cards:
150
151
  indorsement:
@@ -1,4 +0,0 @@
1
- // debug.typ (generated � renders form with debug overlays)
2
- #import "../form.typ": form
3
-
4
- #form(debug: true)
@@ -1,4 +0,0 @@
1
- // example.typ (edit this file to fill the form)
2
- #import "../form.typ": form
3
-
4
- #form()