- Shipped
- August 6, 2026 at 6:27 PM UTC
- Author
- kamo
- Commit
- c980e53
Every @kamo/* package is private:true with exports:"./src/index.ts" and no build step, so there is no publishable artifact — the files are copied and rewired onto relative imports. Behaviour is unchanged; only imports and i18n move. pdfjs-dist 4.10.38 with a SELF-HOSTED worker copied by a prebuild step. Not **************** that loads pdf.js 4.4.168 from cdnjs, which is a different engine and unacceptable for a legally binding surface, and the two GlobalWorkerOptions objects stay uncorrupted only because the module instances never meet. Not FieldElement.tsx either: its FieldControl renders pointerEvents:'none' previews with no value binding — a designer preview, not an input. useTranslations comes out of the four signing components: they call kamo-signer's own message keys, kamo-internal's dictionary does not have them, and new keys cannot be invented. Strings arrive as props. SIGNATURE_FONTS is a prop too rather than four next/font/google loads for one modal; the typed font id still rides through CapturedSignature.typedFont so flatten and the certificate are unaffected. Two marked deviations from a verbatim copy, both in signStore: - required-ness now skips readOnly fields. kamo-signer counted them; ESigService's FieldCompletion — the shipped server-side enforcement — does not ("if (f == null || f.readOnly() || !f.required()) continue;"). Keeping the signer copy stricter than the server would park a member on a gap they have no control to close while the server considers the envelope complete. - draft persistence guards localStorage instead of window. window is the wrong question: localStorage can be absent (server render) or throw on access (private mode, partitioned storage), and a draft must never take the wizard down with it.