@airmark/quiver 0.11.0 → 0.13.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@airmark/quiver",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "Airmark Quiver — Air Force and DAF document Quills for Quillmark.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -13,14 +13,14 @@
13
13
  "Quiver.yaml"
14
14
  ],
15
15
  "engines": {
16
- "node": ">=18"
16
+ "node": ">=24"
17
17
  },
18
18
  "devDependencies": {
19
- "@quillmark/quiver": "^0.6.0",
20
- "@quillmark/wasm": "0.66.2"
19
+ "@quillmark/quiver": "^0.7.0",
20
+ "@quillmark/wasm": "0.73.0"
21
21
  },
22
22
  "scripts": {
23
- "test": "node --test",
23
+ "test": "node --test quiver.test.js",
24
24
  "release:patch": "npm version patch -m \"chore(release): %s\" && git push --follow-tags",
25
25
  "release:minor": "npm version minor -m \"chore(release): %s\" && git push --follow-tags"
26
26
  },
@@ -11,50 +11,43 @@ main:
11
11
  hide_body: true
12
12
  fields:
13
13
  name:
14
- title: Name (Last, First, MI)
15
14
  type: string
16
15
  required: true
17
16
  description: Full name in Last, First, Middle Initial format.
18
17
 
19
18
  unit:
20
- title: Unit of Assignment
21
19
  type: string
22
20
  required: true
23
21
  description: Unit or organization of assignment.
24
22
 
25
23
  grade:
26
- title: Grade/CCC Level
27
24
  type: string
28
25
  description: Current grade or CCC level.
29
26
 
30
27
  commanders_auth:
31
- title: Commander's Record of Authentication
32
28
  type: string
33
29
  description: Commander's authentication entry on page 1.
34
30
 
35
31
  card_types:
36
32
  experience:
37
- title: Record of Experience
38
33
  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.
39
34
  ui:
35
+ title: Record of Experience
40
36
  hide_body: true
41
37
  fields:
42
38
  date:
43
- title: Date
44
39
  type: date
45
40
  ui:
46
41
  group: Record
47
42
  description: Date of the action (column A).
48
43
 
49
44
  action:
50
- title: Mandatory Actions to be Reported
51
45
  type: string
52
46
  ui:
53
47
  group: Record
54
48
  description: One type of action per line (column B).
55
49
 
56
50
  written_grade:
57
- title: Written Grade
58
51
  type: string
59
52
  ui:
60
53
  group: Record
@@ -62,7 +55,6 @@ card_types:
62
55
  description: Written grade, if applicable (column C).
63
56
 
64
57
  written_grade_date:
65
- title: Written Grade Date
66
58
  type: date
67
59
  default: ""
68
60
  ui:
@@ -71,7 +63,6 @@ card_types:
71
63
  description: Date of written grade (column D). Omit or leave blank when there is no written grade.
72
64
 
73
65
  positional_grade:
74
- title: Positional Grade
75
66
  type: string
76
67
  ui:
77
68
  group: Record
@@ -79,7 +70,6 @@ card_types:
79
70
  description: Positional grade, if applicable (column E).
80
71
 
81
72
  positional_grade_date:
82
- title: Positional Grade Date
83
73
  type: date
84
74
  default: ""
85
75
  ui:
@@ -88,7 +78,6 @@ card_types:
88
78
  description: Date of positional grade (column F). Omit or leave blank when there is no positional grade.
89
79
 
90
80
  auth_or_remarks:
91
- title: Record of Authentication or Remarks
92
81
  type: string
93
82
  ui:
94
83
  group: Record
@@ -11,45 +11,36 @@ main:
11
11
  hide_body: false
12
12
  fields:
13
13
  award:
14
- title: Award Program
15
14
  type: string
16
15
  category_if_applicable:
17
- title: Award Category
18
16
  type: string
19
17
  ui:
20
18
  compact: true
21
19
  award_period:
22
- title: Award Period
23
20
  type: string
24
21
  ui:
25
22
  compact: true
26
23
  rankname_of_nominee:
