@bikdotai/bik-component-library 0.0.858-beta.1 → 0.0.859-beta.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 (122) hide show
  1. package/README.md +4 -4
  2. package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.js +23 -23
  3. package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.js.map +1 -1
  4. package/dist/cjs/components/agent-builder/components/AiTextArea.js +1 -1
  5. package/dist/cjs/components/agent-builder/components/AiTextArea.js.map +1 -1
  6. package/dist/cjs/components/agent-builder/components/ToolInstructionsField.js +2 -2
  7. package/dist/cjs/components/agent-builder/components/ToolInstructionsField.js.map +1 -1
  8. package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsTrend.js +1 -1
  9. package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsTrend.js.map +1 -1
  10. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/ChartLayout.js +2 -0
  11. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/ChartLayout.js.map +1 -0
  12. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/ComparisonBarChart/ComparisonBarChart.js +2 -0
  13. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/ComparisonBarChart/ComparisonBarChart.js.map +1 -0
  14. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/FunnelChart/FunnelChart.js +2 -0
  15. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/FunnelChart/FunnelChart.js.map +1 -0
  16. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/FunnelChart/funnelGeometry.js +2 -0
  17. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/FunnelChart/funnelGeometry.js.map +1 -0
  18. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.js +1 -1
  19. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.js.map +1 -1
  20. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.model.js.map +1 -1
  21. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/chartPalette.js +2 -0
  22. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/chartPalette.js.map +1 -0
  23. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/formatChartValue.js +2 -0
  24. package/dist/cjs/components/analytics-chips-and-dropdowns/chart/formatChartValue.js.map +1 -0
  25. package/dist/cjs/components/bik-chatbot/components/ChatWindow.js +20 -20
  26. package/dist/cjs/components/bik-chatbot/components/ChatWindow.js.map +1 -1
  27. package/dist/cjs/components/feature-announcements/FeatureAnnouncementProvider.js +2 -2
  28. package/dist/cjs/components/feature-announcements/FeatureAnnouncementProvider.js.map +1 -1
  29. package/dist/cjs/components/feature-announcements/MajorUpdatePopup.js +2 -2
  30. package/dist/cjs/components/feature-announcements/MajorUpdatePopup.js.map +1 -1
  31. package/dist/cjs/components/feature-announcements/MinorUpdatePopup.js +1 -1
  32. package/dist/cjs/components/feature-announcements/MinorUpdatePopup.js.map +1 -1
  33. package/dist/cjs/components/input/ChipInput.js +1 -1
  34. package/dist/cjs/components/input/ChipInput.js.map +1 -1
  35. package/dist/cjs/components/input/Input-helper.js +1 -1
  36. package/dist/cjs/components/input/Input-helper.js.map +1 -1
  37. package/dist/cjs/components/input/Input.js +1 -1
  38. package/dist/cjs/components/input/Input.js.map +1 -1
  39. package/dist/cjs/components/plans/SubscriptionPlanSelector.js +5 -5
  40. package/dist/cjs/components/plans/SubscriptionPlanSelector.js.map +1 -1
  41. package/dist/cjs/editor/BikEditor.js +1 -1
  42. package/dist/cjs/editor/BikEditor.js.map +1 -1
  43. package/dist/cjs/editor/BikEditor.utils.js +3 -3
  44. package/dist/cjs/editor/BikEditor.utils.js.map +1 -1
  45. package/dist/cjs/editor/extensions/buildExtensions.js +2 -2
  46. package/dist/cjs/editor/extensions/buildExtensions.js.map +1 -1
  47. package/dist/cjs/editor/extensions/htmlTagStrip/HtmlTagStripExtension.js +2 -0
  48. package/dist/cjs/editor/extensions/htmlTagStrip/HtmlTagStripExtension.js.map +1 -0
  49. package/dist/cjs/helpers/sanitize.js +2 -0
  50. package/dist/cjs/helpers/sanitize.js.map +1 -0
  51. package/dist/cjs/index.js +1 -1
  52. package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.js +144 -143
  53. package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.js.map +1 -1
  54. package/dist/esm/components/agent-builder/components/AiTextArea.js +24 -23
  55. package/dist/esm/components/agent-builder/components/AiTextArea.js.map +1 -1
  56. package/dist/esm/components/agent-builder/components/ToolInstructionsField.js +38 -37
  57. package/dist/esm/components/agent-builder/components/ToolInstructionsField.js.map +1 -1
  58. package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsTrend.d.ts +3 -0
  59. package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsTrend.js +182 -172
  60. package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsTrend.js.map +1 -1
  61. package/dist/esm/components/analytics-chips-and-dropdowns/chart/ChartLayout.d.ts +16 -0
  62. package/dist/esm/components/analytics-chips-and-dropdowns/chart/ChartLayout.js +69 -0
  63. package/dist/esm/components/analytics-chips-and-dropdowns/chart/ChartLayout.js.map +1 -0
  64. package/dist/esm/components/analytics-chips-and-dropdowns/chart/ComparisonBarChart/ComparisonBarChart.d.ts +3 -0
  65. package/dist/esm/components/analytics-chips-and-dropdowns/chart/ComparisonBarChart/ComparisonBarChart.js +166 -0
  66. package/dist/esm/components/analytics-chips-and-dropdowns/chart/ComparisonBarChart/ComparisonBarChart.js.map +1 -0
  67. package/dist/esm/components/analytics-chips-and-dropdowns/chart/ComparisonBarChart/ComparisonBarChart.model.d.ts +21 -0
  68. package/dist/esm/components/analytics-chips-and-dropdowns/chart/FunnelChart/FunnelChart.d.ts +3 -0
  69. package/dist/esm/components/analytics-chips-and-dropdowns/chart/FunnelChart/FunnelChart.js +176 -0
  70. package/dist/esm/components/analytics-chips-and-dropdowns/chart/FunnelChart/FunnelChart.js.map +1 -0
  71. package/dist/esm/components/analytics-chips-and-dropdowns/chart/FunnelChart/FunnelChart.model.d.ts +19 -0
  72. package/dist/esm/components/analytics-chips-and-dropdowns/chart/FunnelChart/funnelGeometry.d.ts +23 -0
  73. package/dist/esm/components/analytics-chips-and-dropdowns/chart/FunnelChart/funnelGeometry.js +48 -0
  74. package/dist/esm/components/analytics-chips-and-dropdowns/chart/FunnelChart/funnelGeometry.js.map +1 -0
  75. package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.js +1 -1
  76. package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.js.map +1 -1
  77. package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.model.d.ts +1 -0
  78. package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.model.js.map +1 -1
  79. package/dist/esm/components/analytics-chips-and-dropdowns/chart/chartPalette.d.ts +3 -0
  80. package/dist/esm/components/analytics-chips-and-dropdowns/chart/chartPalette.js +18 -0
  81. package/dist/esm/components/analytics-chips-and-dropdowns/chart/chartPalette.js.map +1 -0
  82. package/dist/esm/components/analytics-chips-and-dropdowns/chart/formatChartValue.d.ts +4 -0
  83. package/dist/esm/components/analytics-chips-and-dropdowns/chart/formatChartValue.js +13 -0
  84. package/dist/esm/components/analytics-chips-and-dropdowns/chart/formatChartValue.js.map +1 -0
  85. package/dist/esm/components/analytics-chips-and-dropdowns/index.d.ts +4 -0
  86. package/dist/esm/components/bik-chatbot/components/ChatWindow.js +54 -53
  87. package/dist/esm/components/bik-chatbot/components/ChatWindow.js.map +1 -1
  88. package/dist/esm/components/feature-announcements/FeatureAnnouncementProvider.js +346 -420
  89. package/dist/esm/components/feature-announcements/FeatureAnnouncementProvider.js.map +1 -1
  90. package/dist/esm/components/feature-announcements/MajorUpdatePopup.js +35 -33
  91. package/dist/esm/components/feature-announcements/MajorUpdatePopup.js.map +1 -1
  92. package/dist/esm/components/feature-announcements/MinorUpdatePopup.js +48 -47
  93. package/dist/esm/components/feature-announcements/MinorUpdatePopup.js.map +1 -1
  94. package/dist/esm/components/feature-announcements/types/props.types.d.ts +2 -2
  95. package/dist/esm/components/input/ChipInput.js +41 -40
  96. package/dist/esm/components/input/ChipInput.js.map +1 -1
  97. package/dist/esm/components/input/Input-helper.d.ts +7 -0
  98. package/dist/esm/components/input/Input-helper.js +16 -25
  99. package/dist/esm/components/input/Input-helper.js.map +1 -1
  100. package/dist/esm/components/input/Input.js +59 -57
  101. package/dist/esm/components/input/Input.js.map +1 -1
  102. package/dist/esm/components/input/Input.model.d.ts +1 -0
  103. package/dist/esm/components/plans/SubscriptionPlanSelector.js +42 -40
  104. package/dist/esm/components/plans/SubscriptionPlanSelector.js.map +1 -1
  105. package/dist/esm/editor/BikEditor.js +221 -217
  106. package/dist/esm/editor/BikEditor.js.map +1 -1
  107. package/dist/esm/editor/BikEditor.utils.d.ts +1 -1
  108. package/dist/esm/editor/BikEditor.utils.js +141 -140
  109. package/dist/esm/editor/BikEditor.utils.js.map +1 -1
  110. package/dist/esm/editor/extensions/buildExtensions.js +35 -25
  111. package/dist/esm/editor/extensions/buildExtensions.js.map +1 -1
  112. package/dist/esm/editor/extensions/htmlTagStrip/HtmlTagStripExtension.d.ts +13 -0
  113. package/dist/esm/editor/extensions/htmlTagStrip/HtmlTagStripExtension.js +64 -0
  114. package/dist/esm/editor/extensions/htmlTagStrip/HtmlTagStripExtension.js.map +1 -0
  115. package/dist/esm/helpers/index.d.ts +1 -0
  116. package/dist/esm/helpers/sanitize.d.ts +32 -0
  117. package/dist/esm/helpers/sanitize.js +207 -0
  118. package/dist/esm/helpers/sanitize.js.map +1 -0
  119. package/dist/esm/icons/index.d.ts +1 -1
  120. package/dist/esm/index.js +429 -415
  121. package/dist/esm/index.js.map +1 -1
  122. package/package.json +2 -1
