@opencrvs/toolkit 2.0.0-rc.ff04b30 → 2.0.0-rc.ff1424b

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.
Files changed (36) hide show
  1. package/create-countryconfig/index.js +50 -20
  2. package/create-countryconfig/package.json +12 -2
  3. package/dist/application-config/index.js +250 -97
  4. package/dist/cli.js +10 -4
  5. package/dist/commons/api/router.d.ts +107 -21
  6. package/dist/commons/application-config/index.d.ts +1 -0
  7. package/dist/commons/conditionals/conditionals.d.ts +354 -4
  8. package/dist/commons/conditionals/validate.d.ts +51 -2
  9. package/dist/commons/events/ActionConfig.d.ts +28 -2
  10. package/dist/commons/events/ActionDocument.d.ts +6 -0
  11. package/dist/commons/events/ActionInput.d.ts +42 -36
  12. package/dist/commons/events/AdvancedSearchConfig.d.ts +342 -0
  13. package/dist/commons/events/Draft.d.ts +2 -3
  14. package/dist/commons/events/EventDocument.d.ts +3 -0
  15. package/dist/commons/events/FieldConfig.d.ts +378 -50
  16. package/dist/commons/events/FieldType.d.ts +1 -0
  17. package/dist/commons/events/FieldTypeMapping.d.ts +1 -1
  18. package/dist/commons/events/FieldValue.d.ts +6 -0
  19. package/dist/commons/events/WorkqueueConfig.d.ts +5 -5
  20. package/dist/commons/events/field.d.ts +53 -1
  21. package/dist/commons/events/index.d.ts +2 -0
  22. package/dist/commons/events/state/flags.d.ts +16 -0
  23. package/dist/commons/events/state/utils.d.ts +12 -287
  24. package/dist/commons/events/utils.d.ts +12 -1
  25. package/dist/conditionals/index.js +52 -1
  26. package/dist/events/index.js +1035 -222
  27. package/dist/migrations/v2.0/checkout-upstream-files.d.ts +1 -1
  28. package/dist/migrations/v2.0/checkout-upstream-files.d.ts.map +1 -1
  29. package/dist/migrations/v2.0/checkout-upstream-files.js +1 -1
  30. package/dist/migrations/v2.0/index.js +10 -4
  31. package/dist/notification/index.js +869 -120
  32. package/dist/scopes/index.d.ts +4 -6
  33. package/dist/scopes/index.js +9 -3
  34. package/opencrvs-toolkit-2.0.0-rc.ff1424b.tgz +0 -0
  35. package/package.json +6 -2
  36. package/opencrvs-toolkit-2.0.0-rc.ff04b30.tgz +0 -0
@@ -76,8 +76,8 @@ var ActionConditional = z.discriminatedUnion("type", [
76
76
  // Action can be shown to the user in the list but as disabled
77
77
  EnableConditional
78
78
  ]).meta({
79
- description: "Action conditional configuration",
80
- id: "ActionConditional"
79
+ id: "ActionConditional",
80
+ description: "Conditional gating whether an action is shown (SHOW) or enabled (ENABLE). When omitted from an action, the action is shown and enabled for everyone."
81
81
  });