27
- title: Nominee Rank & Name
28
24
  type: string
29
25
  ui:
30
26
  compact: true
31
27
  majcom_fldcom_foa_or_dru:
32
- title: Command (MAJCOM/FLDCOM/FOA/DRU)
33
28
  type: string
34
29
  ui:
35
30
  compact: true
36
31
  dafsc_duty_title:
37
- title: DAFSC & Duty Title
38
32
  type: string
39
33
  nominees_telephone_dsn_commercial:
40
- title: Nominee Phone
41
34
  type: string
42
35
  unit_office_symbol_street_address_base_state_zip:
43
- title: Unit Mailing Address
44
36
  type: string
45
37
  unit_commander_rank_name_and_telephone:
46
- title: Unit Commander
47
38
  type: string
48
39
 
49
40
  card_types:
50
41
  accomplishments_continued:
51
- title: Specific Accomplishments (Continued — Page 2)
52
42
  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.
53
43
  ui:
44
+ title: Specific Accomplishments (Continued — Page 2)
54
45
  hide_body: false
55
46
  fields: {}
@@ -11,15 +11,12 @@ main:
11
11
  hide_body: true
12
12
  fields:
13
13
  transportation_mode:
14
- title: Mode of Transportation
15
14
  type: string
16
15
  enum: [pmv, airplane, bus, train, motorcycle, other]
17
16
  required: true
18
17
  description: "Matches the check box."
19
18
 
20
-
21
19
  departure_date:
22
- title: Departure Date
23
20
  type: date
24
21
  required: true
25
22
  ui:
@@ -27,7 +24,6 @@ main:
27
24
  description: "Date of initial departure."
28
25
 
29
26
  final_destination:
30
- title: Final Destination
31
27
  type: string
32
28
  required: true
33
29
  ui:
@@ -35,26 +31,22 @@ main:
35
31
  description: "Final travel destination."
36
32
 
37
33
  dept_flight_num:
38
- title: Departure Flight Number
39
34
  type: string
40
35
  ui:
41
36
  compact: true
42
37
  description: "Departure flight number. (tenative or confirmed)"
43
38
 
44
39
  arrival_flight_num:
45
- title: Arrival Flight Number
46
40
  type: string
47
41
  ui:
48
42
  compact: true
49
43
  description: "Arrival flight number. (tenative or confirmed)"
50
44
 
51
45
  notes:
52
- title: Notes
53
46
  type: string
54
47
  description: "Additional notes or remarks for the travel."
55
48
 
56
49
  organization:
57
- title: Organization
58
50
  type: string
59
51
  required: true
60
52
  ui:
@@ -62,7 +54,6 @@ main:
62
54
  description: "Unit / Organization."
63
55
 
64
56
  briefed_date:
65
- title: Date Briefed
66
57
  type: date
67
58
  required: true
68
59
  ui:
@@ -70,7 +61,6 @@ main:
70
61
  description: "Put in today's date."
71
62
 
72
63
  briefee_name:
73
- title: Individual Receiving Brief (Name)
74
64
  type: string
75
65
  required: true
76
66
  ui:
@@ -78,62 +68,53 @@ main:
78
68
  description: "Put in your Name (Last, First)."
79
69
 
80
70
  briefee_grade:
81
- title: Individual Receiving Brief (Grade)
82
71
  type: string
83
72
  ui:
84
73
  compact: true
85
74
  description: "Put in your Grade."
86
75
 
87
76
  emergency_contact_name:
88
- title: Emergency Contact Name
89
77
  type: string
90
78
  description: "Put in your Emergency Contact Name."
91
79
 
92
80
  emergency_contact_phone:
93
- title: Emergency Contact Phone
94
81
  type: string
95
82
  description: "Put in your Emergency Contact's Phone Number."
96
83
 
97
84
  card_types:
98
85
  itinerary:
99
- title: Proposed Travel Itinerary
100
86
  description: "Each card represents one row in the travel itinerary table. Up to 10 rows are supported."
101
87
  ui:
