@dbx-tools/shared-email-template 0.6.68 → 0.6.70

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/README.md CHANGED
@@ -40,9 +40,10 @@ import { EmailDocument } from "@dbx-tools/shared-email-template";
40
40
  Node runtimes should pass this component to `@react-email/render`.
41
41
  `@dbx-tools/email` does that automatically for SMTP and local outbox delivery.
42
42
 
43
- `heading` overrides only the visible card heading while `subject` remains the
44
- MIME subject and preheader fallback. One-time-code mail uses this to keep the
45
- code in notifications without repeating it inside the opened card:
43
+ `heading` is optional. Ordinary mail leaves it unset so the MIME subject stays a
44
+ transport subject and is not repeated as a body title. Pass a shorter heading when
45
+ the subject carries notification-specific details one-time-code mail uses this
46
+ to keep the code in notifications without repeating it inside the opened card:
46
47
 
47
48
  ```tsx
48
49
  <EmailDocument
@@ -78,7 +79,10 @@ import { EmailBody } from "@dbx-tools/shared-email-template";
78
79
  ```
79
80
 
80
81
  The body preview and complete document share typography and content styling. The
81
- full document adds the branded header, subject, envelope metadata, and footer.
82
+ full document adds the branded header band, optional heading, and footer.
83
+ Envelope rows (`headers`) are opt-in for local outbox previews; delivered SMTP
84
+ mail and browser approval chrome leave recipients and attachments outside the
85
+ HTML body.
82
86
 
83
87
  Use `EmailCard` when a browser surface should show that complete presentation
84
88
  without rendering an outer `<html>` or `<body>` element:
@@ -86,7 +90,7 @@ without rendering an outer `<html>` or `<body>` element:
86
90
  ```tsx
87
91
  import { EmailCard } from "@dbx-tools/shared-email-template";
88
92
 
89
- <EmailCard subject={draft.subject} body={draft.body} headers={[["To", draft.to.join(", ")]]} />;
93
+ <EmailCard subject={draft.subject} body={draft.body} />;
90
94
  ```
91
95
 
92
96
  ## Apply A Brand
@@ -45,13 +45,30 @@ export declare const EmailBody: ({ body, brand: brandInput }: EmailBodyProps) =>
45
45
  export interface EmailDocumentProps extends EmailBodyProps {
46
46
  subject?: string;
47
47
  /**
48
- * Visible heading inside the email card. Defaults to the subject so ordinary
49
- * messages keep their existing presentation while callers may use a shorter
50
- * heading when the transport subject contains notification-specific details.
48
+ * Visible heading inside the email card. Omit it for ordinary messages so the
49
+ * transport subject stays a transport subject and is not repeated as a body
50
+ * title. Pass a shorter heading when the subject carries notification-specific
51
+ * details (one-time-code mail is the motivating case).
51
52
  */
52
53
  heading?: string;
54
+ /**
55
+ * Optional envelope rows rendered above the body (From / To / Cc / …). Kept for
56
+ * local outbox previews that deliberately show the wire envelope; delivered
57
+ * SMTP mail and browser approval/compose previews leave this unset — those
58
+ * surfaces put recipients and attachments in client chrome instead.
59
+ */
53
60
  headers?: ReadonlyArray<readonly [string, string]>;
54
61
  footer?: string;
62
+ /**
63
+ * Draw the card's own frame: rounded corners, border, drop shadow, and the
64
+ * 620px reading width. Delivered mail keeps it, because the card floats on the
65
+ * client's page background and the frame is what separates the two.
66
+ *
67
+ * Turn it off when the card already sits inside a surface that frames it - a
68
+ * browser preview's reading pane - so the two frames do not nest into a rounded
69
+ * card inside a rounded card.
70
+ */
71
+ framed?: boolean;
55
72
  /**
56
73
  * Preheader text: the snippet a client shows next to the subject in a list, and
57
74
  * - the reason this is a prop - the text a mobile OS puts in the PUSH
@@ -67,6 +84,6 @@ export interface EmailDocumentProps extends EmailBodyProps {
67
84
  preview?: string;
68
85
  }
69
86
  /** Branded message card shared by the full document and browser previews. */
70
- export declare const EmailCard: ({ body, subject, heading, headers, footer, brand: brandInput, }: EmailDocumentProps) => React.JSX.Element;
87
+ export declare const EmailCard: ({ body, heading, headers, footer, framed, brand: brandInput, }: EmailDocumentProps) => React.JSX.Element;
71
88
  /** Complete responsive, branded React Email document. */
72
89
  export declare const EmailDocument: (props: EmailDocumentProps) => React.JSX.Element;
@@ -153,24 +153,35 @@ function EnvelopeHeaders({ headers, theme, }) {
153
153
  }, children: label }), _jsx(Column, { style: { color: theme.foreground, fontSize: "13px", padding: "3px 0" }, children: value })] }, `${label}:${value}`))) }));
154
154
  }
155
155
  /** Branded message card shared by the full document and browser previews. */