82
82
  var DisplayOnReviewConditional = z.object({
83
83
  type: z.literal(ConditionalType.DISPLAY_ON_REVIEW),
@@ -93,8 +93,8 @@ var FieldConditional = z.discriminatedUnion("type", [
93
93
  // Field output can be shown / hidden on the review page
94
94
  DisplayOnReviewConditional
95
95
  ]).meta({
96
- description: "Field conditional configuration",
97
- id: "FieldConditional"
96
+ id: "FieldConditional",
97
+ description: "Conditional gating whether a form field is shown (SHOW), enabled (ENABLE), or displayed on the review page (DISPLAY_ON_REVIEW). When omitted, the field is shown and enabled for everyone, and is displayed on review whenever it has a value."
98
98
  });
99
99
 
100
100
  // ../commons/src/events/TranslationConfig.ts
@@ -206,6 +206,11 @@ var FieldTypesToHideInReview = [
206
206
  FieldType.ALPHA_PRINT_BUTTON,
207
207
  FieldType.ALPHA_HIDDEN
208
208
  ];
209
+ var HiddenFieldTypes = [
210
+ FieldType.HTTP,
211
+ FieldType.QUERY_PARAM_READER,
212
+ FieldType.ALPHA_HIDDEN
213
+ ];
209
214
 
210
215
  // ../commons/src/events/FieldValue.ts
211
216
  var z7 = __toESM(require("zod/v4"));
@@ -324,7 +329,7 @@ var PlainDate = import_zod.z.string().date().brand("PlainDate").describe("Date i
324
329
  // ../commons/src/events/FieldValue.ts
325
330
  var TextValue = z7.string();
326
331
  var HiddenFieldValue = z7.string();
327
- var NonEmptyTextValue = TextValue.min(1);
332
+ var NonEmptyTextValue = z7.string().trim().min(1);
328
333
  var DateValue = z7.iso.date().describe("Date in the format YYYY-MM-DD");
329
334
  var AgeValue = z7.object({
330
335
  age: z7.number(),
@@ -353,6 +358,7 @@ var DateRangeFieldValue = z7.object({
353
358
  var EmailValue = z7.email();
354
359
  var CheckboxFieldValue = z7.boolean();
355
360
  var NumberFieldValue = z7.number();
361
+ var SignatureFieldValue = FileFieldValue;
356
362
  var ButtonFieldValue = z7.number();
357
363
  var VerificationStatusValue = z7.enum([
358
364
  "verified",
@@ -989,8 +995,9 @@ var RequestedCorrectionAction = ActionBase.extend(
989
995
  var ApprovedCorrectionAction = ActionBase.extend(
990
996
  z13.object({
991
997
  type: z13.literal(ActionType.APPROVE_CORRECTION),
992
- requestId: z13.string()
998
+ requestId: z13.string(),
993
999
  // TODO move into 'content' property
1000
+ content: z13.object({ immediateCorrection: z13.boolean().optional() }).optional()
994
1001
  }).shape
995
1002
  );
996
1003
  var RejectedCorrectionAction = ActionBase.extend(
@@ -1083,8 +1090,8 @@ var FlagConfig = z14.object({
1083
1090
  ),
1084
1091
  label: TranslationConfig.describe("Human readable label of the flag.")
1085
1092
  }).meta({
1086
- description: "Flag configuration",
1087
- id: "FlagConfig"
1093
+ id: "FlagConfig",
1094
+ description: "Configuration for a custom flag that can be added to or removed from records by event actions."
1088
1095
  });
1089
1096
  var ActionFlagConfig = z14.object({
1090
1097
  id: Flag,
@@ -1093,8 +1100,8 @@ var ActionFlagConfig = z14.object({
1093
1100
  "When conditional is met, the operation is performed on the flag. If not provided, the operation is performed unconditionally."
1094
1101
  )
1095
1102
  }).meta({
1096
- description: "Action flag configuration",
1097
- id: "ActionFlagConfig"
1103
+ id: "ActionFlagConfig",
1104
+ description: "Add or remove operation applied to a flag when the parent action is accepted. Optionally gated by a conditional."
1098
1105
  });
1099
1106
 
1100
1107
  // ../commons/src/events/EventMetadata.ts
@@ -1410,11 +1417,28 @@ var FieldReference = import_v43.default.object({
1410
1417
  $$field: FieldId.describe("Id of the field to reference"),
1411
1418
  $$subfield: import_v43.default.array(import_v43.default.string()).optional().default([]).describe(
1412
1419
  'If the FieldValue is an object, subfield can be used to refer to e.g. `["foo", "bar"]` in `{ foo: { bar: 3 } }`'
1420
+ ),
1421
+ $$code: import_v43.default.string().optional().describe(
1422
+ "Serialised client-side function body. When present the expression is evaluated rather than dereferenced."
1423
+ )
1424
+ }).describe(
1425
+ "Reference to a field value, with an optional client-side computation applied."
1426
+ );
1427
+ var ComputedDefaultValue = import_v43.default.object({
1428
+ $$code: import_v43.default.string().describe(
1429
+ "Serialised client-side function body. Receives (undefined, context) where context includes $now, $online, and system variables."
1413
1430
  )
1414
- }).describe("Reference to a field by its ID");
1431
+ }).describe("A context-only computation used as a field default value.");
1415
1432
  var ValidationConfig = import_v43.default.object({
1416
- validator: Conditional,
1417
- message: TranslationConfig
1433
+ validator: Conditional.describe(
1434
+ "Conditional expression that must hold for the field value to be considered valid."
1435
+ ),
1436
+ message: TranslationConfig.describe(
1437
+ "Error message displayed when the validator does not hold."
1438
+ )
1439
+ }).meta({
1440
+ id: "ValidationConfig",
1441
+ description: "Validation rule applied to a form field. The validator is a conditional expression that must hold for the field value to be considered valid."
1418
1442
  });
1419
1443
  var requiredSchema = import_v43.default.union([
1420
1444
  import_v43.default.boolean(),
@@ -1445,7 +1469,7 @@ var BaseField = import_v43.default.object({
1445
1469
  "Indicates whether the field can be modified during record correction."
1446
1470
  ),
1447
1471
  value: FieldReference.or(import_v43.default.array(FieldReference)).optional().describe(
1448
- "Reference to the source field or fields. When a value is defined, it is copied from the parent field when changed. If multiple references are provided, the first truthy value is used."
1472
+ "Reference to the source field or fields. When a value is defined, it is copied from the parent field when changed. If multiple references are provided, the first truthy value is used. A FieldReference with $$code computes the value via a custom client-side function."
1449
1473
  ),
1450
1474
  analytics: import_v43.default.boolean().default(false).optional().describe(
1451
1475
  "Indicates whether the field is included in analytics. When enabled, its value becomes available in the analytics dashboard."
@@ -1453,30 +1477,40 @@ var BaseField = import_v43.default.object({
1453
1477
  }).describe("Common properties shared across all field types.");
1454
1478
  var Divider = BaseField.extend({
1455
1479
  type: import_v43.default.literal(FieldType.DIVIDER)
1480
+ }).meta({
1481
+ description: "A horizontal line divider",
1482
+ id: "Divider"
1456
1483
  });
1457
1484
  var TextField = BaseField.extend({
1458
1485
  type: import_v43.default.literal(FieldType.TEXT),
1459
- defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField]).optional(),
1486
+ defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField, ComputedDefaultValue]).optional(),
1460
1487
  configuration: import_v43.default.object({
1461
1488
  maxLength: import_v43.default.number().optional().describe("Maximum length of the text"),
1462
1489
  type: import_v43.default.enum(["text", "password"]).optional(),
1463
1490
  prefix: TranslationConfig.optional(),
1464
1491
  postfix: TranslationConfig.optional()
1465
1492
  }).default({ type: "text" }).optional()
1466
- }).describe("Text input");
1493
+ }).meta({
1494
+ description: "A text input field",
1495
+ id: "TextField"
1496
+ });
1467
1497
  var NumberField = BaseField.extend({
1468
1498
  type: import_v43.default.literal(FieldType.NUMBER),
1469
- defaultValue: NumberFieldValue.optional(),
1499
+ defaultValue: NumberFieldValue.or(ComputedDefaultValue).optional(),
1470
1500
  configuration: import_v43.default.object({
1471
1501
  min: import_v43.default.number().optional().describe("Minimum value"),
1472
1502
  max: import_v43.default.number().optional().describe("Maximum value"),
1503
+ integer: import_v43.default.boolean().optional().describe("When true, only whole numbers are allowed"),
1473
1504
  prefix: TranslationConfig.optional(),
1474
1505
  postfix: TranslationConfig.optional()
1475
1506
  }).optional()
1476
- }).describe("Number input");
1507
+ }).meta({
1508
+ description: "A number input field",
1509
+ id: "NumberField"
1510
+ });
1477
1511
  var TextAreaField = BaseField.extend({
1478
1512
  type: import_v43.default.literal(FieldType.TEXTAREA),
1479
- defaultValue: NonEmptyTextValue.optional(),
1513
+ defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
1480
1514
  configuration: import_v43.default.object({
1481
1515
  maxLength: import_v43.default.number().optional().describe("Maximum length of the text"),
1482
1516
  rows: import_v43.default.number().optional().describe("Number of visible text lines"),
@@ -1484,7 +1518,10 @@ var TextAreaField = BaseField.extend({
1484
1518
  prefix: TranslationConfig.optional(),
1485
1519
  postfix: TranslationConfig.optional()
1486
1520
  }).default({ rows: 4 }).optional()
1487
- }).describe("Multiline text input");
1521
+ }).meta({
1522
+ description: "A multiline text input",
1523
+ id: "TextAreaField"
1524
+ });
1488
1525
  var ImageMimeType = import_v43.default.enum([
1489
1526
  "image/png",
1490
1527
  "image/jpg",
@@ -1507,58 +1544,76 @@ var SignatureField = BaseField.extend({
1507
1544
  signaturePromptLabel: TranslationConfig.describe(
1508
1545
  "Title of the signature modal"
1509
1546
  ),
1510
- defaultValue: FieldValue.optional(),
1547
+ defaultValue: SignatureFieldValue.or(ComputedDefaultValue).optional(),
1511
1548
  configuration: import_v43.default.object({
1512
1549
  maxFileSize: import_v43.default.number().describe("Maximum file size in bytes").default(DEFAULT_MAX_FILE_SIZE_BYTES),
1513
1550
  acceptedFileTypes: MimeType.array().optional().describe("List of allowed file formats for the signature")
1514
1551
  }).default({
1515
1552
  maxFileSize: DEFAULT_MAX_FILE_SIZE_BYTES
1516
1553
  })
1517
- }).describe("Signature input field");
1554
+ }).meta({
1555
+ description: "A signature input field",
1556
+ id: "SignatureField"
1557
+ });
1518
1558
  var EmailField = BaseField.extend({
1519
1559
  type: import_v43.default.literal(FieldType.EMAIL),
1520
1560
  configuration: import_v43.default.object({
1521
1561
  maxLength: import_v43.default.number().optional().describe("Maximum length of the text")
1522
1562
  }).default({ maxLength: 255 }).optional(),
1523
- defaultValue: NonEmptyTextValue.optional()
1563
+ defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional()
1564
+ }).meta({
1565
+ description: "An email input field",
1566
+ id: "EmailField"
1524
1567
  });
1525
1568
  var DateField = BaseField.extend({
1526
1569
  type: import_v43.default.literal(FieldType.DATE),
1527
- defaultValue: SerializedNowDateTime.or(PlainDate).optional().describe("Default date value(yyyy-MM-dd)"),
1570
+ defaultValue: SerializedNowDateTime.or(PlainDate).or(ComputedDefaultValue).optional().describe("Default date value(yyyy-MM-dd)"),
1528
1571
  configuration: import_v43.default.object({
1529
1572
  notice: TranslationConfig.describe(
1530
1573
  "Text to display above the date input"
1531
1574
  ).optional()
1532
1575
  }).optional()
1533
- }).describe("A single date input (yyyy-MM-dd)");
1576
+ }).meta({
1577
+ description: "A date input (yyyy-MM-dd)",
1578
+ id: "DateField"
1579
+ });
1534
1580
  var AgeField = BaseField.extend({
1535
1581
  type: import_v43.default.literal(FieldType.AGE),
1536
- defaultValue: NumberFieldValue.optional(),
1582
+ defaultValue: NumberFieldValue.or(ComputedDefaultValue).optional(),
1537
1583
  configuration: import_v43.default.object({
1538
1584
  asOfDate: FieldReference,
1539
1585
  prefix: TranslationConfig.optional(),
1540
1586
  postfix: TranslationConfig.optional()
1541
1587
  })
1542
- }).describe("An age input field which uses the current date as the asOfDate");
1588
+ }).meta({
1589
+ description: "An age input field which uses the current date as the asOfDate",
1590
+ id: "AgeField"
1591
+ });
1543
1592
  var TimeField = BaseField.extend({
1544
1593
  type: import_v43.default.literal(FieldType.TIME),
1545
- defaultValue: SerializedNowDateTime.or(TimeValue).optional().describe("Default time value (HH-mm)"),
1594
+ defaultValue: SerializedNowDateTime.or(TimeValue).or(ComputedDefaultValue).optional().describe("Default time value (HH-mm)"),
1546
1595
  configuration: import_v43.default.object({
1547
1596
  use12HourFormat: import_v43.default.boolean().optional().describe("Whether to use 12-hour format"),
1548
1597
  notice: TranslationConfig.describe(
1549
1598
  "Text to display above the time input"
1550
1599
  ).optional()
1551
1600
  }).optional()
1552
- }).describe("A single date input (HH-mm)");
1601
+ }).meta({
1602
+ description: "A single time input (HH-mm)",
1603
+ id: "TimeField"
1604
+ });
1553
1605
  var DateRangeField = BaseField.extend({
1554
1606
  type: import_v43.default.literal(FieldType.DATE_RANGE),
1555
- defaultValue: DateRangeFieldValue.optional(),
1607
+ defaultValue: DateRangeFieldValue.or(ComputedDefaultValue).optional(),
1556
1608
  configuration: import_v43.default.object({
1557
1609
  notice: TranslationConfig.describe(
1558
1610
  "Text to display above the date input"
1559
1611
  ).optional()
1560
1612
  }).optional()
1561
- }).describe("A date range input ({ start: yyyy-MM-dd, end: yyyy-MM-dd })");
1613
+ }).meta({
1614
+ description: "A date range input ({ start: yyyy-MM-dd, end: yyyy-MM-dd })",
1615
+ id: "DateRangeField"
1616
+ });
1562
1617
  var HtmlFontVariant = import_v43.default.enum([
1563
1618
  "reg12",
1564
1619
  "reg14",
@@ -1602,21 +1657,33 @@ var ImageViewField = BaseField.extend({
1602
1657
  type: import_v43.default.literal(FieldType.IMAGE_VIEW),
1603
1658
  defaultValue: NonEmptyTextValue.optional(),
1604
1659
  configuration: ImageConfiguration
1605
- }).describe("A read-only image component for form pages");
1660
+ }).meta({
1661
+ description: "A read-only image component for form pages",
1662
+ id: "ImageViewField"
1663
+ });
1606
1664
  var Paragraph = BaseField.extend({
1607
1665
  type: import_v43.default.literal(FieldType.PARAGRAPH),
1608
1666
  configuration: ParagraphConfiguration
1609
- }).describe("A read-only HTML <p> paragraph");
1667
+ }).meta({
1668
+ description: "A read-only HTML <p> paragraph",
1669
+ id: "Paragraph"
1670
+ });
1610
1671
  var Heading = BaseField.extend({
1611
1672
  type: import_v43.default.literal(FieldType.HEADING),
1612
1673
  configuration: HeadingConfiguration
1613
- }).describe("A read-only heading component for form pages");
1674
+ }).meta({
1675
+ description: "A read-only heading component for form pages",
1676
+ id: "Heading"
1677
+ });
1614
1678
  var PageHeader = BaseField.extend({
1615
1679
  type: import_v43.default.literal(FieldType.PAGE_HEADER)
1616
- }).describe("A read-only header component for form pages");
1680
+ }).meta({
1681
+ description: "A read-only header component for form pages",
1682
+ id: "PageHeader"
1683
+ });
1617
1684
  var File = BaseField.extend({
1618
1685
  type: import_v43.default.literal(FieldType.FILE),
1619
- defaultValue: FileFieldValue.optional(),
1686
+ defaultValue: FileFieldValue.or(ComputedDefaultValue).optional(),
1620
1687
  configuration: import_v43.default.object({
1621
1688
  maxFileSize: import_v43.default.number().describe("Maximum file size in bytes").default(DEFAULT_MAX_FILE_SIZE_BYTES),
1622
1689
  acceptedFileTypes: MimeType.array().optional().describe("List of allowed file formats for the signature"),
@@ -1632,7 +1699,10 @@ var File = BaseField.extend({
1632
1699
  }).default({
1633
1700
  maxFileSize: DEFAULT_MAX_FILE_SIZE_BYTES
1634
1701
  })
1635
- }).describe("File upload");
1702
+ }).meta({
1703
+ description: "A file upload field",
1704
+ id: "File"
1705
+ });
1636
1706
  var SelectOption = import_v43.default.object({
1637
1707
  value: import_v43.default.string().describe("The value of the option"),
1638
1708
  label: import_v43.default.union([import_v43.default.string(), TranslationConfig]).describe("The label of the option"),
@@ -1640,7 +1710,7 @@ var SelectOption = import_v43.default.object({
1640
1710
  });
1641
1711
  var NumberWithUnitField = BaseField.extend({
1642
1712
  type: import_v43.default.literal(FieldType.NUMBER_WITH_UNIT),
1643
- defaultValue: NumberWithUnitFieldValue.optional(),
1713
+ defaultValue: NumberWithUnitFieldValue.or(ComputedDefaultValue).optional(),
1644
1714
  options: import_v43.default.array(SelectOption).describe("A list of options for the unit select"),
1645
1715
  configuration: import_v43.default.object({
1646
1716
  min: import_v43.default.number().optional().describe("Minimum value of the number field"),
@@ -1649,17 +1719,23 @@ var NumberWithUnitField = BaseField.extend({
1649
1719
  "Placeholder for the number field"
1650
1720
  )
1651
1721
  }).optional()
1652
- }).describe("Number with unit input");
1722
+ }).meta({
1723
+ description: "A number with unit input field",
1724
+ id: "NumberWithUnitField"
1725
+ });
1653
1726
  var RadioGroup = BaseField.extend({
1654
1727
  type: import_v43.default.literal(FieldType.RADIO_GROUP),
1655
- defaultValue: TextValue.optional(),
1728
+ defaultValue: TextValue.or(ComputedDefaultValue).optional(),
1656
1729
  options: import_v43.default.array(SelectOption).describe("A list of options"),
1657
1730
  configuration: import_v43.default.object({
1658
1731
  styles: import_v43.default.object({
1659
1732
  size: import_v43.default.enum(["NORMAL", "LARGE"]).optional()
1660
1733
  }).optional()
1661
1734
  }).optional()
1662
- }).describe("Grouped radio options");
1735
+ }).meta({
1736
+ description: "A grouped radio button field",
1737
+ id: "RadioGroup"
1738
+ });
1663
1739
  var BulletList = BaseField.extend({
1664
1740
  type: import_v43.default.literal(FieldType.BULLET_LIST),
1665
1741
  items: import_v43.default.array(TranslationConfig).describe("A list of items"),
@@ -1668,10 +1744,13 @@ var BulletList = BaseField.extend({
1668
1744
  fontVariant: HtmlFontVariant.optional()
1669
1745
  }).optional()
1670
1746
  }).default({})