@@ -0,0 +1,207 @@
1
+ import i from "dompurify";
2
+ const s = () => typeof window < "u", a = /<\/?[^>]+(>|$)/g, d = /* @__PURE__ */ new Set(["https:", "mailto:", "tel:"]), p = /* @__PURE__ */ new Set(["https:", "data:"]), c = (t, r) => {
3
+ if (!t) return null;
4
+ try {
5
+ const e = new URL(t, "https://bik.local");
6
+ return r.has(e.protocol) ? t : null;
7
+ } catch {
8
+ return null;
9
+ }
10
+ }, A = (t) => c(t, d) !== null, L = (t) => c(t, p) !== null, f = /<\/?[a-zA-Z][a-zA-Z0-9]*(?:\s[^>]*)?\/?>/g, O = (t) => t ? t.replace(f, "") : "", g = /^[=+\-@\t\r]/, w = (t) => t ? g.test(t) ? `'${t}` : t : "", _ = (t) => t ? s() ? i.sanitize(t, {
11
+ ALLOWED_TAGS: [],
12
+ ALLOWED_ATTR: [],
13
+ KEEP_CONTENT: !0
14
+ }) : t.replace(a, "") : "", E = (t) => t ? s() ? i.sanitize(t, {
15
+ ALLOWED_TAGS: [
16
+ "p",
17
+ "br",
18
+ "b",
19
+ "strong",
20
+ "i",
21
+ "em",
22
+ "u",
23
+ "s",
24
+ "span",
25
+ "a",
26
+ "ul",
27
+ "ol",
28
+ "li",
29
+ "blockquote"
30
+ ],
31
+ ALLOWED_ATTR: ["href", "target", "rel", "class"],
32
+ FORBID_TAGS: ["style"],
33
+ FORBID_ATTR: ["style"],
34
+ ALLOWED_URI_REGEXP: /^(?:https|mailto|tel):/i
35
+ }) : t.replace(a, "") : "", h = /* @__PURE__ */ new Set([
36
+ "color",
37
+ "background-color",
38
+ "background",
39
+ "font-family",
40
+ "font-size",
41
+ "font-weight",
42
+ "font-style",
43
+ "font-variant",
44
+ "font",
45
+ "line-height",
46
+ "letter-spacing",
47
+ "word-spacing",
48
+ "text-align",
49
+ "text-decoration",
50
+ "text-transform",
51
+ "text-indent",
52
+ "vertical-align",
53
+ "white-space",
54
+ "word-wrap",
55
+ "word-break",
56
+ "overflow-wrap",
57
+ "direction",
58
+ "margin",
59
+ "margin-top",
60
+ "margin-right",
61
+ "margin-bottom",
62
+ "margin-left",
63
+ "padding",
64
+ "padding-top",
65
+ "padding-right",
66
+ "padding-bottom",
67
+ "padding-left",
68
+ "border",
69
+ "border-top",
70
+ "border-right",
71
+ "border-bottom",
72
+ "border-left",
73
+ "border-width",
74
+ "border-style",
75
+ "border-color",
76
+ "border-collapse",
77
+ "border-spacing",
78
+ "border-radius",
79
+ "width",
80
+ "min-width",
81
+ "max-width",
82
+ "height",
83
+ "min-height",
84
+ "max-height",
85
+ "display",
86
+ "visibility",
87
+ "opacity",
88
+ "float",
89
+ "clear",
90
+ "overflow",
91
+ "overflow-x",
92
+ "overflow-y",
93
+ "table-layout",
94
+ "list-style",
95
+ "list-style-type",
96
+ "list-style-position",
97
+ "box-sizing"
98
+ ]), u = /url\s*\(|expression\s*\(|-moz-binding|behavior\s*:|@import|javascript:|data:/i, b = (t) => {
99
+ const r = t.split(";").map((e) => e.trim()).filter((e) => {
100
+ if (!e) return !1;
101
+ const n = e.indexOf(":");
102
+ if (n < 0) return !1;
103
+ const o = e.slice(0, n).trim().toLowerCase(), l = e.slice(n + 1).trim();
104
+ return h.has(o) && !u.test(l);
105
+ }).join("; ");
106
+ return r && t.trimEnd().endsWith(";") ? r + ";" : r;
107
+ }, T = (t) => {
108
+ if (!t) return "";
109
+ if (!s()) return t.replace(a, "");
110
+ const r = (n, o) => {
111
+ if (o.attrName !== "style") return;
112
+ const l = b(o.attrValue);
113
+ l ? o.attrValue = l : o.keepAttr = !1;
114
+ };
115
+ i.addHook("uponSanitizeAttribute", r);
116
+ const e = i.sanitize(t, {
117
+ ALLOWED_TAGS: [
118
+ "p",
119
+ "br",
120
+ "div",
121
+ "span",
122
+ "strong",
123
+ "b",
124
+ "em",
125
+ "i",
126
+ "u",
127
+ "s",
128
+ "ul",
129
+ "ol",
130
+ "li",
131
+ "blockquote",
132
+ "h1",
133
+ "h2",
134
+ "h3",
135
+ "h4",
136
+ "h5",
137
+ "h6",
138
+ "a",
139
+ "img",
140
+ "table",
141
+ "thead",
142
+ "tbody",
143
+ "tfoot",
144
+ "tr",
145
+ "th",
146
+ "td",
147
+ "caption",
148
+ "colgroup",
149
+ "col",
150
+ "center",
151
+ "font",
152
+ "hr",
153
+ "pre",
154
+ "code",
155
+ "sub",
156
+ "sup",
157
+ "small",
158
+ "big",
159
+ "figure",
160
+ "figcaption",
161
+ "section",
162
+ "article",
163
+ "header",
164
+ "footer",
165
+ "abbr",
166
+ "cite",
167
+ "mark",
168
+ "del",
169
+ "ins"
170
+ ],
171
+ ALLOWED_ATTR: [
172
+ "href",
173
+ "target",
174
+ "rel",
175
+ "src",
176
+ "alt",
177
+ "title",
178
+ "width",
179
+ "height",
180
+ "style",
181
+ "class",
182
+ "align",
183
+ "valign",
184
+ "colspan",
185
+ "rowspan",
186
+ "cellpadding",
187
+ "cellspacing",
188
+ "border",
189
+ "color",
190
+ "bgcolor"
191
+ ],
192
+ ALLOW_UNKNOWN_PROTOCOLS: !1
193
+ });
194
+ return i.removeHook("uponSanitizeAttribute"), e;
195
+ };
196
+ export {
197
+ w as escapeFormulaInjection,
198
+ L as isAllowedImageUrl,
199
+ A as isAllowedLinkUrl,
200
+ c as isAllowedUrl,
201
+ E as sanitizeBasicHtml,
202
+ b as sanitizeCssProperties,
203
+ T as sanitizeEmailHtml,
204
+ _ as sanitizePlainText,
205
+ O as stripHtmlTags
206
+ };
207
+ //# sourceMappingURL=sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.js","sources":["../../../src/helpers/sanitize.ts"],"sourcesContent":["import DOMPurify from 'dompurify';\n\n/**\n * Central HTML/CSS-injection sanitisation for the component library.\n *\n * Two categories:\n *\n * INPUT layer (onChange) — strips tags, keeps plain text:\n * - stripHtmlTags: remove every HTML tag, return raw text\n * - escapeFormulaInjection: prefix CSV-dangerous leading chars with '\n *\n * RENDER layer (dangerouslySetInnerHTML / innerHTML) — DOMPurify-based:\n * - sanitizePlainText: ALLOWED_TAGS: [] (for sinks that must show plain text)\n * - sanitizeBasicHtml: formatting allowlist (chat bubbles, rich previews)\n * - sanitizeEmailHtml: full email allowlist (tables, images, inline style)\n */\n\nconst hasDOM = (): boolean => typeof window !== 'undefined';\n\nconst REGEX_TAG_STRIP = /<\\/?[^>]+(>|$)/g;\n\nconst ALLOWED_LINK_PROTOCOLS = new Set(['https:', 'mailto:', 'tel:']);\nconst ALLOWED_IMG_PROTOCOLS = new Set(['https:', 'data:']);\n\nexport const isAllowedUrl = (\n\turl: string | null | undefined,\n\tallowed: Set<string>,\n): string | null => {\n\tif (!url) return null;\n\ttry {\n\t\tconst parsed = new URL(url, 'https://bik.local');\n\t\treturn allowed.has(parsed.protocol) ? url : null;\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const isAllowedLinkUrl = (url?: string | null): boolean =>\n\tisAllowedUrl(url, ALLOWED_LINK_PROTOCOLS) !== null;\n\nexport const isAllowedImageUrl = (url?: string | null): boolean =>\n\tisAllowedUrl(url, ALLOWED_IMG_PROTOCOLS) !== null;\n\n// ---------------------------------------------------------------------------\n// INPUT layer — for onChange handlers on plain-text inputs\n// ---------------------------------------------------------------------------\n\n/**\n * Strip complete HTML tags from the input, return the raw text content.\n * Uses a regex that only matches tags with both < and >, so partial input\n * like \"<h\" while typing is preserved (no closing >, not a tag yet).\n *\n * \"<h1>Hello</h1>\" → \"Hello\"\n * \"<h\" → \"<h\" (incomplete, kept)\n * \"2 < 3\" → \"2 < 3\"\n * \"<script>x</script>\" → \"x\"\n */\nconst COMPLETE_TAG = /<\\/?[a-zA-Z][a-zA-Z0-9]*(?:\\s[^>]*)?\\/?>/g;\n\nexport const stripHtmlTags = (input: string | null | undefined): string => {\n\tif (!input) return '';\n\treturn input.replace(COMPLETE_TAG, '');\n};\n\nconst CSV_FORMULA_PREFIX = /^[=+\\-@\\t\\r]/;\n\n/**\n * Escape CSV/Excel formula injection. Prefixes values starting with a\n * formula-triggering character (=, +, -, @, tab, CR) with a single quote\n * so spreadsheet software treats them as literal text.\n */\nexport const escapeFormulaInjection = (\n\tinput: string | null | undefined,\n): string => {\n\tif (!input) return '';\n\treturn CSV_FORMULA_PREFIX.test(input) ? `'${input}` : input;\n};\n\n// ---------------------------------------------------------------------------\n// RENDER layer — for dangerouslySetInnerHTML / innerHTML sinks\n// ---------------------------------------------------------------------------\n\n/**\n * Render-safe plain text. Strips every tag and returns safe HTML (with\n * entities). Use at render sinks that must show plain text via innerHTML.\n * For input onChange, use stripHtmlTags instead.\n */\nexport const sanitizePlainText = (input: string | null | undefined): string => {\n\tif (!input) return '';\n\tif (!hasDOM()) return input.replace(REGEX_TAG_STRIP, '');\n\treturn DOMPurify.sanitize(input, {\n\t\tALLOWED_TAGS: [],\n\t\tALLOWED_ATTR: [],\n\t\tKEEP_CONTENT: true,\n\t});\n};\n\n/**\n * Basic rich text. A small formatting allowlist; no style tag/attr, links\n * restricted to safe protocols.\n */\nexport const sanitizeBasicHtml = (input: string | null | undefined): string => {\n\tif (!input) return '';\n\tif (!hasDOM()) return input.replace(REGEX_TAG_STRIP, '');\n\treturn DOMPurify.sanitize(input, {\n\t\tALLOWED_TAGS: [\n\t\t\t'p',\n\t\t\t'br',\n\t\t\t'b',\n\t\t\t'strong',\n\t\t\t'i',\n\t\t\t'em',\n\t\t\t'u',\n\t\t\t's',\n\t\t\t'span',\n\t\t\t'a',\n\t\t\t'ul',\n\t\t\t'ol',\n\t\t\t'li',\n\t\t\t'blockquote',\n\t\t],\n\t\tALLOWED_ATTR: ['href', 'target', 'rel', 'class'],\n\t\tFORBID_TAGS: ['style'],\n\t\tFORBID_ATTR: ['style'],\n\t\tALLOWED_URI_REGEXP: /^(?:https|mailto|tel):/i,\n\t});\n};\n\n// CSS properties safe for email rendering. Everything else is stripped from\n// inline style attributes to block position-overlay, url()-exfiltration,\n// expression(), and -moz-binding attacks.\nconst SAFE_CSS_PROPERTIES = new Set([\n\t'color',\n\t'background-color',\n\t'background',\n\t'font-family',\n\t'font-size',\n\t'font-weight',\n\t'font-style',\n\t'font-variant',\n\t'font',\n\t'line-height',\n\t'letter-spacing',\n\t'word-spacing',\n\t'text-align',\n\t'text-decoration',\n\t'text-transform',\n\t'text-indent',\n\t'vertical-align',\n\t'white-space',\n\t'word-wrap',\n\t'word-break',\n\t'overflow-wrap',\n\t'direction',\n\t'margin',\n\t'margin-top',\n\t'margin-right',\n\t'margin-bottom',\n\t'margin-left',\n\t'padding',\n\t'padding-top',\n\t'padding-right',\n\t'padding-bottom',\n\t'padding-left',\n\t'border',\n\t'border-top',\n\t'border-right',\n\t'border-bottom',\n\t'border-left',\n\t'border-width',\n\t'border-style',\n\t'border-color',\n\t'border-collapse',\n\t'border-spacing',\n\t'border-radius',\n\t'width',\n\t'min-width',\n\t'max-width',\n\t'height',\n\t'min-height',\n\t'max-height',\n\t'display',\n\t'visibility',\n\t'opacity',\n\t'float',\n\t'clear',\n\t'overflow',\n\t'overflow-x',\n\t'overflow-y',\n\t'table-layout',\n\t'list-style',\n\t'list-style-type',\n\t'list-style-position',\n\t'box-sizing',\n]);\n\n// Values that indicate CSS injection attempts regardless of property.\nconst DANGEROUS_CSS_VALUE =\n\t/url\\s*\\(|expression\\s*\\(|-moz-binding|behavior\\s*:|@import|javascript:|data:/i;\n\n/**\n * Filter an inline style string to only safe CSS properties with safe values.\n * Returns the cleaned style string (empty string if nothing survives).\n */\nexport const sanitizeCssProperties = (style: string): string => {\n\tconst result = style\n\t\t.split(';')\n\t\t.map((decl) => decl.trim())\n\t\t.filter((decl) => {\n\t\t\tif (!decl) return false;\n\t\t\tconst colonIdx = decl.indexOf(':');\n\t\t\tif (colonIdx < 0) return false;\n\t\t\tconst prop = decl.slice(0, colonIdx).trim().toLowerCase();\n\t\t\tconst value = decl.slice(colonIdx + 1).trim();\n\t\t\treturn SAFE_CSS_PROPERTIES.has(prop) && !DANGEROUS_CSS_VALUE.test(value);\n\t\t})\n\t\t.join('; ');\n\treturn result && style.trimEnd().endsWith(';') ? result + ';' : result;\n};\n\n/**\n * Full rich text / inbound email HTML. Allowlist of tags and attributes an\n * email needs to render; everything else is stripped. Inline style attributes\n * are filtered to a safe CSS property allowlist.\n */\nexport const sanitizeEmailHtml = (input: string | null | undefined): string => {\n\tif (!input) return '';\n\tif (!hasDOM()) return input.replace(REGEX_TAG_STRIP, '');\n\n\tconst hook = (\n\t\t_node: Element,\n\t\tdata: { attrName: string; attrValue: string; keepAttr: boolean },\n\t) => {\n\t\tif (data.attrName !== 'style') return;\n\t\tconst clean = sanitizeCssProperties(data.attrValue);\n\t\tif (clean) {\n\t\t\tdata.attrValue = clean;\n\t\t} else {\n\t\t\tdata.keepAttr = false;\n\t\t}\n\t};\n\tDOMPurify.addHook('uponSanitizeAttribute', hook);\n\n\tconst result = DOMPurify.sanitize(input, {\n\t\tALLOWED_TAGS: [\n\t\t\t'p',\n\t\t\t'br',\n\t\t\t'div',\n\t\t\t'span',\n\t\t\t'strong',\n\t\t\t'b',\n\t\t\t'em',\n\t\t\t'i',\n\t\t\t'u',\n\t\t\t's',\n\t\t\t'ul',\n\t\t\t'ol',\n\t\t\t'li',\n\t\t\t'blockquote',\n\t\t\t'h1',\n\t\t\t'h2',\n\t\t\t'h3',\n\t\t\t'h4',\n\t\t\t'h5',\n\t\t\t'h6',\n\t\t\t'a',\n\t\t\t'img',\n\t\t\t'table',\n\t\t\t'thead',\n\t\t\t'tbody',\n\t\t\t'tfoot',\n\t\t\t'tr',\n\t\t\t'th',\n\t\t\t'td',\n\t\t\t'caption',\n\t\t\t'colgroup',\n\t\t\t'col',\n\t\t\t'center',\n\t\t\t'font',\n\t\t\t'hr',\n\t\t\t'pre',\n\t\t\t'code',\n\t\t\t'sub',\n\t\t\t'sup',\n\t\t\t'small',\n\t\t\t'big',\n\t\t\t'figure',\n\t\t\t'figcaption',\n\t\t\t'section',\n\t\t\t'article',\n\t\t\t'header',\n\t\t\t'footer',\n\t\t\t'abbr',\n\t\t\t'cite',\n\t\t\t'mark',\n\t\t\t'del',\n\t\t\t'ins',\n\t\t],\n\t\tALLOWED_ATTR: [\n\t\t\t'href',\n\t\t\t'target',\n\t\t\t'rel',\n\t\t\t'src',\n\t\t\t'alt',\n\t\t\t'title',\n\t\t\t'width',\n\t\t\t'height',\n\t\t\t'style',\n\t\t\t'class',\n\t\t\t'align',\n\t\t\t'valign',\n\t\t\t'colspan',\n\t\t\t'rowspan',\n\t\t\t'cellpadding',\n\t\t\t'cellspacing',\n\t\t\t'border',\n\t\t\t'color',\n\t\t\t'bgcolor',\n\t\t],\n\t\tALLOW_UNKNOWN_PROTOCOLS: false,\n\t});\n\n\tDOMPurify.removeHook('uponSanitizeAttribute');\n\treturn result;\n};\n"],"names":["hasDOM","REGEX_TAG_STRIP","ALLOWED_LINK_PROTOCOLS","ALLOWED_IMG_PROTOCOLS","isAllowedUrl","url","allowed","parsed","isAllowedLinkUrl","isAllowedImageUrl","COMPLETE_TAG","stripHtmlTags","input","CSV_FORMULA_PREFIX","escapeFormulaInjection","sanitizePlainText","DOMPurify","sanitizeBasicHtml","SAFE_CSS_PROPERTIES","DANGEROUS_CSS_VALUE","sanitizeCssProperties","style","result","decl","colonIdx","prop","value","sanitizeEmailHtml","hook","_node","data","clean"],"mappings":"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"}
@@ -33,7 +33,7 @@ export { Microphone, Pause, Play, Sleep, VolumeMute, VolumeOneline, VolumeTwolin
33
33
  export { Desktop, Smartphone } from './Media/Devices';
34
34
  export { BarcodeScan, Download, EmojiSmile, Paperclip, Upload, } from './Media/Others';
35
35
  export { Frame26086263, Camera, CameraAdd, Crop, FlashOff, FlashOn, FormkitHappy, FormkitNeutral, FormkitSad, IconTrailing, Image, ImageAdd, Images, Maximize, RotateAnticlockwise, RotateClockwise, VideoCamcorder, VideoFilm, } from './Media/Visual';
36
- export { EmailMarketingV2, EmailV2, FacebookCommentV2, FacebookV2, GmailV2, InstagramCommentV2, InstagramV2, ManifestLiveChat, MessengerV2, PhoneV2, RcsV2, SmsV2, TaskV2, WebpushV2, WhatsAppCallV2, WhatsAppV2, Bigcommerce, EmailMarketing, Facebook, FacebookComment, FreshdeskApp, Instagram, InstagramIcon, Messenger, MonoFacebookComment, MonoFacebook, MonoInstagram, MonoInstagramComment, MonoMail, MonoMessenger, MonoPhone, MonoTasks, MonoWhatsapp, ShopifyBrand, Tasks, WebPush, WhatsApp, } from './Social/Channels';
36
+ export { EmailMarketingV2, EmailV2, FacebookCommentV2, FacebookV2, GmailV2, InstagramCommentV2, InstagramV2, ManifestLiveChat, MessengerV2, PhoneV2, RcsV2, SmsV2, TaskV2, WebpushV2, WhatsAppCallV2, WhatsAppV2, Bigcommerce, EmailMarketing, Facebook, FacebookComment, FreshdeskApp, Instagram, InstagramIcon, Messenger, MonoFacebookComment, MonoFacebook, MonoInstagram, MonoInstagramComment, MonoMail, MonoMessenger, MonoPhone, MonoTasks, MonoWhatsapp, ShopifyBrand, Tasks, WebPush, WhatsApp } from './Social/Channels';
37
37
  export { Email as Email2 } from './Social/Channels';
38
38
  export { SlackIcon, BigCommerce, Google, Gorgias, Kustomer, Rcs, ShopifyDefault, Twitter, Website, WooCommerce, Youtube, Zendesk, } from './Social/Social';
39
39
  export { EmailMarketing as EmailMarketing2 } from './Social/Social';