88
+ title: Proposed Travel Itinerary
102
89
  hide_body: true
103
- default_title: Leg
104
90
  fields:
105
91
  date:
106
- title: Date
107
92
  type: date
108
93
  ui:
109
94
  group: Itinerary Entry
110
95
  compact: true
111
96
  description: "Date for the itinerary row."
112
97
  departure_point:
113
- title: Departure Point
114
98
  type: string
115
99
  ui:
116
100
  group: Itinerary Entry
117
101
  compact: true
118
102
  description: "Point of departure."
119
103
  arrival_point:
120
- title: Arrival Point
121
104
  type: string
122
105
  ui:
123
106
  group: Itinerary Entry
124
107
  compact: true
125
108
  description: "Point of arrival."
126
109
  rest_length:
127
- title: Length of Rest Period
128
110
  type: string
129
111
  ui:
130
112
  group: Itinerary Entry
131
113
  compact: true
132
114
  description: "Duration of stay at arrival point"
133
115
  mileage:
134
- title: Approximate Mileage
135
116
  type: string
136
117
  ui:
137
118
  group: Itinerary Entry
138
119
  compact: true
139
- description: "Approximate mileage for this leg (leave blank if not applicable, e.g., flights)."
120
+ description: "Approximate mileage for this leg (leave blank if not applicable, e.g., flights)."
@@ -9,52 +9,46 @@ quill:
9
9
  main:
10
10
  fields:
11
11
  memo_for:
12
- title: List of recipient organization(s)
13
12
  type: array
14
13
  required: true
15
- examples:
16
- - - ORG1/SYMBOL
17
- - ORG2/SYMBOL
14
+ example:
15
+ - ORG1/SYMBOL
16
+ - ORG2/SYMBOL
18
17
  ui:
19
18
  group: Addressing
20
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'."
21
20
 
22
21
  memo_from:
23
- title: "Sender information as array: [ORG/SYMBOL, 'Organization Name', 'Street Address', 'City State ZIP']"
24
22
  type: array
25
23
  required: true
26
- examples:
27
- - - ORG/SYMBOL
28
- - Organization Name
29
- - 123 Street Ave
30
- - City ST 12345-6789
24
+ example:
25
+ - ORG/SYMBOL
26
+ - Organization Name
27
+ - 123 Street Ave
28
+ - City ST 12345-6789
31
29
  ui:
32
30
  group: Addressing
33
31
  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.
34
32
 
35
33
  subject:
36
- title: Subject of the memo
37
34
  type: string
38
35
  required: true
39
- examples:
40
- - Subject of the Memorandum
36
+ example: Subject of the Memorandum
41
37
  ui:
42
38
  group: Addressing
43
39
  description: Be brief and clear. Capitalize the first letter of each word except articles, prepositions, and conjunctions. Include suspense dates in parentheses if applicable.
44
40
 
45
41
  signature_block:
46
- title: Signature block lines
47
42
  type: array
48
43
  required: true
49
- examples:
50
- - - "FIRST M. LAST, Rank, USSF"
51
- - Duty Title
44
+ example:
45
+ - "FIRST M. LAST, Rank, USSF"
46
+ - Duty Title
52
47
  ui:
53
48
  group: Addressing
54
49
  description: "Line 1: Name in UPPERCASE as signed, grade, and service. Line 2: Duty title. Spell out 'Colonel' and general officer ranks."
55
50
 
56
51
  letterhead_title:
57
- title: Title in letterhead
58
52
  type: string
59
53
  default: DEPARTMENT OF THE AIR FORCE
60
54
  ui:
@@ -62,7 +56,6 @@ main:
62
56
  description: Standard title. Only change for Joint Commands or DoW Agencies.
63
57
 
64
58
  letterhead_caption:
65
- title: Letterhead caption line(s)
66
59
  type: array
67
60
  default:
68
61
  - HEADQUARTERS [UNIT NAME]
@@ -71,7 +64,6 @@ main:
71
64
  description: The full organization name of your unit.
72
65
 