1671
- }).describe("A list of bullet points");
1747
+ }).meta({
1748
+ description: "A list of bullet points",
1749
+ id: "BulletList"
1750
+ });
1672
1751
  var Select = BaseField.extend({
1673
1752
  type: import_v43.default.literal(FieldType.SELECT),
1674
- defaultValue: TextValue.optional(),
1753
+ defaultValue: TextValue.or(ComputedDefaultValue).optional(),
1675
1754
  options: import_v43.default.array(SelectOption).describe("A list of options"),
1676
1755
  noOptionsMessage: TranslationConfig.optional().describe(
1677
1756
  `
@@ -1683,16 +1762,22 @@ var Select = BaseField.extend({
1683
1762
  { ..., defaultMessage: "'{input}' is not listed among the health facilities." }
1684
1763
  `
1685
1764
  )
1686
- }).describe("Select input");
1765
+ }).meta({
1766
+ description: "A select input field",
1767
+ id: "Select"
1768
+ });
1687
1769
  var SelectDateRangeOption = import_v43.default.object({
1688
1770
  value: SelectDateRangeValue.describe("The value of the option"),
1689
1771
  label: TranslationConfig.describe("The label of the option")
1690
1772
  });
1691
1773
  var SelectDateRangeField = BaseField.extend({
1692
1774
  type: import_v43.default.literal(FieldType.SELECT_DATE_RANGE),
1693
- defaultValue: SelectDateRangeValue.optional(),
1775
+ defaultValue: SelectDateRangeValue.or(ComputedDefaultValue).optional(),
1694
1776
  options: import_v43.default.array(SelectDateRangeOption).describe("A list of options")
1695
- }).describe("Select input with date range options");
1777
+ }).meta({
1778
+ description: "A date range selection field",
1779
+ id: "SelectDateRangeField"
1780
+ });
1696
1781
  var NameConfig = import_v43.default.object({
1697
1782
  firstname: import_v43.default.object({ required: requiredSchema, label: TranslationConfig.optional() }).optional(),
1698
1783
  middlename: import_v43.default.object({ required: requiredSchema, label: TranslationConfig.optional() }).optional(),
@@ -1704,7 +1789,7 @@ var NameField = BaseField.extend({
1704
1789
  firstname: SerializedUserField.or(NonEmptyTextValue).optional(),
1705
1790
  middlename: SerializedUserField.or(NonEmptyTextValue).optional(),
1706
1791
  surname: SerializedUserField.or(NonEmptyTextValue).optional()
1707
- }).optional(),
1792
+ }).or(ComputedDefaultValue).optional(),
1708
1793
  configuration: import_v43.default.object({
1709
1794
  name: NameConfig.default({
1710
1795
  firstname: { required: true },
@@ -1723,26 +1808,41 @@ var NameField = BaseField.extend({
1723
1808
  surname: { required: true }
1724
1809
  }
1725
1810
  }).optional()
1726
- }).describe("Name input field");
1811
+ }).meta({
1812
+ description: "A field for entering a persons name",
1813
+ id: "NameField"
1814
+ });
1727
1815
  var PhoneField = BaseField.extend({
1728
- defaultValue: NonEmptyTextValue.optional(),
1816
+ defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
1729
1817
  type: import_v43.default.literal(FieldType.PHONE)
1730
- }).describe("Phone input field");
1818
+ }).meta({
1819
+ description: "A field for entering a phone number",
1820
+ id: "PhoneField"
1821
+ });
1731
1822
  var IdField = BaseField.extend({
1732
- defaultValue: NonEmptyTextValue.optional(),
1823
+ defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
1733
1824
  type: import_v43.default.literal(FieldType.ID)
1734
- }).describe("ID input field");
1825
+ }).meta({
1826
+ description: "A field for entering an ID",
1827
+ id: "IdField"
1828
+ });
1735
1829
  var Checkbox = BaseField.extend({
1736
1830
  type: import_v43.default.literal(FieldType.CHECKBOX),
1737
- defaultValue: CheckboxFieldValue.default(false)
1738
- }).describe("Boolean checkbox field");
1831
+ defaultValue: CheckboxFieldValue.or(ComputedDefaultValue).default(false)
1832
+ }).meta({
1833
+ description: "A boolean checkbox field",
1834
+ id: "Checkbox"
1835
+ });
1739
1836
  var Country = BaseField.extend({
1740
1837
  type: import_v43.default.literal(FieldType.COUNTRY),
1741
- defaultValue: NonEmptyTextValue.optional(),
1838
+ defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
1742
1839
  optionOverrides: import_v43.default.array(SelectOption.omit({ label: true })).optional().describe(
1743
1840
  "Conditionals for specific countries. Countries not listed are always shown and enabled."
1744
1841
  )
1745
- }).describe("Country select field");
1842
+ }).meta({
1843
+ description: "A field for selecting a country",
1844
+ id: "Country"
1845
+ });
1746
1846
  var AllowedLocations = JurisdictionReference.optional().describe(
1747
1847
  "Limits which location options are selectable depending on user jurisdiction and location."
1748
1848
  );