156
- export const EmailCard = ({ body, subject = "Message", heading, headers, footer, brand: brandInput, }) => {
156
+ export const EmailCard = ({ body, heading, headers, footer, framed = true, brand: brandInput, }) => {
157
157
  const theme = resolveEmailBrand(brandInput);
158
158
  return (_jsxs(Container, { style: {
159
159
  backgroundColor: theme.surface,
160
- border: `1px solid ${theme.border}`,
161
- borderRadius: "16px",
162
- boxShadow: "0 8px 30px rgba(27,49,57,0.08)",
163
160
  fontFamily: theme.fontFamily,
164
161
  margin: "0 auto",
165
- maxWidth: "620px",
166
- overflow: "hidden",
167
- }, children: [_jsx(Section, { style: { backgroundColor: theme.accent, padding: "22px 30px" }, children: _jsx(BrandMark, { theme: theme }) }), _jsxs(Section, { style: { padding: "34px 34px 24px" }, children: [_jsx(Heading, { style: {
162
+ ...(framed
163
+ ? {
164
+ border: `1px solid ${theme.border}`,
165
+ borderRadius: "16px",
166
+ boxShadow: "0 8px 30px rgba(27,49,57,0.08)",
167
+ maxWidth: "620px",
168
+ }
169
+ : { maxWidth: "100%" }),
170
+ }, children: [_jsx(Section, { style: {
171
+ backgroundColor: theme.accent,
172
+ padding: "22px 30px",
173
+ // The corners are set on the band itself rather than clipped by the
174
+ // container: React Email renders the container as a <table>, which
175
+ // `overflow: hidden` does not reliably clip, so the square band used to
176
+ // poke past the rounded edge.
177
+ ...(framed ? { borderRadius: "15px 15px 0 0" } : {}),
178
+ }, children: _jsx(BrandMark, { theme: theme }) }), _jsxs(Section, { style: { padding: "34px 34px 24px" }, children: [heading ? (_jsx(Heading, { style: {
168
179
  color: theme.foreground,
169
180
  fontSize: "28px",
170
181
  letterSpacing: "-0.5px",
171
182
  lineHeight: "1.2",
172
183
  margin: "0 0 24px",
173
- }, children: heading ?? subject }), _jsx(EnvelopeHeaders, { headers: headers, theme: theme }), _jsx(EmailBody, { body: body, brand: theme })] }), _jsx(Hr, { style: { borderColor: theme.border, margin: 0 } }), _jsx(Section, { style: { padding: "20px 34px 26px" }, children: _jsxs(Text, { style: {
184
+ }, children: heading })) : null, _jsx(EnvelopeHeaders, { headers: headers, theme: theme }), _jsx(EmailBody, { body: body, brand: theme })] }), _jsx(Hr, { style: { borderColor: theme.border, margin: 0 } }), _jsx(Section, { style: { padding: "20px 34px 26px" }, children: _jsxs(Text, { style: {
174
185
  color: theme.muted,
175
186
  fontSize: "12px",
176
187
  lineHeight: "1.55",
@@ -191,4 +202,4 @@ export const EmailDocument = (props) => {
191
202
  };
192
203
  return (_jsxs(Html, { lang: "en", children: [_jsx(Head, {}), _jsx(Preview, { children: props.preview ?? props.subject ?? "Message" }), _jsx(Body, { style: pageStyle, children: _jsx(EmailCard, { ...props }) })] }));
193
204
  };
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxLQUFLLEVBQXFCLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUNMLElBQUksRUFDSixNQUFNLEVBQ04sU0FBUyxFQUNULElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxFQUNGLElBQUksRUFDSixHQUFHLEVBQ0gsSUFBSSxFQUNKLFFBQVEsRUFDUixPQUFPLEVBQ1AsR0FBRyxFQUNILE9BQU8sRUFDUCxJQUFJLEdBQ0wsTUFBTSx5QkFBeUIsQ0FBQztBQXFDakMsU0FBUyxvQkFBb0IsQ0FBQyxLQUF5QjtJQUNyRCxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLE9BQXFCLEVBQWMsRUFBRTtJQUN6RSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ25FLE9BQU87UUFDTCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPO1FBQzlCLFFBQVEsRUFBRSxTQUFTO1FBQ25CLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUk7UUFDbkMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU87UUFDbEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVTtRQUNsQyxVQUFVLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ3JDLEtB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QUUsS0FBSyxDQUFDLFVBQVU7UUFDakMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1FBQzVCLE1BQU0sRUFBRSxDQUFDO1FBQ1QsT0FBTyxFQUFFLFdBQVc7S0FDckIsQ0FBQztJQUNGLE9BQU8sQ0FDTCxNQUFDLElBQUksSUFBQyxJQUFJLEVBQUMsSUFBSSxhQUNiLEtBQUMsSUFBSSxLQUFHLEVBQ1IsS0FBQyxPQUFPLGNBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsR0FBVyxFQUNoRSxLQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsU0FBUyxZQUNwQixLQUFDLFNBQVMsT0FBSyxLQUFLLEdBQUksR0FDbkIsSUFDRixDQUNSLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaXZlcnNhbCBSZWFjdCBFbWFpbCBwcmVzZW50YXRpb24gZm9yIGRieC10b29scyBlbWFpbCBmbG93cy5cbiAqXG4gKiBUaGUgZG9jdW1lbnQgY29tcG9uZW50IHJlbmRlcnMgb24gdGhlIHNlcnZlciB0aHJvdWdoIGBAcmVhY3QtZW1haWwvcmVuZGVyYDtcbiAqIHRoZSBib2R5IGNvbXBvbmVudCBpcyByZXVzZWQgZGlyZWN0bHkgYnkgYnJvd3NlciBhcHByb3ZhbCBhbmQgY29tcG9zZSB2aWV3cy5cbiAqIEJvdGggZGVmYXVsdCB0byB0aGUgcmVwb3NpdG9yeSBicmFuZCB3aGlsZSBhY2NlcHRpbmcgYSBjb25zdW1lciBvdmVycmlkZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGJyYW5kLCB0eXBlIEJyYW5kQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBCb2R5LFxuICBDb2x1bW4sXG4gIENvbnRhaW5lcixcbiAgSGVhZCxcbiAgSGVhZGluZyxcbiAgSHIsXG4gIEh0bWwsXG4gIEltZyxcbiAgTGluayxcbiAgTWFya2Rvd24sXG4gIFByZXZpZXcsXG4gIFJvdyxcbiAgU2VjdGlvbixcbiAgVGV4dCxcbn0gZnJvbSBcIkByZWFjdC1lbWFpbC9jb21wb25lbnRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuLyoqIEVtYWlsLXNhZmUgYnJhbmQgdmFsdWVzIHVzZWQgYnkgdGhlIFJlYWN0IEVtYWlsIHRlbXBsYXRlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEJyYW5kIHtcbiAgYWNjZW50OiBzdHJpbmc7XG4gIG9uQWNjZW50Pzogc3RyaW5nO1xuICBmb250RmFtaWx5OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGxvZ29Vcmw/OiBzdHJpbmc7XG4gIGJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHN1cmZhY2U/OiBzdHJpbmc7XG4gIGZvcmVncm91bmQ/OiBzdHJpbmc7XG4gIG11dGVkPzogc3RyaW5nO1xuICBib3JkZXI/OiBzdHJpbmc7XG4gIHRhZ2xpbmU/OiBzdHJpbmc7XG4gIHdlYnNpdGU/OiBzdHJpbmc7XG59XG5cbi8qKiBDb21wbGV0ZSB2YWx1ZXMgYWZ0ZXIgYXBwbHlpbmcgdGhlIGRieC10b29scyBkZWZhdWx0IGJyYW5kLiAqL1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRFbWFpbEJyYW5kID0gUmVxdWlyZWQ8XG4gIFBpY2s8XG4gICAgRW1haWxCcmFuZCxcbiAgICB8IFwiYWNjZW50XCJcbiAgICB8IFwib25BY2NlbnRcIlxuICAgIHwgXCJmb250RmFtaWx5XCJcbiAgICB8IFwibmFtZVwiXG4gICAgfCBcImJhY2tncm91bmRcIlxuICAgIHwgXCJzdXJmYWNlXCJcbiAgICB8IFwiZm9yZWdyb3VuZFwiXG4gICAgfCBcIm11dGVkXCJcbiAgICB8IFwiYm9yZGVyXCJcbiAgICB8IFwidGFnbGluZVwiXG4gID5cbj4gJlxuICBQaWNrPEVtYWlsQnJhbmQsIFwibG9nb1VybFwiIHwgXCJ3ZWJzaXRlXCI+O1xuXG5mdW5jdGlvbiBpc1JlbmRlcmFibGVJbWFnZVVybCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdmFsdWUgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAvXig/Omh0dHBzPzp8ZGF0YTp8Y2lkOikvaS50ZXN0KHZhbHVlKTtcbn1cblxuLyoqIFByb2plY3QgYSBwb3J0YWJsZSBicmFuZCBjb250ZXh0IGludG8gZW1haWwtc2FmZSB2YWx1ZXMuICovXG5leHBvcnQgY29uc3QgZW1haWxCcmFuZEZyb21Db250ZXh0ID0gKGNvbnRleHQ6IEJyYW5kQ29udGV4dCk6IEVtYWlsQnJhbmQgPT4ge1xuICBjb25zdCBsb2dvID0gY29udGV4dC5hc3NldHMubG9nby5kYXJrID8/IGNvbnRleHQuYXNzZXRzLmxvZ28ubGlnaHQ7XG4gIHJldHVybiB7XG4gICAgYWNjZW50OiBjb250ZXh0LmNvbG9ycy5wcmltYXJ5LFxuICAgIG9uQWNjZW50OiBcIiNmZmZmZmZcIixcbiAgICBmb250RmFtaWx5OiBjb250ZXh0LnR5cG9ncmFwaHkuc2FucyxcbiAgICBuYW1lOiBjb250ZXh0Lm5hbWUsXG4gICAgYmFja2dyb3VuZDogY29udGV4dC5jb2xvcnMuc3VyZmFjZSxcbiAgICBzdXJmYWNlOiBjb250ZXh0LmNvbG9ycy5iYWNrZ3JvdW5kLFxuICAgIGZvcmVncm91bmQ6IGNvbnRleHQuY29sb3JzLmZvcmVncm91bmQsXG4gICAgbXV0ZWQ6IGNvbnRleHQuY29sb3JzLm11dGVkLFxuICAgIGJvcmRlcjogY29udGV4dC5jb2xvcnMuYm9yZGVyLFxuICAgIHRhZ2xpbmU6IGNvbnRleHQudGFnbGluZSxcbiAgICB3ZWJzaXRlOiBjb250ZXh0LmxpbmtzLndlYnNpdGUsXG4gICAgLi4uKGlzUmVuZGVyYWJsZUltYWdlVXJsKGxvZ28pID8geyBsb2dvVXJsOiBsb2dvIH0gOiB7fSksXG4gIH07XG59O1xuXG4vKiogVGhlIHJlcG9zaXRvcnkgYnJhbmQgdXNlZCBieSBldmVyeSBlbWFpbCB1bmxlc3MgZXhwbGljaXRseSBvdmVycmlkZGVuLiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRFbWFpbEJyYW5kOiBFbWFpbEJyYW5kID0gZW1haWxCcmFuZEZyb21Db250ZXh0KGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHQpO1xuXG4vKiogTWVyZ2UgYSBwYXJ0aWFsIGNvbnN1bWVyIGJyYW5kIG92ZXIgdGhlIHJlcG9zaXRvcnkgZGVmYXVsdC4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlRW1haWxCcmFuZCA9IChpbnB1dD86IEVtYWlsQnJhbmQpOiBSZXNvbHZlZEVtYWlsQnJhbmQgPT4ge1xuICBjb25zdCBtZXJnZWQgPSB7IC4uLmRlZmF1bHRFbWFpbEJyYW5kLCAuLi5pbnB1dCB9O1xuICByZXR1cm4ge1xuICAgIGFjY2VudDogbWVyZ2VkLmFjY2VudCxcbiAgICBvbkFjY2VudDogbWVyZ2VkLm9uQWNjZW50ID8/IFwiI2ZmZmZmZlwiLFxuICAgIGZvbnRGYW1pbHk6IG1lcmdlZC5mb250RmFtaWx5LFxuICAgIG5hbWU6IG1lcmdlZC5uYW1lID8/IGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHQubmFtZSxcbiAgICBiYWNrZ3JvdW5kOiBtZXJnZWQuYmFja2dyb3VuZCA/PyBicmFuZC5kZWZhdWx0QnJhbmRDb250ZXh0LmNvbG9ycy5zdXJmYWNlLFxuICAgIHN1cmZhY2U6IG1lcmdlZC5zdXJmYWNlID8/IGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHQuY29sb3JzLmJhY2tncm91bmQsXG4gICAgZm9yZWdyb3VuZDogbWVyZ2VkLmZvcmVncm91bmQgPz8gYnJhbmQuZGVmYXVsdEJyYW5kQ29udGV4dC5jb2xvcnMuZm9yZWdyb3VuZCxcbiAgICBtdXRlZDogbWVyZ2VkLm11dGVkID8/IGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHQuY29sb3JzLm11dGVkLFxuICAgIGJvcmRlcjogbWVyZ2VkLmJvcmRlciA/PyBicmFuZC5kZWZhdWx0QnJhbmRDb250ZXh0LmNvbG9ycy5ib3JkZXIsXG4gICAgdGFnbGluZTogbWVyZ2VkLnRhZ2xpbmUgPz8gYnJhbmQuZGVmYXVsdEJyYW5kQ29udGV4dC50YWdsaW5lLFxuICAgIC4uLihtZXJnZWQubG9nb1VybCA/IHsgbG9nb1VybDogbWVyZ2VkLmxvZ29VcmwgfSA6IHt9KSxcbiAgICAuLi4obWVyZ2VkLndlYnNpdGUgPyB7IHdlYnNpdGU6IG1lcmdlZC53ZWJzaXRlIH0gOiB7fSksXG4gIH07XG59O1xuXG4vKiogTm9ybWFsaXplIGluZGVudGF0aW9uIGluIGF1dGhvcmVkIGNvbnRlbnQgd2l0aG91dCBjb25zdHJhaW5pbmcgaXRzIHN0cnVjdHVyZS4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVFbWFpbE1hcmtkb3duID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsaW5lcyA9IHZhbHVlLnJlcGxhY2UoL1xcclxcbj8vZywgXCJcXG5cIikuc3BsaXQoXCJcXG5cIik7XG4gIHdoaWxlIChsaW5lc1swXT8udHJpbSgpID09PSBcIlwiKSBsaW5lcy5zaGlmdCgpO1xuICB3aGlsZSAobGluZXMuYXQoLTEpPy50cmltKCkgPT09IFwiXCIpIGxpbmVzLnBvcCgpO1xuICBjb25zdCBub25CbGFuayA9IGxpbmVzLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkubGVuZ3RoID4gMCk7XG4gIGNvbnN0IGluZGVudCA9IG5vbkJsYW5rLnJlZHVjZSgobWluaW11bSwgbGluZSkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gbGluZS5tYXRjaCgvXlxccyovKT8uWzBdLmxlbmd0aCA/PyAwO1xuICAgIHJldHVybiBNYXRoLm1pbihtaW5pbXVtLCB3aWR0aCk7XG4gIH0sIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGluZGVudCkgfHwgaW5kZW50ID09PSAwKSByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbiAgcmV0dXJuIGxpbmVzLm1hcCgobGluZSkgPT4gbGluZS5zbGljZShNYXRoLm1pbihpbmRlbnQsIGxpbmUubGVuZ3RoKSkpLmpvaW4oXCJcXG5cIik7XG59O1xuXG4vKiogUHJvcHMgZm9yIHRoZSByZXVzYWJsZSBtZXNzYWdlLWJvZHkgY29tcG9uZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEJvZHlQcm9wcyB7XG4gIGJvZHk6IHN0cmluZztcbiAgYnJhbmQ/OiBFbWFpbEJyYW5kO1xufVxuXG4vKiogUmVuZGVyIHJpY2ggbWVzc2FnZSBjb250ZW50IHdpdGggZW1haWwtY2xpZW50LXNhZmUgaW5saW5lIHN0eWxlcy4gKi9cbmV4cG9ydCBjb25zdCBFbWFpbEJvZHkgPSAoeyBib2R5LCBicmFuZDogYnJhbmRJbnB1dCB9OiBFbWFpbEJvZHlQcm9wcykgPT4ge1xuICBjb25zdCB0aGVtZSA9IHJlc29sdmVFbWFpbEJyYW5kKGJyYW5kSW5wdXQpO1xuICByZXR1cm4gKFxuICAgIDxNYXJrZG93blxuICAgICAgbWFya2Rvd25Db250YWluZXJTdHlsZXM9e3tcbiAgICAgICAgY29sb3I6IHRoZW1lLmZvcmVncm91bmQsXG4gICAgICAgIGZvbnRGYW1pbHk6IHRoZW1lLmZvbnRGYW1pbHksXG4gICAgICAgIGZvbnRTaXplOiBcIjE1cHhcIixcbiAgICAgICAgbGluZUhlaWdodDogXCIxLjY1XCIsXG4gICAgICB9fVxuICAgICAgbWFya2Rvd25DdXN0b21TdHlsZXM9e3tcbiAgICAgICAgaDE6IHsgY29sb3I6IHRoZW1lLmZvcmVncm91bmQsIGZvbnRTaXplOiBcIjMwcHhcIiwgbGluZUhlaWdodDogXCIxLjJcIiwgbWFyZ2luOiBcIjAgMCAyMHB4XCIgfSxcbiAgICAgICAgaDI6IHsgY29sb3I6IHRoZW1lLmZvcmVncm91bmQsIGZvbnRTaXplOiBcIjIzcHhcIiwgbGluZUhlaWdodDogXCIxLjNcIiwgbWFyZ2luOiBcIjI4cHggMCAxMnB4XCIgfSxcbiAgICAgICAgaDM6IHsgY29sb3I6IHRoZW1lLmZvcmVncm91bmQsIGZvbnRTaXplOiBcIjE4cHhcIiwgbGluZUhlaWdodDogXCIxLjRcIiwgbWFyZ2luOiBcIjI0cHggMCAxMHB4XCIgfSxcbiAgICAgICAgcDogeyBtYXJnaW46IFwiMCAwIDE2cHhcIiB9LFxuICAgICAgICBsaW5rOiB7IGNvbG9yOiB0aGVtZS5hY2NlbnQsIGZvbnRXZWlnaHQ6IDYwMCwgdGV4dERlY29yYXRpb246IFwidW5kZXJsaW5lXCIgfSxcbiAgICAgICAgYmxvY2tRdW90ZToge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUuYmFja2dyb3VuZCxcbiAgICAgICAgICBib3JkZXJMZWZ0OiBgNHB4IHNvbGlkICR7dGhlbWUuYWNjZW50fWAsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjAgMTBweCAxMHB4IDBcIixcbiAgICAgICAgICBjb2xvcjogdGhlbWUuZm9yZWdyb3VuZCxcbiAgICAgICAgICBtYXJnaW46IFwiMjBweCAwXCIsXG4gICAgICAgICAgcGFkZGluZzogXCIxNHB4IDE4cHhcIixcbiAgICAgICAgfSxcbiAgICAgICAgY29kZUlubGluZToge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUuYmFja2dyb3VuZCxcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG4gICAgICAgICAgY29sb3I6IHRoZW1lLmZvcmVncm91bmQsXG4gICAgICAgICAgZm9udEZhbWlseTogYnJhbmQuZGVmYXVsdEJyYW5kQ29udGV4dC50eXBvZ3JhcGh5Lm1vbm8sXG4gICAgICAgICAgZm9udFNpemU6IFwiMTNweFwiLFxuICAgICAgICAgIHBhZGRpbmc6IFwiMnB4IDVweFwiLFxuICAgICAgICB9LFxuICAgICAgICBjb2RlQmxvY2s6IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLmZvcmVncm91bmQsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjEwcHhcIixcbiAgICAgICAgICBjb2xvcjogdGhlbWUuc3VyZmFjZSxcbiAgICAgICAgICBmb250RmFtaWx5OiBicmFuZC5kZWZhdWx0QnJhbmRDb250ZXh0LnR5cG9ncmFwaHkubW9ubyxcbiAgICAgICAgICBmb250U2l6ZTogXCIxM3B4XCIsXG4gICAgICAgICAgbGluZUhlaWdodDogXCIxLjU1XCIsXG4gICAgICAgICAgbWFyZ2luOiBcIjIwcHggMFwiLFxuICAgICAgICAgIHBhZGRpbmc6IFwiMTZweFwiLFxuICAgICAgICB9LFxuICAgICAgICBocjogeyBib3JkZXJDb2xvcjogdGhlbWUuYm9yZGVyLCBtYXJnaW46IFwiMjhweCAwXCIgfSxcbiAgICAgICAgaW1hZ2U6IHsgYm9yZGVyUmFkaXVzOiBcIjEwcHhcIiwgaGVpZ2h0OiBcImF1dG9cIiwgbWF4V2lkdGg6IFwiMTAwJVwiIH0sXG4gICAgICAgIGxpOiB7IG1hcmdpbjogXCI2cHggMFwiIH0sXG4gICAgICAgIHRhYmxlOiB7IGJvcmRlckNvbGxhcHNlOiBcImNvbGxhcHNlXCIsIG1hcmdpbjogXCIyMHB4IDBcIiwgd2lkdGg6IFwiMTAwJVwiIH0sXG4gICAgICAgIHRoOiB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5iYWNrZ3JvdW5kLFxuICAgICAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoZW1lLmJvcmRlcn1gLFxuICAgICAgICAgIHBhZGRpbmc6IFwiOXB4IDEycHhcIixcbiAgICAgICAgICB0ZXh0QWxpZ246IFwibGVmdFwiLFxuICAgICAgICB9LFxuICAgICAgICB0ZDoge1xuICAgICAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoZW1lLmJvcmRlcn1gLFxuICAgICAgICAgIHBhZGRpbmc6IFwiOXB4IDEycHhcIixcbiAgICAgICAgICB0ZXh0QWxpZ246IFwibGVmdFwiLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7bm9ybWFsaXplRW1haWxNYXJrZG93bihib2R5KX1cbiAgICA8L01hcmtkb3duPlxuICApO1xufTtcblxuLyoqIFByb3BzIGZvciB0aGUgY29tcGxldGUgUmVhY3QgRW1haWwgZG9jdW1lbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsRG9jdW1lbnRQcm9wcyBleHRlbmRzIEVtYWlsQm9keVByb3BzIHtcbiAgc3ViamVjdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFZpc2libGUgaGVhZGluZyBpbnNpZGUgdGhlIGVtYWlsIGNhcmQuIERlZmF1bHRzIHRvIHRoZSBzdWJqZWN0IHNvIG9yZGluYXJ5XG4gICAqIG1lc3NhZ2VzIGtlZXAgdGhlaXIgZXhpc3RpbmcgcHJlc2VudGF0aW9uIHdoaWxlIGNhbGxlcnMgbWF5IHVzZSBhIHNob3J0ZXJcbiAgICogaGVhZGluZyB3aGVuIHRoZSB0cmFuc3BvcnQgc3ViamVjdCBjb250YWlucyBub3RpZmljYXRpb24tc3BlY2lmaWMgZGV0YWlscy5cbiAgICovXG4gIGhlYWRpbmc/OiBzdHJpbmc7XG4gIGhlYWRlcnM/OiBSZWFkb25seUFycmF5PHJlYWRvbmx5IFtzdHJpbmcsIHN0cmluZ10+O1xuICBmb290ZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcmVoZWFkZXIgdGV4dDogdGhlIHNuaXBwZXQgYSBjbGllbnQgc2hvd3MgbmV4dCB0byB0aGUgc3ViamVjdCBpbiBhIGxpc3QsIGFuZFxuICAgKiAtIHRoZSByZWFzb24gdGhpcyBpcyBhIHByb3AgLSB0aGUgdGV4dCBhIG1vYmlsZSBPUyBwdXRzIGluIHRoZSBQVVNIXG4gICAqIE5PVElGSUNBVElPTiBib2R5LlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3ViamVjdC4gU2V0IGl0IHdoZW4gdGhlIG5vdGlmaWNhdGlvbiBzaG91bGQgc2F5IHNvbWV0aGluZyB0aGVcbiAgICogc3ViamVjdCBkb2VzIG5vdC4gT25lLXRpbWUtY29kZSBtYWlsIGlzIHRoZSBjYXNlIHRoYXQgbW90aXZhdGVkIGl0OiBpT1MgcmVhZHNcbiAgICogYW4gaW5jb21pbmcgbm90aWZpY2F0aW9uJ3MgdGV4dCB0byBvZmZlciBhbiBhdXRvZmlsbCBjb2RlIChuYXRpdmVseSBmb3IgTWFpbFxuICAgKiBhbmQgTWVzc2FnZXMsIGFuZCBzaW5jZSBpT1MgMjYgZm9yIGFueSBhcHAncyBub3RpZmljYXRpb24sIEdtYWlsIGluY2x1ZGVkKSwgc29cbiAgICogYSBjb2RlIHRoYXQgYXBwZWFycyBvbmx5IGluIHRoZSBCT0RZIGlzIG5ldmVyIHNlZW4gLSB0aGUgbm90aWZpY2F0aW9uIGNhcnJpZXNcbiAgICogdGhlIHN1YmplY3QgYW5kIHRoaXMgc25pcHBldCwgbm90aGluZyBtb3JlLlxuICAgKi9cbiAgcHJldmlldz86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gQnJhbmRNYXJrKHsgdGhlbWUgfTogeyB0aGVtZTogUmVzb2x2ZWRFbWFpbEJyYW5kIH0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBpZiAodGhlbWUubG9nb1VybCkge1xuICAgIHJldHVybiAoXG4gICAgICA8SW1nXG4gICAgICAgIHNyYz17dGhlbWUubG9nb1VybH1cbiAgICAgICAgYWx0PXt0aGVtZS5uYW1lfVxuICAgICAgICBoZWlnaHQ9XCIzNFwiXG4gICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiYmxvY2tcIiwgaGVpZ2h0OiBcIjM0cHhcIiwgd2lkdGg6IFwiYXV0b1wiIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8VGV4dFxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgY29sb3I6IHRoZW1lLm9uQWNjZW50LFxuICAgICAgICBmb250U2l6ZTogXCIyMHB4XCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IDgwMCxcbiAgICAgICAgbGV0dGVyU3BhY2luZzogXCItMC4zcHhcIixcbiAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7dGhlbWUubmFtZX1cbiAgICA8L1RleHQ+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEVudmVsb3BlSGVhZGVycyh7XG4gIGhlYWRlcnMsXG4gIHRoZW1lLFxufToge1xuICBoZWFkZXJzOiBFbWFpbERvY3VtZW50UHJvcHNbXCJoZWFkZXJzXCJdO1xuICB0aGVtZTogUmVzb2x2ZWRFbWFpbEJyYW5kO1xufSkge1xuICBpZiAoIWhlYWRlcnM/Lmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiAoXG4gICAgPFNlY3Rpb25cbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUuYmFja2dyb3VuZCxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjEwcHhcIixcbiAgICAgICAgbWFyZ2luOiBcIjAgMCAyNHB4XCIsXG4gICAgICAgIHBhZGRpbmc6IFwiMTRweCAxNnB4XCIsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtoZWFkZXJzLm1hcCgoW2xhYmVsLCB2YWx1ZV0pID0+IChcbiAgICAgICAgPFJvdyBrZXk9e2Ake2xhYmVsfToke3ZhbHVlfWB9PlxuICAgICAgICAgIDxDb2x1bW5cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGNvbG9yOiB0aGVtZS5tdXRlZCxcbiAgICAgICAgICAgICAgZm9udFNpemU6IFwiMTJweFwiLFxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiA3MDAsXG4gICAgICAgICAgICAgIHBhZGRpbmc6IFwiM3B4IDEycHggM3B4IDBcIixcbiAgICAgICAgICAgICAgd2lkdGg6IFwiNzBweFwiLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9Db2x1bW4+XG4gICAgICAgICAgPENvbHVtbiBzdHlsZT17eyBjb2xvcjogdGhlbWUuZm9yZWdyb3VuZCwgZm9udFNpemU6IFwiMTNweFwiLCBwYWRkaW5nOiBcIjNweCAwXCIgfX0+XG4gICAgICAgICAgICB7dmFsdWV9XG4gICAgICAgICAgPC9Db2x1bW4+XG4gICAgICAgIDwvUm93PlxuICAgICAgKSl9XG4gICAgPC9TZWN0aW9uPlxuICApO1xufVxuXG4vKiogQnJhbmRlZCBtZXNzYWdlIGNhcmQgc2hhcmVkIGJ5IHRoZSBmdWxsIGRvY3VtZW50IGFuZCBicm93c2VyIHByZXZpZXdzLiAqL1xuZXhwb3J0IGNvbnN0IEVtYWlsQ2FyZCA9ICh7XG4gIGJvZHksXG4gIHN1YmplY3QgPSBcIk1lc3NhZ2VcIixcbiAgaGVhZGluZyxcbiAgaGVhZGVycyxcbiAgZm9vdGVyLFxuICBicmFuZDogYnJhbmRJbnB1dCxcbn06IEVtYWlsRG9jdW1lbnRQcm9wcykgPT4ge1xuICBjb25zdCB0aGVtZSA9IHJlc29sdmVFbWFpbEJyYW5kKGJyYW5kSW5wdXQpO1xuICByZXR1cm4gKFxuICAgIDxDb250YWluZXJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUuc3VyZmFjZSxcbiAgICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhlbWUuYm9yZGVyfWAsXG4gICAgICAgIGJvcmRlclJhZGl1czogXCIxNnB4XCIsXG4gICAgICAgIGJveFNoYWRvdzogXCIwIDhweCAzMHB4IHJnYmEoMjcsNDksNTcsMC4wOClcIixcbiAgICAgICAgZm9udEZhbWlseTogdGhlbWUuZm9udEZhbWlseSxcbiAgICAgICAgbWFyZ2luOiBcIjAgYXV0b1wiLFxuICAgICAgICBtYXhXaWR0aDogXCI2MjBweFwiLFxuICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgIH19XG4gICAgPlxuICAgICAgPFNlY3Rpb24gc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5hY2NlbnQsIHBhZGRpbmc6IFwiMjJweCAzMHB4XCIgfX0+XG4gICAgICAgIDxCcmFuZE1hcmsgdGhlbWU9e3RoZW1lfSAvPlxuICAgICAgPC9TZWN0aW9uPlxuICAgICAgPFNlY3Rpb24gc3R5bGU9e3sgcGFkZGluZzogXCIzNHB4IDM0cHggMjRweFwiIH19PlxuICAgICAgICA8SGVhZGluZ1xuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBjb2xvcjogdGhlbWUuZm9yZWdyb3VuZCxcbiAgICAgICAgICAgIGZvbnRTaXplOiBcIjI4cHhcIixcbiAgICAgICAgICAgIGxldHRlclNwYWNpbmc6IFwiLTAuNXB4XCIsXG4gICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjEuMlwiLFxuICAgICAgICAgICAgbWFyZ2luOiBcIjAgMCAyNHB4XCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHtoZWFkaW5nID8/IHN1YmplY3R9XG4gICAgICAgIDwvSGVhZGluZz5cbiAgICAgICAgPEVudmVsb3BlSGVhZGVycyBoZWFkZXJzPXtoZWFkZXJzfSB0aGVtZT17dGhlbWV9IC8+XG4gICAgICAgIDxFbWFpbEJvZHkgYm9keT17Ym9keX0gYnJhbmQ9e3RoZW1lfSAvPlxuICAgICAgPC9TZWN0aW9uPlxuICAgICAgPEhyIHN0eWxlPXt7IGJvcmRlckNvbG9yOiB0aGVtZS5ib3JkZXIsIG1hcmdpbjogMCB9fSAvPlxuICAgICAgPFNlY3Rpb24gc3R5bGU9e3sgcGFkZGluZzogXCIyMHB4IDM0cHggMjZweFwiIH19PlxuICAgICAgICA8VGV4dFxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBjb2xvcjogdGhlbWUubXV0ZWQsXG4gICAgICAgICAgICBmb250U2l6ZTogXCIxMnB4XCIsXG4gICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjEuNTVcIixcbiAgICAgICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge2Zvb3RlciA/PyB0aGVtZS50YWdsaW5lfXtcIiBcIn1cbiAgICAgICAgICB7dGhlbWUud2Vic2l0ZSA/IChcbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIGhyZWY9e3RoZW1lLndlYnNpdGV9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgY29sb3I6IHRoZW1lLmFjY2VudCxcbiAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbjogXCJub25lXCIsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0aGVtZS5uYW1lfVxuICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1NlY3Rpb24+XG4gICAgPC9Db250YWluZXI+XG4gICk7XG59O1xuXG4vKiogQ29tcGxldGUgcmVzcG9uc2l2ZSwgYnJhbmRlZCBSZWFjdCBFbWFpbCBkb2N1bWVudC4gKi9cbmV4cG9ydCBjb25zdCBFbWFpbERvY3VtZW50ID0gKHByb3BzOiBFbWFpbERvY3VtZW50UHJvcHMpID0+IHtcbiAgY29uc3QgdGhlbWUgPSByZXNvbHZlRW1haWxCcmFuZChwcm9wcy5icmFuZCk7XG4gIGNvbnN0IHBhZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLmJhY2tncm91bmQsXG4gICAgZm9udEZhbWlseTogdGhlbWUuZm9udEZhbWlseSxcbiAgICBtYXJnaW46IDAsXG4gICAgcGFkZGluZzogXCIyOHB4IDEycHhcIixcbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8SHRtbCBsYW5nPVwiZW5cIj5cbiAgICAgIDxIZWFkIC8+XG4gICAgICA8UHJldmlldz57cHJvcHMucHJldmlldyA/PyBwcm9wcy5zdWJqZWN0ID8/IFwiTWVzc2FnZVwifTwvUHJldmlldz5cbiAgICAgIDxCb2R5IHN0eWxlPXtwYWdlU3R5bGV9PlxuICAgICAgICA8RW1haWxDYXJkIHsuLi5wcm9wc30gLz5cbiAgICAgIDwvQm9keT5cbiAgICA8L0h0bWw+XG4gICk7XG59O1xuIl19
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxLQUFLLEVBQXFCLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUNMLElBQUksRUFDSixNQUFNLEVBQ04sU0FBUyxFQUNULElBQUksRUFDSixPQUFPLEVBQ1AsRUFBRSxFQUNGLElBQUksRUFDSixHQUFHLEVBQ0gsSUFBSSxFQUNKLFFBQVEsRUFDUixPQUFPLEVBQ1AsR0FBRyxFQUNILE9BQU8sRUFDUCxJQUFJLEdBQ0wsTUFBTSx5QkFBeUIsQ0FBQztBQXFDakMsU0FBUyxvQkFBb0IsQ0FBQyxLQUF5QjtJQUNyRCxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLE9BQXFCLEVBQWMsRUFBRTtJQUN6RSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ25FLE9BQU87UUFDTCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPO1FBQzlCLFFBQVEsRUFBRSxTQUFTO1FBQ25CLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUk7UUFDbkMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU87UUFDbEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVTtRQUNsQyxVQUFVLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ3JDLEtB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QUFNOzZCQUN2QixZQUVBLEtBQUssQ0FBQyxJQUFJLEdBQ04sQ0FDUixDQUFDLENBQUMsQ0FBQyxJQUFJLElBQ0gsR0FDQyxJQUNBLENBQ2IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUF5QixFQUFFLEVBQUU7SUFDekQsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE1BQU0sU0FBUyxHQUF3QjtRQUNyQyxlQUFlLEVBQUUsS0FBSyxDQUFDLFVBQVU7UUFDakMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1FBQzVCLE1BQU0sRUFBRSxDQUFDO1FBQ1QsT0FBTyxFQUFFLFdBQVc7S0FDckIsQ0FBQztJQUNGLE9BQU8sQ0FDTCxNQUFDLElBQUksSUFBQyxJQUFJLEVBQUMsSUFBSSxhQUNiLEtBQUMsSUFBSSxLQUFHLEVBQ1IsS0FBQyxPQUFPLGNBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsR0FBVyxFQUNoRSxLQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsU0FBUyxZQUNwQixLQUFDLFNBQVMsT0FBSyxLQUFLLEdBQUksR0FDbkIsSUFDRixDQUNSLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaXZlcnNhbCBSZWFjdCBFbWFpbCBwcmVzZW50YXRpb24gZm9yIGRieC10b29scyBlbWFpbCBmbG93cy5cbiAqXG4gKiBUaGUgZG9jdW1lbnQgY29tcG9uZW50IHJlbmRlcnMgb24gdGhlIHNlcnZlciB0aHJvdWdoIGBAcmVhY3QtZW1haWwvcmVuZGVyYDtcbiAqIHRoZSBib2R5IGNvbXBvbmVudCBpcyByZXVzZWQgZGlyZWN0bHkgYnkgYnJvd3NlciBhcHByb3ZhbCBhbmQgY29tcG9zZSB2aWV3cy5cbiAqIEJvdGggZGVmYXVsdCB0byB0aGUgcmVwb3NpdG9yeSBicmFuZCB3aGlsZSBhY2NlcHRpbmcgYSBjb25zdW1lciBvdmVycmlkZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGJyYW5kLCB0eXBlIEJyYW5kQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBCb2R5LFxuICBDb2x1bW4sXG4gIENvbnRhaW5lcixcbiAgSGVhZCxcbiAgSGVhZGluZyxcbiAgSHIsXG4gIEh0bWwsXG4gIEltZyxcbiAgTGluayxcbiAgTWFya2Rvd24sXG4gIFByZXZpZXcsXG4gIFJvdyxcbiAgU2VjdGlvbixcbiAgVGV4dCxcbn0gZnJvbSBcIkByZWFjdC1lbWFpbC9jb21wb25lbnRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuLyoqIEVtYWlsLXNhZmUgYnJhbmQgdmFsdWVzIHVzZWQgYnkgdGhlIFJlYWN0IEVtYWlsIHRlbXBsYXRlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEJyYW5kIHtcbiAgYWNjZW50OiBzdHJpbmc7XG4gIG9uQWNjZW50Pzogc3RyaW5nO1xuICBmb250RmFtaWx5OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGxvZ29Vcmw/OiBzdHJpbmc7XG4gIGJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHN1cmZhY2U/OiBzdHJpbmc7XG4gIGZvcmVncm91bmQ/OiBzdHJpbmc7XG4gIG11dGVkPzogc3RyaW5nO1xuICBib3JkZXI/OiBzdHJpbmc7XG4gIHRhZ2xpbmU/OiBzdHJpbmc7XG4gIHdlYnNpdGU/OiBzdHJpbmc7XG59XG5cbi8qKiBDb21wbGV0ZSB2YWx1ZXMgYWZ0ZXIgYXBwbHlpbmcgdGhlIGRieC10b29scyBkZWZhdWx0IGJyYW5kLiAqL1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRFbWFpbEJyYW5kID0gUmVxdWlyZWQ8XG4gIFBpY2s8XG4gICAgRW1haWxCcmFuZCxcbiAgICB8IFwiYWNjZW50XCJcbiAgICB8IFwib25BY2NlbnRcIlxuICAgIHwgXCJmb250RmFtaWx5XCJcbiAgICB8IFwibmFtZVwiXG4gICAgfCBcImJhY2tncm91bmRcIlxuICAgIHwgXCJzdXJmYWNlXCJcbiAgICB8IFwiZm9yZWdyb3VuZFwiXG4gICAgfCBcIm11dGVkXCJcbiAgICB8IFwiYm9yZGVyXCJcbiAgICB8IFwidGFnbGluZVwiXG4gID5cbj4gJlxuICBQaWNrPEVtYWlsQnJhbmQsIFwibG9nb1VybFwiIHwgXCJ3ZWJzaXRlXCI+O1xuXG5mdW5jdGlvbiBpc1JlbmRlcmFibGVJbWFnZVVybCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdmFsdWUgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAvXig/Omh0dHBzPzp8ZGF0YTp8Y2lkOikvaS50ZXN0KHZhbHVlKTtcbn1cblxuLyoqIFByb2plY3QgYSBwb3J0YWJsZSBicmFuZCBjb250ZXh0IGludG8gZW1haWwtc2FmZSB2YWx1ZXMuICovXG5leHBvcnQgY29uc3QgZW1haWxCcmFuZEZyb21Db250ZXh0ID0gKGNvbnRleHQ6IEJyYW5kQ29udGV4dCk6IEVtYWlsQnJhbmQgPT4ge1xuICBjb25zdCBsb2dvID0gY29udGV4dC5hc3NldHMubG9nby5kYXJrID8/IGNvbnRleHQuYXNzZXRzLmxvZ28ubGlnaHQ7XG4gIHJldHVybiB7XG4gICAgYWNjZW50OiBjb250ZXh0LmNvbG9ycy5wcmltYXJ5LFxuICAgIG9uQWNjZW50OiBcIiNmZmZmZmZcIixcbiAgICBmb250RmFtaWx5OiBjb250ZXh0LnR5cG9ncmFwaHkuc2FucyxcbiAgICBuYW1lOiBjb250ZXh0Lm5hbWUsXG4gICAgYmFja2dyb3VuZDogY29udGV4dC5jb2xvcnMuc3VyZmFjZSxcbiAgICBzdXJmYWNlOiBjb250ZXh0LmNvbG9ycy5iYWNrZ3JvdW5kLFxuICAgIGZvcmVncm91bmQ6IGNvbnRleHQuY29sb3JzLmZvcmVncm91bmQsXG4gICAgbXV0ZWQ6IGNvbnRleHQuY29sb3JzLm11dGVkLFxuICAgIGJvcmRlcjogY29udGV4dC5jb2xvcnMuYm9yZGVyLFxuICAgIHRhZ2xpbmU6IGNvbnRleHQudGFnbGluZSxcbiAgICB3ZWJzaXRlOiBjb250ZXh0LmxpbmtzLndlYnNpdGUsXG4gICAgLi4uKGlzUmVuZGVyYWJsZUltYWdlVXJsKGxvZ28pID8geyBsb2dvVXJsOiBsb2dvIH0gOiB7fSksXG4gIH07XG59O1xuXG4vKiogVGhlIHJlcG9zaXRvcnkgYnJhbmQgdXNlZCBieSBldmVyeSBlbWFpbCB1bmxlc3MgZXhwbGljaXRseSBvdmVycmlkZGVuLiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRFbWFpbEJyYW5kOiBFbWFpbEJyYW5kID0gZW1haWxCcmFuZEZyb21Db250ZXh0KGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHQpO1xuXG4vKiogTWVyZ2UgYSBwYXJ0aWFsIGNvbnN1bWVyIGJyYW5kIG92ZXIgdGhlIHJlcG9zaXRvcnkgZGVmYXVsdC4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlRW1haWxCcmFuZCA9IChpbnB1dD86IEVtYWlsQnJhbmQpOiBSZXNvbHZlZEVtYWlsQnJhbmQgPT4ge1xuICBjb25zdCBtZXJnZWQgPSB7IC4uLmRlZmF1bHRFbWFpbEJyYW5kLCAuLi5pbnB1dCB9O1xuICByZXR1cm4ge1xuICAgIGFjY2VudDogbWVyZ2VkLmFjY2VudCxcbiAgICBvbkFjY2VudDogbWVyZ2VkLm9uQWNjZW50ID8/IFwiI2ZmZmZmZlwiLFxuICAgIGZvbnRGYW1pbHk6IG1lcmdlZC5mb250RmFtaWx5LFxuICAgIG5hbWU6IG1lcmdlZC5uYW1lID8/IGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHQubmFtZSxcbiAgICBiYWNrZ3JvdW5kOiBtZXJnZWQuYmFja2dyb3VuZCA/PyBicmFuZC5kZWZhdWx0QnJhbmRDb250ZXh0LmNvbG9ycy5zdXJmYWNlLFxuICAgIHN1cmZhY2U6IG1lcmdlZC5zdXJmYWNlID8/IGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHQuY29sb3JzLmJhY2tncm91bmQsXG4gICAgZm9yZWdyb3VuZDogbWVyZ2VkLmZvcmVncm91bmQgPz8gYnJhbmQuZGVmYXVsdEJyYW5kQ29udGV4dC5jb2xvcnMuZm9yZWdyb3VuZCxcbiAgICBtdXRlZDogbWVyZ2VkLm11dGVkID8/IGJyYW5kLmRlZmF1bHRCcmFuZENvbnRleHQuY29sb3JzLm11dGVkLFxuICAgIGJvcmRlcjogbWVyZ2VkLmJvcmRlciA/PyBicmFuZC5kZWZhdWx0QnJhbmRDb250ZXh0LmNvbG9ycy5ib3JkZXIsXG4gICAgdGFnbGluZTogbWVyZ2VkLnRhZ2xpbmUgPz8gYnJhbmQuZGVmYXVsdEJyYW5kQ29udGV4dC50YWdsaW5lLFxuICAgIC4uLihtZXJnZWQubG9nb1VybCA/IHsgbG9nb1VybDogbWVyZ2VkLmxvZ29VcmwgfSA6IHt9KSxcbiAgICAuLi4obWVyZ2VkLndlYnNpdGUgPyB7IHdlYnNpdGU6IG1lcmdlZC53ZWJzaXRlIH0gOiB7fSksXG4gIH07XG59O1xuXG4vKiogTm9ybWFsaXplIGluZGVudGF0aW9uIGluIGF1dGhvcmVkIGNvbnRlbnQgd2l0aG91dCBjb25zdHJhaW5pbmcgaXRzIHN0cnVjdHVyZS4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVFbWFpbE1hcmtkb3duID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsaW5lcyA9IHZhbHVlLnJlcGxhY2UoL1xcclxcbj8vZywgXCJcXG5cIikuc3BsaXQoXCJcXG5cIik7XG4gIHdoaWxlIChsaW5lc1swXT8udHJpbSgpID09PSBcIlwiKSBsaW5lcy5zaGlmdCgpO1xuICB3aGlsZSAobGluZXMuYXQoLTEpPy50cmltKCkgPT09IFwiXCIpIGxpbmVzLnBvcCgpO1xuICBjb25zdCBub25CbGFuayA9IGxpbmVzLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkubGVuZ3RoID4gMCk7XG4gIGNvbnN0IGluZGVudCA9IG5vbkJsYW5rLnJlZHVjZSgobWluaW11bSwgbGluZSkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gbGluZS5tYXRjaCgvXlxccyovKT8uWzBdLmxlbmd0aCA/PyAwO1xuICAgIHJldHVybiBNYXRoLm1pbihtaW5pbXVtLCB3aWR0aCk7XG4gIH0sIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGluZGVudCkgfHwgaW5kZW50ID09PSAwKSByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbiAgcmV0dXJuIGxpbmVzLm1hcCgobGluZSkgPT4gbGluZS5zbGljZShNYXRoLm1pbihpbmRlbnQsIGxpbmUubGVuZ3RoKSkpLmpvaW4oXCJcXG5cIik7XG59O1xuXG4vKiogUHJvcHMgZm9yIHRoZSByZXVzYWJsZSBtZXNzYWdlLWJvZHkgY29tcG9uZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEJvZHlQcm9wcyB7XG4gIGJvZHk6IHN0cmluZztcbiAgYnJhbmQ/OiBFbWFpbEJyYW5kO1xufVxuXG4vKiogUmVuZGVyIHJpY2ggbWVzc2FnZSBjb250ZW50IHdpdGggZW1haWwtY2xpZW50LXNhZmUgaW5saW5lIHN0eWxlcy4gKi9cbmV4cG9ydCBjb25zdCBFbWFpbEJvZHkgPSAoeyBib2R5LCBicmFuZDogYnJhbmRJbnB1dCB9OiBFbWFpbEJvZHlQcm9wcykgPT4ge1xuICBjb25zdCB0aGVtZSA9IHJlc29sdmVFbWFpbEJyYW5kKGJyYW5kSW5wdXQpO1xuICByZXR1cm4gKFxuICAgIDxNYXJrZG93blxuICAgICAgbWFya2Rvd25Db250YWluZXJTdHlsZXM9e3tcbiAgICAgICAgY29sb3I6IHRoZW1lLmZvcmVncm91bmQsXG4gICAgICAgIGZvbnRGYW1pbHk6IHRoZW1lLmZvbnRGYW1pbHksXG4gICAgICAgIGZvbnRTaXplOiBcIjE1cHhcIixcbiAgICAgICAgbGluZUhlaWdodDogXCIxLjY1XCIsXG4gICAgICB9fVxuICAgICAgbWFya2Rvd25DdXN0b21TdHlsZXM9e3tcbiAgICAgICAgaDE6IHsgY29sb3I6IHRoZW1lLmZvcmVncm91bmQsIGZvbnRTaXplOiBcIjMwcHhcIiwgbGluZUhlaWdodDogXCIxLjJcIiwgbWFyZ2luOiBcIjAgMCAyMHB4XCIgfSxcbiAgICAgICAgaDI6IHsgY29sb3I6IHRoZW1lLmZvcmVncm91bmQsIGZvbnRTaXplOiBcIjIzcHhcIiwgbGluZUhlaWdodDogXCIxLjNcIiwgbWFyZ2luOiBcIjI4cHggMCAxMnB4XCIgfSxcbiAgICAgICAgaDM6IHsgY29sb3I6IHRoZW1lLmZvcmVncm91bmQsIGZvbnRTaXplOiBcIjE4cHhcIiwgbGluZUhlaWdodDogXCIxLjRcIiwgbWFyZ2luOiBcIjI0cHggMCAxMHB4XCIgfSxcbiAgICAgICAgcDogeyBtYXJnaW46IFwiMCAwIDE2cHhcIiB9LFxuICAgICAgICBsaW5rOiB7IGNvbG9yOiB0aGVtZS5hY2NlbnQsIGZvbnRXZWlnaHQ6IDYwMCwgdGV4dERlY29yYXRpb246IFwidW5kZXJsaW5lXCIgfSxcbiAgICAgICAgYmxvY2tRdW90ZToge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUuYmFja2dyb3VuZCxcbiAgICAgICAgICBib3JkZXJMZWZ0OiBgNHB4IHNvbGlkICR7dGhlbWUuYWNjZW50fWAsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjAgMTBweCAxMHB4IDBcIixcbiAgICAgICAgICBjb2xvcjogdGhlbWUuZm9yZWdyb3VuZCxcbiAgICAgICAgICBtYXJnaW46IFwiMjBweCAwXCIsXG4gICAgICAgICAgcGFkZGluZzogXCIxNHB4IDE4cHhcIixcbiAgICAgICAgfSxcbiAgICAgICAgY29kZUlubGluZToge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUuYmFja2dyb3VuZCxcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG4gICAgICAgICAgY29sb3I6IHRoZW1lLmZvcmVncm91bmQsXG4gICAgICAgICAgZm9udEZhbWlseTogYnJhbmQuZGVmYXVsdEJyYW5kQ29udGV4dC50eXBvZ3JhcGh5Lm1vbm8sXG4gICAgICAgICAgZm9udFNpemU6IFwiMTNweFwiLFxuICAgICAgICAgIHBhZGRpbmc6IFwiMnB4IDVweFwiLFxuICAgICAgICB9LFxuICAgICAgICBjb2RlQmxvY2s6IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLmZvcmVncm91bmQsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjEwcHhcIixcbiAgICAgICAgICBjb2xvcjogdGhlbWUuc3VyZmFjZSxcbiAgICAgICAgICBmb250RmFtaWx5OiBicmFuZC5kZWZhdWx0QnJhbmRDb250ZXh0LnR5cG9ncmFwaHkubW9ubyxcbiAgICAgICAgICBmb250U2l6ZTogXCIxM3B4XCIsXG4gICAgICAgICAgbGluZUhlaWdodDogXCIxLjU1XCIsXG4gICAgICAgICAgbWFyZ2luOiBcIjIwcHggMFwiLFxuICAgICAgICAgIHBhZGRpbmc6IFwiMTZweFwiLFxuICAgICAgICB9LFxuICAgICAgICBocjogeyBib3JkZXJDb2xvcjogdGhlbWUuYm9yZGVyLCBtYXJnaW46IFwiMjhweCAwXCIgfSxcbiAgICAgICAgaW1hZ2U6IHsgYm9yZGVyUmFkaXVzOiBcIjEwcHhcIiwgaGVpZ2h0OiBcImF1dG9cIiwgbWF4V2lkdGg6IFwiMTAwJVwiIH0sXG4gICAgICAgIGxpOiB7IG1hcmdpbjogXCI2cHggMFwiIH0sXG4gICAgICAgIHRhYmxlOiB7IGJvcmRlckNvbGxhcHNlOiBcImNvbGxhcHNlXCIsIG1hcmdpbjogXCIyMHB4IDBcIiwgd2lkdGg6IFwiMTAwJVwiIH0sXG4gICAgICAgIHRoOiB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5iYWNrZ3JvdW5kLFxuICAgICAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoZW1lLmJvcmRlcn1gLFxuICAgICAgICAgIHBhZGRpbmc6IFwiOXB4IDEycHhcIixcbiAgICAgICAgICB0ZXh0QWxpZ246IFwibGVmdFwiLFxuICAgICAgICB9LFxuICAgICAgICB0ZDoge1xuICAgICAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoZW1lLmJvcmRlcn1gLFxuICAgICAgICAgIHBhZGRpbmc6IFwiOXB4IDEycHhcIixcbiAgICAgICAgICB0ZXh0QWxpZ246IFwibGVmdFwiLFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7bm9ybWFsaXplRW1haWxNYXJrZG93bihib2R5KX1cbiAgICA8L01hcmtkb3duPlxuICApO1xufTtcblxuLyoqIFByb3BzIGZvciB0aGUgY29tcGxldGUgUmVhY3QgRW1haWwgZG9jdW1lbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsRG9jdW1lbnRQcm9wcyBleHRlbmRzIEVtYWlsQm9keVByb3BzIHtcbiAgc3ViamVjdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFZpc2libGUgaGVhZGluZyBpbnNpZGUgdGhlIGVtYWlsIGNhcmQuIE9taXQgaXQgZm9yIG9yZGluYXJ5IG1lc3NhZ2VzIHNvIHRoZVxuICAgKiB0cmFuc3BvcnQgc3ViamVjdCBzdGF5cyBhIHRyYW5zcG9ydCBzdWJqZWN0IGFuZCBpcyBub3QgcmVwZWF0ZWQgYXMgYSBib2R5XG4gICAqIHRpdGxlLiBQYXNzIGEgc2hvcnRlciBoZWFkaW5nIHdoZW4gdGhlIHN1YmplY3QgY2FycmllcyBub3RpZmljYXRpb24tc3BlY2lmaWNcbiAgICogZGV0YWlscyAob25lLXRpbWUtY29kZSBtYWlsIGlzIHRoZSBtb3RpdmF0aW5nIGNhc2UpLlxuICAgKi9cbiAgaGVhZGluZz86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGVudmVsb3BlIHJvd3MgcmVuZGVyZWQgYWJvdmUgdGhlIGJvZHkgKEZyb20gLyBUbyAvIENjIC8g4oCmKS4gS2VwdCBmb3JcbiAgICogbG9jYWwgb3V0Ym94IHByZXZpZXdzIHRoYXQgZGVsaWJlcmF0ZWx5IHNob3cgdGhlIHdpcmUgZW52ZWxvcGU7IGRlbGl2ZXJlZFxuICAgKiBTTVRQIG1haWwgYW5kIGJyb3dzZXIgYXBwcm92YWwvY29tcG9zZSBwcmV2aWV3cyBsZWF2ZSB0aGlzIHVuc2V0IOKAlCB0aG9zZVxuICAgKiBzdXJmYWNlcyBwdXQgcmVjaXBpZW50cyBhbmQgYXR0YWNobWVudHMgaW4gY2xpZW50IGNocm9tZSBpbnN0ZWFkLlxuICAgKi9cbiAgaGVhZGVycz86IFJlYWRvbmx5QXJyYXk8cmVhZG9ubHkgW3N0cmluZywgc3RyaW5nXT47XG4gIGZvb3Rlcj86IHN0cmluZztcbiAgLyoqXG4gICAqIERyYXcgdGhlIGNhcmQncyBvd24gZnJhbWU6IHJvdW5kZWQgY29ybmVycywgYm9yZGVyLCBkcm9wIHNoYWRvdywgYW5kIHRoZVxuICAgKiA2MjBweCByZWFkaW5nIHdpZHRoLiBEZWxpdmVyZWQgbWFpbCBrZWVwcyBpdCwgYmVjYXVzZSB0aGUgY2FyZCBmbG9hdHMgb24gdGhlXG4gICAqIGNsaWVudCdzIHBhZ2UgYmFja2dyb3VuZCBhbmQgdGhlIGZyYW1lIGlzIHdoYXQgc2VwYXJhdGVzIHRoZSB0d28uXG4gICAqXG4gICAqIFR1cm4gaXQgb2ZmIHdoZW4gdGhlIGNhcmQgYWxyZWFkeSBzaXRzIGluc2lkZSBhIHN1cmZhY2UgdGhhdCBmcmFtZXMgaXQgLSBhXG4gICAqIGJyb3dzZXIgcHJldmlldydzIHJlYWRpbmcgcGFuZSAtIHNvIHRoZSB0d28gZnJhbWVzIGRvIG5vdCBuZXN0IGludG8gYSByb3VuZGVkXG4gICAqIGNhcmQgaW5zaWRlIGEgcm91bmRlZCBjYXJkLlxuICAgKi9cbiAgZnJhbWVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFByZWhlYWRlciB0ZXh0OiB0aGUgc25pcHBldCBhIGNsaWVudCBzaG93cyBuZXh0IHRvIHRoZSBzdWJqZWN0IGluIGEgbGlzdCwgYW5kXG4gICAqIC0gdGhlIHJlYXNvbiB0aGlzIGlzIGEgcHJvcCAtIHRoZSB0ZXh0IGEgbW9iaWxlIE9TIHB1dHMgaW4gdGhlIFBVU0hcbiAgICogTk9USUZJQ0FUSU9OIGJvZHkuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzdWJqZWN0LiBTZXQgaXQgd2hlbiB0aGUgbm90aWZpY2F0aW9uIHNob3VsZCBzYXkgc29tZXRoaW5nIHRoZVxuICAgKiBzdWJqZWN0IGRvZXMgbm90LiBPbmUtdGltZS1jb2RlIG1haWwgaXMgdGhlIGNhc2UgdGhhdCBtb3RpdmF0ZWQgaXQ6IGlPUyByZWFkc1xuICAgKiBhbiBpbmNvbWluZyBub3RpZmljYXRpb24ncyB0ZXh0IHRvIG9mZmVyIGFuIGF1dG9maWxsIGNvZGUgKG5hdGl2ZWx5IGZvciBNYWlsXG4gICAqIGFuZCBNZXNzYWdlcywgYW5kIHNpbmNlIGlPUyAyNiBmb3IgYW55IGFwcCdzIG5vdGlmaWNhdGlvbiwgR21haWwgaW5jbHVkZWQpLCBzb1xuICAgKiBhIGNvZGUgdGhhdCBhcHBlYXJzIG9ubHkgaW4gdGhlIEJPRFkgaXMgbmV2ZXIgc2VlbiAtIHRoZSBub3RpZmljYXRpb24gY2Fycmllc1xuICAgKiB0aGUgc3ViamVjdCBhbmQgdGhpcyBzbmlwcGV0LCBub3RoaW5nIG1vcmUuXG4gICAqL1xuICBwcmV2aWV3Pzogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBCcmFuZE1hcmsoeyB0aGVtZSB9OiB7IHRoZW1lOiBSZXNvbHZlZEVtYWlsQnJhbmQgfSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGlmICh0aGVtZS5sb2dvVXJsKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxJbWdcbiAgICAgICAgc3JjPXt0aGVtZS5sb2dvVXJsfVxuICAgICAgICBhbHQ9e3RoZW1lLm5hbWV9XG4gICAgICAgIGhlaWdodD1cIjM0XCJcbiAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogXCJibG9ja1wiLCBoZWlnaHQ6IFwiMzRweFwiLCB3aWR0aDogXCJhdXRvXCIgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxUZXh0XG4gICAgICBzdHlsZT17e1xuICAgICAgICBjb2xvcjogdGhlbWUub25BY2NlbnQsXG4gICAgICAgIGZvbnRTaXplOiBcIjIwcHhcIixcbiAgICAgICAgZm9udFdlaWdodDogODAwLFxuICAgICAgICBsZXR0ZXJTcGFjaW5nOiBcIi0wLjNweFwiLFxuICAgICAgICBtYXJnaW46IDAsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHt0aGVtZS5uYW1lfVxuICAgIDwvVGV4dD5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRW52ZWxvcGVIZWFkZXJzKHtcbiAgaGVhZGVycyxcbiAgdGhlbWUsXG59OiB7XG4gIGhlYWRlcnM6IEVtYWlsRG9jdW1lbnRQcm9wc1tcImhlYWRlcnNcIl07XG4gIHRoZW1lOiBSZXNvbHZlZEVtYWlsQnJhbmQ7XG59KSB7XG4gIGlmICghaGVhZGVycz8ubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIChcbiAgICA8U2VjdGlvblxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5iYWNrZ3JvdW5kLFxuICAgICAgICBib3JkZXJSYWRpdXM6IFwiMTBweFwiLFxuICAgICAgICBtYXJnaW46IFwiMCAwIDI0cHhcIixcbiAgICAgICAgcGFkZGluZzogXCIxNHB4IDE2cHhcIixcbiAgICAgIH19XG4gICAgPlxuICAgICAge2hlYWRlcnMubWFwKChbbGFiZWwsIHZhbHVlXSkgPT4gKFxuICAgICAgICA8Um93IGtleT17YCR7bGFiZWx9OiR7dmFsdWV9YH0+XG4gICAgICAgICAgPENvbHVtblxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgY29sb3I6IHRoZW1lLm11dGVkLFxuICAgICAgICAgICAgICBmb250U2l6ZTogXCIxMnB4XCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDcwMCxcbiAgICAgICAgICAgICAgcGFkZGluZzogXCIzcHggMTJweCAzcHggMFwiLFxuICAgICAgICAgICAgICB3aWR0aDogXCI3MHB4XCIsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L0NvbHVtbj5cbiAgICAgICAgICA8Q29sdW1uIHN0eWxlPXt7IGNvbG9yOiB0aGVtZS5mb3JlZ3JvdW5kLCBmb250U2l6ZTogXCIxM3B4XCIsIHBhZGRpbmc6IFwiM3B4IDBcIiB9fT5cbiAgICAgICAgICAgIHt2YWx1ZX1cbiAgICAgICAgICA8L0NvbHVtbj5cbiAgICAgICAgPC9Sb3c+XG4gICAgICApKX1cbiAgICA8L1NlY3Rpb24+XG4gICk7XG59XG5cbi8qKiBCcmFuZGVkIG1lc3NhZ2UgY2FyZCBzaGFyZWQgYnkgdGhlIGZ1bGwgZG9jdW1lbnQgYW5kIGJyb3dzZXIgcHJldmlld3MuICovXG5leHBvcnQgY29uc3QgRW1haWxDYXJkID0gKHtcbiAgYm9keSxcbiAgaGVhZGluZyxcbiAgaGVhZGVycyxcbiAgZm9vdGVyLFxuICBmcmFtZWQgPSB0cnVlLFxuICBicmFuZDogYnJhbmRJbnB1dCxcbn06IEVtYWlsRG9jdW1lbnRQcm9wcykgPT4ge1xuICBjb25zdCB0aGVtZSA9IHJlc29sdmVFbWFpbEJyYW5kKGJyYW5kSW5wdXQpO1xuICByZXR1cm4gKFxuICAgIDxDb250YWluZXJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUuc3VyZmFjZSxcbiAgICAgICAgZm9udEZhbWlseTogdGhlbWUuZm9udEZhbWlseSxcbiAgICAgICAgbWFyZ2luOiBcIjAgYXV0b1wiLFxuICAgICAgICAuLi4oZnJhbWVkXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoZW1lLmJvcmRlcn1gLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgICAgICAgICAgICBib3hTaGFkb3c6IFwiMCA4cHggMzBweCByZ2JhKDI3LDQ5LDU3LDAuMDgpXCIsXG4gICAgICAgICAgICAgIG1heFdpZHRoOiBcIjYyMHB4XCIsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7IG1heFdpZHRoOiBcIjEwMCVcIiB9KSxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPFNlY3Rpb25cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLmFjY2VudCxcbiAgICAgICAgICBwYWRkaW5nOiBcIjIycHggMzBweFwiLFxuICAgICAgICAgIC8vIFRoZSBjb3JuZXJzIGFyZSBzZXQgb24gdGhlIGJhbmQgaXRzZWxmIHJhdGhlciB0aGFuIGNsaXBwZWQgYnkgdGhlXG4gICAgICAgICAgLy8gY29udGFpbmVyOiBSZWFjdCBFbWFpbCByZW5kZXJzIHRoZSBjb250YWluZXIgYXMgYSA8dGFibGU+LCB3aGljaFxuICAgICAgICAgIC8vIGBvdmVyZmxvdzogaGlkZGVuYCBkb2VzIG5vdCByZWxpYWJseSBjbGlwLCBzbyB0aGUgc3F1YXJlIGJhbmQgdXNlZCB0b1xuICAgICAgICAgIC8vIHBva2UgcGFzdCB0aGUgcm91bmRlZCBlZGdlLlxuICAgICAgICAgIC4uLihmcmFtZWQgPyB7IGJvcmRlclJhZGl1czogXCIxNXB4IDE1cHggMCAwXCIgfSA6IHt9KSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPEJyYW5kTWFyayB0aGVtZT17dGhlbWV9IC8+XG4gICAgICA8L1NlY3Rpb24+XG4gICAgICA8U2VjdGlvbiBzdHlsZT17eyBwYWRkaW5nOiBcIjM0cHggMzRweCAyNHB4XCIgfX0+XG4gICAgICAgIHtoZWFkaW5nID8gKFxuICAgICAgICAgIDxIZWFkaW5nXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBjb2xvcjogdGhlbWUuZm9yZWdyb3VuZCxcbiAgICAgICAgICAgICAgZm9udFNpemU6IFwiMjhweFwiLFxuICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOiBcIi0wLjVweFwiLFxuICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjEuMlwiLFxuICAgICAgICAgICAgICBtYXJnaW46IFwiMCAwIDI0cHhcIixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2hlYWRpbmd9XG4gICAgICAgICAgPC9IZWFkaW5nPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPEVudmVsb3BlSGVhZGVycyBoZWFkZXJzPXtoZWFkZXJzfSB0aGVtZT17dGhlbWV9IC8+XG4gICAgICAgIDxFbWFpbEJvZHkgYm9keT17Ym9keX0gYnJhbmQ9e3RoZW1lfSAvPlxuICAgICAgPC9TZWN0aW9uPlxuICAgICAgPEhyIHN0eWxlPXt7IGJvcmRlckNvbG9yOiB0aGVtZS5ib3JkZXIsIG1hcmdpbjogMCB9fSAvPlxuICAgICAgPFNlY3Rpb24gc3R5bGU9e3sgcGFkZGluZzogXCIyMHB4IDM0cHggMjZweFwiIH19PlxuICAgICAgICA8VGV4dFxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBjb2xvcjogdGhlbWUubXV0ZWQsXG4gICAgICAgICAgICBmb250U2l6ZTogXCIxMnB4XCIsXG4gICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjEuNTVcIixcbiAgICAgICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge2Zvb3RlciA/PyB0aGVtZS50YWdsaW5lfXtcIiBcIn1cbiAgICAgICAgICB7dGhlbWUud2Vic2l0ZSA/IChcbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIGhyZWY9e3RoZW1lLndlYnNpdGV9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgY29sb3I6IHRoZW1lLmFjY2VudCxcbiAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbjogXCJub25lXCIsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0aGVtZS5uYW1lfVxuICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1NlY3Rpb24+XG4gICAgPC9Db250YWluZXI+XG4gICk7XG59O1xuXG4vKiogQ29tcGxldGUgcmVzcG9uc2l2ZSwgYnJhbmRlZCBSZWFjdCBFbWFpbCBkb2N1bWVudC4gKi9cbmV4cG9ydCBjb25zdCBFbWFpbERvY3VtZW50ID0gKHByb3BzOiBFbWFpbERvY3VtZW50UHJvcHMpID0+IHtcbiAgY29uc3QgdGhlbWUgPSByZXNvbHZlRW1haWxCcmFuZChwcm9wcy5icmFuZCk7XG4gIGNvbnN0IHBhZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLmJhY2tncm91bmQsXG4gICAgZm9udEZhbWlseTogdGhlbWUuZm9udEZhbWlseSxcbiAgICBtYXJnaW46IDAsXG4gICAgcGFkZGluZzogXCIyOHB4IDEycHhcIixcbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8SHRtbCBsYW5nPVwiZW5cIj5cbiAgICAgIDxIZWFkIC8+XG4gICAgICA8UHJldmlldz57cHJvcHMucHJldmlldyA/PyBwcm9wcy5zdWJqZWN0ID8/IFwiTWVzc2FnZVwifTwvUHJldmlldz5cbiAgICAgIDxCb2R5IHN0eWxlPXtwYWdlU3R5bGV9PlxuICAgICAgICA8RW1haWxDYXJkIHsuLi5wcm9wc30gLz5cbiAgICAgIDwvQm9keT5cbiAgICA8L0h0bWw+XG4gICk7XG59O1xuIl19
package/package.json CHANGED
@@ -24,7 +24,7 @@
24
24
  "typescript": "^5.9.3"
25
25
  },
26
26
  "dependencies": {
27
- "@dbx-tools/shared-core": "0.6.68",
27
+ "@dbx-tools/shared-core": "0.6.70",
28
28
  "@react-email/components": "^1.0.12",
29
29
  "react": "^19.2.4"
30
30
  },
@@ -42,7 +42,7 @@
42
42
  "./package.json": "./package.json"
43
43
  }
44
44
  },
45
- "version": "0.6.68",
45
+ "version": "0.6.70",
46
46
  "types": "./lib/index.d.ts",
47
47
  "type": "module",
48
48
  "exports": {
package/src/template.tsx CHANGED
@@ -194,13 +194,30 @@ export const EmailBody = ({ body, brand: brandInput }: EmailBodyProps) => {
194
194
  export interface EmailDocumentProps extends EmailBodyProps {
195
195
  subject?: string;
196
196
  /**
197
- * Visible heading inside the email card. Defaults to the subject so ordinary
198
- * messages keep their existing presentation while callers may use a shorter
199
- * heading when the transport subject contains notification-specific details.
197
+ * Visible heading inside the email card. Omit it for ordinary messages so the
198
+ * transport subject stays a transport subject and is not repeated as a body
199
+ * title. Pass a shorter heading when the subject carries notification-specific
200
+ * details (one-time-code mail is the motivating case).
200
201
  */
201
202
  heading?: string;
203
+ /**
204
+ * Optional envelope rows rendered above the body (From / To / Cc / …). Kept for
205
+ * local outbox previews that deliberately show the wire envelope; delivered
206
+ * SMTP mail and browser approval/compose previews leave this unset — those
207
+ * surfaces put recipients and attachments in client chrome instead.
208
+ */
202
209
  headers?: ReadonlyArray<readonly [string, string]>;
203
210
  footer?: string;
211
+ /**
212
+ * Draw the card's own frame: rounded corners, border, drop shadow, and the
213
+ * 620px reading width. Delivered mail keeps it, because the card floats on the
214
+ * client's page background and the frame is what separates the two.
215
+ *
216
+ * Turn it off when the card already sits inside a surface that frames it - a
217
+ * browser preview's reading pane - so the two frames do not nest into a rounded
218
+ * card inside a rounded card.
219
+ */
220
+ framed?: boolean;
204
221
  /**
205
222
  * Preheader text: the snippet a client shows next to the subject in a list, and
206
223
  * - the reason this is a prop - the text a mobile OS puts in the PUSH
@@ -284,10 +301,10 @@ function EnvelopeHeaders({
284
301
  /** Branded message card shared by the full document and browser previews. */
285
302
  export const EmailCard = ({
286
303
  body,
287
- subject = "Message",
288
304
  heading,
289
305
  headers,
290
306
  footer,
307
+ framed = true,
291
308
  brand: brandInput,
292
309
  }: EmailDocumentProps) => {
293
310
  const theme = resolveEmailBrand(brandInput);
@@ -295,30 +312,45 @@ export const EmailCard = ({
295
312
  <Container
296
313
  style={{
297
314
  backgroundColor: theme.surface,
298
- border: `1px solid ${theme.border}`,
299
- borderRadius: "16px",
300
- boxShadow: "0 8px 30px rgba(27,49,57,0.08)",
301
315
  fontFamily: theme.fontFamily,
302
316
  margin: "0 auto",
303
- maxWidth: "620px",
304
- overflow: "hidden",
317
+ ...(framed
318
+ ? {
319
+ border: `1px solid ${theme.border}`,
320
+ borderRadius: "16px",
321
+ boxShadow: "0 8px 30px rgba(27,49,57,0.08)",
322
+ maxWidth: "620px",
323
+ }
324
+ : { maxWidth: "100%" }),
305
325
  }}
306
326
  >
307
- <Section style={{ backgroundColor: theme.accent, padding: "22px 30px" }}>
327
+ <Section
328
+ style={{
329
+ backgroundColor: theme.accent,
330
+ padding: "22px 30px",
331
+ // The corners are set on the band itself rather than clipped by the
332
+ // container: React Email renders the container as a <table>, which
333
+ // `overflow: hidden` does not reliably clip, so the square band used to
334
+ // poke past the rounded edge.
335
+ ...(framed ? { borderRadius: "15px 15px 0 0" } : {}),
336
+ }}
337
+ >
308
338
  <BrandMark theme={theme} />
309
339
  </Section>
310
340
  <Section style={{ padding: "34px 34px 24px" }}>
311
- <Heading
312
- style={{
313
- color: theme.foreground,
314
- fontSize: "28px",
315
- letterSpacing: "-0.5px",
316
- lineHeight: "1.2",
317
- margin: "0 0 24px",
318
- }}
319
- >
320
- {heading ?? subject}
321
- </Heading>
341
+ {heading ? (
342
+ <Heading
343
+ style={{
344
+ color: theme.foreground,
345
+ fontSize: "28px",
346
+ letterSpacing: "-0.5px",
347
+ lineHeight: "1.2",
348
+ margin: "0 0 24px",
349
+ }}
350
+ >
351
+ {heading}
352
+ </Heading>
353
+ ) : null}
322
354
  <EnvelopeHeaders headers={headers} theme={theme} />
323
355
  <EmailBody body={body} brand={theme} />
324
356
  </Section>