73
66
  letterhead_seal:
74
- title: Letterhead seal
75
67
  type: string
76
68
  enum:
77
69
  - dow
@@ -83,7 +75,6 @@ main:
83
75
  description: Department of War (DoW) or Department of Defense (DoD) seal shown in the letterhead.
84
76
 
85
77
  letterhead_seal_subtitle:
86
- title: Subtitle under letterhead seal
87
78
  type: string
88
79
  default: ""
89
80
  ui:
@@ -92,7 +83,6 @@ main:
92
83
  description: Optional line below the DoW seal (bold caps). Leave blank to omit.
93
84
 
94
85
  tag_line:
95
- title: Tag line at bottom of memo
96
86
  type: string
97
87
  default: ""
98
88
  ui:
@@ -100,48 +90,43 @@ main:
100
90
  description: Organizational motto at the bottom of the page.
101
91
 
102
92
  references:
103
- title: References for the memo
104
93
  type: array
105
94
  default: []
106
- examples:
107
- - - "AFM 33-326, 31 July 2019, Preparing Official Communications"
95
+ example:
96
+ - "AFM 33-326, 31 July 2019, Preparing Official Communications"
108
97
  ui:
109
98
  group: Additional
110
99
  description: "Cite by organization, type, date, and title."
111
100
 
112
101
  cc:
113
- title: Carbon copy recipients
114
102
  type: array
115
103
  default: []
116
- examples:
117
- - - Rank and Name, ORG/SYMBOL
104
+ example:
105
+ - Rank and Name, ORG/SYMBOL
118
106
  ui:
119
107
  group: Additional
120
108
  description: List office symbols of recipients to receive copies.
121
109
 
122
110
  distribution:
123
- title: Distribution list. Used when "SEE DISTRIBUTION" is specified in `memo_for`.
124
111
  type: array
125
112
  default: []
126
- examples:
127
- - - ORG1/SYMBOL
128
- - ORG2/SYMBOL
113
+ example:
114
+ - ORG1/SYMBOL
115
+ - ORG2/SYMBOL
129
116
  ui:
130
117
  group: Additional
131
118
  description: Complete list of recipients if 'SEE DISTRIBUTION' is used in the 'Memo For' field.
132
119
 
133
120
  attachments:
134
- title: List of attachments
135
121
  type: array
136
122
  default: []
137
- examples:
138
- - - Attachment description, YYYY MMM DD
123
+ example:
124
+ - Attachment description, YYYY MMM DD
139
125
  ui:
140
126
  group: Additional
141
127
  description: List attachments in the order they are mentioned in the memo. Briefly describe each; do not use 'as stated' or abbreviations.
142
-
128
+
143
129
  memo_style:
144
- title: Memorandum style
145
130
  type: string
146
131
  enum:
147
132
  - usaf
@@ -153,27 +138,23 @@ main:
153
138
  description: "USAF memorandum (default) or DAF headquarters memorandum. DAF changes date formatting and body paragraph layout per AFH 33-337."
154
139
 
155
140
  font_size:
156
- title: Font size for the memo text (pt)
157
141
  type: number
158
142
  default: 12
159
- examples:
160
- - 12
161
- - 11.5
143
+ example: 12
162
144
  ui:
163
145
  group: Additional
164
146
  compact: true
165
147
  description: Font size for the memo text (pt). Decimal values (e.g. 11.5) are supported.
166
148
 
167
149
  date:
168
- title: Date of memo (YYYY-MM-DD); defaults to today
169
150
  type: date
170
151
  default: ""
171
152
  ui:
172
153
  group: Additional
173
154
  compact: true
174
155
  description: YYYY-MM-DD. Leave blank to use today's date.
156
+
175
157
  classification:
176
- title: Classification level of the memo that displays in the banner
177
158
  type: string
178
159
  enum:
179
160
  - ""
@@ -189,59 +170,54 @@ main:
189
170
  description: "Select the classification marking displayed in the header/footer banner. Banner colors follow DoD/CAPCO marking guidance (UNCLASSIFIED green, CUI/CONFIDENTIAL black, SECRET red, TOP SECRET orange). Follow AFI 31-401 and applicable DoD guidance. Leave blank to omit the banner."