@@ -1751,28 +1851,33 @@ var AdministrativeAreas = import_v43.default.enum([
1751
1851
  "HEALTH_FACILITY",
1752
1852
  "CRVS_OFFICE"
1753
1853
  ]);
1754
- var AdministrativeAreaConfiguration = import_v43.default.object({
1755
- partOf: FieldReference.optional().describe("Parent location"),
1756
- type: AdministrativeAreas,
1757
- allowedLocations: AllowedLocations
1758
- }).describe("Administrative area options");
1759
1854
  var AdministrativeAreaField = BaseField.extend({
1760
1855
  type: import_v43.default.literal(FieldType.ADMINISTRATIVE_AREA),
1761
- defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField]).optional(),
1762
- configuration: AdministrativeAreaConfiguration
1763
- }).describe("Administrative area input field e.g. facility, office");
1856
+ defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField, ComputedDefaultValue]).optional(),
1857
+ configuration: import_v43.default.object({
1858
+ partOf: FieldReference.optional().describe("Parent location"),
1859
+ type: AdministrativeAreas,
1860
+ allowedLocations: AllowedLocations
1861
+ }).describe("Administrative area options")
1862
+ }).meta({
1863
+ description: "Administrative area input field",
1864
+ id: "AdministrativeAreaField"
1865
+ });
1764
1866
  var LocationInput = BaseField.extend({
1765
1867
  type: import_v43.default.literal(FieldType.LOCATION),
1766
- defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField]).optional(),
1868
+ defaultValue: import_v43.default.union([NonEmptyTextValue, SerializedUserField, ComputedDefaultValue]).optional(),
1767
1869
  configuration: import_v43.default.object({
1768
1870
  locationTypes: import_v43.default.array(import_v43.default.string()).optional().describe("Types of the locations that are available for selection."),
1769
1871
  allowedLocations: AllowedLocations
1770
1872
  }).optional()
