@tonguetoquill/collection 0.2.13 → 0.3.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonguetoquill/collection",
3
- "version": "0.2.13",
3
+ "version": "0.3.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/nibsbin/tonguetoquill-collection.git"
@@ -24,21 +24,26 @@
24
24
  #if "commanders_auth" in data { vals.insert("commonforms_text_p1_116", data.commanders_auth) }
25
25
 
26
26
  // --- Experience table rows from cards ---
27
+ // The form supports 16 rows on page 1 and 21 rows on page 2 (37 total).
28
+ // Overflow rows are silently ignored.
29
+ #let max-rows = 37
27
30
  #{
28
31
  let row = 0
29
32
  for card in data.CARDS {
30
33
  if card.CARD == "experience" {
31
- for (col, key) in col-keys.enumerate() {
32
- let value = card.at(key, default: "")
33
- if value != "" {
34
- let field-name = if row < 16 {
35
- // Page 1: fields start at index 4, stride 7
36
- "commonforms_text_p1_" + str(4 + row * 7 + col)
37
- } else {
38
- // Page 2: fields start at index 1, stride 7
39
- "commonforms_text_p2_" + str(1 + (row - 16) * 7 + col)
34
+ if row < max-rows {
35
+ for (col, key) in col-keys.enumerate() {
36
+ let value = card.at(key, default: "")
37
+ if value != "" {
38
+ let field-name = if row < 16 {
39
+ // Page 1: fields start at index 4, stride 7
40
+ "commonforms_text_p1_" + str(4 + row * 7 + col)
41
+ } else {
42
+ // Page 2: fields start at index 1, stride 7
43
+ "commonforms_text_p2_" + str(1 + (row - 16) * 7 + col)
44
+ }
45
+ vals.insert(field-name, value)
40
46
  }
41
- vals.insert(field-name, value)
42
47
  }
43
48
  }
44
49
  row = row + 1
@@ -16,6 +16,17 @@ fields:
16
16
  required: true
17
17
  description: "Matches the check box."
18
18
 
19
+ dept_flight_num:
20
+ title: Departure Flight Number
21
+ type: string
22
+ description: "Departure flight number."
23
+
24
+ arrival_flight_num:
25
+ title: Arrival Flight Number
26
+ type: string
27
+ description: "Arrival flight number."
28
+
29
+
19
30
  departure_date:
20
31
  title: Departure Date
21
32
  type: date
@@ -43,7 +54,7 @@ fields:
43
54
  required: true
44
55
  ui:
45
56
  compact: true
46
- description: "Unit / Organization conducting the brief."
57
+ description: "Unit / Organization."
47
58
 
48
59
  briefed_date:
49
60
  title: Date Briefed
@@ -51,7 +62,7 @@ fields:
51
62
  required: true
52
63
  ui:
53
64
  compact: true
54
- description: "Date the brief took place."
65
+ description: "Put in today's date."
55
66
 
56
67
  briefee_name:
57
68
  title: Individual Receiving Brief (Name)
@@ -59,29 +70,29 @@ fields:
59
70
  required: true
60
71
  ui:
61
72
  compact: true
62
- description: "Name (Last, First) of the individual receiving the brief."
73
+ description: "Put in your Name (Last, First)."
63
74
 
64
75
  briefee_grade:
65
76
  title: Individual Receiving Brief (Grade)
66
77
  type: string
67
78
  ui:
68
79
  compact: true
69
- description: "Grade of the individual receiving the brief."
80
+ description: "Put in your Grade."
70
81
 
71
82
  emergency_contact_name:
72
83
  title: Emergency Contact Name
73
84
  type: string
74
- description: "Name of the emergency contact person at the bottom of the form."
85
+ description: "Put in your Emergency Contact Name."
75
86
 
76
87
  emergency_contact_phone:
77
88
  title: Emergency Contact Phone
78
89
  type: string
79
- description: "Phone number of the emergency contact person at the bottom of the form."
90
+ description: "Put in your Emergency Contact's Phone Number."
80
91
 
81
92
  cards:
82
93
  itinerary:
83
94
  title: Proposed Travel Itinerary
84
- description: "Each card represents one row in the travel itinerary table. Up to 5 rows are supported."
95
+ description: "Each card represents one row in the travel itinerary table. Up to 10 rows are supported."
85
96
  ui:
86
97
  hide_body: true
87
98
  fields:
@@ -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(400pt, 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: "")]]
@@ -1,53 +1,62 @@
1
1
  [
2
2
  {
3
+ "id": "usaf-memo",
3
4
  "name": "USAF Memo",
4
5
  "description": "Official U.S. Air Force memorandum template",
5
6
  "file": "usaf_template.md",
6
7
  "production": true
7
8
  },
8
9
  {
10
+ "id": "ussf-memo",
9
11
  "name": "USSF Memo",
10
12
  "description": "Official U.S. Space Force memorandum template",
11
13
  "file": "ussf_template.md",
12
14
  "production": true
13
15
  },
14
16
  {
17
+ "id": "letter-of-counseling",
15
18
  "name": "Letter of Counseling",
16
19
  "description": "Letter of Counseling template",
17
20
  "file": "loc.md",
18
21
  "production": false
19
22
  },
20
23
  {
24
+ "id": "rebuttal",
21
25
  "name": "Rebuttal",
22
26
  "description": "Rebuttal template for LOC",
23
27
  "file": "rebuttal.md",
24
28
  "production": true
25
29
  },
26
30
  {
31
+ "id": "taro-template",
27
32
  "name": "Taro Template",
28
33
  "description": "Official Taro ice cream template",
29
34
  "file": "taro.md",
30
35
  "production": false
31
36
  },
32
37
  {
38
+ "id": "cmu-letter",
33
39
  "name": "CMU Letter",
34
40
  "description": "Carnegie Mellon University academic letter template",
35
41
  "file": "cmu_letter_template.md",
36
42
  "production": true
37
43
  },
38
44
  {
45
+ "id": "pass-request",
39
46
  "name": "Pass Request",
40
47
  "description": "USAF special pass request memorandum template",
41
48
  "file": "pass_request.md",
42
49
  "production": true
43
50
  },
44
51
  {
52
+ "id": "af-form-4141",
45
53
  "name": "AF Form 4141",
46
54
  "description": "Individual's Record of Duties and Experience, Ground Environment Personnel",
47
55
  "file": "af4141.md",
48
56
  "production": true
49
57
  },
50
58
  {
59
+ "id": "daf-form-4392",
51
60
  "name": "DAF Form 4392",
52
61
  "description": "Pre-Departure Safety Briefing (Page 2)",
53
62
  "file": "daf4392.md",
@@ -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()