190
171
 
191
172
  dissemination:
192
- title: Dissemination control marking (portion after //)
193
173
  type: string
194
174
  default: ""
195
175
  ui:
196
176
  group: Additional
197
177
  compact: true
198
178
  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 //."
199
-
179
+
200
180
  card_types:
201
181
  indorsement:
202
- title: Routing indorsement
203
182
  description: Chain of routing endorsements. Each endorsement block adds an official response or forwarding action to the original memo.
183
+ ui:
184
+ title: Routing indorsement
204
185
  fields:
205
186
  from:
206
- title: From office/symbol
207
187
  type: string
208
188
  default: ORG/SYMBOL
209
189
  ui:
210
190
  group: Addressing
211
191
  description: "Office symbol or Rank Name of the endorsing official (e.g., 'ORG/SYMBOL')."
212
192
  for:
213
- title: To office/symbol
214
193
  type: string
215
194
  default: ORG/SYMBOL
216
195
  ui:
217
196
  group: Addressing
218
197
  description: Office symbol or organization receiving the endorsed memo.
219
198
  signature_block:
220
- title: Signature block lines
221
199
  type: array
222
- examples:
223
- - - "FIRST M. LAST, Rank, USAF"
224
- - Duty Title
225
- ui:
226
- group: Addressing
227
- description: "Line 1: Name in UPPERCASE as signed, grade, and service. Line 2: Duty title."
228
200
  required: true
229
201
  default:
230
202
  - "FIRST M. LAST, Rank, USAF"
231
203
  - Duty Title
204
+ example:
205
+ - "FIRST M. LAST, Rank, USAF"
206
+ - Duty Title
207
+ ui:
208
+ group: Addressing
209
+ description: "Line 1: Name in UPPERCASE as signed, grade, and service. Line 2: Duty title."
232
210
  format:
233
- title: Indorsement format
234
211
  type: string
235
212
  enum:
236
213
  - standard
237
214
  - informal
238
215
  - separate_page
216
+ default: standard
239
217
  ui:
240
218
  group: Additional
241
219
  description: "Format style: 'standard' (formal on same page), 'informal' (less formal routing), or 'separate_page' (starts on new page)."
242
- default: standard
243
220
  action:
244
- title: Action Decision
245
221
  type: string
246
222
  enum:
247
223
  - none
@@ -252,19 +228,16 @@ card_types:
252
228
  group: Addressing
253
229
  description: "Action taken by the endorser. Use 'none' to hide the Approve/Disapprove line entirely, 'undecided' to display the line with neither option circled, 'approve' or 'disapprove' to circle the selected option."
254
230
  attachments:
255
- title: Attachments for this endorsement
256
231
  type: array
257
232
  ui:
258
233
  group: Additional
259
234
  description: List of attachments specific to this endorsement.
260
235
  cc:
261
- title: Carbon copy recipients
262
236
  type: array
263
237
  ui:
264
238
  group: Additional
265
239
  description: List of office symbols to receive copies of this endorsement.
266
240
  date:
267
- title: Date of endorsement (YYYY-MM-DD); defaults to today
268
241
  type: date
269
242
  ui:
270
243
  group: Additional
@@ -21,7 +21,7 @@
21
21
 
22
22
  #let DEFAULT_LETTERHEAD_FONTS = ("Copperplate CC", "NimbusRomNo9L", "times new roman")
23
23
  #let DEFAULT_BODY_FONTS = ("NimbusRomNo9L", "times new roman") // AFH 33-337 §5: Times New Roman required
24
- #let LETTERHEAD_COLOR = rgb("#204093") // Faded USAF blue for letterhead
24
+ #let LETTERHEAD_COLOR = rgb("#355e93") // Faded USAF blue for letterhead
25
25
 
26
26
  // =============================================================================
27
27
  // PARAGRAPH CONFIGURATION