1771
- }).describe("Input field for a location");
1873
+ }).meta({
1874
+ description: "A field for selecting a location",
1875
+ id: "LocationInput"
1876
+ });
1772
1877
  var FileUploadWithOptions = BaseField.extend({
1773
1878
  type: import_v43.default.literal(FieldType.FILE_WITH_OPTIONS),
1774
1879
  options: import_v43.default.array(SelectOption).describe("A list of options"),
1775
- defaultValue: FileFieldWithOptionValue.optional(),
1880
+ defaultValue: FileFieldWithOptionValue.or(ComputedDefaultValue).optional(),
1776
1881
  configuration: import_v43.default.object({
1777
1882
  maxFileSize: import_v43.default.number().describe("Maximum file size in bytes").default(DEFAULT_MAX_FILE_SIZE_BYTES),
1778
1883
  maxImageSize: import_v43.default.object({
@@ -1782,15 +1887,18 @@ var FileUploadWithOptions = BaseField.extend({
1782
1887
  }).default({
1783
1888
  maxFileSize: DEFAULT_MAX_FILE_SIZE_BYTES
1784
1889
  })
1890
+ }).meta({
1891
+ description: "A field for uploading files with file type options",
1892
+ id: "FileUploadWithOptions"
1785
1893
  });
1786
1894
  var Facility = BaseField.extend({
1787
1895
  type: import_v43.default.literal(FieldType.FACILITY),
1788
- defaultValue: NonEmptyTextValue.optional(),
1896
+ defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
1789
1897
  configuration: import_v43.default.object({ allowedLocations: AllowedLocations }).optional()
1790
1898
  }).describe("Input field for a facility");
1791
1899
  var Office = BaseField.extend({
1792
1900
  type: import_v43.default.literal(FieldType.OFFICE),
1793
- defaultValue: NonEmptyTextValue.optional(),
1901
+ defaultValue: NonEmptyTextValue.or(ComputedDefaultValue).optional(),
1794
1902
  configuration: import_v43.default.object({ allowedLocations: AllowedLocations }).optional()
1795
1903
  }).describe("Input field for an office");
1796
1904
  var DefaultAddressFieldValue = DomesticAddressFieldValue.extend({
@@ -1826,8 +1934,11 @@ var Address = BaseField.extend({
1826
1934
  ).optional(),
1827
1935
  allowedLocations: AllowedLocations
1828
1936
  }).optional(),
1829
- defaultValue: DefaultAddressFieldValue.optional()
1830
- }).describe("Address input field \u2013 a combination of location and text fields");
1937
+ defaultValue: DefaultAddressFieldValue.or(ComputedDefaultValue).optional()
1938
+ }).meta({
1939
+ description: "Address input field \u2013 a combination of location and text fields",
1940
+ id: "Address"
1941
+ });
1831
1942
  var StaticDataEntry = import_v43.default.object({
1832
1943
  id: import_v43.default.string().describe("ID for the data entry."),
1833
1944
  label: TranslationConfig,
@@ -1842,7 +1953,10 @@ var DataField = BaseField.extend({
1842
1953
  subtitle: TranslationConfig.optional(),
1843
1954
  data: import_v43.default.array(DataEntry)
1844
1955
  })
1845
- }).describe("Data field for displaying read-only data");
1956
+ }).meta({
1957
+ description: "A field for displaying a table of read-only data",
1958
+ id: "DataField"
1959
+ });
1846
1960
  var ButtonSize = import_v43.default.enum(["small", "medium", "large"]);
