@printwithsynergy/artwork-pdf-editor 0.2.0 → 0.3.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.
Files changed (236) hide show
  1. package/LICENSE +62 -0
  2. package/dist/components/AccessibilityHintsPanel.d.ts +142 -0
  3. package/dist/components/AccessibilityHintsPanel.d.ts.map +1 -0
  4. package/dist/components/AccessibilityHintsPanel.js +158 -0
  5. package/dist/components/AccessibilityHintsPanel.js.map +1 -0
  6. package/dist/components/AnnotationOverlay.d.ts +142 -0
  7. package/dist/components/AnnotationOverlay.d.ts.map +1 -0
  8. package/dist/components/AnnotationOverlay.js +141 -0
  9. package/dist/components/AnnotationOverlay.js.map +1 -0
  10. package/dist/components/AnnotationsSidebar.d.ts +98 -0
  11. package/dist/components/AnnotationsSidebar.d.ts.map +1 -0
  12. package/dist/components/AnnotationsSidebar.js +100 -0
  13. package/dist/components/AnnotationsSidebar.js.map +1 -0
  14. package/dist/components/BarcodeGeneratorPanel.d.ts +58 -0
  15. package/dist/components/BarcodeGeneratorPanel.d.ts.map +1 -0
  16. package/dist/components/BarcodeGeneratorPanel.js +91 -0
  17. package/dist/components/BarcodeGeneratorPanel.js.map +1 -0
  18. package/dist/components/BraillePanel.d.ts +99 -0
  19. package/dist/components/BraillePanel.d.ts.map +1 -0
  20. package/dist/components/BraillePanel.js +221 -0
  21. package/dist/components/BraillePanel.js.map +1 -0
  22. package/dist/components/BrandAssetsPanel.d.ts +130 -0
  23. package/dist/components/BrandAssetsPanel.d.ts.map +1 -0
  24. package/dist/components/BrandAssetsPanel.js +125 -0
  25. package/dist/components/BrandAssetsPanel.js.map +1 -0
  26. package/dist/components/BrandConsistencyPanel.d.ts +140 -0
  27. package/dist/components/BrandConsistencyPanel.d.ts.map +1 -0
  28. package/dist/components/BrandConsistencyPanel.js +158 -0
  29. package/dist/components/BrandConsistencyPanel.js.map +1 -0
  30. package/dist/components/ComplianceFindingsPanel.d.ts +62 -0
  31. package/dist/components/ComplianceFindingsPanel.d.ts.map +1 -0
  32. package/dist/components/ComplianceFindingsPanel.js +118 -0
  33. package/dist/components/ComplianceFindingsPanel.js.map +1 -0
  34. package/dist/components/DesignSuggestionsPanel.d.ts +148 -0
  35. package/dist/components/DesignSuggestionsPanel.d.ts.map +1 -0
  36. package/dist/components/DesignSuggestionsPanel.js +154 -0
  37. package/dist/components/DesignSuggestionsPanel.js.map +1 -0
  38. package/dist/components/DielineParametersPanel.d.ts +62 -0
  39. package/dist/components/DielineParametersPanel.d.ts.map +1 -0
  40. package/dist/components/DielineParametersPanel.js +170 -0
  41. package/dist/components/DielineParametersPanel.js.map +1 -0
  42. package/dist/components/DielinePreview.d.ts +150 -0
  43. package/dist/components/DielinePreview.d.ts.map +1 -0
  44. package/dist/components/DielinePreview.js +146 -0
  45. package/dist/components/DielinePreview.js.map +1 -0
  46. package/dist/components/EditorApp.d.ts +18 -3
  47. package/dist/components/EditorApp.d.ts.map +1 -1
  48. package/dist/components/EditorApp.js +42 -7
  49. package/dist/components/EditorApp.js.map +1 -1
  50. package/dist/components/EditorCanvas.d.ts +31 -2
  51. package/dist/components/EditorCanvas.d.ts.map +1 -1
  52. package/dist/components/EditorCanvas.js +97 -16
  53. package/dist/components/EditorCanvas.js.map +1 -1
  54. package/dist/components/EmailNotifyPanel.d.ts +165 -0
  55. package/dist/components/EmailNotifyPanel.d.ts.map +1 -0
  56. package/dist/components/EmailNotifyPanel.js +211 -0
  57. package/dist/components/EmailNotifyPanel.js.map +1 -0
  58. package/dist/components/FileDropZone.d.ts +9 -1
  59. package/dist/components/FileDropZone.d.ts.map +1 -1
  60. package/dist/components/FileDropZone.js +53 -5
  61. package/dist/components/FileDropZone.js.map +1 -1
  62. package/dist/components/FoldEditorPanel.d.ts +68 -0
  63. package/dist/components/FoldEditorPanel.d.ts.map +1 -0
  64. package/dist/components/FoldEditorPanel.js +65 -0
  65. package/dist/components/FoldEditorPanel.js.map +1 -0
  66. package/dist/components/FoldPreviewOverlay.d.ts +48 -0
  67. package/dist/components/FoldPreviewOverlay.d.ts.map +1 -0
  68. package/dist/components/FoldPreviewOverlay.js +182 -0
  69. package/dist/components/FoldPreviewOverlay.js.map +1 -0
  70. package/dist/components/Gs1DigitalLinkPanel.d.ts +103 -0
  71. package/dist/components/Gs1DigitalLinkPanel.d.ts.map +1 -0
  72. package/dist/components/Gs1DigitalLinkPanel.js +199 -0
  73. package/dist/components/Gs1DigitalLinkPanel.js.map +1 -0
  74. package/dist/components/HistoryPanel.d.ts +39 -0
  75. package/dist/components/HistoryPanel.d.ts.map +1 -0
  76. package/dist/components/HistoryPanel.js +72 -0
  77. package/dist/components/HistoryPanel.js.map +1 -0
  78. package/dist/components/IccSoftProofOverlay.d.ts +67 -0
  79. package/dist/components/IccSoftProofOverlay.d.ts.map +1 -0
  80. package/dist/components/IccSoftProofOverlay.js +119 -0
  81. package/dist/components/IccSoftProofOverlay.js.map +1 -0
  82. package/dist/components/ImposePanel.d.ts +71 -0
  83. package/dist/components/ImposePanel.d.ts.map +1 -0
  84. package/dist/components/ImposePanel.js +127 -0
  85. package/dist/components/ImposePanel.js.map +1 -0
  86. package/dist/components/InksPanel.d.ts +61 -0
  87. package/dist/components/InksPanel.d.ts.map +1 -0
  88. package/dist/components/InksPanel.js +84 -0
  89. package/dist/components/InksPanel.js.map +1 -0
  90. package/dist/components/JobSetupPanel.d.ts +118 -0
  91. package/dist/components/JobSetupPanel.d.ts.map +1 -0
  92. package/dist/components/JobSetupPanel.js +169 -0
  93. package/dist/components/JobSetupPanel.js.map +1 -0
  94. package/dist/components/LayersPanel.d.ts.map +1 -1
  95. package/dist/components/LayersPanel.js +1 -0
  96. package/dist/components/LayersPanel.js.map +1 -1
  97. package/dist/components/MarkLibraryPanel.d.ts +131 -0
  98. package/dist/components/MarkLibraryPanel.d.ts.map +1 -0
  99. package/dist/components/MarkLibraryPanel.js +184 -0
  100. package/dist/components/MarkLibraryPanel.js.map +1 -0
  101. package/dist/components/MisEstimateButton.d.ts +73 -0
  102. package/dist/components/MisEstimateButton.d.ts.map +1 -0
  103. package/dist/components/MisEstimateButton.js +57 -0
  104. package/dist/components/MisEstimateButton.js.map +1 -0
  105. package/dist/components/NutritionPanel.d.ts +118 -0
  106. package/dist/components/NutritionPanel.d.ts.map +1 -0
  107. package/dist/components/NutritionPanel.js +169 -0
  108. package/dist/components/NutritionPanel.js.map +1 -0
  109. package/dist/components/PageNavigator.d.ts.map +1 -1
  110. package/dist/components/PageNavigator.js +6 -1
  111. package/dist/components/PageNavigator.js.map +1 -1
  112. package/dist/components/PaletteManager.d.ts +32 -0
  113. package/dist/components/PaletteManager.d.ts.map +1 -0
  114. package/dist/components/PaletteManager.js +89 -0
  115. package/dist/components/PaletteManager.js.map +1 -0
  116. package/dist/components/PaletteToSpotPanel.d.ts +122 -0
  117. package/dist/components/PaletteToSpotPanel.d.ts.map +1 -0
  118. package/dist/components/PaletteToSpotPanel.js +160 -0
  119. package/dist/components/PaletteToSpotPanel.js.map +1 -0
  120. package/dist/components/PreflightAutoFixPanel.d.ts +110 -0
  121. package/dist/components/PreflightAutoFixPanel.d.ts.map +1 -0
  122. package/dist/components/PreflightAutoFixPanel.js +119 -0
  123. package/dist/components/PreflightAutoFixPanel.js.map +1 -0
  124. package/dist/components/PreflightDiffPanel.d.ts +127 -0
  125. package/dist/components/PreflightDiffPanel.d.ts.map +1 -0
  126. package/dist/components/PreflightDiffPanel.js +0 -0
  127. package/dist/components/PreflightDiffPanel.js.map +1 -0
  128. package/dist/components/ProcessRulesPanel.d.ts +81 -0
  129. package/dist/components/ProcessRulesPanel.d.ts.map +1 -0
  130. package/dist/components/ProcessRulesPanel.js +143 -0
  131. package/dist/components/ProcessRulesPanel.js.map +1 -0
  132. package/dist/components/SlackNotifyPanel.d.ts +139 -0
  133. package/dist/components/SlackNotifyPanel.d.ts.map +1 -0
  134. package/dist/components/SlackNotifyPanel.js +133 -0
  135. package/dist/components/SlackNotifyPanel.js.map +1 -0
  136. package/dist/components/SmartSpotMatchPanel.d.ts +143 -0
  137. package/dist/components/SmartSpotMatchPanel.d.ts.map +1 -0
  138. package/dist/components/SmartSpotMatchPanel.js +159 -0
  139. package/dist/components/SmartSpotMatchPanel.js.map +1 -0
  140. package/dist/components/SwatchesPicker.d.ts +83 -0
  141. package/dist/components/SwatchesPicker.d.ts.map +1 -0
  142. package/dist/components/SwatchesPicker.js +151 -0
  143. package/dist/components/SwatchesPicker.js.map +1 -0
  144. package/dist/components/TacOverlay.d.ts +47 -0
  145. package/dist/components/TacOverlay.d.ts.map +1 -0
  146. package/dist/components/TacOverlay.js +116 -0
  147. package/dist/components/TacOverlay.js.map +1 -0
  148. package/dist/components/TrapEditorPanel.d.ts +52 -0
  149. package/dist/components/TrapEditorPanel.d.ts.map +1 -0
  150. package/dist/components/TrapEditorPanel.js +64 -0
  151. package/dist/components/TrapEditorPanel.js.map +1 -0
  152. package/dist/components/TrapPreviewOverlay.d.ts +64 -0
  153. package/dist/components/TrapPreviewOverlay.d.ts.map +1 -0
  154. package/dist/components/TrapPreviewOverlay.js +120 -0
  155. package/dist/components/TrapPreviewOverlay.js.map +1 -0
  156. package/dist/components/VariantMatrixPanel.d.ts +61 -0
  157. package/dist/components/VariantMatrixPanel.d.ts.map +1 -0
  158. package/dist/components/VariantMatrixPanel.js +97 -0
  159. package/dist/components/VariantMatrixPanel.js.map +1 -0
  160. package/dist/components/VariantMatrixVersionPanel.d.ts +122 -0
  161. package/dist/components/VariantMatrixVersionPanel.d.ts.map +1 -0
  162. package/dist/components/VariantMatrixVersionPanel.js +162 -0
  163. package/dist/components/VariantMatrixVersionPanel.js.map +1 -0
  164. package/dist/components/WebhookNotifyPanel.d.ts +160 -0
  165. package/dist/components/WebhookNotifyPanel.d.ts.map +1 -0
  166. package/dist/components/WebhookNotifyPanel.js +100 -0
  167. package/dist/components/WebhookNotifyPanel.js.map +1 -0
  168. package/dist/components/WhiteUnderbasePanel.d.ts +107 -0
  169. package/dist/components/WhiteUnderbasePanel.d.ts.map +1 -0
  170. package/dist/components/WhiteUnderbasePanel.js +104 -0
  171. package/dist/components/WhiteUnderbasePanel.js.map +1 -0
  172. package/dist/hooks/useEditorMode.d.ts +25 -5
  173. package/dist/hooks/useEditorMode.d.ts.map +1 -1
  174. package/dist/hooks/useEditorMode.js +18 -5
  175. package/dist/hooks/useEditorMode.js.map +1 -1
  176. package/dist/index.d.ts +49 -2
  177. package/dist/index.d.ts.map +1 -1
  178. package/dist/index.js +49 -2
  179. package/dist/index.js.map +1 -1
  180. package/dist/lens/preflight-findings.d.ts.map +1 -1
  181. package/dist/lens/preflight-findings.js.map +1 -1
  182. package/dist/lib/barcode-scan.d.ts +154 -0
  183. package/dist/lib/barcode-scan.d.ts.map +1 -0
  184. package/dist/lib/barcode-scan.js +152 -0
  185. package/dist/lib/barcode-scan.js.map +1 -0
  186. package/dist/lib/color-math.d.ts +76 -0
  187. package/dist/lib/color-math.d.ts.map +1 -0
  188. package/dist/lib/color-math.js +96 -0
  189. package/dist/lib/color-math.js.map +1 -0
  190. package/dist/lib/dieline-template.d.ts +87 -0
  191. package/dist/lib/dieline-template.d.ts.map +1 -1
  192. package/dist/lib/dieline-template.js +163 -0
  193. package/dist/lib/dieline-template.js.map +1 -1
  194. package/dist/lib/editor-config.d.ts +384 -0
  195. package/dist/lib/editor-config.d.ts.map +1 -1
  196. package/dist/lib/editor-config.js +89 -0
  197. package/dist/lib/editor-config.js.map +1 -1
  198. package/dist/lib/fold-geometry.d.ts +144 -0
  199. package/dist/lib/fold-geometry.d.ts.map +1 -0
  200. package/dist/lib/fold-geometry.js +138 -0
  201. package/dist/lib/fold-geometry.js.map +1 -0
  202. package/dist/lib/merge-tokens.d.ts +81 -0
  203. package/dist/lib/merge-tokens.d.ts.map +1 -0
  204. package/dist/lib/merge-tokens.js +88 -0
  205. package/dist/lib/merge-tokens.js.map +1 -0
  206. package/dist/lib/palette-registry.d.ts +40 -0
  207. package/dist/lib/palette-registry.d.ts.map +1 -0
  208. package/dist/lib/palette-registry.js +49 -0
  209. package/dist/lib/palette-registry.js.map +1 -0
  210. package/dist/lib/panel-anchor.d.ts +101 -0
  211. package/dist/lib/panel-anchor.d.ts.map +1 -0
  212. package/dist/lib/panel-anchor.js +68 -0
  213. package/dist/lib/panel-anchor.js.map +1 -0
  214. package/dist/lib/preflight/checks.d.ts.map +1 -1
  215. package/dist/lib/preflight/checks.js +71 -0
  216. package/dist/lib/preflight/checks.js.map +1 -1
  217. package/dist/lib/preflight/types.d.ts.map +1 -1
  218. package/dist/lib/preflight/types.js +11 -0
  219. package/dist/lib/preflight/types.js.map +1 -1
  220. package/dist/lib/rasterize.d.ts +93 -0
  221. package/dist/lib/rasterize.d.ts.map +1 -0
  222. package/dist/lib/rasterize.js +117 -0
  223. package/dist/lib/rasterize.js.map +1 -0
  224. package/dist/lib/separations-registry.d.ts +99 -0
  225. package/dist/lib/separations-registry.d.ts.map +1 -0
  226. package/dist/lib/separations-registry.js +59 -0
  227. package/dist/lib/separations-registry.js.map +1 -0
  228. package/dist/lib/unwired.d.ts +29 -0
  229. package/dist/lib/unwired.d.ts.map +1 -0
  230. package/dist/lib/unwired.js +58 -0
  231. package/dist/lib/unwired.js.map +1 -0
  232. package/package.json +20 -11
  233. package/dist/components/SeparationsPanel.d.ts +0 -9
  234. package/dist/components/SeparationsPanel.d.ts.map +0 -1
  235. package/dist/components/SeparationsPanel.js +0 -168
  236. package/dist/components/SeparationsPanel.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"LayersPanel.js","sourceRoot":"","sources":["../../src/components/LayersPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LayersPanel.js","sourceRoot":"","sources":["../../src/components/LayersPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Wave 4 M1 — Mark library picker panel.
3
+ *
4
+ * Surfaces a host-provided library of printer marks (crop, registration,
5
+ * color bar, slug, other) as a browsable, filterable picker. When the
6
+ * user clicks an entry, the panel emits the full {@link MarkLibraryEntry}
7
+ * via `onSelect` — the host then wires that into the active page's
8
+ * marks template (typically the `marksTemplate` field on the v3 job
9
+ * submit request, ready for compile-pdf's marks producer).
10
+ *
11
+ * Loader adapter pattern: hosts wire an async function that resolves
12
+ * to the catalogue (typically compile-pdf's `/v1/marks/catalogue`
13
+ * endpoint when it ships, or a local JSON bundle in the meantime).
14
+ * The editor stays free of any compile-pdf runtime dep — same approach
15
+ * as `SwatchesPicker`, `ComplianceFindingsPanel`, `InksPanel`, etc.
16
+ *
17
+ * @public
18
+ */
19
+ import type { ReactElement } from "react";
20
+ /**
21
+ * Discriminator on which the picker groups its entries and which
22
+ * the compile-pdf marks producer pivots on. `"other"` is the escape
23
+ * hatch for tenant-specific marks that don't map to the four
24
+ * canonical print-shop buckets.
25
+ *
26
+ * @public
27
+ */
28
+ export type MarkCategory = "crop" | "registration" | "color-bar" | "slug" | "other";
29
+ /**
30
+ * One entry in the mark library. Structurally compatible with
31
+ * compile-pdf's mark catalogue shape (subset: only the fields the
32
+ * picker actually needs). Duplicated here so the editor stays
33
+ * consumable without the compile-pdf SDK.
34
+ *
35
+ * `thumbnailDataUrl` is optional — when present, the picker renders
36
+ * a small preview image; when absent it falls back to a text-only
37
+ * row. `description` is the optional hover tooltip / a11y body.
38
+ *
39
+ * @public
40
+ */
41
+ export type MarkLibraryEntry = {
42
+ id: string;
43
+ name: string;
44
+ category: MarkCategory;
45
+ thumbnailDataUrl?: string;
46
+ description?: string;
47
+ };
48
+ /**
49
+ * Host-supplied adapter. Returns the full mark catalogue. Rejects on
50
+ * transport errors; the panel surfaces the message inline. Hosts
51
+ * should memoize the function with `useCallback` so an unrelated
52
+ * parent re-render doesn't trigger a spurious refetch.
53
+ *
54
+ * @public
55
+ */
56
+ export type MarkLibraryLoaderFn = () => Promise<readonly MarkLibraryEntry[]>;
57
+ /**
58
+ * Filter spec accepted by {@link filterMarks}.
59
+ *
60
+ * @public
61
+ */
62
+ export type MarkLibraryFilter = {
63
+ category?: MarkCategory;
64
+ /** Case-insensitive substring filter on `name`. Whitespace-only
65
+ * values are treated as absent so a stray space doesn't blank
66
+ * the catalogue. */
67
+ query?: string;
68
+ };
69
+ /**
70
+ * Result row from {@link groupMarksByCategory}.
71
+ *
72
+ * @public
73
+ */
74
+ export type MarkLibraryGroup = {
75
+ category: MarkCategory;
76
+ marks: readonly MarkLibraryEntry[];
77
+ };
78
+ /**
79
+ * @public
80
+ */
81
+ export type MarkLibraryPanelProps = {
82
+ /** Adapter that resolves to the catalogue. The panel calls it on
83
+ * mount and whenever the function reference changes. */
84
+ loader: MarkLibraryLoaderFn;
85
+ /** Pre-filter to a single category (host-controlled, distinct from
86
+ * the in-panel UI search). Absent → all categories. */
87
+ filterCategory?: MarkCategory;
88
+ /** Id of the currently active mark — host-controlled selection
89
+ * affordance. The matching row renders in the "active" style. */
90
+ activeMarkId?: string;
91
+ /** Click callback. Hosts wire the selected entry into the active
92
+ * page's marks template / job submit request. */
93
+ onSelect?: (entry: MarkLibraryEntry) => void;
94
+ };
95
+ /**
96
+ * Canonical order mark categories render in. Crop is the
97
+ * highest-priority press concern; "other" is the escape hatch at
98
+ * the end.
99
+ *
100
+ * @public
101
+ */
102
+ export declare const MARK_CATEGORY_ORDER: readonly MarkCategory[];
103
+ /**
104
+ * Group marks by category in {@link MARK_CATEGORY_ORDER}. Returns a
105
+ * stable five-bucket shape so renderers iterate without absent-key
106
+ * checks. Unknown runtime categories fall into "other" rather than
107
+ * being dropped (defensive against forward-compat catalogue
108
+ * extensions).
109
+ *
110
+ * Pure function.
111
+ *
112
+ * @public
113
+ */
114
+ export declare function groupMarksByCategory(marks: readonly MarkLibraryEntry[]): readonly MarkLibraryGroup[];
115
+ /**
116
+ * Filter marks by category / name substring. Returns a new array;
117
+ * preserves input order. Pure function.
118
+ *
119
+ * @public
120
+ */
121
+ export declare function filterMarks(marks: readonly MarkLibraryEntry[], filter: MarkLibraryFilter): readonly MarkLibraryEntry[];
122
+ /**
123
+ * Stateful picker that loads the host-supplied catalogue, exposes a
124
+ * live name search, and emits the selected entry. Handles loading /
125
+ * error / empty states inline (matches `ComplianceFindingsPanel`'s
126
+ * adapter pattern).
127
+ *
128
+ * @public
129
+ */
130
+ export declare function MarkLibraryPanel({ loader, filterCategory, activeMarkId, onSelect, }: MarkLibraryPanelProps): ReactElement;
131
+ //# sourceMappingURL=MarkLibraryPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkLibraryPanel.d.ts","sourceRoot":"","sources":["../../src/components/MarkLibraryPanel.tsx"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC;AAE7E;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;yBAEqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;6DACyD;IACzD,MAAM,EAAE,mBAAmB,CAAC;IAC5B;4DACwD;IACxD,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B;sEACkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;sDACkD;IAClD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,YAAY,EAMtD,CAAC;AAUF;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,gBAAgB,EAAE,GACjC,SAAS,gBAAgB,EAAE,CAY7B;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,gBAAgB,EAAE,EAClC,MAAM,EAAE,iBAAiB,GACxB,SAAS,gBAAgB,EAAE,CAO7B;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,cAAc,EACd,YAAY,EACZ,QAAQ,GACT,EAAE,qBAAqB,GAAG,YAAY,CA8GtC"}
@@ -0,0 +1,184 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later
2
+ "use client";
3
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
+ import { useEffect, useMemo, useState } from "react";
5
+ /**
6
+ * Canonical order mark categories render in. Crop is the
7
+ * highest-priority press concern; "other" is the escape hatch at
8
+ * the end.
9
+ *
10
+ * @public
11
+ */
12
+ export const MARK_CATEGORY_ORDER = [
13
+ "crop",
14
+ "registration",
15
+ "color-bar",
16
+ "slug",
17
+ "other",
18
+ ];
19
+ const CATEGORY_LABELS = {
20
+ crop: "Crop marks",
21
+ registration: "Registration",
22
+ "color-bar": "Color bars",
23
+ slug: "Slug info",
24
+ other: "Other",
25
+ };
26
+ /**
27
+ * Group marks by category in {@link MARK_CATEGORY_ORDER}. Returns a
28
+ * stable five-bucket shape so renderers iterate without absent-key
29
+ * checks. Unknown runtime categories fall into "other" rather than
30
+ * being dropped (defensive against forward-compat catalogue
31
+ * extensions).
32
+ *
33
+ * Pure function.
34
+ *
35
+ * @public
36
+ */
37
+ export function groupMarksByCategory(marks) {
38
+ const buckets = new Map(MARK_CATEGORY_ORDER.map((c) => [c, []]));
39
+ for (const m of marks) {
40
+ const bucket = buckets.get(m.category) ?? buckets.get("other");
41
+ bucket?.push(m);
42
+ }
43
+ return MARK_CATEGORY_ORDER.map((category) => ({
44
+ category,
45
+ marks: buckets.get(category) ?? [],
46
+ }));
47
+ }
48
+ /**
49
+ * Filter marks by category / name substring. Returns a new array;
50
+ * preserves input order. Pure function.
51
+ *
52
+ * @public
53
+ */
54
+ export function filterMarks(marks, filter) {
55
+ const trimmedQuery = filter.query?.trim().toLowerCase() ?? "";
56
+ return marks.filter((m) => {
57
+ if (filter.category && m.category !== filter.category)
58
+ return false;
59
+ if (trimmedQuery && !m.name.toLowerCase().includes(trimmedQuery))
60
+ return false;
61
+ return true;
62
+ });
63
+ }
64
+ /**
65
+ * Stateful picker that loads the host-supplied catalogue, exposes a
66
+ * live name search, and emits the selected entry. Handles loading /
67
+ * error / empty states inline (matches `ComplianceFindingsPanel`'s
68
+ * adapter pattern).
69
+ *
70
+ * @public
71
+ */
72
+ export function MarkLibraryPanel({ loader, filterCategory, activeMarkId, onSelect, }) {
73
+ const [marks, setMarks] = useState(null);
74
+ const [error, setError] = useState(null);
75
+ const [loading, setLoading] = useState(false);
76
+ const [query, setQuery] = useState("");
77
+ useEffect(() => {
78
+ let disposed = false;
79
+ setLoading(true);
80
+ setError(null);
81
+ setMarks(null);
82
+ void (async () => {
83
+ try {
84
+ const next = await loader();
85
+ if (disposed)
86
+ return;
87
+ setMarks(next);
88
+ }
89
+ catch (err) {
90
+ if (disposed)
91
+ return;
92
+ setError(err instanceof Error ? err.message : String(err));
93
+ }
94
+ finally {
95
+ if (!disposed)
96
+ setLoading(false);
97
+ }
98
+ })();
99
+ return () => {
100
+ disposed = true;
101
+ };
102
+ }, [loader]);
103
+ const visibleGroups = useMemo(() => {
104
+ if (!marks)
105
+ return null;
106
+ const filtered = filterMarks(marks, {
107
+ ...(filterCategory && { category: filterCategory }),
108
+ query,
109
+ });
110
+ return groupMarksByCategory(filtered);
111
+ }, [marks, filterCategory, query]);
112
+ if (loading) {
113
+ return (_jsx("div", { "data-testid": "mark-library-panel", style: { padding: "0.5rem", opacity: 0.6 }, children: "Loading mark library\u2026" }));
114
+ }
115
+ if (error) {
116
+ return (_jsxs("div", { "data-testid": "mark-library-panel", role: "alert", style: { padding: "0.5rem", color: "#a00" }, children: ["Couldn't load mark library: ", error] }));
117
+ }
118
+ if (!visibleGroups)
119
+ return _jsx("div", { "data-testid": "mark-library-panel" });
120
+ const totalVisible = visibleGroups.reduce((s, g) => s + g.marks.length, 0);
121
+ return (_jsxs("div", { "data-testid": "mark-library-panel", style: { padding: "0.5rem" }, children: [_jsxs("header", { style: { display: "flex", gap: "0.5rem", marginBottom: "0.5rem" }, children: [_jsxs("h3", { style: { margin: 0, fontSize: "0.875rem", flex: 1 }, children: ["Marks (", totalVisible, ")"] }), _jsx("input", { type: "search", placeholder: "Search marks", value: query, onChange: (e) => setQuery(e.target.value), "aria-label": "Search marks", style: { fontSize: "0.75rem", padding: "0.125rem 0.25rem" } })] }), totalVisible === 0 && (_jsx("div", { "data-testid": "mark-library-panel-empty", style: { opacity: 0.6, fontSize: "0.875rem" }, children: "No marks match the current filter." })), visibleGroups.map((group) => {
122
+ if (group.marks.length === 0)
123
+ return null;
124
+ return (_jsxs("section", { "data-testid": `mark-library-group-${group.category}`, style: { marginBottom: "0.75rem" }, children: [_jsxs("h4", { style: {
125
+ margin: "0 0 0.25rem 0",
126
+ fontSize: "0.75rem",
127
+ color: "#666",
128
+ textTransform: "uppercase",
129
+ letterSpacing: "0.05em",
130
+ }, children: [CATEGORY_LABELS[group.category], " (", group.marks.length, ")"] }), _jsx("ul", { style: { listStyle: "none", padding: 0, margin: 0 }, children: group.marks.map((mark) => (_jsx(MarkLibraryRow, { mark: mark, isActive: mark.id === activeMarkId, onSelect: onSelect }, mark.id))) })] }, group.category));
131
+ })] }));
132
+ }
133
+ /**
134
+ * Renders one mark row. Switches between a `<button>` (when
135
+ * `onSelect` is wired) and a static `<div>` so screen readers don't
136
+ * announce a non-functional control. The thumbnail, when present, is
137
+ * `aria-hidden` because the row's `aria-label` already names the
138
+ * mark.
139
+ *
140
+ * Intra-package helper.
141
+ */
142
+ function MarkLibraryRow({ mark, isActive, onSelect, }) {
143
+ const rowStyle = {
144
+ display: "flex",
145
+ alignItems: "center",
146
+ gap: "0.5rem",
147
+ width: "100%",
148
+ padding: "0.25rem 0.5rem",
149
+ background: isActive ? "#e0ecff" : "transparent",
150
+ border: isActive ? "1px solid #2563eb" : "1px solid transparent",
151
+ borderRadius: 4,
152
+ };
153
+ const contents = (_jsxs(_Fragment, { children: [mark.thumbnailDataUrl && (_jsx("img", { src: mark.thumbnailDataUrl, alt: "", "aria-hidden": "true", style: {
154
+ width: 24,
155
+ height: 24,
156
+ objectFit: "contain",
157
+ background: "#fff",
158
+ border: "1px solid #ddd",
159
+ borderRadius: 2,
160
+ flexShrink: 0,
161
+ } })), _jsx("span", { style: { flex: 1, fontSize: "0.8125rem" }, children: mark.name })] }));
162
+ // Visually-hidden description, referenced by `aria-describedby` so
163
+ // screen readers announce the mark's name first and the longer
164
+ // description as a separate supporting detail (rather than fused
165
+ // into a single mash-up label). Hosts that disable verbose
166
+ // announcements then still get a short button name.
167
+ const describedById = mark.description ? `mark-${mark.id}-description` : undefined;
168
+ return (_jsx("li", { children: onSelect ? (_jsxs("button", { type: "button", onClick: () => onSelect(mark), "aria-label": mark.name, "aria-describedby": describedById, title: mark.description, style: {
169
+ ...rowStyle,
170
+ cursor: "pointer",
171
+ textAlign: "left",
172
+ }, children: [contents, mark.description && (_jsx("span", { id: describedById, style: {
173
+ position: "absolute",
174
+ width: 1,
175
+ height: 1,
176
+ padding: 0,
177
+ margin: -1,
178
+ overflow: "hidden",
179
+ clip: "rect(0 0 0 0)",
180
+ whiteSpace: "nowrap",
181
+ border: 0,
182
+ }, children: mark.description }))] })) : (_jsx("div", { style: rowStyle, title: mark.description, children: contents })) }));
183
+ }
184
+ //# sourceMappingURL=MarkLibraryPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkLibraryPanel.js","sourceRoot":"","sources":["../../src/components/MarkLibraryPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { PrintProcess } from "./JobSetupPanel";
2
+ /**
3
+ * Manifest payload — the shape the synergy `mis.estimate` node
4
+ * consumes. All fields except `documentId` and `processClass` are
5
+ * optional so partial submissions still validate (hosts that don't
6
+ * yet collect a due date can omit it).
7
+ *
8
+ * @public
9
+ */
10
+ export type MisEstimateManifest = {
11
+ /** Stable identifier the host uses to correlate this submission
12
+ * with the underlying document (e.g. a CMS row id). */
13
+ documentId: string;
14
+ /** Matches `PrintContext.process` from the document-model (re-using
15
+ * `JobSetupPanel`'s `PrintProcess` to keep the two in lockstep) so
16
+ * the MIS can route to the right press cell. */
17
+ processClass: PrintProcess;
18
+ /** Ordered ink list at submission time — typically the live ink
19
+ * list from PR-5's InksPanel. Names mirror the wire shape, not
20
+ * the human display string. */
21
+ separations?: ReadonlyArray<{
22
+ name: string;
23
+ colorSpace: "Separation" | "DeviceN";
24
+ }>;
25
+ /** Substrate / coverage hints the MIS uses to estimate
26
+ * consumables. Free shape — different MIS vendors collect
27
+ * different fields. */
28
+ materialEstimate?: Record<string, unknown>;
29
+ /** ISO 8601 (date-only) string. Hosts that surface a date picker
30
+ * pass `value.toISOString().slice(0, 10)`. */
31
+ dueDate?: string;
32
+ /** Tenant-specific extras (`po_number`, `cost_center`, …). The
33
+ * synergy node copies the bag verbatim into the workflow
34
+ * payload. */
35
+ extras?: Record<string, unknown>;
36
+ };
37
+ /**
38
+ * Host adapter — POSTs the manifest to the synergy queue (or
39
+ * whatever MIS bridge the host runs). Resolves with the workflow
40
+ * id the synergy node assigned; rejects on transport / validation
41
+ * errors and the button surfaces the message inline.
42
+ *
43
+ * @public
44
+ */
45
+ export type MisSubmitFn = (manifest: MisEstimateManifest) => Promise<{
46
+ workflowId: string;
47
+ }>;
48
+ /**
49
+ * @public
50
+ */
51
+ export type MisEstimateButtonProps = {
52
+ /** The current manifest. When `undefined` the button is disabled
53
+ * — hosts wire this to "we have enough data to submit". */
54
+ manifest: MisEstimateManifest | undefined;
55
+ /** Host adapter, see {@link MisSubmitFn}. */
56
+ submit: MisSubmitFn;
57
+ /** Optional button label override. Defaults to "Send to MIS". */
58
+ label?: string;
59
+ /** Optional callback fired on successful submission with the
60
+ * workflow id so the host can show a confirmation / link. */
61
+ onSuccess?: (workflowId: string) => void;
62
+ /** Optional mapper that turns a submit error into a user-facing
63
+ * message. The default (`"Couldn't send to MIS."`) avoids leaking
64
+ * internal `Error.message` strings; hosts that want richer
65
+ * surfaces (e.g. validation-error toasts) pass their own mapper.
66
+ * The original error is still passed in so hosts can log it. */
67
+ errorMessage?: (err: unknown) => string;
68
+ };
69
+ /**
70
+ * @public
71
+ */
72
+ export declare function MisEstimateButton({ manifest, submit, label, onSuccess, errorMessage, }: MisEstimateButtonProps): import("react/jsx-runtime").JSX.Element;
73
+ //# sourceMappingURL=MisEstimateButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MisEstimateButton.d.ts","sourceRoot":"","sources":["../../src/components/MisEstimateButton.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC;4DACwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB;;qDAEiD;IACjD,YAAY,EAAE,YAAY,CAAC;IAC3B;;oCAEgC;IAChC,WAAW,CAAC,EAAE,aAAa,CAAC;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC;KACtC,CAAC,CAAC;IACH;;4BAEwB;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C;mDAC+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;mBAEe;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,mBAAmB,KAAK,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7F;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC;gEAC4D;IAC5D,QAAQ,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC1C,6CAA6C;IAC7C,MAAM,EAAE,WAAW,CAAC;IACpB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;kEAC8D;IAC9D,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;;;;qEAIiE;IACjE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;CACzC,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,MAAM,EACN,KAAK,EACL,SAAS,EACT,YAAY,GACb,EAAE,sBAAsB,2CAgExB"}
@@ -0,0 +1,57 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later
2
+ "use client";
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ /**
5
+ * Wave 2 O2 — Send-to-MIS manifest emitter.
6
+ *
7
+ * A small button that gathers the current document's print-relevant
8
+ * metadata (separations, material estimate, process class, due date)
9
+ * into a structured manifest and hands it to a host-supplied
10
+ * submitter. The host wires the submitter to the synergy queue's
11
+ * `mis.estimate` node (`POST /synergy/workflows/<id>/submit` in the
12
+ * canonical deploy); the editor stays runtime-free of the synergy
13
+ * client.
14
+ *
15
+ * Designed around the host-adapter pattern that the rest of the
16
+ * editor uses (see `SpotSearchFn`, `TrapPreviewFn`, `InksLoaderFn`).
17
+ *
18
+ * @public
19
+ */
20
+ import { useEffect, useRef, useState } from "react";
21
+ /**
22
+ * @public
23
+ */
24
+ export function MisEstimateButton({ manifest, submit, label, onSuccess, errorMessage, }) {
25
+ const [state, setState] = useState({ kind: "idle" });
26
+ // Clear any lingering success/error chip when the host swaps in a
27
+ // new manifest — the previous submission's outcome doesn't apply to
28
+ // a different payload. Identity comparison only; hosts that mutate
29
+ // the same object reference get the chip preserved (rare; almost
30
+ // every host returns a new object on each edit).
31
+ const lastManifestRef = useRef(manifest);
32
+ useEffect(() => {
33
+ if (lastManifestRef.current !== manifest) {
34
+ lastManifestRef.current = manifest;
35
+ setState((prev) => (prev.kind === "submitting" ? prev : { kind: "idle" }));
36
+ }
37
+ }, [manifest]);
38
+ const disabled = !manifest || state.kind === "submitting";
39
+ const onClick = async () => {
40
+ if (!manifest)
41
+ return;
42
+ setState({ kind: "submitting" });
43
+ try {
44
+ const { workflowId } = await submit(manifest);
45
+ setState({ kind: "ok", workflowId });
46
+ onSuccess?.(workflowId);
47
+ }
48
+ catch (err) {
49
+ setState({
50
+ kind: "error",
51
+ message: errorMessage ? errorMessage(err) : "Couldn't send to MIS.",
52
+ });
53
+ }
54
+ };
55
+ return (_jsxs("div", { "data-testid": "mis-estimate-button", style: { display: "inline-flex", gap: "0.5rem", alignItems: "center" }, children: [_jsx("button", { type: "button", onClick: onClick, disabled: disabled, "aria-busy": state.kind === "submitting", "aria-label": label ?? "Send to MIS", children: state.kind === "submitting" ? "Sending…" : (label ?? "Send to MIS") }), state.kind === "ok" && (_jsxs("small", { style: { color: "#080", opacity: 0.8 }, role: "status", children: ["Submitted (", state.workflowId, ")"] })), state.kind === "error" && (_jsx("small", { style: { color: "#a00", opacity: 0.8 }, role: "alert", children: state.message }))] }));
56
+ }
57
+ //# sourceMappingURL=MisEstimateButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MisEstimateButton.js","sourceRoot":"","sources":["../../src/components/MisEstimateButton.tsx"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,YAAY,CAAC;;AAEb;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAuEpD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,QAAQ,EACR,MAAM,EACN,KAAK,EACL,SAAS,EACT,YAAY,GACW;IACvB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAKhC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAEpB,kEAAkE;IAClE,oEAAoE;IACpE,mEAAmE;IACnE,iEAAiE;IACjE,iDAAiD;IACjD,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,eAAe,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzC,eAAe,CAAC,OAAO,GAAG,QAAQ,CAAC;YACnC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;IAE1D,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9C,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACrC,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC;gBACP,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAuB;aACpE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,8BACc,qBAAqB,EACjC,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,aAEtE,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,eACP,KAAK,CAAC,IAAI,KAAK,YAAY,gBAC1B,KAAK,IAAI,aAAa,YAEjC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,aAAa,CAAC,GAC7D,EACR,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CACtB,iBAAO,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAC,QAAQ,4BAC9C,KAAK,CAAC,UAAU,SACtB,CACT,EACA,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CACzB,gBAAO,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAC,OAAO,YACxD,KAAK,CAAC,OAAO,GACR,CACT,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Typed Nutrition Facts data. All fields are per serving except
3
+ * `servingSize` (human-readable, e.g. `"2/3 cup (55g)"`) and
4
+ * `servingsPerContainer`. Numeric fields are in the units the FDA
5
+ * panel declares (grams for macronutrients, milligrams for sodium /
6
+ * cholesterol, micrograms for vitamin D).
7
+ *
8
+ * Optional fields are omitted from the rendered output entirely
9
+ * (different from `0`, which renders as "0g" / "0%").
10
+ *
11
+ * @public
12
+ */
13
+ export type NutritionFacts = {
14
+ servingSize: string;
15
+ servingsPerContainer: number;
16
+ calories: number;
17
+ totalFatG: number;
18
+ saturatedFatG: number;
19
+ transFatG: number;
20
+ cholesterolMg: number;
21
+ sodiumMg: number;
22
+ totalCarbohydrateG: number;
23
+ dietaryFiberG: number;
24
+ totalSugarsG: number;
25
+ addedSugarsG?: number;
26
+ proteinG: number;
27
+ vitaminDMcg?: number;
28
+ calciumMg?: number;
29
+ ironMg?: number;
30
+ potassiumMg?: number;
31
+ };
32
+ /**
33
+ * 2016 FDA Daily Reference Values (DRV) and Reference Daily Intakes
34
+ * (RDI) used to compute the % Daily Value column. Public-domain
35
+ * regulatory data — re-exported so server renderers can use the
36
+ * same constants and stay in sync.
37
+ *
38
+ * @public
39
+ */
40
+ export declare const FDA_DAILY_VALUES: {
41
+ readonly totalFatG: 78;
42
+ readonly saturatedFatG: 20;
43
+ readonly cholesterolMg: 300;
44
+ readonly sodiumMg: 2300;
45
+ readonly totalCarbohydrateG: 275;
46
+ readonly dietaryFiberG: 28;
47
+ readonly addedSugarsG: 50;
48
+ readonly vitaminDMcg: 20;
49
+ readonly calciumMg: 1300;
50
+ readonly ironMg: 18;
51
+ readonly potassiumMg: 4700;
52
+ };
53
+ /**
54
+ * One row in the composed nutrition panel spec. `indent` ≥ 1 means
55
+ * the row is a sub-nutrient (e.g. saturated fat under total fat) —
56
+ * hosts typically render indented and not bold. `bold` matches the
57
+ * FDA layout: panel header, "Calories", and section-leading nutrient
58
+ * names are bold.
59
+ *
60
+ * @public
61
+ */
62
+ export type NutritionRow = {
63
+ label: string;
64
+ amount: string;
65
+ dvPct?: number;
66
+ indent: 0 | 1;
67
+ bold: boolean;
68
+ };
69
+ /**
70
+ * Output of {@link composeNutritionFacts}. `rows` is the ordered
71
+ * list the host renders top-to-bottom; `caloriesLine` is surfaced
72
+ * separately because the FDA layout sets calories at ~22 pt while
73
+ * everything else is at body-text size.
74
+ *
75
+ * @public
76
+ */
77
+ export type NutritionPanelSpec = {
78
+ servingSize: string;
79
+ servingsLine: string;
80
+ caloriesLine: string;
81
+ rows: NutritionRow[];
82
+ };
83
+ /**
84
+ * Compose the ordered row list for an FDA-style Nutrition Facts
85
+ * panel from a {@link NutritionFacts} record. Pure function —
86
+ * exported so RSC / Astro-frontmatter callers can pre-compute the
87
+ * spec without bundling the panel.
88
+ *
89
+ * Row order matches §101.9(c) exactly: Total Fat, Saturated Fat,
90
+ * Trans Fat, Cholesterol, Sodium, Total Carbohydrate, Dietary
91
+ * Fiber, Total Sugars, Added Sugars, Protein, then the
92
+ * micronutrient block (Vitamin D, Calcium, Iron, Potassium).
93
+ *
94
+ * @public
95
+ */
96
+ export declare function composeNutritionFacts(facts: NutritionFacts): NutritionPanelSpec;
97
+ /**
98
+ * @public
99
+ */
100
+ export type NutritionPanelProps = {
101
+ /** Initial values seeded into the form. Defaults to the
102
+ * illustrative FDA-example values. */
103
+ initialFacts?: Partial<NutritionFacts>;
104
+ /** Fired when the user clicks "Compose" with the spec built from
105
+ * the current form state. The host places it on the canvas as a
106
+ * text block. */
107
+ onCompose: (spec: NutritionPanelSpec) => void;
108
+ };
109
+ /**
110
+ * Nutrition Facts data-entry panel. Surfaces the FDA panel's
111
+ * mandatory fields (serving size, servings, calories, macros) plus
112
+ * the optional micronutrient block. Click **Compose** and the host
113
+ * receives the resolved {@link NutritionPanelSpec} via `onCompose`.
114
+ *
115
+ * @public
116
+ */
117
+ export declare function NutritionPanel({ initialFacts, onCompose }: NutritionPanelProps): import("react/jsx-runtime").JSX.Element;
118
+ //# sourceMappingURL=NutritionPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NutritionPanel.d.ts","sourceRoot":"","sources":["../../src/components/NutritionPanel.tsx"],"names":[],"mappings":"AAwBA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;CAYnB,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB,CAAC;AA0BF;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,kBAAkB,CAiG/E;AA8BD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC;2CACuC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACvC;;sBAEkB;IAClB,SAAS,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,mBAAmB,2CA8E9E"}