@airmark/quiver 0.32.1 → 0.32.2

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.32.1",
3
+ "version": "0.32.2",
4
4
  "description": "Airmark Quiver — Air Force and DAF document Quills for Quillmark.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -16,9 +16,9 @@
16
16
  "node": ">=24"
17
17
  },
18
18
  "devDependencies": {
19
- "@quillmark/quiver": "0.26.0",
20
- "@quillmark/wasm": "^0.109.1",
21
- "quillkit": "0.5.3"
19
+ "@quillmark/quiver": "0.27.0",
20
+ "@quillmark/wasm": "^0.110.0",
21
+ "quillkit": "0.5.4"
22
22
  },
23
23
  "scripts": {
24
24
  "test": "quillkit test",
@@ -57,7 +57,15 @@ main:
57
57
  ui:
58
58
  group: addressing
59
59
  description: "Be brief and clear. Capitalize the first letter of each word except articles, prepositions, and conjunctions. Include suspense dates in parentheses if applicable. Italicize publication titles with *asterisks* (standard Markdown emphasis), as in the References field."
60
-
60
+
61
+ date:
62
+ type: date
63
+ default: ""
64
+ ui:
65
+ group: addressing
66
+ compact: true
67
+ description: YYYY-MM-DD. Leave blank to use today's date.
68
+
61
69
  signature_block:
62
70
  type: array
63
71
  items:
@@ -71,14 +79,6 @@ main:
71
79
  compact: true
72
80
  description: "Line 1: Name in UPPERCASE as signed, grade, and service. Line 2: Duty title."
73
81
 
74
- date:
75
- type: date
76
- default: ""
77
- ui:
78
- group: addressing
79
- compact: true
80
- description: YYYY-MM-DD. Leave blank to use today's date.
81
-
82
82
  letterhead_title:
83
83
  type: array
84
84
  items:
@@ -259,6 +259,13 @@ card_kinds:
259
259
  group: addressing
260
260
  compact: true
261
261
  description: Office symbol or organization receiving the endorsed memo.
262
+ date:
263
+ type: date
264
+ default: ""
265
+ ui:
266
+ group: addressing
267
+ compact: true
268
+ description: "YYYY-MM-DD. Date the endorser signs/forwards the memo (per AFH 33-337 Ch. 14, this is distinct from the originating memo's date). Leave blank to render a fillable PDF text field for the endorser to type the date into when signing."
262
269
  signature_block:
263
270
  type: array
264
271
  items:
@@ -271,13 +278,6 @@ card_kinds:
271
278
  group: addressing
272
279
  compact: true
273
280
  description: "Line 1: Name in UPPERCASE as signed, grade, and service. Line 2: Duty title."
274
- date:
275
- type: date
276
- default: ""
277
- ui:
278
- group: addressing
279
- compact: true
280
- description: "YYYY-MM-DD. Date the endorser signs/forwards the memo (per AFH 33-337 Ch. 14, this is distinct from the originating memo's date). Leave blank to render a fillable PDF text field for the endorser to type the date into when signing."
281
281
  format:
282
282
  type: enum
283
283
  values:
@@ -264,23 +264,33 @@
264
264
  // but a gap left outside can be consumed at the foot of one page while
265
265
  // the block starts at the top margin of the next, which is also what put
266
266
  // the signing field off the page (see below).
267
- #v(gap)
268
267
  #if signing-field != none {
269
268
  // The signing field covers those blank lines — where a signature is
270
- // actually written — so it is placed over the gap. With the gap inside
271
- // the block that is a downward offset from the block's own origin, and
272
- // the field therefore travels with the block onto whatever page it
273
- // lands on. The superseded form placed it at a NEGATIVE dy, reaching
274
- // above the block into space that belongs to the previous page: when
275
- // the block started at the top margin, the field was painted into the
276
- // header band over the page number and the classification banner, or
277
- // off the sheet entirely.
269
+ // actually written — so it is placed over the gap. It is placed BEFORE
270
+ // the gap is emitted: `place` anchors at the current flow position, so
271
+ // placing it after `v(gap)` anchors the box at the first name line and
272
+ // paints it down over the printed signature block. Anchored here it
273
+ // still travels with the block onto whatever page the block lands on,
274
+ // since the gap is inside the unbreakable block rather than ahead of
275
+ // it.
276
+ //
277
+ // The widget keeps its own size (the helper's default is 50pt tall and
278
+ // it positions itself, so an `align` around it does nothing) and is
279
+ // offset to the BOTTOM of the gap: it always ends where the printed
280
+ // name begins, and whatever the gap has beyond the widget's height
281
+ // stays clear between the body text and the widget's frame.
282
+ let widget-height = {
283
+ let h = measure(signing-field).height
284
+ if h > 0pt { h } else { 50pt }
285
+ }
286
+ let drop = gap - widget-height - 3pt
278
287
  place(
279
288
  dx: left-pad,
280
- dy: 0pt,
281
- box(width: body-width - left-pad, height: gap, signing-field),
289
+ dy: if drop > 0pt { drop } else { 0pt },
290
+ box(width: body-width - left-pad, height: widget-height, signing-field),
282
291
  )
283
292
  }
293
+ #v(gap)
284
294
  #align(left)[
285
295
  #pad(left: left-pad)[
286
296
  #text(hyphenate: false)[
@@ -119,7 +119,14 @@
119
119
  #backmatter(
120
120
  // Signature block
121
121
  signature_block: data.signature_block,
122
- signing_field: signature-field("Signature", field: "signature_block"),
122
+ // The widget sits at the bottom of AFH 33-337's four blank lines and is
123
+ // sized to two and a half of them, so the line and a half above it stays
124
+ // clear of the body text without moving the block off the fifth line.
125
+ signing_field: signature-field(
126
+ "Signature",
127
+ field: "signature_block",
128
+ height: body_font_size * 2.5,
129
+ ),
123
130
 
124
131
  // Optional cc
125
132
  ..if data.cc.len() > 0 { (cc: data.cc) },
@@ -184,6 +191,7 @@
184
191
  signing_field: signature-field(
185
192
  "Ind_" + str(i) + "_Signature",
186
193
  field: card.at("$path") + "signature_block",
194
+ height: body_font_size * 2.5,
187
195
  ),
188
196
  ..if card.format != "" { (format: card.format) },
189
197
  date: resolved_date,