1847
1961
  var ButtonType = import_v43.default.enum([
1848
1962
  "primary",
@@ -1867,13 +1981,19 @@ var ButtonConfiguration = import_v43.default.object({
1867
1981
  });
1868
1982
  var ButtonField = BaseField.extend({
1869
1983
  type: import_v43.default.literal(FieldType.BUTTON),
1870
- defaultValue: ButtonFieldValue.optional(),
1984
+ defaultValue: ButtonFieldValue.or(ComputedDefaultValue).optional(),
1871
1985
  configuration: ButtonConfiguration
1872
- }).describe("Generic button without any built-in functionality");
1986
+ }).meta({
1987
+ description: "A generic button that can be used to trigger an action",
1988
+ id: "ButtonField"
1989
+ });
1873
1990
  var FieldGroup = BaseField.extend({
1874
1991
  type: import_v43.default.literal(FieldType.FIELD_GROUP),
1875
1992
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
1876
1993
  fields: import_v43.default.lazy(() => import_v43.default.array(FieldConfig))
1994
+ }).meta({
1995
+ description: "A group of fields that are displayed together",
1996
+ id: "FieldGroup"
1877
1997
  });
1878
1998
  var AlphaPrintButton = BaseField.extend({
1879
1999
  type: import_v43.default.literal(FieldType.ALPHA_PRINT_BUTTON),
@@ -1883,10 +2003,13 @@ var AlphaPrintButton = BaseField.extend({
1883
2003
  "Label for the print button"
1884
2004
  )
1885
2005
  })
1886
- }).describe("Print button field for printing certificates");
2006
+ }).meta({
2007
+ description: "An experimental print button field for printing certificates during the declaration process",
2008
+ id: "AlphaPrintButton"
2009
+ });
1887
2010
  var HttpField = BaseField.extend({
1888
2011
  type: import_v43.default.literal(FieldType.HTTP),
1889
- defaultValue: HttpFieldValue.optional(),
2012
+ defaultValue: HttpFieldValue.or(ComputedDefaultValue).optional(),
1890
2013
  configuration: import_v43.default.object({
1891
2014
  trigger: FieldReference.optional().describe(
1892
2015
  "Reference to the field that triggers the HTTP request when its value changes. If not provided, the HTTP request is triggered once on component mount."
@@ -1899,20 +2022,30 @@ var HttpField = BaseField.extend({
1899
2022
  params: import_v43.default.record(import_v43.default.string(), import_v43.default.union([import_v43.default.string(), FieldReference])).optional(),
1900
2023
  timeout: import_v43.default.number().default(15e3).describe("Request timeout in milliseconds")
1901
2024
  })
1902
- }).describe("HTTP request function triggered by a button click or other event");
2025
+ }).meta({
2026
+ description: "Makes a background HTTP request to an external service and stores the response so other fields can use it. Has no visible UI \u2014 pair with LOADER to show request status.",
2027
+ id: "HttpField"
2028
+ });
1903
2029
  var AutocompleteField = BaseField.extend({
1904
2030
  type: import_v43.default.literal(FieldType.AUTOCOMPLETE),
1905
2031
  configuration: import_v43.default.object({
1906
- url: import_v43.default.string().describe("URL to fetch autocomplete suggestions from").optional(),
2032
+ url: import_v43.default.string().describe(
2033
+ "URL to fetch autocomplete suggestions from. This should be a country config server endpoint."
2034
+ ).optional(),
1907
2035
  method: import_v43.default.enum(["GET", "POST"]).default("GET").optional(),
1908
2036
  defaultOptions: import_v43.default.array(
1909
2037
  import_v43.default.object({
1910
2038
  label: import_v43.default.string(),
1911
2039
  value: import_v43.default.string()
1912
2040
  })
1913
- ).optional()
2041
+ ).optional().describe(
2042
+ "Manual entry is supported through configuration, allowing users to provide values not currently represented in the dataset."
2043
+ )
1914
2044
  })
1915
- }).describe("Autocomplete input field");
2045
+ }).meta({
2046
+ description: "Generic autocomplete component designed for use with large dictionary-based datasets. The component supports dynamic retrieval of options from configurable data sources and is intended for datasets that may contain tens or hundreds of thousands of records.",
2047
+ id: "AutocompleteField"
2048
+ });
1916
2049
  var SearchField = HttpField.extend({
1917
2050
  type: import_v43.default.literal(FieldType.SEARCH),
1918
2051
  configuration: SearchQuery.pick({
@@ -1945,6 +2078,9 @@ var SearchField = HttpField.extend({
1945
2078
  ok: TranslationConfig.optional()
1946
2079
  }).optional()
1947
2080
  })
2081
+ }).meta({
2082
+ description: "A search input field",
2083
+ id: "SearchField"
1948
2084
  });
1949
2085
  var LinkButtonField = BaseField.extend({
1950
2086
  type: import_v43.default.literal(FieldType.LINK_BUTTON),
@@ -1953,28 +2089,35 @@ var LinkButtonField = BaseField.extend({
1953
2089
  text: TranslationConfig.describe("Text to display on the button"),
1954
2090
  icon: import_v43.default.string().optional().describe("Icon for the button. You can find icons from OpenCRVS UI-Kit.")
1955
2091
  })
1956
- }).describe("Button that opens a link");
2092
+ }).meta({
2093
+ description: "A button that opens a URL link",
2094
+ id: "LinkButtonField"
2095
+ });
1957
2096
  var VerificationStatus = BaseField.extend({
1958
2097
  type: import_v43.default.literal(FieldType.VERIFICATION_STATUS),
1959
- defaultValue: VerificationStatusValue.optional(),
2098
+ defaultValue: VerificationStatusValue.or(ComputedDefaultValue).optional(),
1960
2099
  configuration: import_v43.default.object({
1961
2100
  status: TranslationConfig.describe("Text to display on the status pill."),
1962
2101
  description: TranslationConfig.describe(
1963
2102
  "Explaining text on the banner in form."
1964
2103
  )
1965
2104
  })
2105
+ }).meta({
2106
+ description: "Displays a verification state (e.g. ID verified / pending). Often paired with ID_READER \u2014 it can read its value off an ID_READER rather than holding its own.",
2107
+ id: "VerificationStatus"
1966
2108
  });
1967
2109
  var QueryParamReaderField = BaseField.extend({
1968
2110
  type: import_v43.default.literal(FieldType.QUERY_PARAM_READER),
1969
2111
  configuration: import_v43.default.object({
1970
2112
  pickParams: import_v43.default.array(import_v43.default.string()).describe("List of query parameters to read from the URL")
1971
2113
  })
1972
- }).describe(
1973
- "A field that maps URL query params into form values and clears them afterward"
1974
- );
2114
+ }).meta({
2115
+ description: "A field that maps URL query params into form values and clears them afterward",
2116
+ id: "QueryParamReaderField"
2117
+ });
1975
2118
  var QrReaderField = BaseField.extend({
1976
2119
  type: import_v43.default.literal(FieldType.QR_READER),
1977
- defaultValue: QrReaderFieldValue.optional(),
2120
+ defaultValue: QrReaderFieldValue.or(ComputedDefaultValue).optional(),
1978
2121
  configuration: import_v43.default.object({
1979
2122
  validator: import_v43.default.any().meta({
1980
2123
  description: "JSON Schema to validate the scanned QR code data against before populating the form fields.",
@@ -1982,21 +2125,27 @@ var QrReaderField = BaseField.extend({
1982
2125
  })
1983
2126
  }).optional()
1984
2127
  }).meta({
1985
- description: "Configuration for QR code reader field, including optional JSON Schema validator.",
2128
+ description: "QR code reader field, including optional JSON Schema validator.",
1986
2129
  id: "QrReaderField"
1987
2130
  });
1988
2131
  var IdReaderField = BaseField.extend({
1989
2132
  type: import_v43.default.literal(FieldType.ID_READER),
1990
- defaultValue: IdReaderFieldValue.optional(),
2133
+ defaultValue: IdReaderFieldValue.or(ComputedDefaultValue).optional(),
1991
2134
  methods: import_v43.default.array(
1992
2135
  import_v43.default.union([QrReaderField, LinkButtonField]).describe("Methods for reading an ID")
1993
2136
  )
2137
+ }).meta({
2138
+ description: "A wrapper around nested form fields, specifically QR_READER and LINK_BUTTON. It can hold the QR_READERs value.",
2139
+ id: "IdReaderField"
1994
2140
  });
1995
2141
  var CustomField = BaseField.extend({
1996
2142
  type: import_v43.default.literal(FieldType._EXPERIMENTAL_CUSTOM),
1997
2143
  defaultValue: CustomFieldValue.optional(),
1998
2144
  src: import_v43.default.string().describe("Module source path for the custom field component"),
1999
2145
  configuration: import_v43.default.unknown().optional()
2146
+ }).meta({
2147
+ description: "An expiremental custom field that is defined by a module source path",
2148
+ id: "CustomField"
2000
2149
  });
2001
2150
  var FieldStyleVariant = import_v43.default.enum(["default", "highlighted"]);
2002
2151
  var LoaderField = BaseField.extend({
@@ -2006,22 +2155,25 @@ var LoaderField = BaseField.extend({
2006
2155
  configuration: import_v43.default.object({
2007
2156
  text: TranslationConfig.describe("Display text above the loading spinner")
2008
2157
  })
2009
- }).describe(
2010
- "A non-interactive field that indicates an in progress operation in form"
2011
- );
2158
+ }).meta({
2159
+ description: "A non-interactive field that indicates an in progress operation in form",
2160
+ id: "LoaderField"
2161
+ });
2012
2162
  var HiddenField = BaseField.extend({
2013
2163
  type: import_v43.default.literal(FieldType.ALPHA_HIDDEN),
2014
2164
  required: import_v43.default.boolean().default(false).optional(),
2015
2165
  defaultValue: TextValue.optional()
2016
- }).describe(
2017
- "A non-interactive, hidden field that only hold a value in the form"
2018
- );
2166
+ }).meta({
2167
+ description: "A non-interactive, hidden field that only hold a value in the form",
2168
+ id: "HiddenField"
2169
+ });
2019
2170
  var UserRoleField = BaseField.extend({
2020
2171
  type: import_v43.default.literal(FieldType.USER_ROLE),
2021
2172
  defaultValue: TextValue.optional()
2022
- }).describe(
2023
- "A select dropdown that is automatically populated with available user roles"
2024
- );
2173
+ }).meta({
2174
+ description: "A select dropdown that is automatically populated with available user roles",
2175
+ id: "UserRoleField"
2176
+ });
2025
2177
  var FieldConfig = import_v43.default.discriminatedUnion("type", [
2026
2178
  FieldGroup,
2027
2179
  Address,
@@ -2139,6 +2291,7 @@ var ClientConfig = z20.object({
2139
2291
  COUNTRY: z20.string(),
2140
2292
  LANGUAGES: z20.array(z20.string()),
2141
2293
  SENTRY: z20.string().optional(),
2294
+ LOGIN_URL: z20.string().optional(),
2142
2295
  REGISTER_BACKGROUND: BackgroundConfig,
2143
2296
  DASHBOARDS: z20.array(
2144
2297
  z20.object({