@pagenflow/email 1.4.4 → 1.4.6

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 (39) hide show
  1. package/dist/components/Button.d.ts +4 -0
  2. package/dist/components/Column.d.ts +1 -1
  3. package/dist/components/Container.d.ts +1 -1
  4. package/dist/components/Image.d.ts +8 -0
  5. package/dist/components/Row.d.ts +1 -1
  6. package/dist/components/Section.d.ts +1 -1
  7. package/dist/components/Text.d.ts +2 -1
  8. package/dist/components/utils/MiniDomParser.d.ts +23 -0
  9. package/dist/components/utils/injectLinkStyles.d.ts +1 -0
  10. package/dist/index.cjs.js +177 -132
  11. package/dist/index.cjs.js.map +1 -1
  12. package/dist/index.esm.js +177 -132
  13. package/dist/index.esm.js.map +1 -1
  14. package/dist/types/IInnerLink.d.ts +17 -0
  15. package/package.json +1 -1
  16. package/dist/components/Body.js +0 -57
  17. package/dist/components/BodyDev.js +0 -57
  18. package/dist/components/Button.js +0 -327
  19. package/dist/components/Column.js +0 -127
  20. package/dist/components/Container.js +0 -179
  21. package/dist/components/Divider.js +0 -41
  22. package/dist/components/Font.js +0 -44
  23. package/dist/components/Head.js +0 -134
  24. package/dist/components/HeadDev.js +0 -311
  25. package/dist/components/Heading.js +0 -46
  26. package/dist/components/Html.js +0 -20
  27. package/dist/components/Icon.js +0 -276
  28. package/dist/components/Image.js +0 -119
  29. package/dist/components/MsoConditional.js +0 -19
  30. package/dist/components/Row.js +0 -157
  31. package/dist/components/Section.js +0 -65
  32. package/dist/components/Spacer.js +0 -40
  33. package/dist/components/Text.js +0 -42
  34. package/dist/index.js +0 -17
  35. package/dist/types/IInnerLink.js +0 -1
  36. package/dist/types/ResolvedFont.js +0 -1
  37. package/dist/types/index.js +0 -1
  38. package/dist/utils/isEqual.js +0 -1439
  39. package/dist/utils/memoUtils.js +0 -55
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/components/Body.tsx","../src/utils/isEqual.js","../src/utils/memoUtils.ts","../src/components/Button.tsx","../src/components/Column.tsx","../src/components/Container.tsx","../src/components/Divider.tsx","../src/components/Font.tsx","../src/components/Head.tsx","../src/components/Heading.tsx","../src/components/Html.tsx","../src/components/Image.tsx","../src/components/Row.tsx","../src/components/Section.tsx","../src/components/Spacer.tsx","../src/components/Text.tsx","../src/components/Icon.tsx","../src/components/MsoConditional.tsx"],"sourcesContent":["import { ReactNode, CSSProperties } from \"react\";\r\n\r\nexport interface GlobalConfig {\r\n color?: string;\r\n fontSize?: string;\r\n backgroundColor?: string;\r\n lineHeight?: string;\r\n fontFamily?: string;\r\n backgroundImage?: {\r\n src?: string;\r\n repeat?: string;\r\n size?: string;\r\n position?: string;\r\n };\r\n}\r\n\r\nexport interface BodyProps {\r\n children: ReactNode;\r\n /** Global configuration from GlobalEditor */\r\n config?: GlobalConfig;\r\n}\r\n\r\nexport default function Body({ children, config = {} }: BodyProps) {\r\n // Extract config values with fallbacks\r\n const globalColor = config.color || \"#000000\";\r\n const globalFontSize = config.fontSize || \"16px\";\r\n const globalBackgroundColor = config.backgroundColor || \"#ffffff\";\r\n const globalLineHeight = config.lineHeight || \"1.4\";\r\n const globalFontFamily = config.fontFamily || \"Arial, Helvetica, sans-serif\";\r\n\r\n // Background image properties\r\n const bgImage = config.backgroundImage?.src || \"\";\r\n const bgRepeat = config.backgroundImage?.repeat || \"no-repeat\";\r\n const bgSize = config.backgroundImage?.size || \"cover\";\r\n const bgPosition = config.backgroundImage?.position || \"center\";\r\n\r\n // 1. Style for the <body> tag inline\r\n const bodyStyle: CSSProperties = {\r\n backgroundColor: globalBackgroundColor,\r\n color: globalColor,\r\n fontSize: globalFontSize,\r\n lineHeight: globalLineHeight,\r\n padding: \"0\",\r\n margin: \"0\",\r\n WebkitTextSizeAdjust: \"100%\",\r\n overflowX: \"hidden\",\r\n\r\n [\"msTextSizeAdjust\" as string]: \"100%\",\r\n [\"msoLineHeightRule\" as string]: \"exactly\",\r\n\r\n fontFamily: globalFontFamily,\r\n\r\n // Background image support (if provided)\r\n ...(bgImage && {\r\n backgroundImage: `url(${bgImage})`,\r\n backgroundRepeat: bgRepeat,\r\n backgroundSize: bgSize,\r\n backgroundPosition: bgPosition,\r\n }),\r\n };\r\n\r\n // 2. Style for the top-level <table> wrapper\r\n const outerTableStyle: CSSProperties = {\r\n width: \"100%\",\r\n [\"msoLineHeightRule\" as string]: \"exactly\",\r\n borderCollapse: \"collapse\",\r\n };\r\n\r\n return (\r\n <body style={bodyStyle}>\r\n <center\r\n style={{\r\n width: \"100%\",\r\n background: globalBackgroundColor,\r\n ...(bgImage && {\r\n backgroundImage: `url(${bgImage})`,\r\n backgroundRepeat: bgRepeat,\r\n backgroundSize: bgSize,\r\n backgroundPosition: bgPosition,\r\n }),\r\n }}\r\n >\r\n <table\r\n role=\"presentation\"\r\n border={0 as any}\r\n cellPadding={0}\r\n cellSpacing={0}\r\n align=\"center\"\r\n width=\"100%\"\r\n style={outerTableStyle}\r\n >\r\n <tbody>\r\n <tr>\r\n <td align=\"center\" style={{ padding: \"0\", margin: \"0\" }}>\r\n {children}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </center>\r\n\r\n <div\r\n style={{\r\n display: \"none\",\r\n whiteSpace: \"nowrap\",\r\n font: \"15px courier\",\r\n lineHeight: \"0\",\r\n }}\r\n >\r\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\r\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\r\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\r\n </div>\r\n </body>\r\n );\r\n}\r\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function () {\n try {\n return freeProcess && freeProcess.binding('util');\n } catch (e) { }\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function (value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) { }\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function (othValue, othIndex) {\n if (!seen.has(othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function (value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) { }\n try {\n return (func + '');\n } catch (e) { }\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are **not** supported.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = isEqual;\n","import isEqual from \"./isEqual\";\r\n\r\n/**\r\n * Generic deep equality comparison function for React component props.\r\n * Can be used with React.memo() to prevent unnecessary re-renders.\r\n * \r\n * @example\r\n * export default memo(MyComponent, arePropsEqual);\r\n */\r\nexport function arePropsEqual<T extends Record<string, any>>(\r\n prevProps: T,\r\n nextProps: T\r\n): boolean {\r\n return isEqual(prevProps, nextProps);\r\n}\r\n\r\n/**\r\n * Alternative: More performant version that only compares specific keys\r\n * Use this if you want to optimize by ignoring certain props like callbacks\r\n * \r\n * @example\r\n * export default memo(MyComponent, (prev, next) => \r\n * arePropsEqualExcept(prev, next, ['onCallback'])\r\n * );\r\n */\r\nexport function arePropsEqualExcept<T extends Record<string, any>>(\r\n prevProps: T,\r\n nextProps: T,\r\n excludeKeys: (keyof T)[]\r\n): boolean {\r\n const prevFiltered = omit(prevProps, excludeKeys);\r\n const nextFiltered = omit(nextProps, excludeKeys);\r\n return isEqual(prevFiltered, nextFiltered);\r\n}\r\n\r\n/**\r\n * Alternative: Compare only specific keys for performance\r\n * Useful when you have large props objects but only care about certain values\r\n * \r\n * @example\r\n * export default memo(MyComponent, (prev, next) => \r\n * arePropsEqualOnly(prev, next, ['config', 'devMode'])\r\n * );\r\n */\r\nexport function arePropsEqualOnly<T extends Record<string, any>>(\r\n prevProps: T,\r\n nextProps: T,\r\n includeKeys: (keyof T)[]\r\n): boolean {\r\n const prevFiltered = pick(prevProps, includeKeys);\r\n const nextFiltered = pick(nextProps, includeKeys);\r\n return isEqual(prevFiltered, nextFiltered);\r\n}\r\n\r\nfunction pick<T extends object, K extends keyof T>(data: T, keys: K[]): Pick<T, K> {\r\n const r = {} as Pick<T, K>;\r\n for (const key of keys) {\r\n if (key in data) {\r\n r[key] = data[key];\r\n }\r\n }\r\n return r;\r\n}\r\n\r\nfunction omit<T extends object, K extends keyof T>(data: T, keys: K[]): Omit<T, K> {\r\n const r = { ...data };\r\n for (const key of keys) {\r\n delete r[key];\r\n }\r\n return r;\r\n}","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { BorderConfig } from \"../types\";\r\nimport IInnerLink from \"../types/IInnerLink\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\n\r\n// Helper for alignment\r\ntype TdAlign = \"center\" | \"left\" | \"right\";\r\n\r\nexport interface ButtonConfig {\r\n /** Link configuration for the button destination. Required. */\r\n innerLink?: IInnerLink;\r\n\r\n /** Button text. */\r\n children: ReactNode;\r\n\r\n /** Background color. Required for VML compatibility. */\r\n backgroundColor?: string;\r\n\r\n /** Text color. */\r\n color?: string;\r\n\r\n /** Padding for the button area (e.g., \"12px 24px\"). */\r\n padding?: string;\r\n\r\n /** Border radius (e.g., \"3px\"). */\r\n borderRadius?: string;\r\n\r\n /** Border configuration for outline buttons. */\r\n border?: BorderConfig;\r\n\r\n /** Width of the button (e.g., \"200px\" or \"100%\"). */\r\n width?: string;\r\n\r\n /** Maximum width of the button (e.g., \"300px\"). Text will wrap if content exceeds this. */\r\n maxWidth?: string;\r\n\r\n /** Horizontal alignment within the container. */\r\n justifyContent?: \"start\" | \"center\" | \"end\";\r\n\r\n /** Horizontal text alignment within the button (e.g., 'left', 'center'). */\r\n textAlign?: \"left\" | \"center\" | \"right\" | \"justify\";\r\n\r\n /** Font size (e.g., '16px'). */\r\n fontSize?: string;\r\n\r\n /** Font weight (e.g., 'bold' or '700'). */\r\n fontWeight?: string;\r\n\r\n /** Font style (e.g., 'italic'). */\r\n fontStyle?: string;\r\n\r\n /** Font family (e.g., 'Arial, sans-serif'). */\r\n fontFamily?: string;\r\n\r\n /** Line height (e.g., '1.5' or '24px'). */\r\n lineHeight?: string;\r\n\r\n /** Letter spacing (e.g., '0.5px', '1px'). */\r\n letterSpacing?: string;\r\n\r\n /** Text transform (e.g., 'uppercase', 'lowercase', 'capitalize'). */\r\n textTransform?: string;\r\n\r\n /** Text decoration (e.g., 'underline', 'line-through'). */\r\n textDecoration?: string;\r\n\r\n /** Text direction (e.g., 'ltr', 'rtl'). */\r\n direction?: string;\r\n\r\n /** Vertical alignment of text (e.g., 'sub', 'super'). */\r\n verticalAlign?: string;\r\n\r\n /** Opacity of the button text (e.g., '0.5', '1'). */\r\n opacity?: string | number;\r\n\r\n /** White space behavior (e.g., 'normal', 'nowrap', 'pre-wrap'). */\r\n whiteSpace?: string;\r\n\r\n /** Word break behavior (e.g., 'break-all', 'break-word', 'keep-all', 'normal'). */\r\n wordBreak?: string;\r\n}\r\n\r\nexport type ButtonProps = {\r\n config: ButtonConfig;\r\n devMode?: boolean;\r\n};\r\n\r\n// Map alignment to HTML 'align' attribute\r\nconst justifyMap: Record<\r\n NonNullable<ButtonConfig[\"justifyContent\"]>,\r\n TdAlign\r\n> = {\r\n start: \"left\",\r\n center: \"center\",\r\n end: \"right\",\r\n};\r\n\r\n// Helper to build link href based on innerLink type (mirrors Icon component)\r\nfunction buildLinkHref(innerLink?: IInnerLink): string | null {\r\n if (!innerLink || innerLink.type === \"none\") return null;\r\n\r\n switch (innerLink.type) {\r\n case \"url\":\r\n return innerLink.url || null;\r\n case \"email\":\r\n return innerLink.email ? `mailto:${innerLink.email}` : null;\r\n case \"phone\":\r\n return innerLink.phone ? `tel:${innerLink.phone}` : null;\r\n case \"anchor\":\r\n return innerLink.anchor ? `#${innerLink.anchor}` : null;\r\n case \"page_top\":\r\n return \"#top\";\r\n case \"page_bottom\":\r\n return \"#bottom\";\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nfunction getBorderStyleString(border?: BorderConfig): string {\r\n if (!border) return \"\";\r\n\r\n const styles: string[] = [];\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n styles.push(`border: ${border.width} ${border.style} ${border.color};`);\r\n } else {\r\n // If only individual borders are specified\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n styles.push(\"border-top: none;\");\r\n styles.push(\"border-right: none;\");\r\n styles.push(\"border-bottom: none;\");\r\n styles.push(\"border-left: none;\");\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n styles.push(\r\n `border-top: ${border.top.width} ${border.top.style} ${border.top.color};`,\r\n );\r\n }\r\n if (border.right) {\r\n styles.push(\r\n `border-right: ${border.right.width} ${border.right.style} ${border.right.color};`,\r\n );\r\n }\r\n if (border.bottom) {\r\n styles.push(\r\n `border-bottom: ${border.bottom.width} ${border.bottom.style} ${border.bottom.color};`,\r\n );\r\n }\r\n if (border.left) {\r\n styles.push(\r\n `border-left: ${border.left.width} ${border.left.style} ${border.left.color};`,\r\n );\r\n }\r\n\r\n return styles.join(\" \");\r\n}\r\n\r\nfunction Button({ config, devMode }: ButtonProps) {\r\n const {\r\n innerLink,\r\n children,\r\n backgroundColor,\r\n color,\r\n padding,\r\n borderRadius,\r\n border,\r\n width,\r\n maxWidth,\r\n justifyContent,\r\n textAlign,\r\n fontSize,\r\n fontWeight,\r\n fontStyle,\r\n fontFamily,\r\n lineHeight,\r\n letterSpacing,\r\n textTransform,\r\n textDecoration,\r\n direction,\r\n verticalAlign,\r\n opacity,\r\n whiteSpace,\r\n wordBreak,\r\n } = config;\r\n\r\n // Resolve href from innerLink\r\n const href = buildLinkHref(innerLink);\r\n const target = innerLink?.target || \"_blank\";\r\n\r\n // Sanitize fontFamily early so safeFontFamily is available for all paths below.\r\n const safeFontFamily = fontFamily\r\n ? fontFamily.replace(/['\"]/g, \"\")\r\n : fontFamily;\r\n\r\n // Outer TD Style for Background and Border Radius (no border)\r\n const backgroundTdStyle: CSSProperties = {\r\n backgroundColor: backgroundColor,\r\n borderRadius: borderRadius,\r\n width: width || \"auto\",\r\n ...(maxWidth && { maxWidth: maxWidth }),\r\n // Overflow hidden to clip background to border-radius\r\n ...(borderRadius && { overflow: \"hidden\" }),\r\n };\r\n\r\n // Border styles\r\n const borderStyleString = getBorderStyleString(border);\r\n\r\n // --- Determine Button Approach Based on Width ---\r\n\r\n // Check if width is percentage-based or not defined\r\n const isPercentageWidth = !width || width.includes(\"%\");\r\n const useSimpleOutlookApproach = isPercentageWidth;\r\n\r\n const align = justifyContent ? justifyMap[justifyContent] : undefined;\r\n\r\n // --- VML Calculation and Code for Outlook Compatibility (Fixed Width Only) ---\r\n let vmlButton = \"\";\r\n\r\n if (!useSimpleOutlookApproach) {\r\n // VML needs fixed pixel height. We estimate it based on padding and potential wrapping.\r\n const numericPadding = padding ? parseInt(padding.split(\" \")[0] || \"12\", 10) : 12;\r\n const numericFontSize = fontSize ? parseInt(fontSize, 10) : 0;\r\n const numericLineHeight = lineHeight\r\n ? lineHeight.includes(\"px\")\r\n ? parseInt(lineHeight, 10)\r\n : numericFontSize * parseFloat(lineHeight)\r\n : numericFontSize;\r\n\r\n // Trust user's explicit pixel width - no calculation needed\r\n const vmlWidth = parseInt(width, 10);\r\n\r\n // Calculate VML height - trust user's padding and let text wrap naturally\r\n // VML v:textbox will handle text wrapping automatically\r\n const textContent = typeof children === \"string\" ? children : \"\";\r\n\r\n // Estimate number of lines based on text length and button width\r\n const horizontalPadding = padding?.split(\" \")[1]\r\n ? parseInt(padding.split(\" \")[1], 10) * 2\r\n : numericPadding * 2;\r\n\r\n const availableTextWidth = vmlWidth - horizontalPadding;\r\n const charWidthMultiplier =\r\n fontWeight && parseInt(fontWeight) >= 500 ? 0.7 : 0.6;\r\n const avgCharWidth = numericFontSize * charWidthMultiplier;\r\n const charsPerLine = Math.max(\r\n Math.floor(availableTextWidth / avgCharWidth),\r\n 1,\r\n );\r\n const numberOfLines = Math.max(\r\n Math.ceil(textContent.length / charsPerLine),\r\n 1,\r\n );\r\n\r\n // Calculate height: vertical padding + (lines * line height) + extra buffer for VML\r\n const textHeight = numberOfLines * numericLineHeight;\r\n // Add extra 4px buffer to prevent bottom cropping in VML\r\n const vmlHeight = Math.max(numericPadding * 2 + textHeight + 4, 40);\r\n\r\n // VML colors must use the full hex format (e.g., #000000)\r\n const vmlFillColor = backgroundColor\r\n ? backgroundColor.startsWith(\"#\")\r\n ? backgroundColor\r\n : `#${backgroundColor}`\r\n : undefined;\r\n\r\n // VML stroke color for border\r\n const vmlStrokeColor = border?.color || vmlFillColor;\r\n const vmlStrokeWeight = border?.width ? parseInt(border.width, 10) : 0;\r\n const hasVmlStroke = vmlStrokeWeight > 0;\r\n\r\n // Build VML font styles - consistent with other rendering paths\r\n const vmlFontWeight = fontWeight;\r\n const vmlFontStyle = fontStyle === \"italic\" ? \"font-style:italic;\" : \"\";\r\n const vmlLetterSpacing = letterSpacing\r\n ? `letter-spacing:${letterSpacing};`\r\n : \"\";\r\n const vmlTextTransform = textTransform\r\n ? `text-transform:${textTransform};`\r\n : \"\";\r\n const vmlTextDecoration =\r\n textDecoration && textDecoration !== \"none\"\r\n ? `text-decoration:${textDecoration};`\r\n : \"\";\r\n const vmlWhiteSpace =\r\n whiteSpace ? `white-space:${whiteSpace};` : \"\";\r\n const vmlDirection = direction ? `direction:${direction};` : \"\";\r\n const vmlOpacity = opacity !== undefined ? `opacity:${opacity};` : \"\";\r\n\r\n // VML code uses MSO conditional comments to render only in Outlook\r\n // Use table with explicit MSO height for vertical centering\r\n const horizontalPaddingValue = padding?.split(\" \")[1]\r\n ? parseInt(padding.split(\" \")[1], 10)\r\n : numericPadding;\r\n\r\n // For VML, we need to use a table inside to properly apply padding and centering\r\n let vmlAlignAttr = \"\";\r\n let vmlAlignStyle = \"\";\r\n if (textAlign === \"center\") {\r\n vmlAlignAttr = 'align=\"center\"';\r\n } else if (textAlign) {\r\n vmlAlignStyle = `text-align:${textAlign};`;\r\n }\r\n\r\n // Border radius is intentionally omitted (arcsize=\"0%\") for Outlook Classic.\r\n // Outlook Classic does not reliably support rounded corners and the result\r\n // is inconsistent, so we render sharp corners there instead.\r\n vmlButton = `\r\n <!--[if mso]>\r\n <v:roundrect xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w=\"urn:schemas-microsoft-com:office:word\" ${href ? `href=\"${href}\"` : \"\"} style=\"height:${vmlHeight}px;width:${vmlWidth}px;\" arcsize=\"0%\" ${vmlStrokeColor ? `strokecolor=\"${vmlStrokeColor}\"` : \"\"} ${hasVmlStroke ? `strokeweight=\"${vmlStrokeWeight}px\"` : 'stroke=\"f\"'} ${vmlFillColor ? `fillcolor=\"${vmlFillColor}\"` : \"\"}>\r\n <w:anchorlock/>\r\n <v:textbox inset=\"${horizontalPaddingValue}px,${numericPadding}px,${horizontalPaddingValue}px,${numericPadding}px\">\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"100%\" style=\"border-collapse:collapse;\">\r\n <tr>\r\n <td ${vmlAlignAttr} valign=\"middle\" style=\"${vmlAlignStyle}${color ? `color:${color};` : \"\"}${safeFontFamily ? `font-family:${safeFontFamily};` : \"\"}${fontSize ? `font-size:${fontSize};` : \"\"}${vmlFontWeight ? `font-weight:${vmlFontWeight};` : \"\"}${vmlFontStyle}${vmlLetterSpacing}${vmlTextTransform}${vmlTextDecoration}${vmlWhiteSpace}${vmlDirection}${vmlOpacity}${lineHeight ? `line-height:${lineHeight};` : \"\"}mso-line-height-rule:exactly;\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </td>\r\n </tr>\r\n </table>\r\n </v:textbox>\r\n </v:roundrect>\r\n <![endif]-->\r\n `;\r\n }\r\n\r\n // --- Simple Outlook Approach for Percentage Widths ---\r\n let simpleOutlookButton = \"\";\r\n\r\n if (useSimpleOutlookApproach) {\r\n // Build consistent inline styles for text properties\r\n const textDecorationStyle =\r\n textDecoration && textDecoration !== \"none\"\r\n ? `text-decoration: ${textDecoration};`\r\n : \"\";\r\n const fontStyleProp = fontStyle ? `font-style: ${fontStyle};` : \"\";\r\n const letterSpacingProp = letterSpacing\r\n ? `letter-spacing: ${letterSpacing};`\r\n : \"\";\r\n const textTransformProp = textTransform\r\n ? `text-transform: ${textTransform};`\r\n : \"\";\r\n const whiteSpaceProp = whiteSpace ? `white-space: ${whiteSpace};` : \"\";\r\n const directionProp = direction ? `direction: ${direction};` : \"\";\r\n const opacityProp = opacity !== undefined ? `opacity: ${opacity};` : \"\";\r\n const wordBreakProp = wordBreak ? `word-break: ${wordBreak};` : \"\";\r\n\r\n // Border radius is intentionally omitted from the Outlook Classic table cell.\r\n // Outlook Classic ignores border-radius on table cells anyway, and including it\r\n // can cause unexpected rendering artifacts, so we explicitly leave it out.\r\n simpleOutlookButton = `\r\n <!--[if mso]>\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"100%\" style=\"border-collapse: collapse;\">\r\n <tr>\r\n <td ${align ? `align=\"${align}\"` : \"\"} style=\"padding: 0;\">\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"${width || \"auto\"}\" style=\"border-collapse: collapse;\">\r\n <tr>\r\n <td ${backgroundColor ? `bgcolor=\"${backgroundColor}\"` : \"\"} ${textAlign ? `align=\"${textAlign}\"` : \"\"} style=\"${padding ? `padding: ${padding};` : \"\"} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${borderStyleString}\">\r\n ${\r\n href\r\n ? `<a href=\"${href}\" target=\"${target}\" rel=\"noopener noreferrer\" style=\"${color ? `color: ${color};` : \"\"} ${textDecorationStyle} display: block; ${safeFontFamily ? `font-family: ${safeFontFamily};` : \"\"} ${fontSize ? `font-size: ${fontSize};` : \"\"} ${fontWeight ? `font-weight: ${fontWeight};` : \"\"} ${fontStyleProp} ${lineHeight ? `line-height: ${lineHeight};` : \"\"} ${letterSpacingProp} ${textTransformProp} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${whiteSpaceProp} ${directionProp} ${opacityProp} ${wordBreakProp} mso-line-height-rule: exactly;\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </a>`\r\n : `<span style=\"${color ? `color: ${color};` : \"\"} ${textDecorationStyle} display: block; ${safeFontFamily ? `font-family: ${safeFontFamily};` : \"\"} ${fontSize ? `font-size: ${fontSize};` : \"\"} ${fontWeight ? `font-weight: ${fontWeight};` : \"\"} ${fontStyleProp} ${lineHeight ? `line-height: ${lineHeight};` : \"\"} ${letterSpacingProp} ${textTransformProp} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${whiteSpaceProp} ${directionProp} ${opacityProp} ${wordBreakProp} mso-line-height-rule: exactly;\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>`\r\n }\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n </table>\r\n <![endif]-->\r\n `;\r\n }\r\n\r\n // Build shared inline style fragments for the non-MSO path.\r\n // fontFamily uses the sanitized value so embedded quotes never break the\r\n // style attribute string (which is always wrapped in double quotes).\r\n const sharedTextStyles = [\r\n color ? `color: ${color};` : \"\",\r\n safeFontFamily ? `font-family: ${safeFontFamily};` : \"\",\r\n fontSize ? `font-size: ${fontSize};` : \"\",\r\n fontWeight ? `font-weight: ${fontWeight};` : \"\",\r\n fontStyle ? `font-style: ${fontStyle};` : \"\",\r\n lineHeight ? `line-height: ${lineHeight};` : \"\",\r\n letterSpacing ? `letter-spacing: ${letterSpacing};` : \"\",\r\n textTransform ? `text-transform: ${textTransform};` : \"\",\r\n textDecoration && textDecoration !== \"none\"\r\n ? `text-decoration: ${textDecoration};`\r\n : \"\",\r\n direction ? `direction: ${direction};` : \"\",\r\n opacity !== undefined ? `opacity: ${opacity};` : \"\",\r\n whiteSpace ? `white-space: ${whiteSpace};` : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n // Wrapper table for alignment - maintains proper positioning for hover indicators\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n boxSizing: \"border-box\",\r\n border: 0,\r\n margin: 0,\r\n padding: 0,\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n <td\r\n align={align}\r\n style={{\r\n padding: 0,\r\n }}\r\n >\r\n {/* Inner button table - this is the actual button structure */}\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n // --- Start dev\r\n position: \"relative\",\r\n // --- End dev\r\n\r\n width: width || \"auto\",\r\n ...(maxWidth && { maxWidth: maxWidth }),\r\n borderCollapse: \"collapse\",\r\n\r\n // base\r\n boxSizing: \"border-box\",\r\n border: 0,\r\n margin: 0,\r\n padding: 0,\r\n }}\r\n onClick={devMode ? (e) => e.preventDefault() : undefined}\r\n >\r\n <tbody>\r\n <tr>\r\n <td\r\n dangerouslySetInnerHTML={{\r\n __html: `\r\n ${useSimpleOutlookApproach ? simpleOutlookButton : vmlButton}\r\n <!--[if !mso]><!-->\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse: collapse; width: 100%;\">\r\n <tbody>\r\n <tr>\r\n <td style=\"${backgroundTdStyle.backgroundColor ? `background-color: ${backgroundTdStyle.backgroundColor};` : \"\"} ${backgroundTdStyle.borderRadius ? `border-radius: ${backgroundTdStyle.borderRadius};` : \"\"} width: ${backgroundTdStyle.width}; ${maxWidth ? `max-width: ${maxWidth};` : \"\"} ${borderRadius ? \"overflow: hidden;\" : \"\"}\">\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse: separate; border-spacing: 0; ${borderRadius ? `border-radius: ${borderRadius};` : \"\"} width: 100%; ${borderStyleString}\">\r\n <tbody>\r\n <tr>\r\n <td style=\"padding: 0;\">\r\n ${\r\n devMode\r\n ? `<span style=\"${sharedTextStyles} ${textDecoration && textDecoration !== \"none\" ? \"\" : \"text-decoration: none;\"} display: block; ${wordBreak ? `word-break: ${wordBreak};` : \"\"} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${padding ? `padding: ${padding};` : \"\"}\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>`\r\n : href\r\n ? `<a href=\"${href}\" target=\"${target}\" rel=\"noopener noreferrer\" style=\"${sharedTextStyles} ${textDecoration && textDecoration !== \"none\" ? \"\" : \"text-decoration: none;\"} display: block; ${wordBreak ? `word-break: ${wordBreak};` : \"\"} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${padding ? `padding: ${padding};` : \"\"}\">\r\n <span>\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>\r\n </a>`\r\n : `<span style=\"${sharedTextStyles} ${textDecoration && textDecoration !== \"none\" ? \"\" : \"text-decoration: none;\"} display: block; ${wordBreak ? `word-break: ${wordBreak};` : \"\"} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${padding ? `padding: ${padding};` : \"\"}\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>`\r\n }\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!--<![endif]-->\r\n `,\r\n }}\r\n />\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Button, arePropsEqual);","import { CSSProperties, Fragment, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport { BorderConfig } from \"../types\";\r\n\r\nexport interface BackgroundImageType {\r\n src: string;\r\n repeat?: \"no-repeat\" | \"repeat\" | \"repeat-x\" | \"repeat-y\";\r\n size?: \"auto\" | \"cover\" | \"contain\";\r\n position?: string;\r\n}\r\n\r\nexport type ColumnConfig = {\r\n // Border and Padding\r\n borderRadius?: string;\r\n padding?: string;\r\n border?: BorderConfig;\r\n\r\n // Alignment (maps to vertical-align)\r\n alignItems?: \"start\" | \"center\" | \"end\";\r\n justifyContent?: \"start\" | \"center\" | \"end\";\r\n\r\n // background\r\n backgroundColor?: string;\r\n backgroundImage?: BackgroundImageType;\r\n\r\n // Width/Dimension\r\n width?: string;\r\n height?: string;\r\n\r\n // NEW: Gap property for spacing between children\r\n gap?: string;\r\n};\r\n\r\nexport type ColumnProps = {\r\n children: ReactNode;\r\n config: ColumnConfig;\r\n devNode?: ReactNode;\r\n};\r\n\r\n// Define the exact set of acceptable values for the 'valign' attribute\r\ntype TdValign = \"top\" | \"middle\" | \"bottom\";\r\n\r\n// Define the exact set of acceptable values for the 'align' attribute\r\ntype Tdalign = \"left\" | \"center\" | \"right\";\r\n\r\n// Helper for vertical alignment\r\nconst vAlignMap: Record<\r\n NonNullable<ColumnConfig[\"justifyContent\"]>,\r\n TdValign\r\n> = {\r\n start: \"top\",\r\n center: \"middle\",\r\n end: \"bottom\",\r\n};\r\n\r\n// Helper for horizontal alignment\r\nconst alignMap: Record<NonNullable<ColumnConfig[\"alignItems\"]>, Tdalign> = {\r\n start: \"left\",\r\n center: \"center\",\r\n end: \"right\",\r\n};\r\n\r\n// Helper to convert border config to CSS border shorthand\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: CSSProperties = {};\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n } else {\r\n // If only individual borders are specified, explicitly set others to 'none'\r\n // to prevent Outlook Classic from showing black borders\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n style.borderTop = \"none\";\r\n style.borderRight = \"none\";\r\n style.borderBottom = \"none\";\r\n style.borderLeft = \"none\";\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n }\r\n if (border.right) {\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n }\r\n if (border.bottom) {\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n }\r\n if (border.left) {\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n }\r\n\r\n return style;\r\n}\r\n\r\nfunction Column({ children, config, devNode }: ColumnProps) {\r\n // Process children array for gap support\r\n const childrenArray = (\r\n Array.isArray(children) ? children : [children]\r\n ).filter((child) => child != null) as ReactNode[];\r\n const numChildren = childrenArray.length;\r\n\r\n // 1. Outer table style: Takes up the full width/height of its parent TD.\r\n // height here drives the *total* outer height of the column.\r\n const outerTableStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: config.height,\r\n borderCollapse: \"collapse\",\r\n };\r\n\r\n // 2. Outer TD style: Background and Border Radius (no border here).\r\n // height is set so the TD occupies the full declared height.\r\n const outerTdStyle: React.CSSProperties = {\r\n width: config.width,\r\n height: config.height,\r\n backgroundColor: config.backgroundColor,\r\n borderRadius: config.borderRadius,\r\n\r\n // Background Image styles\r\n backgroundImage: config.backgroundImage\r\n ? `url(${config.backgroundImage.src})`\r\n : undefined,\r\n backgroundRepeat: config.backgroundImage?.repeat,\r\n backgroundSize: config.backgroundImage?.size,\r\n backgroundPosition: config.backgroundImage?.position,\r\n\r\n // Overflow hidden to clip background to border-radius\r\n ...(config.borderRadius && { overflow: \"hidden\" }),\r\n };\r\n\r\n // 2b. Inner table style: Border and Border Radius.\r\n // height: 100% so it stretches to fill the outer TD's declared height.\r\n const innerTableStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: \"100%\", // fill the outer TD rather than re-declaring the pixel value\r\n borderCollapse: \"separate\",\r\n borderSpacing: 0,\r\n borderRadius: config.borderRadius,\r\n ...getBorderStyle(config.border),\r\n };\r\n\r\n // 3. Inner TD style: Padding and Vertical Alignment only.\r\n // *** No height here. ***\r\n // The outer TD/table owns the height; padding is purely inner spacing,\r\n // so the total rendered height = declared height (padding is inside).\r\n const innerTdStyle: React.CSSProperties = {\r\n padding: config.padding,\r\n // height intentionally omitted — setting it here would make browsers\r\n // treat it as content-box height and add padding on top, causing the\r\n // total to exceed the declared height in preview mode.\r\n verticalAlign: config.alignItems ? alignMap[config.alignItems] : \"top\",\r\n };\r\n\r\n // 4. Gap spacer style (used between children)\r\n const gapSpacerStyle: React.CSSProperties = {\r\n height: config.gap || \"0\",\r\n lineHeight: \"1px\",\r\n fontSize: \"1px\",\r\n width: \"100%\",\r\n };\r\n\r\n // Main content rendering\r\n const renderContent = () => (\r\n <table\r\n aria-label=\"Column Padding\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={innerTableStyle}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Inner TD: Padding and Vertical Alignment only — no height */}\r\n <td\r\n style={innerTdStyle}\r\n valign={\r\n config.justifyContent ? vAlignMap[config.justifyContent] : \"top\"\r\n }\r\n align={config.alignItems ? alignMap[config.alignItems] : \"left\"}\r\n >\r\n {/* Content wrapper for gap support */}\r\n {config.gap && numChildren > 1 ? (\r\n <table\r\n aria-label=\"Column Gap Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n >\r\n <tbody>\r\n {childrenArray.map((child, index) => (\r\n <Fragment key={`col-child-${index}`}>\r\n <tr>\r\n <td\r\n style={{\r\n verticalAlign: config.alignItems\r\n ? alignMap[config.alignItems]\r\n : \"top\",\r\n }}\r\n valign={\r\n config.justifyContent\r\n ? vAlignMap[config.justifyContent]\r\n : \"top\"\r\n }\r\n align={\r\n config.alignItems\r\n ? alignMap[config.alignItems]\r\n : \"left\"\r\n }\r\n >\r\n {child}\r\n </td>\r\n </tr>\r\n {/* Add gap spacer between children (not after last child) */}\r\n {index < numChildren - 1 && (\r\n <tr>\r\n <td style={gapSpacerStyle}>&nbsp;</td>\r\n </tr>\r\n )}\r\n </Fragment>\r\n ))}\r\n </tbody>\r\n </table>\r\n ) : (\r\n children\r\n )}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n );\r\n\r\n return (\r\n <table\r\n aria-label=\"Column Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n position: \"relative\",\r\n ...outerTableStyle,\r\n }}\r\n {...(config.height && { height: config.height })}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Outer TD: Background, Border Radius, Width, Height */}\r\n <td\r\n style={outerTdStyle}\r\n {...(config.width && { width: config.width })}\r\n {...(config.height && { height: config.height })}\r\n >\r\n {renderContent()}\r\n </td>\r\n </tr>\r\n </tbody>\r\n {devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Column, arePropsEqual);\r\n","import { CSSProperties, Fragment, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport { BorderConfig } from \"../types\";\r\n\r\nexport type WidthType = \"full\" | \"fixed\";\r\nexport type WidthDistributionType = \"equals\" | \"ratio\" | \"manual\";\r\n\r\nexport interface RatioConstraint {\r\n mainChildIndex: number;\r\n value: [number, number];\r\n}\r\n\r\nexport type ChildrenConstraints =\r\n | {\r\n widthDistributionType: \"equals\";\r\n }\r\n | {\r\n widthDistributionType: \"ratio\";\r\n ratio: RatioConstraint;\r\n }\r\n | {\r\n widthDistributionType: \"manual\";\r\n widths: string[];\r\n };\r\n\r\nexport interface ContainerConfig {\r\n widthType: WidthType;\r\n childrenConstraints: ChildrenConstraints;\r\n\r\n shouldWrap?: boolean;\r\n borderRadius?: string;\r\n border?: BorderConfig;\r\n padding?: string;\r\n gap?: string;\r\n width?: string;\r\n height?: string;\r\n alignItems?: \"start\" | \"center\" | \"end\";\r\n justifyContent?: \"start\" | \"center\" | \"end\";\r\n backgroundColor?: string;\r\n backgroundImage?: {\r\n src: string;\r\n repeat?: \"no-repeat\" | \"repeat\" | \"repeat-x\" | \"repeat-y\";\r\n size?: \"auto\" | \"cover\" | \"contain\";\r\n position?: string;\r\n };\r\n}\r\n\r\nexport type ContainerProps = {\r\n config: ContainerConfig;\r\n children: ReactNode;\r\n devMode?: boolean;\r\n devNode?: ReactNode;\r\n};\r\n\r\nconst alignMap: Record<NonNullable<ContainerConfig[\"alignItems\"]>, string> = {\r\n start: \"top\",\r\n center: \"middle\",\r\n end: \"bottom\",\r\n};\r\n\r\ntype TdAlign = \"center\" | \"left\" | \"right\";\r\n\r\nconst justifyMap: Record<\r\n NonNullable<ContainerConfig[\"justifyContent\"]>,\r\n TdAlign\r\n> = {\r\n start: \"left\",\r\n center: \"center\",\r\n end: \"right\",\r\n};\r\n\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: CSSProperties = {};\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n } else {\r\n // If only individual borders are specified, explicitly set others to 'none'\r\n // to prevent Outlook Classic from showing black borders\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n style.borderTop = \"none\";\r\n style.borderRight = \"none\";\r\n style.borderBottom = \"none\";\r\n style.borderLeft = \"none\";\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n }\r\n if (border.right) {\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n }\r\n if (border.bottom) {\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n }\r\n if (border.left) {\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n }\r\n\r\n return style;\r\n}\r\n\r\nfunction Container({ children, config, devMode, devNode }: ContainerProps) {\r\n const { widthType, childrenConstraints } = config;\r\n\r\n const childrenArray = (\r\n Array.isArray(children) ? children : [children]\r\n ).filter((child) => child != null) as ReactNode[];\r\n const numChildren = childrenArray.length;\r\n\r\n const containerWidthPx = (() => {\r\n if (widthType === \"fixed\" && config.width && config.width.endsWith(\"px\")) {\r\n return parseInt(config.width, 10);\r\n }\r\n return 600;\r\n })();\r\n\r\n const gapWidthPx = (() => {\r\n if (config.gap && config.gap.endsWith(\"px\")) {\r\n return parseInt(config.gap, 10);\r\n }\r\n return 0;\r\n })();\r\n\r\n const getChildWidths = (() => {\r\n const { widthDistributionType } = childrenConstraints;\r\n const totalGapSpace = gapWidthPx * (numChildren > 1 ? numChildren - 1 : 0);\r\n const remainingContentSpace = containerWidthPx - totalGapSpace;\r\n\r\n switch (widthDistributionType) {\r\n case \"equals\":\r\n const equalContentWidth = remainingContentSpace / numChildren;\r\n return Array(numChildren).fill(`${equalContentWidth}px`);\r\n case \"ratio\": {\r\n const { ratio } = childrenConstraints as {\r\n widthDistributionType: \"ratio\";\r\n ratio: RatioConstraint;\r\n };\r\n const {\r\n mainChildIndex,\r\n value: [numerator, denominator],\r\n } = ratio;\r\n\r\n if (\r\n numChildren < 2 ||\r\n mainChildIndex < 0 ||\r\n mainChildIndex >= numChildren ||\r\n denominator === 0\r\n ) {\r\n const equalFallbackWidth = remainingContentSpace / numChildren;\r\n return Array(numChildren).fill(`${equalFallbackWidth}px`);\r\n }\r\n\r\n const mainChildWidth =\r\n (remainingContentSpace * numerator) / denominator;\r\n const remainingWidth = remainingContentSpace - mainChildWidth;\r\n const numOtherChildren = numChildren - 1;\r\n const otherChildWidth =\r\n numOtherChildren > 0 ? remainingWidth / numOtherChildren : 0;\r\n\r\n const widths = Array(numChildren).fill(`${otherChildWidth}px`);\r\n widths[mainChildIndex] = `${mainChildWidth}px`;\r\n\r\n return widths;\r\n }\r\n\r\n case \"manual\": {\r\n const { widths } = childrenConstraints as {\r\n widthDistributionType: \"manual\";\r\n widths: string[];\r\n };\r\n return widths.length === numChildren ? widths : [];\r\n }\r\n default:\r\n return [];\r\n }\r\n })();\r\n\r\n const outerTableStyle: CSSProperties = {\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n };\r\n\r\n // 1. Background TD Style - Background color, border radius, background image\r\n const backgroundTdStyle: CSSProperties = {\r\n backgroundColor: config.backgroundColor,\r\n borderRadius: config.borderRadius,\r\n maxWidth: widthType === \"fixed\" ? config.width || \"600px\" : undefined,\r\n backgroundImage: config.backgroundImage\r\n ? `url(${config.backgroundImage.src})`\r\n : undefined,\r\n backgroundRepeat: config.backgroundImage?.repeat,\r\n backgroundSize: config.backgroundImage?.size,\r\n backgroundPosition: config.backgroundImage?.position,\r\n // Overflow hidden to clip background to border-radius\r\n ...(config.borderRadius && { overflow: \"hidden\" }),\r\n };\r\n\r\n // 2. Border Table Style - Border and border radius\r\n const borderTableStyle: CSSProperties = {\r\n width: \"100%\",\r\n borderCollapse: \"separate\",\r\n borderSpacing: 0,\r\n borderRadius: config.borderRadius,\r\n ...getBorderStyle(config.border),\r\n };\r\n\r\n // 3. Padding TD Style\r\n const innerTdStyle: CSSProperties = {\r\n padding: config.padding,\r\n width: \"100%\",\r\n verticalAlign: config.alignItems ? alignMap[config.alignItems] : \"top\",\r\n };\r\n\r\n const contentTableStyle: CSSProperties = {\r\n width: \"100%\",\r\n height: config.height,\r\n borderCollapse: \"collapse\",\r\n };\r\n\r\n const gapTdStyle: CSSProperties = {\r\n width: config.gap || \"0\",\r\n lineHeight: \"1px\",\r\n fontSize: \"1px\",\r\n };\r\n\r\n const justifyAlign = config.justifyContent\r\n ? justifyMap[config.justifyContent]\r\n : \"center\";\r\n const containerWidthAttr =\r\n widthType === \"fixed\" ? containerWidthPx : undefined;\r\n const isStacking = config.shouldWrap && numChildren > 1;\r\n const msoFixedWrapper = \"\";\r\n const msoFixedFooter = \"\";\r\n\r\n const rowElements = childrenArray.map((child, index) => {\r\n const childTdStyle: CSSProperties = {\r\n width: getChildWidths[index],\r\n verticalAlign: config.alignItems ? alignMap[config.alignItems] : \"top\",\r\n textAlign: \"left\",\r\n };\r\n\r\n if (config.gap && index < numChildren - 1) {\r\n return (\r\n <Fragment key={`ctn:${index}`}>\r\n <td\r\n key={`child-${index}`}\r\n className={isStacking ? \"stack-td\" : undefined}\r\n width={getChildWidths[index]}\r\n style={childTdStyle}\r\n >\r\n {child}\r\n\r\n {isStacking && (\r\n <div\r\n className=\"mobile-gap-spacer\"\r\n style={{\r\n display: \"none\",\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n height: config.gap,\r\n }}\r\n >\r\n &nbsp;\r\n </div>\r\n )}\r\n </td>\r\n\r\n <td\r\n key={`gap-${index}`}\r\n className={isStacking ? \"desktop-gap-column\" : undefined}\r\n width={config.gap}\r\n style={gapTdStyle}\r\n >\r\n &nbsp;\r\n </td>\r\n </Fragment>\r\n );\r\n }\r\n\r\n return (\r\n <td\r\n key={`child-${index}`}\r\n className={isStacking ? \"stack-td\" : undefined}\r\n width={getChildWidths[index]}\r\n style={childTdStyle}\r\n >\r\n {child}\r\n </td>\r\n );\r\n });\r\n\r\n return (\r\n <table\r\n aria-label={`Container | Table Outer`}\r\n cellPadding={0}\r\n cellSpacing={0}\r\n role=\"presentation\"\r\n border={0}\r\n style={{\r\n position: \"relative\",\r\n ...outerTableStyle,\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n <td align={justifyAlign}>\r\n <div dangerouslySetInnerHTML={{ __html: msoFixedWrapper }} />\r\n\r\n {/* Outer table for width constraint */}\r\n <table\r\n className={[\r\n widthType === \"fixed\" ? \"container-fixed-width\" : undefined,\r\n devMode ? \"main-wrapper relative\" : undefined,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n aria-label={`Container | Table Middle`}\r\n cellPadding={0}\r\n cellSpacing={0}\r\n role=\"presentation\"\r\n border={0}\r\n align={justifyAlign}\r\n style={{\r\n width: \"100%\",\r\n maxWidth:\r\n widthType === \"fixed\" ? config.width || \"600px\" : undefined,\r\n borderCollapse: \"collapse\",\r\n }}\r\n width={containerWidthAttr}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Background TD: Background color, border radius, background image */}\r\n <td style={backgroundTdStyle}>\r\n {/* Border Table: Border and border radius */}\r\n <table\r\n aria-label={`Container | Border Wrapper`}\r\n cellPadding={0}\r\n cellSpacing={0}\r\n role=\"presentation\"\r\n border={0}\r\n style={borderTableStyle}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Padding TD */}\r\n <td style={innerTdStyle}>\r\n {/* Content Table */}\r\n <table\r\n aria-label={`Container | Content Table`}\r\n cellPadding={0}\r\n cellSpacing={0}\r\n role=\"presentation\"\r\n border={0}\r\n style={contentTableStyle}\r\n >\r\n <tbody>\r\n <tr>{rowElements}</tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n {!!devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n\r\n <div dangerouslySetInnerHTML={{ __html: msoFixedFooter }} />\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Container, arePropsEqual);\r\n","import { memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\n\r\nexport interface DividerConfig {\r\n height?: string;\r\n color?: string;\r\n width?: string;\r\n margin?: string;\r\n align?: \"left\" | \"center\" | \"right\";\r\n hideOnMobile?: boolean;\r\n}\r\n\r\nexport type DividerProps = {\r\n config: DividerConfig;\r\n devNode?: ReactNode;\r\n};\r\n\r\nfunction Divider({ config, devNode }: DividerProps) {\r\n const {\r\n height = \"1px\",\r\n color = \"#cccccc\",\r\n width = \"100%\",\r\n margin = \"20px 0\",\r\n align = \"center\",\r\n hideOnMobile,\r\n } = config;\r\n\r\n const heightPx = parseInt(height, 10) || 1;\r\n\r\n // Parse margin into paddingTop / paddingBottom for the outer TD.\r\n // Outlook ignores shorthand \"20px 0\" on TDs — must be explicit.\r\n const [marginTopRaw = \"0\", marginRightRaw = \"0\", marginBottomRaw, marginLeftRaw] =\r\n margin.trim().split(/\\s+/);\r\n const marginTop = marginTopRaw;\r\n const marginBottom = marginBottomRaw ?? marginTopRaw; // \"20px 0\" → top=20px, bottom=20px\r\n void marginRightRaw;\r\n void marginLeftRaw;\r\n\r\n // Outlook requires align on the outer TD to correctly position\r\n // a fixed-width inner table (e.g. width=\"300px\").\r\n const alignAttr = align === \"left\" ? \"left\" : align === \"right\" ? \"right\" : \"center\";\r\n\r\n return (\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n position: \"relative\", // dev overlay anchor\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n border: \"0\",\r\n }}\r\n className={hideOnMobile ? \"hide-on-mobile\" : undefined}\r\n >\r\n <tbody>\r\n <tr>\r\n {/*\r\n Outer TD:\r\n - Uses explicit padding-top / padding-bottom instead of shorthand\r\n because Outlook/Word partially ignores padding shorthand on TDs.\r\n - align attribute (not just CSS text-align) drives centering of\r\n the inner table in Outlook.\r\n */}\r\n <td\r\n align={alignAttr}\r\n style={{\r\n paddingTop: marginTop,\r\n paddingBottom: marginBottom,\r\n paddingLeft: \"0\",\r\n paddingRight: \"0\",\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n }}\r\n >\r\n {/*\r\n Inner wrapper table:\r\n - width / align here position the line block itself.\r\n - NO background-color here — Outlook ignores it on <table>.\r\n - border=\"0\" as HTML attribute AND style — belt + braces for Outlook.\r\n */}\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n align={alignAttr}\r\n style={{\r\n width: width,\r\n borderCollapse: \"collapse\",\r\n border: \"0\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n {/*\r\n The actual divider line lives entirely on this TD:\r\n\r\n 1. height=\"N\" HTML attribute → Outlook uses this, not CSS height.\r\n 2. background-color on TD → only place Outlook respects it.\r\n 3. mso-line-height-rule:exactly → prevents Word inflating the row.\r\n 4. line-height === height → collapses the row in all clients.\r\n 5. font-size: 0 → kills any phantom text gap.\r\n 6. Empty content → &nbsp; adds ~1em phantom height in Outlook.\r\n\r\n MSO props cannot go through React's style object (it strips them),\r\n so we use a ref to write the raw style attribute after mount,\r\n and also set it as a static string via dangerouslySetInnerHTML\r\n on a child so it survives SSR / static rendering.\r\n */}\r\n <td\r\n {...({ height: heightPx } as Record<string, unknown>)}\r\n ref={(el) => {\r\n if (!el) return;\r\n el.setAttribute(\r\n \"style\",\r\n `height:${height};` +\r\n `line-height:${height};` +\r\n `font-size:0;` +\r\n `padding:0;` +\r\n `background-color:${color};` +\r\n `mso-line-height-rule:exactly;`\r\n );\r\n }}\r\n style={{\r\n // Fallback for non-Outlook clients (React-rendered style object).\r\n height: height,\r\n lineHeight: height,\r\n fontSize: \"0\",\r\n padding: \"0\",\r\n backgroundColor: color,\r\n }}\r\n />\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n\r\n {devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Divider, arePropsEqual);","// components/email/Font.tsx\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Declarative <Font> component for email <Head>.\r\n// Renders a @font-face rule (with optional MSO VML fallback comment) for a\r\n// single font family + weight + style combination.\r\n//\r\n// Usage (inside <Head>):\r\n// <Font\r\n// fontFamily=\"Roboto\"\r\n// fallbackFontFamily=\"Verdana\"\r\n// webFont={{\r\n// url: \"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2\",\r\n// format: \"woff2\",\r\n// }}\r\n// fontWeight={400}\r\n// fontStyle=\"normal\"\r\n// />\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type FontFormat =\r\n | \"woff2\"\r\n | \"woff\"\r\n | \"truetype\"\r\n | \"opentype\"\r\n | \"svg\"\r\n | \"embedded-opentype\";\r\n\r\nexport interface WebFont {\r\n /** Direct URL to the font file (woff2, woff, ttf, etc.) */\r\n url: string;\r\n /** Font format hint used in the CSS src descriptor */\r\n format: FontFormat;\r\n}\r\n\r\nexport interface FontProps {\r\n /** The CSS font-family name, e.g. \"Roboto\" */\r\n fontFamily: string;\r\n /**\r\n * Fallback font family used:\r\n * 1. In the MSO (Outlook) conditional comment so Outlook renders the\r\n * closest web-safe equivalent.\r\n * 2. As the CSS font-stack fallback after the web font.\r\n * Accepts a single string or an array for a prioritised fallback chain.\r\n */\r\n fallbackFontFamily?: string | string[];\r\n /**\r\n * Web font to load. When omitted the component only emits the MSO fallback\r\n * comment (useful for system fonts you still want to declare explicitly).\r\n */\r\n webFont?: WebFont;\r\n /** CSS font-weight — numeric (400) or keyword (\"bold\"). Default: 400 */\r\n fontWeight?: number | string;\r\n /** CSS font-style. Default: \"normal\" */\r\n fontStyle?: \"normal\" | \"italic\" | \"oblique\";\r\n}\r\n\r\n// ── Helpers ───────────────────────────────────────────────────────────────────\r\n\r\nfunction normaliseFallbacks(\r\n fallbackFontFamily: string | string[] | undefined,\r\n): string[] {\r\n if (!fallbackFontFamily) return [];\r\n return Array.isArray(fallbackFontFamily)\r\n ? fallbackFontFamily\r\n : [fallbackFontFamily];\r\n}\r\n\r\n/**\r\n * Build the CSS font-stack string from the primary family + fallbacks.\r\n * Wraps names that contain spaces in single quotes.\r\n */\r\nfunction buildFontStack(primary: string, fallbacks: string[]): string {\r\n const quote = (name: string) => (name.includes(\" \") ? `'${name}'` : name);\r\n return [primary, ...fallbacks].map(quote).join(\", \");\r\n}\r\n\r\n// ── Component ─────────────────────────────────────────────────────────────────\r\n\r\nexport default function Font({\r\n fontFamily,\r\n fallbackFontFamily,\r\n webFont,\r\n fontWeight = 400,\r\n fontStyle = \"normal\",\r\n}: FontProps) {\r\n const fallbacks = normaliseFallbacks(fallbackFontFamily);\r\n\r\n const fontFaceCss = webFont\r\n ? `\r\n@font-face {\r\n font-family: '${fontFamily}';\r\n font-style: ${fontStyle};\r\n font-weight: ${fontWeight};\r\n font-display: swap;\r\n src: url('${webFont.url}') format('${webFont.format}');\r\n mso-font-alt: '${fallbacks[0] ?? \"sans-serif\"}';\r\n}`.trim()\r\n : null;\r\n\r\n const msoComment =\r\n fallbacks.length > 0\r\n ? `<!--[if mso]>\\n<style type=\"text/css\">\\n .${cssClassName(fontFamily)} {\\n font-family: ${buildFontStack(fallbacks[0], fallbacks.slice(1))}, sans-serif !important;\\n }\\n</style>\\n<![endif]-->`\r\n : null;\r\n\r\n return (\r\n <>\r\n {fontFaceCss && (\r\n <style\r\n type=\"text/css\"\r\n dangerouslySetInnerHTML={{ __html: fontFaceCss }}\r\n />\r\n )}\r\n {/* Render MSO comment via a raw html string injected into a <head>-safe element */}\r\n {msoComment && (\r\n <style\r\n type=\"text/css\"\r\n dangerouslySetInnerHTML={{\r\n __html: `</style>${msoComment}<style type=\"text/css\">`,\r\n }}\r\n />\r\n )}\r\n </>\r\n );\r\n}\r\n\r\n// ── Utility: generate a stable CSS class name from a font family name ─────────\r\n// Used in the MSO conditional comment to scope the fallback rule.\r\nexport function cssClassName(fontFamily: string): string {\r\n return `font-${fontFamily.toLowerCase().replace(/\\s+/g, \"-\")}`;\r\n}\r\n","import { ReactNode } from \"react\";\r\nimport ResolvedFont from \"../types/ResolvedFont\";\r\nimport Font from \"./Font\";\r\n\r\nexport interface HeadProps {\r\n /** Additional elements like custom <style> blocks, <title>, etc. */\r\n children?: ReactNode;\r\n /** Global background color (used in CSS reset). */\r\n backgroundColor?: string;\r\n /** Subject line for the email title. */\r\n title?: string;\r\n /** Array of gap values (e.g. [\"8px\", \"12px\", \"48px\"]) to generate mobile wrap margin-bottom rules */\r\n rowGaps?: string[];\r\n /**\r\n * Resolved fonts from `loadEmailFonts()`.\r\n * Head will render a <Font> for every variant of every family.\r\n * This is the preferred API when using the builder pipeline.\r\n *\r\n * Example:\r\n * const { resolved } = await loadEmailFonts(\r\n * extractFontFamilies(doc)\r\n * );\r\n * <Head fonts={resolved} ... />\r\n */\r\n fonts?: ResolvedFont[];\r\n}\r\n\r\nexport default function Head({\r\n children,\r\n backgroundColor = \"#ffffff\",\r\n title = \"Email Preview\",\r\n rowGaps = [],\r\n fonts = [],\r\n}: HeadProps) {\r\n const msoResetStyles = `\r\n .ExternalClass { width: 100%; line-height: 100%; } \r\n .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div { line-height: 100%; }\r\n table { mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-collapse: collapse; border-spacing: 0; }\r\n td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }\r\n img { border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; }\r\n #MessageViewBody img { min-width: 100%; }\r\n a[x-apple-data-detectors] { \r\n color: inherit !important; \r\n text-decoration: none !important; \r\n font-size: inherit !important; \r\n font-family: inherit !important; \r\n font-weight: inherit !important; \r\n line-height: inherit !important; \r\n }\r\n body { background-color: ${backgroundColor} !important; }\r\n p { margin: 0; }\r\n `;\r\n\r\n const globalStyles = `\r\n @media screen and (max-width: 768px) {\r\n .container-fixed-width {\r\n width: 100% !important;\r\n max-width: 100% !important;\r\n }\r\n }\r\n @media screen and (max-width: 768px) {\r\n .hide-on-mobile {\r\n display: none !important;\r\n max-height: 0 !important;\r\n overflow: hidden !important;\r\n mso-hide: all;\r\n }\r\n }\r\n @media screen and (min-width: 769px) {\r\n .hide-on-desktop {\r\n display: none !important;\r\n max-height: 0 !important;\r\n overflow: hidden !important;\r\n mso-hide: all;\r\n }\r\n }\r\n @media screen and (max-width: 768px) {\r\n .stack-td {\r\n width: 100% !important;\r\n display: block !important;\r\n float: left;\r\n clear: both;\r\n padding-left: 0 !important;\r\n padding-right: 0 !important;\r\n }\r\n .desktop-gap-column { width: 0 !important; display: none !important; }\r\n .mobile-gap-spacer {\r\n display: block !important;\r\n width: 100% !important;\r\n font-size: 1px !important;\r\n line-height: 1px !important;\r\n mso-line-height-rule: exactly;\r\n }\r\n }\r\n @media only screen and (max-width: 768px) {\r\n .row-content-table[data-mobile-justify=\"center\"] { margin: 0 auto !important; float: none !important; }\r\n .row-content-table[data-mobile-justify=\"start\"] { margin: 0 !important; float: left !important; }\r\n .row-content-table[data-mobile-justify=\"end\"] { margin: 0 0 0 auto !important; float: right !important; }\r\n .row-content-table[data-mobile-align=\"center\"] .child-cell { vertical-align: middle !important; }\r\n .row-content-table[data-mobile-align=\"start\"] .child-cell { vertical-align: top !important; }\r\n .row-content-table[data-mobile-align=\"end\"] .child-cell { vertical-align: bottom !important; }\r\n .row-content-table[data-mobile-wrap=\"true\"] { width: 100% !important; max-width: 100% !important; }\r\n .row-content-table[data-mobile-wrap=\"true\"] > tbody > .content-tr { display: block !important; }\r\n .row-content-table[data-mobile-wrap=\"true\"] > tbody > .content-tr > .child-cell {\r\n display: block !important;\r\n width: 100% !important;\r\n box-sizing: border-box !important;\r\n }\r\n .row-content-table[data-mobile-wrap=\"true\"] > tbody > .content-tr > .row-gap-td {\r\n display: none !important;\r\n width: 0 !important;\r\n height: 0 !important;\r\n }\r\n .row-content-table[data-mobile-wrap=\"true\"] > tbody > .content-tr > .child-cell:not(:last-child) {\r\n margin-bottom: 20px !important;\r\n }\r\n ${[\"10px\", \"15px\", \"20px\", \"24px\", \"30px\", \"40px\", ...rowGaps]\r\n .filter(\r\n (gap: string, index: number, self: string[]) =>\r\n self.indexOf(gap) === index,\r\n )\r\n .map(\r\n (gap: string) => `\r\n .row-content-table[data-mobile-wrap=\"true\"][data-gap=\"${gap}\"] > tbody > .content-tr > .child-cell:not(:last-child) {\r\n margin-bottom: ${gap} !important;\r\n }`,\r\n )\r\n .join(\"\\n\")}\r\n }\r\n a { color: inherit; text-decoration: none; }\r\n ol, ul { margin: 0px; padding: 0px; list-style: none; }\r\n li {\r\n list-style-type: none !important;\r\n list-style: none !important;\r\n position: relative;\r\n padding-left: 0px;\r\n margin: 0px;\r\n display: block !important;\r\n }\r\n li::marker {\r\n content: \"\" !important;\r\n font-size: 0px !important;\r\n line-height: 0px !important;\r\n color: transparent !important;\r\n width: 0px !important;\r\n }\r\n li[data-list=\"bullet\"] {\r\n list-style-type: disc !important;\r\n list-style-position: inside !important;\r\n padding-left: 1.5em;\r\n display: list-item !important;\r\n }\r\n li[data-list=\"ordered\"] {\r\n list-style-type: decimal !important;\r\n list-style-position: inside !important;\r\n padding-left: 1.5em;\r\n display: list-item !important;\r\n }\r\n li[data-list=\"bullet\"]::marker,\r\n li[data-list=\"ordered\"]::marker {\r\n content: normal !important;\r\n font-size: inherit !important;\r\n color: inherit !important;\r\n width: auto !important;\r\n padding: 0 !important;\r\n margin: 0 !important;\r\n }\r\n h1, h2, h3, h4, h5, h6 { margin: 0; padding: 0; font-weight: inherit; }\r\n `;\r\n\r\n return (\r\n <head>\r\n <meta httpEquiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n <meta httpEquiv=\"X-UA-Compatible\" content=\"IE=edge\" />\r\n <title>{title}</title>\r\n\r\n {/* ── Font declarations — rendered FIRST, before any text ──────────────\r\n • fonts prop: auto-rendered from loadEmailFonts() pipeline\r\n • children <Font>s: manually declared (original API, still works) */}\r\n {fonts.flatMap((resolved: ResolvedFont) =>\r\n resolved.fontProps.map((props, i: number) => (\r\n <Font\r\n key={`${resolved.family}-${props.fontWeight}-${props.fontStyle}-${i}`}\r\n {...props}\r\n />\r\n )),\r\n )}\r\n\r\n {/* Manual <Font> children or any other <style>/<meta> tags */}\r\n {children}\r\n\r\n <style\r\n type=\"text/css\"\r\n dangerouslySetInnerHTML={{ __html: msoResetStyles }}\r\n />\r\n <style\r\n type=\"text/css\"\r\n dangerouslySetInnerHTML={{ __html: globalStyles }}\r\n />\r\n </head>\r\n );\r\n}\r\n","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\n\r\n// Define the available HTML heading levels\r\nexport type HeadingLevel = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\r\n\r\nexport interface HeadingConfig {\r\n /** The text content. */\r\n text?: ReactNode;\r\n\r\n /** HTML heading level (h1 through h6). */\r\n level?: HeadingLevel;\r\n\r\n /** Padding around the heading (e.g., \"10px 0\"). */\r\n padding?: string;\r\n\r\n /** Text color. */\r\n color?: string;\r\n\r\n /** Horizontal text alignment. */\r\n textAlign?: \"left\" | \"center\" | \"right\" | \"justify\";\r\n\r\n /** Font family (e.g., 'Arial, sans-serif'). */\r\n fontFamily?: string;\r\n\r\n /** Font size (e.g., '24px'). Overrides default size for the level. */\r\n fontSize?: string;\r\n\r\n /** Font weight (e.g., 'normal', 'bold', or '700'). */\r\n fontWeight?: string;\r\n\r\n /** Font style (e.g., 'italic'). */\r\n fontStyle?: string;\r\n\r\n /** Line height (e.g., '1.3' or '30px'). */\r\n lineHeight?: string;\r\n\r\n /** Letter spacing (e.g., '0.5px', '1px'). */\r\n letterSpacing?: string;\r\n\r\n /** Text transform (e.g., 'uppercase', 'lowercase', 'capitalize'). */\r\n textTransform?: string;\r\n\r\n /** Text decoration (e.g., 'underline', 'line-through'). */\r\n textDecoration?: string;\r\n\r\n /** Text direction (e.g., 'ltr', 'rtl'). */\r\n direction?: string;\r\n\r\n /** Vertical alignment (e.g., 'sub', 'super'). Applied to content wrapper in Text, applied to TD here for alignment. */\r\n verticalAlign?: string;\r\n\r\n /** Background color of the heading block. */\r\n backgroundColor?: string;\r\n\r\n /** Word break behavior (e.g., 'break-all', 'break-word', 'keep-all', 'normal'). */\r\n wordBreak?: string;\r\n\r\n /** White space handling (e.g., 'nowrap', 'pre', 'pre-wrap', 'pre-line', 'normal'). */\r\n whiteSpace?: string;\r\n}\r\n\r\nexport type HeadingProps = {\r\n config: HeadingConfig;\r\n devMode?: ReactNode;\r\n children?: ReactNode;\r\n};\r\n\r\nfunction Heading({ config, devMode, children }: HeadingProps) {\r\n const {\r\n text,\r\n level = \"h1\",\r\n padding,\r\n color,\r\n textAlign,\r\n fontFamily,\r\n fontSize,\r\n fontWeight,\r\n fontStyle,\r\n lineHeight,\r\n letterSpacing,\r\n textTransform,\r\n textDecoration,\r\n direction,\r\n verticalAlign,\r\n backgroundColor,\r\n wordBreak,\r\n whiteSpace,\r\n } = config;\r\n\r\n // Determine the content to render\r\n const content = text ?? children;\r\n const isString = typeof content === \"string\";\r\n\r\n // 1. TD Style: Where padding, background, width, and verticalAlign are applied.\r\n const tdStyle: CSSProperties = {\r\n padding: padding,\r\n backgroundColor: backgroundColor,\r\n width: \"100%\",\r\n verticalAlign: verticalAlign || \"top\",\r\n };\r\n\r\n // 2. Heading Tag Style: Applied directly to the H tag.\r\n const headingStyle: CSSProperties = {\r\n color: color,\r\n textAlign: textAlign,\r\n fontFamily: fontFamily || \"Arial, Helvetica, sans-serif\",\r\n fontSize: fontSize,\r\n fontWeight: fontWeight,\r\n fontStyle: fontStyle,\r\n lineHeight: lineHeight,\r\n letterSpacing: letterSpacing,\r\n textTransform: textTransform as any,\r\n textDecoration: textDecoration,\r\n direction: direction as any,\r\n wordBreak: wordBreak as any,\r\n whiteSpace: whiteSpace as any,\r\n\r\n // Critical: Remove default top/bottom margin from HTML heading tags\r\n margin: \"0\",\r\n padding: \"0\",\r\n\r\n // Outlook specific fixes (using string indexing)\r\n [\"msoLineHeightRule\" as string]: \"exactly\",\r\n };\r\n\r\n // Dynamically create the Heading element\r\n const HeadingTag = level;\r\n\r\n return (\r\n // Wrap the heading content in a table for padding/width/background management.\r\n <table\r\n aria-label=\"Heading Block Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* TD: Applies Padding, Background, and Alignment */}\r\n <td style={tdStyle} align={textAlign as \"left\" | \"center\" | \"right\"}>\r\n {/* The actual Heading Tag with all inline styles */}\r\n {isString ? (\r\n <HeadingTag\r\n style={headingStyle}\r\n dangerouslySetInnerHTML={{ __html: content }}\r\n />\r\n ) : (\r\n <HeadingTag style={headingStyle}>{content}</HeadingTag>\r\n )}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Heading, arePropsEqual);\r\n","import React, { ReactNode } from \"react\";\r\n\r\nexport interface HtmlProps {\r\n children: ReactNode;\r\n // Allows the global email background color to be set easily\r\n backgroundColor?: string;\r\n}\r\n\r\nexport default function Html({\r\n children,\r\n backgroundColor = \"#ffffff\",\r\n}: HtmlProps) {\r\n const htmlAttributes = {\r\n // Standard xmlns attribute\r\n xmlns: \"http://www.w3.org/1999/xhtml\",\r\n \r\n // Namespaced attributes (with colons) are safe in the JS object\r\n \"xmlns:v\": \"urn:schemas-microsoft-com:vml\",\r\n \"xmlns:o\": \"urn:schemas-microsoft-com:office:office\",\r\n\r\n lang: \"en\",\r\n xmlLang: \"en\",\r\n \r\n // bgcolor attribute\r\n bgcolor: backgroundColor,\r\n \r\n // Note: The 'children' prop is passed as the third argument to createElement, not here.\r\n };\r\n\r\n // React.createElement avoids the JSX transpiler error by passing attributes as a JS object.\r\n return React.createElement(\r\n 'html', // The element tag name\r\n htmlAttributes, // The attributes/props object\r\n children // The content to be rendered inside the <html> tag\r\n );\r\n}\r\n","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport { BorderConfig } from \"../types\";\r\nimport IInnerLink from \"../types/IInnerLink\";\r\n\r\n/**\r\n * RULES NOT TO BE REMOVED\r\n * -------------------\r\n * - Image should not be draggable in dev mode as we don't want to disrupt the builder dnd behavior\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types & Helpers (Kept internal for zero-dependency portability)\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface ImageMobileConfig {\r\n width?: string;\r\n height?: string;\r\n maxWidth?: string;\r\n maxHeight?: string;\r\n backgroundColor?: string;\r\n padding?: string;\r\n borderRadius?: string;\r\n border?: BorderConfig;\r\n objectFit?: CSSProperties[\"objectFit\"];\r\n objectPosition?: string;\r\n hidden?: boolean;\r\n}\r\n\r\nexport interface ImageConfig {\r\n src: string;\r\n alt: string;\r\n width?: string;\r\n height?: string;\r\n maxWidth?: string;\r\n maxHeight?: string;\r\n backgroundColor?: string;\r\n padding?: string;\r\n borderRadius?: string;\r\n border?: BorderConfig;\r\n innerLink?: IInnerLink;\r\n objectFit?: CSSProperties[\"objectFit\"];\r\n objectPosition?: string;\r\n mobile?: ImageMobileConfig;\r\n}\r\n\r\nexport type ImageProps = {\r\n config: ImageConfig;\r\n devNode?: ReactNode;\r\n devMode?: boolean;\r\n previewMode?: boolean;\r\n};\r\n\r\n// Helper to build link href based on innerLink type\r\nfunction buildLinkHref(innerLink?: IInnerLink): string | null {\r\n if (!innerLink || innerLink.type === \"none\") return null;\r\n\r\n switch (innerLink.type) {\r\n case \"url\":\r\n return innerLink.url || null;\r\n case \"email\":\r\n return innerLink.email ? `mailto:${innerLink.email}` : null;\r\n case \"phone\":\r\n return innerLink.phone ? `tel:${innerLink.phone}` : null;\r\n case \"anchor\":\r\n return innerLink.anchor ? `#${innerLink.anchor}` : null;\r\n case \"page_top\":\r\n return \"#top\";\r\n case \"page_bottom\":\r\n return \"#bottom\";\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n const style: CSSProperties = {};\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n }\r\n if (border.top)\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n if (border.right)\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n if (border.bottom)\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n if (border.left)\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n return style;\r\n}\r\n\r\nfunction getBorderStyleString(border?: BorderConfig): string {\r\n if (!border) return \"\";\r\n const styles: string[] = [];\r\n\r\n // Standard shorthand\r\n if (border.width && border.style && border.color) {\r\n styles.push(\r\n `border:${border.width} ${border.style} ${border.color} !important;`,\r\n );\r\n } else {\r\n // If desktop had a border and mobile wants \"none\", we must explicitly kill it\r\n styles.push(`border: none !important;`);\r\n }\r\n\r\n // Individual sides\r\n if (border.top)\r\n styles.push(\r\n `border-top:${border.top.width} ${border.top.style} ${border.top.color} !important;`,\r\n );\r\n if (border.right)\r\n styles.push(\r\n `border-right:${border.right.width} ${border.right.style} ${border.right.color} !important;`,\r\n );\r\n if (border.bottom)\r\n styles.push(\r\n `border-bottom:${border.bottom.width} ${border.bottom.style} ${border.bottom.color} !important;`,\r\n );\r\n if (border.left)\r\n styles.push(\r\n `border-left:${border.left.width} ${border.left.style} ${border.left.color} !important;`,\r\n );\r\n\r\n return styles.join(\" \");\r\n}\r\n\r\nfunction Image({ config, devNode, devMode }: ImageProps) {\r\n const { src, alt, innerLink, mobile } = config;\r\n\r\n // Resolve href and target from innerLink\r\n const href = buildLinkHref(innerLink);\r\n const target = innerLink?.target || \"_blank\";\r\n\r\n const seed = src + (alt || \"\");\r\n const instanceId = seed\r\n .split(\"\")\r\n .reduce((acc, char) => acc + char.charCodeAt(0), 0)\r\n .toString(36);\r\n const imgClass = `img-${instanceId}`;\r\n\r\n // 1. Desktop Dimensional Logic\r\n const desktopWidth = config.width || \"100%\";\r\n const isPercent = desktopWidth.includes(\"%\");\r\n const widthAttr = desktopWidth.replace(\"px\", \"\");\r\n const heightAttr = config.height?.replace(\"px\", \"\");\r\n\r\n // Determine the table's \"initial\" width.\r\n // If it's 300px, the table should be 300px, not 100%.\r\n const tableWidth = isPercent ? desktopWidth : `${widthAttr}px`;\r\n\r\n // When width is a percentage, Outlook ignores CSS and renders the image at\r\n // its intrinsic pixel size. Setting a concrete `width` HTML attribute gives\r\n // Outlook a value to constrain against while modern clients continue to use\r\n // the CSS `width: 100%` for fluid rendering.\r\n //\r\n // If `maxWidth` is a pixel value (e.g. \"600px\"), we extract the number and\r\n // use it as the HTML `width` attribute so Outlook enforces that cap.\r\n // Other clients ignore the attribute and rely on CSS styles instead.\r\n // If `maxWidth` is not set or is not a pixel value (e.g. \"100%\"), we fall\r\n // back to the original behaviour (numeric string for px widths, undefined\r\n // for % widths).\r\n const maxWidthPx = config.maxWidth?.endsWith(\"px\")\r\n ? parseInt(config.maxWidth, 10)\r\n : undefined;\r\n\r\n const imgWidthAttr = isPercent ? (maxWidthPx ?? undefined) : widthAttr;\r\n\r\n // 2. Mobile Overrides — only emit CSS properties that are explicitly set,\r\n // so unspecified properties are left untouched (no forced defaults).\r\n let mobileCss = \"\";\r\n if (mobile) {\r\n // .wrap-${imgClass} rules\r\n const wrapRules: string[] = [\r\n // Always reset min-width so the px lock from desktop can be overridden\r\n \"min-width: 0 !important;\",\r\n ];\r\n if (mobile.width !== undefined)\r\n wrapRules.push(`width: ${mobile.width} !important;`);\r\n if (mobile.maxWidth !== undefined)\r\n wrapRules.push(`max-width: ${mobile.maxWidth} !important;`);\r\n\r\n // .td-${imgClass} rules\r\n const tdRules: string[] = [];\r\n if (mobile.padding !== undefined)\r\n tdRules.push(`padding: ${mobile.padding} !important;`);\r\n if (mobile.backgroundColor !== undefined)\r\n tdRules.push(`background-color: ${mobile.backgroundColor} !important;`);\r\n\r\n // .${imgClass} rules\r\n const imgRules: string[] = [];\r\n if (mobile.width !== undefined)\r\n imgRules.push(`width: ${mobile.width} !important;`);\r\n if (mobile.height !== undefined)\r\n imgRules.push(`height: ${mobile.height} !important;`);\r\n if (mobile.maxWidth !== undefined)\r\n imgRules.push(`max-width: ${mobile.maxWidth} !important;`);\r\n if (mobile.maxHeight !== undefined)\r\n imgRules.push(`max-height: ${mobile.maxHeight} !important;`);\r\n if (mobile.borderRadius !== undefined)\r\n imgRules.push(`border-radius: ${mobile.borderRadius} !important;`);\r\n if (mobile.hidden !== undefined)\r\n imgRules.push(`display: ${mobile.hidden ? \"none\" : \"block\"} !important;`);\r\n if (mobile.objectFit !== undefined)\r\n imgRules.push(`object-fit: ${mobile.objectFit} !important;`);\r\n if (mobile.objectPosition !== undefined)\r\n imgRules.push(`object-position: ${mobile.objectPosition} !important;`);\r\n if (mobile.border !== undefined)\r\n imgRules.push(getBorderStyleString(mobile.border));\r\n\r\n mobileCss = `\r\n @media screen and (max-width: 768px) {\r\n .wrap-${imgClass} {\r\n /* This breaks the px lock from desktop and makes it fluid */\r\n ${wrapRules.join(\"\\n \")}\r\n }\r\n .td-${imgClass} {\r\n ${tdRules.join(\"\\n \")}\r\n }\r\n .${imgClass} {\r\n ${imgRules.join(\"\\n \")}\r\n }\r\n }\r\n `;\r\n }\r\n\r\n const imgStyle: CSSProperties = {\r\n display: \"block\",\r\n width: isPercent ? \"100%\" : desktopWidth,\r\n height: config.height || \"auto\",\r\n maxWidth: config.maxWidth || \"100%\",\r\n maxHeight: config.maxHeight || \"none\",\r\n borderRadius: config.borderRadius || \"0\",\r\n ...getBorderStyle(config.border),\r\n outline: \"none\",\r\n textDecoration: \"none\",\r\n objectFit: config.objectFit,\r\n objectPosition: config.objectPosition,\r\n };\r\n\r\n const imageElement = (\r\n <img\r\n src={src}\r\n alt={alt}\r\n width={imgWidthAttr}\r\n height={heightAttr !== \"auto\" ? heightAttr : undefined}\r\n className={imgClass}\r\n style={imgStyle}\r\n draggable={!devMode}\r\n />\r\n );\r\n\r\n return (\r\n <>\r\n {mobile && <style dangerouslySetInnerHTML={{ __html: mobileCss }} />}\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n className={`wrap-${imgClass}`}\r\n align=\"center\" // Ensures a 300px image stays centered in its parent\r\n style={{\r\n width: tableWidth, // Fixed px here prevents the 100% \"ghost space\"\r\n maxWidth: \"100%\",\r\n borderCollapse: \"collapse\",\r\n margin: \"0 auto\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n <td\r\n className={`td-${imgClass}`}\r\n align=\"center\"\r\n style={{\r\n padding: config.padding,\r\n backgroundColor: config.backgroundColor,\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n width: tableWidth, // Lock the cell as well\r\n }}\r\n >\r\n {href && !devMode ? (\r\n <a\r\n href={href}\r\n target={target}\r\n {...(target === \"_blank\"\r\n ? { rel: \"noopener noreferrer\" }\r\n : {})}\r\n style={{ display: \"block\", width: \"100%\" }}\r\n >\r\n {imageElement}\r\n </a>\r\n ) : (\r\n imageElement\r\n )}\r\n </td>\r\n </tr>\r\n </tbody>\r\n {devMode && !!devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n </>\r\n );\r\n}\r\n\r\nexport default memo(Image, arePropsEqual);\r\n","import { CSSProperties, Fragment, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport {\r\n AlignItems,\r\n BorderConfig,\r\n JustifyContent,\r\n TdAlign,\r\n TdValign,\r\n} from \"../types\";\r\nimport IInnerLink from \"../types/IInnerLink\";\r\n\r\nconst justifyMap: Record<JustifyContent, TdAlign> = {\r\n start: \"left\",\r\n center: \"center\",\r\n end: \"right\",\r\n};\r\nconst alignMap: Record<AlignItems, TdValign> = {\r\n start: \"top\",\r\n center: \"middle\",\r\n end: \"bottom\",\r\n};\r\n\r\nexport interface BackgroundImageType {\r\n src: string;\r\n repeat?: \"no-repeat\" | \"repeat\" | \"repeat-x\" | \"repeat-y\";\r\n size?: \"auto\" | \"cover\" | \"contain\";\r\n position?: string;\r\n}\r\n\r\nexport interface RowConfig {\r\n gap?: string;\r\n justifyContent?: JustifyContent;\r\n alignItems?: AlignItems;\r\n width?: string;\r\n height?: string;\r\n\r\n /**\r\n * When true, the content table uses width:100% so Outlook Classic has a\r\n * hard boundary and text children can wrap correctly.\r\n * Use this for rows that contain text blocks alongside images.\r\n *\r\n * When false/undefined (default), the content table uses width:auto so\r\n * children shrink-wrap to their natural sizes — preserving the original\r\n * behavior. Use this for icon rows, button rows, social link rows.\r\n */\r\n fillWidth?: boolean;\r\n\r\n // Styling props\r\n padding?: string;\r\n backgroundColor?: string;\r\n backgroundImage?: BackgroundImageType;\r\n borderRadius?: string;\r\n border?: BorderConfig;\r\n\r\n // Link support\r\n innerLink?: IInnerLink;\r\n\r\n // Mobile specific overrides\r\n mobile?: {\r\n justifyContent?: JustifyContent;\r\n alignItems?: AlignItems;\r\n wrap?: boolean;\r\n };\r\n}\r\n\r\nexport type RowProps = {\r\n children: ReactNode;\r\n config: RowConfig;\r\n devNode?: ReactNode;\r\n devMode?: boolean;\r\n};\r\n\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: CSSProperties = {};\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n } else {\r\n // If only individual borders are specified, explicitly set others to 'none'\r\n // to prevent Outlook Classic from showing black borders\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n style.borderTop = \"none\";\r\n style.borderRight = \"none\";\r\n style.borderBottom = \"none\";\r\n style.borderLeft = \"none\";\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n }\r\n if (border.right) {\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n }\r\n if (border.bottom) {\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n }\r\n if (border.left) {\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n }\r\n\r\n return style;\r\n}\r\n\r\nfunction getHrefFromInnerLink(innerLink?: IInnerLink): string | undefined {\r\n if (!innerLink || innerLink.type === \"none\") return undefined;\r\n\r\n switch (innerLink.type) {\r\n case \"url\":\r\n return innerLink.url;\r\n case \"email\":\r\n return innerLink.email ? `mailto:${innerLink.email}` : undefined;\r\n case \"phone\":\r\n return innerLink.phone ? `tel:${innerLink.phone}` : undefined;\r\n case \"anchor\":\r\n return innerLink.anchor ? `#${innerLink.anchor}` : undefined;\r\n case \"page_top\":\r\n return \"#\";\r\n case \"page_bottom\":\r\n return \"#bottom\";\r\n default:\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction Row({ children, config, devNode, devMode }: RowProps) {\r\n const childrenArray = (\r\n Array.isArray(children) ? children : [children]\r\n ).filter((child) => child != null) as ReactNode[];\r\n\r\n const numChildren = childrenArray.length;\r\n\r\n const href = getHrefFromInnerLink(config.innerLink);\r\n const target = config.innerLink?.target || \"_blank\";\r\n\r\n // 1. Outer TD: Background, Border Radius, Width, Height.\r\n const backgroundTdStyle: React.CSSProperties = {\r\n backgroundColor: config.backgroundColor,\r\n borderRadius: config.borderRadius,\r\n width: config.width || \"100%\",\r\n height: config.height,\r\n backgroundImage: config.backgroundImage\r\n ? `url(${config.backgroundImage.src})`\r\n : undefined,\r\n backgroundRepeat: config.backgroundImage?.repeat,\r\n backgroundSize: config.backgroundImage?.size,\r\n backgroundPosition: config.backgroundImage?.position,\r\n ...(config.borderRadius && { overflow: \"hidden\" }),\r\n };\r\n\r\n // 2. Inner Table: Border and Border Radius.\r\n const borderTableStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n borderCollapse: \"separate\",\r\n borderSpacing: 0,\r\n borderRadius: config.borderRadius,\r\n ...getBorderStyle(config.border),\r\n };\r\n\r\n // 3. Padding TD.\r\n const paddingTdStyle: React.CSSProperties = {\r\n padding: config.padding,\r\n width: \"100%\",\r\n verticalAlign: \"top\",\r\n };\r\n\r\n // 4. Content Table.\r\n //\r\n // fillWidth: false/undefined (default) → width: \"auto\"\r\n // Original behavior. Children shrink-wrap to their natural sizes.\r\n // Use for icon rows, button rows, social link rows.\r\n // Centering works via the Justification Wrapper TD (align + width=\"100%\").\r\n //\r\n // fillWidth: true → width: \"100%\"\r\n // Content table fills available space, giving Outlook Classic a hard\r\n // boundary so text children get a constrained box and line wrapping\r\n // triggers correctly. Use for rows containing text + image layouts.\r\n const contentTableStyle: React.CSSProperties = {\r\n width: config.fillWidth ? \"100%\" : \"auto\",\r\n height: \"100%\",\r\n borderCollapse: \"collapse\",\r\n minWidth: \"1px\",\r\n ...(!config.fillWidth && { maxWidth: config.width || \"100%\" }),\r\n };\r\n\r\n // 5. Gap TD.\r\n const gapTdStyle: React.CSSProperties = {\r\n width: config.gap || \"0\",\r\n lineHeight: \"1px\",\r\n fontSize: \"1px\",\r\n };\r\n\r\n const tdAlign = config.justifyContent\r\n ? justifyMap[config.justifyContent]\r\n : \"left\";\r\n const tdValign = config.alignItems ? alignMap[config.alignItems] : \"top\";\r\n\r\n const content = (\r\n <table\r\n aria-label=\"Row Outer\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n position: \"relative\",\r\n width: config.width || \"100%\",\r\n height: config.height,\r\n borderCollapse: \"collapse\",\r\n }}\r\n {...(config.height && { height: config.height })}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Outer TD: Background, Background Image, Border Radius, Width, Height */}\r\n <td\r\n style={backgroundTdStyle}\r\n {...(config.height && { height: config.height })}\r\n >\r\n {/* Inner Table: Border and Border Radius */}\r\n <table\r\n aria-label=\"Row Border Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={borderTableStyle}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Padding TD */}\r\n <td style={paddingTdStyle}>\r\n <table\r\n aria-label=\"Row Justification Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n {/*\r\n * width=\"100%\" as HTML attribute (respected by Outlook Classic)\r\n * establishes the outer boundary for text wrapping when fillWidth\r\n * is true. align handles justifyContent for both modes:\r\n * - fillWidth: false → centers the auto-width content table\r\n * - fillWidth: true → aligns content within the full-width table\r\n */}\r\n <td\r\n align={tdAlign}\r\n width=\"100%\"\r\n style={{ width: \"100%\" }}\r\n >\r\n <table\r\n aria-label=\"Row Content\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={contentTableStyle}\r\n {...(config.height && { height: config.height })}\r\n className=\"content-table row-content-table\"\r\n data-mobile-justify={\r\n config.mobile?.justifyContent\r\n }\r\n data-mobile-align={config.mobile?.alignItems}\r\n data-mobile-wrap={\r\n config.mobile?.wrap ? \"true\" : undefined\r\n }\r\n data-gap={config.gap}\r\n >\r\n <tbody>\r\n <tr className=\"content-tr\">\r\n {childrenArray.map((child, index) => (\r\n <Fragment key={`row-child-${index}`}>\r\n <td\r\n valign={tdValign}\r\n style={{\r\n verticalAlign: tdValign,\r\n textAlign: \"left\",\r\n padding: \"0\",\r\n margin: \"0\",\r\n }}\r\n className=\"child-cell\"\r\n >\r\n {child}\r\n </td>\r\n\r\n {/* Gap between children, not after last */}\r\n {index < numChildren - 1 &&\r\n config.gap && (\r\n <td\r\n key={`row-gap-${index}`}\r\n width={config.gap}\r\n style={gapTdStyle}\r\n className=\"row-gap-td\"\r\n >\r\n &nbsp;\r\n </td>\r\n )}\r\n </Fragment>\r\n ))}\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n {devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n\r\n if (href && !devMode) {\r\n return (\r\n <a\r\n href={href}\r\n {...(target && { target })}\r\n style={{\r\n textDecoration: \"none\",\r\n color: \"inherit\",\r\n display: \"block\",\r\n }}\r\n >\r\n {content}\r\n </a>\r\n );\r\n }\r\n\r\n return content;\r\n}\r\n\r\nexport default memo(Row, arePropsEqual);\r\n","import React, { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport { BorderConfig } from \"../types\";\r\n\r\nexport type SectionConfig = {\r\n sectionType: \"header\" | \"footer\" | \"content\";\r\n gap?: string;\r\n backgroundColor?: string;\r\n padding?: string;\r\n border?: BorderConfig;\r\n backgroundImage?: {\r\n src: string;\r\n repeat?: string;\r\n size?: string;\r\n position?: string;\r\n };\r\n};\r\n\r\nexport interface SectionProps {\r\n config: SectionConfig;\r\n children: ReactNode;\r\n devNode?: ReactNode;\r\n}\r\n\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: CSSProperties = {};\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n } else {\r\n // If only individual borders are specified, explicitly set others to 'none'\r\n // to prevent Outlook Classic from showing black borders\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n style.borderTop = \"none\";\r\n style.borderRight = \"none\";\r\n style.borderBottom = \"none\";\r\n style.borderLeft = \"none\";\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n }\r\n if (border.right) {\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n }\r\n if (border.bottom) {\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n }\r\n if (border.left) {\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n }\r\n\r\n return style;\r\n}\r\n\r\nconst Section: React.FC<SectionProps> = ({\r\n config,\r\n children,\r\n devNode,\r\n}: SectionProps) => {\r\n const { sectionType, padding } = config;\r\n return (\r\n <table\r\n aria-label={`Section |Table | ${sectionType}`}\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n backgroundColor: config.backgroundColor,\r\n ...getBorderStyle(config.border),\r\n backgroundImage: config.backgroundImage\r\n ? `url(${config.backgroundImage.src})`\r\n : undefined,\r\n backgroundRepeat: config.backgroundImage?.repeat,\r\n backgroundSize: config.backgroundImage?.size,\r\n backgroundPosition: config.backgroundImage?.position,\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n <td\r\n style={{\r\n padding: padding,\r\n }}\r\n >\r\n {children}\r\n </td>\r\n </tr>\r\n </tbody>\r\n {devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>\r\n <span\r\n style={{\r\n backgroundColor: \"black\",\r\n color: \"white\",\r\n padding: \"4px\",\r\n fontSize: \"14px\",\r\n position: \"absolute\",\r\n left: 0,\r\n top: 0,\r\n }}\r\n >\r\n Section | {sectionType}\r\n </span>\r\n {children}\r\n </td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n};\r\n\r\nexport default memo(Section, arePropsEqual);\r\n","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\n\r\nexport interface SpacerConfig {\r\n /** The height of the vertical space (e.g., \"20px\"). Required. */\r\n height: string;\r\n hideOnMobile?: boolean;\r\n}\r\n\r\nexport type SpacerProps = {\r\n config: SpacerConfig;\r\n devNode?: ReactNode;\r\n};\r\n\r\nfunction Spacer({ config, devNode }: SpacerProps) {\r\n const { height, hideOnMobile } = config;\r\n\r\n // 1. Spacer Table Style\r\n const spacerTableStyle: CSSProperties = {\r\n // Crucial for compatibility: Ensures no background or border interference\r\n backgroundColor: \"transparent\",\r\n borderCollapse: \"collapse\",\r\n border: \"0\",\r\n width: \"100%\",\r\n\r\n // Note the CSS standard dash convention: 'mso-table-lspace'\r\n // [\"mso-table-lspace\" as string]: \"0pt\",\r\n [\"msoTableLspace\" as string]: \"0pt\",\r\n // [\"mso-table-rspace\" as string]: \"0pt\",\r\n [\"msoTableRspace\" as string]: \"0pt\",\r\n };\r\n\r\n // 2. Spacer TD Style: The element that creates the actual vertical space\r\n const spacerTdStyle: CSSProperties = {\r\n height: height,\r\n // Critical: Suppress any vertical height created by text/font\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n padding: \"0\",\r\n };\r\n\r\n // Parse height for the HTML attribute\r\n const spacerHeightAttribute = parseInt(height, 10) || 1;\r\n\r\n return (\r\n // Outer table ensures the spacer spans the full width of its container\r\n <table\r\n aria-label=\"Vertical Spacer\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n // --- Start dev\r\n position: \"relative\",\r\n // --- End dev\r\n\r\n ...spacerTableStyle,\r\n }}\r\n // Explicit HTML height attribute is necessary for Outlook reliability\r\n {...({ height: spacerHeightAttribute } as any)}\r\n className={hideOnMobile ? \"hide-on-mobile\" : undefined}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* TD: Manages the fixed height of the spacer */}\r\n <td\r\n style={spacerTdStyle}\r\n // Explicit height attribute\r\n height={spacerHeightAttribute}\r\n >\r\n {/* The non-breaking space ensures the TD renders even if completely empty */}\r\n &nbsp;\r\n </td>\r\n </tr>\r\n </tbody>\r\n {devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Spacer, arePropsEqual);\r\n","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\n\r\nexport interface TextConfig {\r\n /** The text content or React nodes to render. */\r\n text?: string;\r\n\r\n /** Padding around the text (applied to the containing TD). */\r\n padding?: string;\r\n\r\n /** Text color. */\r\n color?: string;\r\n\r\n /** Horizontal text alignment (e.g., 'left', 'center'). */\r\n textAlign?: \"left\" | \"center\" | \"right\" | \"justify\";\r\n\r\n /** Font family (e.g., 'Arial, sans-serif'). */\r\n fontFamily?: string;\r\n\r\n /** Font size (e.g., '16px'). */\r\n fontSize?: string;\r\n\r\n /** Font weight (e.g., 'bold' or '700'). */\r\n fontWeight?: string;\r\n\r\n /** Font style (e.g., 'italic'). */\r\n fontStyle?: string;\r\n\r\n /** Line height (e.g., '1.5' or '24px'). */\r\n lineHeight?: string;\r\n\r\n /** Letter spacing (e.g., '0.5px', '1px'). */\r\n letterSpacing?: string;\r\n\r\n /** Text transform (e.g., 'uppercase', 'lowercase', 'capitalize'). */\r\n textTransform?: string;\r\n\r\n /** Text decoration (e.g., 'underline', 'line-through'). */\r\n textDecoration?: string;\r\n\r\n /** Text direction (e.g., 'ltr', 'rtl'). */\r\n direction?: string;\r\n\r\n /** Vertical alignment (e.g., 'sub', 'super'). */\r\n verticalAlign?: string;\r\n\r\n /** Background color of the text block. */\r\n backgroundColor?: string;\r\n\r\n /** Opacity of the text (e.g., '0.5', '1'). */\r\n opacity?: string | number;\r\n\r\n /** White space handling (e.g., 'normal', 'nowrap', 'pre', 'pre-wrap'). */\r\n whiteSpace?: string;\r\n\r\n /** Word break behavior (e.g., 'break-all', 'break-word', 'keep-all', 'normal'). */\r\n wordBreak?: string;\r\n maxWidth?: string;\r\n}\r\n\r\nexport type TextProps = {\r\n config: TextConfig;\r\n devMode?: ReactNode;\r\n children?: ReactNode;\r\n};\r\n\r\nfunction Text({ config, devMode, children }: TextProps) {\r\n const {\r\n text,\r\n padding,\r\n color,\r\n textAlign,\r\n fontFamily,\r\n fontSize,\r\n fontWeight,\r\n fontStyle,\r\n lineHeight,\r\n letterSpacing,\r\n textTransform,\r\n textDecoration,\r\n direction,\r\n verticalAlign,\r\n backgroundColor,\r\n opacity,\r\n whiteSpace,\r\n wordBreak = \"break-all\",\r\n maxWidth\r\n } = config;\r\n\r\n // 1. TD Style: Where padding and background are reliably applied.\r\n const tdStyle: CSSProperties = {\r\n padding: padding,\r\n backgroundColor: backgroundColor,\r\n width: \"100%\",\r\n verticalAlign: \"top\",\r\n };\r\n\r\n // 2. Content Style: Applied directly to a wrapper element\r\n const contentStyle: CSSProperties = {\r\n color: color,\r\n textAlign: textAlign,\r\n fontFamily: fontFamily || \"Arial, Helvetica, sans-serif\",\r\n fontSize: fontSize,\r\n fontWeight: fontWeight,\r\n fontStyle: fontStyle,\r\n lineHeight: lineHeight,\r\n letterSpacing: letterSpacing,\r\n textTransform: textTransform as any,\r\n textDecoration: textDecoration,\r\n direction: direction as any,\r\n verticalAlign: verticalAlign,\r\n opacity: opacity,\r\n whiteSpace: whiteSpace as any,\r\n wordBreak: wordBreak as any,\r\n margin: \"0\",\r\n padding: \"0\",\r\n maxWidth\r\n };\r\n\r\n // Determine content to render\r\n const content = text ?? children;\r\n const isString = typeof content === \"string\";\r\n\r\n return (\r\n <table\r\n aria-label=\"Text Block Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n <td style={tdStyle} align={textAlign as \"left\" | \"center\" | \"right\"}>\r\n {isString ? (\r\n <div\r\n style={contentStyle}\r\n dangerouslySetInnerHTML={{ __html: content }}\r\n />\r\n ) : (\r\n <div style={contentStyle}>{content}</div>\r\n )}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Text, arePropsEqual);\r\n","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport IInnerLink from \"../types/IInnerLink\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport { BorderConfig } from \"../types\";\r\n\r\nexport interface IconConfig {\r\n /** Icon identifier for the Iconify API */\r\n iconIdentifier?: string;\r\n\r\n /** Width of the icon */\r\n width?: string | number;\r\n\r\n /** Height of the icon */\r\n height?: string | number;\r\n\r\n /** Rotation angle in degrees */\r\n rotate?: number;\r\n\r\n /** Rotation orientation: clockwise or counter-clockwise */\r\n rotateOrientation?: \"cw\" | \"ccw\";\r\n\r\n /** Icon color (hex format for best compatibility) */\r\n color?: string;\r\n\r\n /** Link configuration for clickable icons */\r\n innerLink?: IInnerLink;\r\n\r\n /** Background color of the containing TD */\r\n backgroundColor?: string;\r\n\r\n /** Padding around the icon */\r\n padding?: string;\r\n\r\n /** Border radius for the icon container */\r\n borderRadius?: string;\r\n\r\n /** Border configuration for the icon container */\r\n border?: BorderConfig;\r\n\r\n /** Horizontal alignment within the container */\r\n justifyContent?: \"start\" | \"center\" | \"end\";\r\n}\r\n\r\nexport type IconProps = {\r\n config: IconConfig;\r\n devNode?: ReactNode;\r\n devMode?: boolean;\r\n children?: ReactNode;\r\n};\r\n\r\n// Map alignment to HTML 'align' attribute\r\nconst justifyMap: Record<\r\n NonNullable<IconConfig[\"justifyContent\"]>,\r\n \"left\" | \"center\" | \"right\"\r\n> = {\r\n start: \"left\",\r\n center: \"center\",\r\n end: \"right\",\r\n};\r\n\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: CSSProperties = {};\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n } else {\r\n // If only individual borders are specified, explicitly set others to 'none'\r\n // to prevent Outlook Classic from showing black borders\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n style.borderTop = \"none\";\r\n style.borderRight = \"none\";\r\n style.borderBottom = \"none\";\r\n style.borderLeft = \"none\";\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n }\r\n if (border.right) {\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n }\r\n if (border.bottom) {\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n }\r\n if (border.left) {\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n }\r\n\r\n return style;\r\n}\r\n\r\nfunction getBorderStyleString(border?: BorderConfig): string {\r\n if (!border) return \"\";\r\n\r\n const styles: string[] = [];\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n styles.push(`border: ${border.width} ${border.style} ${border.color};`);\r\n } else {\r\n // If only individual borders are specified\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n styles.push(\"border-top: none;\");\r\n styles.push(\"border-right: none;\");\r\n styles.push(\"border-bottom: none;\");\r\n styles.push(\"border-left: none;\");\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n styles.push(\r\n `border-top: ${border.top.width} ${border.top.style} ${border.top.color};`,\r\n );\r\n }\r\n if (border.right) {\r\n styles.push(\r\n `border-right: ${border.right.width} ${border.right.style} ${border.right.color};`,\r\n );\r\n }\r\n if (border.bottom) {\r\n styles.push(\r\n `border-bottom: ${border.bottom.width} ${border.bottom.style} ${border.bottom.color};`,\r\n );\r\n }\r\n if (border.left) {\r\n styles.push(\r\n `border-left: ${border.left.width} ${border.left.style} ${border.left.color};`,\r\n );\r\n }\r\n\r\n return styles.join(\" \");\r\n}\r\n\r\n// Helper to build Iconify API URL\r\nfunction buildIconifyUrl(config: IconConfig): string | null {\r\n const {\r\n iconIdentifier,\r\n height = 24,\r\n color = \"000000\",\r\n rotate = 0,\r\n rotateOrientation = \"cw\",\r\n } = config;\r\n\r\n if (!iconIdentifier) return null;\r\n\r\n // Parse height to extract numeric value\r\n const parseHeight = (h: string | number): number => {\r\n if (typeof h === \"number\") return h;\r\n // Extract numeric value from string (e.g., \"24px\" -> 24)\r\n const match = String(h).match(/^(-?\\d*\\.?\\d+)/);\r\n return match ? parseFloat(match[1]) : 24;\r\n };\r\n\r\n const numericHeight = parseHeight(height);\r\n\r\n // Remove # from color if present\r\n const cleanColor = color.replace(\"#\", \"\");\r\n\r\n // Build URL from template\r\n const template =\r\n process.env.ICONIFY_API_IMAGE_URI ||\r\n \"https://iconify.pagenflow.com/api/image/{{height}}/{{color}}/{{rotate}}-{{rotate-orientation}}/{{icon-full-name}}.png\";\r\n\r\n return template\r\n .replace(\"{{height}}\", String(numericHeight * 4))\r\n .replace(\"{{color}}\", cleanColor)\r\n .replace(\"{{rotate}}\", String(rotate))\r\n .replace(\"{{rotate-orientation}}\", rotateOrientation)\r\n .replace(\"{{icon-full-name}}\", iconIdentifier);\r\n}\r\n\r\n// Helper to build link href based on innerLink type\r\nfunction buildLinkHref(innerLink?: IInnerLink): string | null {\r\n if (!innerLink || innerLink.type === \"none\") return null;\r\n\r\n switch (innerLink.type) {\r\n case \"url\":\r\n return innerLink.url || null;\r\n case \"email\":\r\n return innerLink.email ? `mailto:${innerLink.email}` : null;\r\n case \"phone\":\r\n return innerLink.phone ? `tel:${innerLink.phone}` : null;\r\n case \"anchor\":\r\n return innerLink.anchor ? `#${innerLink.anchor}` : null;\r\n case \"page_top\":\r\n return \"#top\";\r\n case \"page_bottom\":\r\n return \"#bottom\";\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nfunction Icon({ config, devNode, devMode, children }: IconProps) {\r\n const {\r\n // base64Source,\r\n width,\r\n height,\r\n backgroundColor,\r\n padding = \"0\",\r\n borderRadius = \"0\",\r\n border,\r\n innerLink,\r\n justifyContent = \"center\",\r\n } = config;\r\n\r\n // Determine icon source\r\n const iconSrc = buildIconifyUrl(config);\r\n const href = buildLinkHref(innerLink);\r\n const target = innerLink?.target || \"_blank\";\r\n const align = justifyMap[justifyContent];\r\n\r\n // Get border styles\r\n const borderStyle = getBorderStyle(border);\r\n const borderStyleString = getBorderStyleString(border);\r\n\r\n // Convert width/height to string with px if number\r\n const widthStr = typeof width === \"number\" ? `${width}px` : width;\r\n const heightStr = typeof height === \"number\" ? `${height}px` : height;\r\n\r\n // Parse numeric values for HTML attributes\r\n const widthNum =\r\n typeof width === \"number\"\r\n ? width\r\n : typeof width === \"string\" && width.endsWith(\"px\")\r\n ? parseInt(width, 10)\r\n : undefined;\r\n const heightNum =\r\n typeof height === \"number\"\r\n ? height\r\n : typeof height === \"string\" && height.endsWith(\"px\")\r\n ? parseInt(height, 10)\r\n : undefined;\r\n\r\n // 1. Image Style: Critical for compatibility\r\n const imgStyle: CSSProperties = {\r\n display: \"block\", // Prevents extra vertical space\r\n border: 0, // No default border\r\n width: widthStr || \"auto\",\r\n height: heightStr || \"auto\",\r\n objectFit: \"contain\",\r\n };\r\n\r\n // 2. Link Style: No underline or color changes\r\n const linkStyle: CSSProperties = {\r\n display: \"block\",\r\n textDecoration: \"none\",\r\n border: 0,\r\n outline: \"none\",\r\n };\r\n\r\n // 3. Outer TD Style: Background and border-radius wrapper with border\r\n const outerTdStyle: CSSProperties = {\r\n backgroundColor: backgroundColor,\r\n borderRadius: borderRadius,\r\n overflow: \"hidden\",\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n };\r\n\r\n // 4. Inner Table Style: Apply border here with border-collapse: separate\r\n const innerTableStyle: CSSProperties = {\r\n width: \"100%\",\r\n borderCollapse: \"separate\",\r\n borderSpacing: 0,\r\n borderRadius: borderRadius,\r\n ...borderStyle,\r\n };\r\n\r\n // 5. Inner TD Style: Padding\r\n const innerTdStyle: CSSProperties = {\r\n padding: padding,\r\n fontSize: \"0\", // CRITICAL: Collapses extra space\r\n lineHeight: \"0\", // CRITICAL: Collapses extra space\r\n };\r\n\r\n // --- VML Calculation for Outlook Compatibility ---\r\n const numericPadding = parseInt(padding.split(\" \")[0] || \"0\", 10);\r\n const vmlWidth = (widthNum || 24) + numericPadding * 2;\r\n const vmlHeight = (heightNum || 24) + numericPadding * 2;\r\n\r\n // VML colors must use full hex format\r\n const vmlFillColor = backgroundColor?.startsWith(\"#\")\r\n ? backgroundColor\r\n : backgroundColor\r\n ? `#${backgroundColor}`\r\n : \"#ffffff\";\r\n\r\n // Calculate arcsize percentage for VML\r\n const numericBorderRadius = parseInt(borderRadius || \"0\", 10);\r\n const arcsize =\r\n numericBorderRadius > 0\r\n ? Math.min(\r\n (numericBorderRadius / Math.min(vmlWidth, vmlHeight)) * 100,\r\n 100,\r\n )\r\n : 0;\r\n\r\n // VML stroke color for border\r\n const vmlStrokeColor = border?.color || vmlFillColor;\r\n const vmlStrokeWeight = border?.width ? parseInt(border.width, 10) : 0;\r\n const hasVmlStroke = vmlStrokeWeight > 0;\r\n\r\n // Build VML code for Outlook\r\n const vmlIcon =\r\n backgroundColor && numericBorderRadius > 0\r\n ? `\r\n <!--[if mso]>\r\n <v:roundrect xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w=\"urn:schemas-microsoft-com:office:word\" ${href && !devMode ? `href=\"${href}\"` : \"\"} style=\"height:${vmlHeight}px;width:${vmlWidth}px;v-text-anchor:middle;\" arcsize=\"${arcsize}%\" ${hasVmlStroke ? `strokecolor=\"${vmlStrokeColor}\" strokeweight=\"${vmlStrokeWeight}px\"` : 'stroke=\"false\"'} fillcolor=\"${vmlFillColor}\">\r\n <w:anchorlock/>\r\n <v:textbox inset=\"0,0,0,0\" style=\"text-align: center;\">\r\n <center style=\"padding:${padding};\">\r\n <img src=\"${iconSrc || \"\"}\" alt=\"\" width=\"${widthNum || 24}\" height=\"${heightNum || 24}\" border=\"0\" style=\"display:block;border:0;object-fit:contain;\" />\r\n </center>\r\n </v:textbox>\r\n </v:roundrect>\r\n <![endif]-->\r\n `\r\n : \"\";\r\n\r\n // If no icon source, return empty\r\n if (!iconSrc && !devMode) {\r\n return null;\r\n }\r\n\r\n // Icon image element\r\n const iconElement =\r\n devMode && !!children ? (\r\n children\r\n ) : iconSrc ? (\r\n <img\r\n draggable={false}\r\n src={iconSrc}\r\n alt=\"\"\r\n style={imgStyle}\r\n width={widthNum}\r\n height={heightNum}\r\n {...{ border: 0 as any }}\r\n />\r\n ) : (\r\n <></>\r\n );\r\n\r\n // Wrap in link if href exists and not in dev mode\r\n const content =\r\n href && !devMode ? (\r\n <a\r\n href={href}\r\n target={target}\r\n style={linkStyle}\r\n {...(target === \"_blank\" ? { rel: \"noopener noreferrer\" } : {})}\r\n >\r\n {iconElement}\r\n </a>\r\n ) : (\r\n iconElement\r\n );\r\n\r\n // Build the HTML content with VML support (only when NOT in dev mode)\r\n const useVML = !devMode && backgroundColor && numericBorderRadius > 0;\r\n\r\n const htmlContent = useVML\r\n ? `\r\n ${vmlIcon}\r\n <!--[if !mso]><!-->\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse: collapse; width: 100%;\">\r\n <tbody>\r\n <tr>\r\n <td style=\"background-color: ${backgroundColor}; border-radius: ${borderRadius}; overflow: hidden; font-size: 0; line-height: 0;\">\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse: separate; border-spacing: 0; border-radius: ${borderRadius}; width: 100%; ${borderStyleString}\">\r\n <tbody>\r\n <tr>\r\n <td style=\"padding: ${padding}; font-size: 0; line-height: 0;\">\r\n ${\r\n href\r\n ? `<a href=\"${href}\" target=\"${target}\" style=\"display:block;text-decoration:none;border:0;outline:none;\" ${target === \"_blank\" ? 'rel=\"noopener noreferrer\"' : \"\"}>\r\n <img draggable=\"false\" src=\"${iconSrc}\" alt=\"\" width=\"${widthNum || 24}\" height=\"${heightNum || 24}\" border=\"0\" style=\"display:block;border:0;width:${widthStr || \"auto\"};height:${heightStr || \"auto\"};object-fit:contain;\" />\r\n </a>`\r\n : `<img draggable=\"false\" src=\"${iconSrc}\" alt=\"\" width=\"${widthNum || 24}\" height=\"${heightNum || 24}\" border=\"0\" style=\"display:block;border:0;width:${widthStr || \"auto\"};height:${heightStr || \"auto\"};object-fit:contain;\" />`\r\n }\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!--<![endif]-->\r\n `\r\n : null;\r\n\r\n return (\r\n <table\r\n aria-label=\"Icon\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n align={align}\r\n style={{\r\n // --- Start dev\r\n position: \"relative\",\r\n // --- End dev\r\n\r\n width: \"auto\",\r\n borderCollapse: \"collapse\",\r\n\r\n // base\r\n boxSizing: \"border-box\",\r\n border: 0,\r\n margin: 0,\r\n padding: 0,\r\n }}\r\n onClick={devMode ? (e) => e.preventDefault() : undefined}\r\n >\r\n <tbody>\r\n <tr>\r\n {useVML ? (\r\n <td\r\n dangerouslySetInnerHTML={{\r\n __html: htmlContent ?? \"\",\r\n }}\r\n />\r\n ) : (\r\n <td style={outerTdStyle} align={align}>\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={innerTableStyle}\r\n >\r\n <tbody>\r\n <tr>\r\n <td style={innerTdStyle} align={align}>\r\n {content}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n )}\r\n </tr>\r\n </tbody>\r\n {devMode && !!devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Icon, arePropsEqual);\r\n","/**\r\n * MSO conditional comment helpers.\r\n *\r\n * Follows the same pattern as Icon.tsx: raw HTML is injected via\r\n * dangerouslySetInnerHTML on a <td>, which is the only way to emit\r\n * unescaped conditional comment strings without a post-processing step.\r\n *\r\n * Accepts an HTML string (not ReactNode) — the caller is responsible\r\n * for building the inner HTML, exactly like Icon does with vmlIcon/htmlContent.\r\n *\r\n * Usage:\r\n *\r\n * <MsoOnly html={`<img src=\"...\" />`} />\r\n * <NonMso html={`<table>...</table>`} />\r\n */\r\n\r\ntype Props = { html: string };\r\n\r\n/**\r\n * Content rendered by Outlook Classic only.\r\n * Outputs: <!--[if mso]> ... <![endif]-->\r\n */\r\nexport function MsoOnly({ html }: Props) {\r\n return (\r\n <td\r\n dangerouslySetInnerHTML={{\r\n __html: `<!--[if mso]>${html}<![endif]-->`,\r\n }}\r\n />\r\n );\r\n}\r\n\r\n/**\r\n * Content hidden from Outlook Classic, visible in all other clients.\r\n * Outputs: <!--[if !mso]><!--> ... <!--<![endif]-->\r\n */\r\nexport function NonMso({ html }: Props) {\r\n return (\r\n <td\r\n dangerouslySetInnerHTML={{\r\n __html: `<!--[if !mso]><!-->${html}<!--<![endif]-->`,\r\n }}\r\n />\r\n );\r\n}"],"names":["_jsxs","_jsx","global","exports","justifyMap","buildLinkHref","getBorderStyleString","memo","alignMap","getBorderStyle","Fragment","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/components/Body.tsx","../src/utils/isEqual.js","../src/utils/memoUtils.ts","../src/components/Button.tsx","../src/components/Column.tsx","../src/components/Container.tsx","../src/components/Divider.tsx","../src/components/Font.tsx","../src/components/Head.tsx","../src/components/utils/MiniDomParser.ts","../src/components/utils/injectLinkStyles.ts","../src/components/Heading.tsx","../src/components/Html.tsx","../src/components/Image.tsx","../src/components/Row.tsx","../src/components/Section.tsx","../src/components/Spacer.tsx","../src/components/Text.tsx","../src/components/Icon.tsx","../src/components/MsoConditional.tsx"],"sourcesContent":["import { ReactNode, CSSProperties } from \"react\";\r\n\r\nexport interface GlobalConfig {\r\n color?: string;\r\n fontSize?: string;\r\n backgroundColor?: string;\r\n lineHeight?: string;\r\n fontFamily?: string;\r\n backgroundImage?: {\r\n src?: string;\r\n repeat?: string;\r\n size?: string;\r\n position?: string;\r\n };\r\n}\r\n\r\nexport interface BodyProps {\r\n children: ReactNode;\r\n /** Global configuration from GlobalEditor */\r\n config?: GlobalConfig;\r\n}\r\n\r\nexport default function Body({ children, config = {} }: BodyProps) {\r\n // Extract config values with fallbacks\r\n const globalColor = config.color || \"\";\r\n const globalFontSize = config.fontSize || \"\";\r\n const globalBackgroundColor = config.backgroundColor || \"\";\r\n const globalLineHeight = config.lineHeight || \"\";\r\n const globalFontFamily = config.fontFamily || \"\";\r\n\r\n // Background image properties\r\n const bgImage = config.backgroundImage?.src || \"\";\r\n const bgRepeat = config.backgroundImage?.repeat || \"\";\r\n const bgSize = config.backgroundImage?.size || \"\";\r\n const bgPosition = config.backgroundImage?.position || \"\";\r\n\r\n // 1. Style for the <body> tag inline\r\n const bodyStyle: CSSProperties = {\r\n backgroundColor: globalBackgroundColor,\r\n color: globalColor,\r\n fontSize: globalFontSize,\r\n lineHeight: globalLineHeight,\r\n padding: \"0\",\r\n margin: \"0\",\r\n WebkitTextSizeAdjust: \"100%\",\r\n overflowX: \"hidden\",\r\n\r\n [\"msTextSizeAdjust\" as string]: \"100%\",\r\n [\"msoLineHeightRule\" as string]: \"exactly\",\r\n\r\n fontFamily: globalFontFamily,\r\n\r\n // Background image support (if provided)\r\n ...(bgImage && {\r\n backgroundImage: `url(${bgImage})`,\r\n backgroundRepeat: bgRepeat,\r\n backgroundSize: bgSize,\r\n backgroundPosition: bgPosition,\r\n }),\r\n };\r\n\r\n // 2. Style for the top-level <table> wrapper\r\n const outerTableStyle: CSSProperties = {\r\n width: \"100%\",\r\n [\"msoLineHeightRule\" as string]: \"exactly\",\r\n borderCollapse: \"collapse\",\r\n };\r\n\r\n return (\r\n <body style={bodyStyle}>\r\n <center\r\n style={{\r\n width: \"100%\",\r\n background: globalBackgroundColor,\r\n ...(bgImage && {\r\n backgroundImage: `url(${bgImage})`,\r\n backgroundRepeat: bgRepeat,\r\n backgroundSize: bgSize,\r\n backgroundPosition: bgPosition,\r\n }),\r\n }}\r\n >\r\n <table\r\n role=\"presentation\"\r\n border={0 as any}\r\n cellPadding={0}\r\n cellSpacing={0}\r\n align=\"center\"\r\n width=\"100%\"\r\n style={outerTableStyle}\r\n >\r\n <tbody>\r\n <tr>\r\n <td align=\"center\" style={{ padding: \"0\", margin: \"0\" }}>\r\n {children}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </center>\r\n\r\n <div\r\n style={{\r\n display: \"none\",\r\n whiteSpace: \"nowrap\",\r\n font: \"15px courier\",\r\n lineHeight: \"0\",\r\n }}\r\n >\r\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\r\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\r\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\r\n </div>\r\n </body>\r\n );\r\n}\r\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function () {\n try {\n return freeProcess && freeProcess.binding('util');\n } catch (e) { }\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function (value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) { }\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function (othValue, othIndex) {\n if (!seen.has(othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function (value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) { }\n try {\n return (func + '');\n } catch (e) { }\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are **not** supported.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = isEqual;\n","import isEqual from \"./isEqual\";\r\n\r\n/**\r\n * Generic deep equality comparison function for React component props.\r\n * Can be used with React.memo() to prevent unnecessary re-renders.\r\n * \r\n * @example\r\n * export default memo(MyComponent, arePropsEqual);\r\n */\r\nexport function arePropsEqual<T extends Record<string, any>>(\r\n prevProps: T,\r\n nextProps: T\r\n): boolean {\r\n return isEqual(prevProps, nextProps);\r\n}\r\n\r\n/**\r\n * Alternative: More performant version that only compares specific keys\r\n * Use this if you want to optimize by ignoring certain props like callbacks\r\n * \r\n * @example\r\n * export default memo(MyComponent, (prev, next) => \r\n * arePropsEqualExcept(prev, next, ['onCallback'])\r\n * );\r\n */\r\nexport function arePropsEqualExcept<T extends Record<string, any>>(\r\n prevProps: T,\r\n nextProps: T,\r\n excludeKeys: (keyof T)[]\r\n): boolean {\r\n const prevFiltered = omit(prevProps, excludeKeys);\r\n const nextFiltered = omit(nextProps, excludeKeys);\r\n return isEqual(prevFiltered, nextFiltered);\r\n}\r\n\r\n/**\r\n * Alternative: Compare only specific keys for performance\r\n * Useful when you have large props objects but only care about certain values\r\n * \r\n * @example\r\n * export default memo(MyComponent, (prev, next) => \r\n * arePropsEqualOnly(prev, next, ['config', 'devMode'])\r\n * );\r\n */\r\nexport function arePropsEqualOnly<T extends Record<string, any>>(\r\n prevProps: T,\r\n nextProps: T,\r\n includeKeys: (keyof T)[]\r\n): boolean {\r\n const prevFiltered = pick(prevProps, includeKeys);\r\n const nextFiltered = pick(nextProps, includeKeys);\r\n return isEqual(prevFiltered, nextFiltered);\r\n}\r\n\r\nfunction pick<T extends object, K extends keyof T>(data: T, keys: K[]): Pick<T, K> {\r\n const r = {} as Pick<T, K>;\r\n for (const key of keys) {\r\n if (key in data) {\r\n r[key] = data[key];\r\n }\r\n }\r\n return r;\r\n}\r\n\r\nfunction omit<T extends object, K extends keyof T>(data: T, keys: K[]): Omit<T, K> {\r\n const r = { ...data };\r\n for (const key of keys) {\r\n delete r[key];\r\n }\r\n return r;\r\n}","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { BorderConfig } from \"../types\";\r\nimport IInnerLink from \"../types/IInnerLink\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\n\r\n// Helper for alignment\r\ntype TdAlign = \"center\" | \"left\" | \"right\";\r\n\r\nexport interface ButtonConfig {\r\n /** Link configuration for the button destination. Required. */\r\n innerLink?: IInnerLink;\r\n\r\n /**\r\n * @deprecated Use innerLink property instead\r\n */\r\n href?: string;\r\n\r\n /** Button text. */\r\n children: ReactNode;\r\n\r\n /** Background color. Required for VML compatibility. */\r\n backgroundColor?: string;\r\n\r\n /** Text color. */\r\n color?: string;\r\n\r\n /** Padding for the button area (e.g., \"12px 24px\"). */\r\n padding?: string;\r\n\r\n /** Border radius (e.g., \"3px\"). */\r\n borderRadius?: string;\r\n\r\n /** Border configuration for outline buttons. */\r\n border?: BorderConfig;\r\n\r\n /** Width of the button (e.g., \"200px\" or \"100%\"). */\r\n width?: string;\r\n\r\n /** Maximum width of the button (e.g., \"300px\"). Text will wrap if content exceeds this. */\r\n maxWidth?: string;\r\n\r\n /** Horizontal alignment within the container. */\r\n justifyContent?: \"start\" | \"center\" | \"end\";\r\n\r\n /** Horizontal text alignment within the button (e.g., 'left', 'center'). */\r\n textAlign?: \"left\" | \"center\" | \"right\" | \"justify\";\r\n\r\n /** Font size (e.g., '16px'). */\r\n fontSize?: string;\r\n\r\n /** Font weight (e.g., 'bold' or '700'). */\r\n fontWeight?: string;\r\n\r\n /** Font style (e.g., 'italic'). */\r\n fontStyle?: string;\r\n\r\n /** Font family (e.g., 'Arial, sans-serif'). */\r\n fontFamily?: string;\r\n\r\n /** Line height (e.g., '1.5' or '24px'). */\r\n lineHeight?: string;\r\n\r\n /** Letter spacing (e.g., '0.5px', '1px'). */\r\n letterSpacing?: string;\r\n\r\n /** Text transform (e.g., 'uppercase', 'lowercase', 'capitalize'). */\r\n textTransform?: string;\r\n\r\n /** Text decoration (e.g., 'underline', 'line-through'). */\r\n textDecoration?: string;\r\n\r\n /** Text direction (e.g., 'ltr', 'rtl'). */\r\n direction?: string;\r\n\r\n /** Vertical alignment of text (e.g., 'sub', 'super'). */\r\n verticalAlign?: string;\r\n\r\n /** Opacity of the button text (e.g., '0.5', '1'). */\r\n opacity?: string | number;\r\n\r\n /** White space behavior (e.g., 'normal', 'nowrap', 'pre-wrap'). */\r\n whiteSpace?: string;\r\n\r\n /** Word break behavior (e.g., 'break-all', 'break-word', 'keep-all', 'normal'). */\r\n wordBreak?: string;\r\n}\r\n\r\nexport type ButtonProps = {\r\n config: ButtonConfig;\r\n devMode?: boolean;\r\n};\r\n\r\n// Map alignment to HTML 'align' attribute\r\nconst justifyMap: Record<\r\n NonNullable<ButtonConfig[\"justifyContent\"]>,\r\n TdAlign\r\n> = {\r\n start: \"left\",\r\n center: \"center\",\r\n end: \"right\",\r\n};\r\n\r\n// Helper to build link href based on innerLink type (mirrors Icon component)\r\nfunction buildLinkHref(innerLink?: IInnerLink): string | null {\r\n if (!innerLink || innerLink.type === \"none\") return null;\r\n\r\n switch (innerLink.type) {\r\n case \"url\":\r\n return innerLink.url || null;\r\n case \"email\":\r\n return innerLink.email ? `mailto:${innerLink.email}` : null;\r\n case \"phone\":\r\n return innerLink.phone ? `tel:${innerLink.phone}` : null;\r\n case \"anchor\":\r\n return innerLink.anchor ? `#${innerLink.anchor}` : null;\r\n case \"page_top\":\r\n return \"#top\";\r\n case \"page_bottom\":\r\n return \"#bottom\";\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nfunction getBorderStyleString(border?: BorderConfig): string {\r\n if (!border) return \"\";\r\n\r\n const styles: string[] = [];\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n styles.push(`border: ${border.width} ${border.style} ${border.color};`);\r\n } else {\r\n // If only individual borders are specified\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n styles.push(\"border-top: none;\");\r\n styles.push(\"border-right: none;\");\r\n styles.push(\"border-bottom: none;\");\r\n styles.push(\"border-left: none;\");\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n styles.push(\r\n `border-top: ${border.top.width} ${border.top.style} ${border.top.color};`,\r\n );\r\n }\r\n if (border.right) {\r\n styles.push(\r\n `border-right: ${border.right.width} ${border.right.style} ${border.right.color};`,\r\n );\r\n }\r\n if (border.bottom) {\r\n styles.push(\r\n `border-bottom: ${border.bottom.width} ${border.bottom.style} ${border.bottom.color};`,\r\n );\r\n }\r\n if (border.left) {\r\n styles.push(\r\n `border-left: ${border.left.width} ${border.left.style} ${border.left.color};`,\r\n );\r\n }\r\n\r\n return styles.join(\" \");\r\n}\r\n\r\nfunction Button({ config, devMode }: ButtonProps) {\r\n const {\r\n innerLink,\r\n children,\r\n backgroundColor,\r\n color,\r\n padding,\r\n borderRadius,\r\n border,\r\n width,\r\n maxWidth,\r\n justifyContent,\r\n textAlign,\r\n fontSize,\r\n fontWeight,\r\n fontStyle,\r\n fontFamily,\r\n lineHeight,\r\n letterSpacing,\r\n textTransform,\r\n textDecoration,\r\n direction,\r\n verticalAlign,\r\n opacity,\r\n whiteSpace,\r\n wordBreak,\r\n } = config;\r\n\r\n // Resolve href from innerLink\r\n const href = buildLinkHref(innerLink);\r\n const target = innerLink?.target || \"_blank\";\r\n\r\n // Sanitize fontFamily early so safeFontFamily is available for all paths below.\r\n const safeFontFamily = fontFamily\r\n ? fontFamily.replace(/['\"]/g, \"\")\r\n : fontFamily;\r\n\r\n // Outer TD Style for Background and Border Radius (no border)\r\n const backgroundTdStyle: CSSProperties = {\r\n backgroundColor: backgroundColor,\r\n borderRadius: borderRadius,\r\n width: width || \"auto\",\r\n ...(maxWidth && { maxWidth: maxWidth }),\r\n // Overflow hidden to clip background to border-radius\r\n ...(borderRadius && { overflow: \"hidden\" }),\r\n };\r\n\r\n // Border styles\r\n const borderStyleString = getBorderStyleString(border);\r\n\r\n const align = justifyContent ? justifyMap[justifyContent] : undefined;\r\n\r\n // --- Simple Outlook Approach for Percentage Widths ---\r\n let simpleOutlookButton = \"\";\r\n\r\n // Build consistent inline styles for text properties\r\n const textDecorationStyle =\r\n textDecoration && textDecoration !== \"none\"\r\n ? `text-decoration: ${textDecoration};`\r\n : \"\";\r\n const fontStyleProp = fontStyle ? `font-style: ${fontStyle};` : \"\";\r\n const letterSpacingProp = letterSpacing\r\n ? `letter-spacing: ${letterSpacing};`\r\n : \"\";\r\n const textTransformProp = textTransform\r\n ? `text-transform: ${textTransform};`\r\n : \"\";\r\n const whiteSpaceProp = whiteSpace ? `white-space: ${whiteSpace};` : \"\";\r\n const directionProp = direction ? `direction: ${direction};` : \"\";\r\n const opacityProp = opacity !== undefined ? `opacity: ${opacity};` : \"\";\r\n const wordBreakProp = wordBreak ? `word-break: ${wordBreak};` : \"\";\r\n\r\n // Border radius is intentionally omitted from the Outlook Classic table cell.\r\n // Outlook Classic ignores border-radius on table cells anyway, and including it\r\n // can cause unexpected rendering artifacts, so we explicitly leave it out.\r\n simpleOutlookButton = `\r\n <!--[if mso]>\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"100%\" style=\"border-collapse: collapse;\">\r\n <tr>\r\n <td ${align ? `align=\"${align}\"` : \"\"} style=\"padding: 0;\">\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"${width || \"auto\"}\" style=\"border-collapse: collapse;\">\r\n <tr>\r\n <td ${backgroundColor ? `bgcolor=\"${backgroundColor}\"` : \"\"} ${textAlign ? `align=\"${textAlign}\"` : \"\"} style=\"${padding ? `padding: ${padding};` : \"\"} ${href ? \"cursor: pointer;\" : \"\"} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${borderStyleString}\">\r\n ${\r\n href\r\n ? `<a href=\"${href}\" target=\"${target}\" rel=\"noopener noreferrer\" style=\"${color ? `color: ${color};` : \"\"} ${textDecorationStyle} display: block; ${safeFontFamily ? `font-family: ${safeFontFamily};` : \"\"} ${fontSize ? `font-size: ${fontSize};` : \"\"} ${fontWeight ? `font-weight: ${fontWeight};` : \"\"} ${fontStyleProp} ${lineHeight ? `line-height: ${lineHeight};` : \"\"} ${letterSpacingProp} ${textTransformProp} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${whiteSpaceProp} ${directionProp} ${opacityProp} ${wordBreakProp} mso-line-height-rule: exactly;\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </a>`\r\n : `<span style=\"${color ? `color: ${color};` : \"\"} ${textDecorationStyle} display: block; ${safeFontFamily ? `font-family: ${safeFontFamily};` : \"\"} ${fontSize ? `font-size: ${fontSize};` : \"\"} ${fontWeight ? `font-weight: ${fontWeight};` : \"\"} ${fontStyleProp} ${lineHeight ? `line-height: ${lineHeight};` : \"\"} ${letterSpacingProp} ${textTransformProp} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${whiteSpaceProp} ${directionProp} ${opacityProp} ${wordBreakProp} mso-line-height-rule: exactly;\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>`\r\n }\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n </table>\r\n <![endif]-->\r\n `;\r\n\r\n // Build shared inline style fragments for the non-MSO path.\r\n // fontFamily uses the sanitized value so embedded quotes never break the\r\n // style attribute string (which is always wrapped in double quotes).\r\n const sharedTextStyles = [\r\n color ? `color: ${color};` : \"\",\r\n safeFontFamily ? `font-family: ${safeFontFamily};` : \"\",\r\n fontSize ? `font-size: ${fontSize};` : \"\",\r\n fontWeight ? `font-weight: ${fontWeight};` : \"\",\r\n fontStyle ? `font-style: ${fontStyle};` : \"\",\r\n lineHeight ? `line-height: ${lineHeight};` : \"\",\r\n letterSpacing ? `letter-spacing: ${letterSpacing};` : \"\",\r\n textTransform ? `text-transform: ${textTransform};` : \"\",\r\n textDecoration && textDecoration !== \"none\"\r\n ? `text-decoration: ${textDecoration};`\r\n : \"\",\r\n direction ? `direction: ${direction};` : \"\",\r\n opacity !== undefined ? `opacity: ${opacity};` : \"\",\r\n whiteSpace ? `white-space: ${whiteSpace};` : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n // Wrapper table for alignment - maintains proper positioning for hover indicators\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n boxSizing: \"border-box\",\r\n border: 0,\r\n margin: 0,\r\n padding: 0,\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n <td\r\n align={align}\r\n style={{\r\n padding: 0,\r\n }}\r\n >\r\n {/* Inner button table - this is the actual button structure */}\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n // --- Start dev\r\n position: \"relative\",\r\n // --- End dev\r\n\r\n width: width || \"auto\",\r\n ...(maxWidth && { maxWidth: maxWidth }),\r\n borderCollapse: \"collapse\",\r\n\r\n // base\r\n boxSizing: \"border-box\",\r\n border: 0,\r\n margin: 0,\r\n padding: 0,\r\n }}\r\n onClick={devMode ? (e) => e.preventDefault() : undefined}\r\n >\r\n <tbody>\r\n <tr>\r\n <td\r\n dangerouslySetInnerHTML={{\r\n __html: `\r\n ${simpleOutlookButton}\r\n <!--[if !mso]><!-->\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse: collapse; width: 100%;\">\r\n <tbody>\r\n <tr>\r\n <td style=\"${backgroundTdStyle.backgroundColor ? `background-color: ${backgroundTdStyle.backgroundColor};` : \"\"} ${backgroundTdStyle.borderRadius ? `border-radius: ${backgroundTdStyle.borderRadius};` : \"\"} width: ${backgroundTdStyle.width}; ${maxWidth ? `max-width: ${maxWidth};` : \"\"} ${borderRadius ? \"overflow: hidden;\" : \"\"}\">\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse: separate; border-spacing: 0; ${borderRadius ? `border-radius: ${borderRadius};` : \"\"} width: 100%; ${borderStyleString}\">\r\n <tbody>\r\n <tr>\r\n <td style=\"padding: 0;\">\r\n ${\r\n devMode\r\n ? `<span style=\"${sharedTextStyles} ${textDecoration && textDecoration !== \"none\" ? \"\" : \"text-decoration: none;\"} display: block; ${wordBreak ? `word-break: ${wordBreak};` : \"\"} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${padding ? `padding: ${padding};` : \"\"}\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>`\r\n : href\r\n ? `<a href=\"${href}\" target=\"${target}\" rel=\"noopener noreferrer\" style=\"${sharedTextStyles} ${textDecoration && textDecoration !== \"none\" ? \"\" : \"text-decoration: none;\"} display: block; cursor: pointer; ${wordBreak ? `word-break: ${wordBreak};` : \"\"} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${padding ? `padding: ${padding};` : \"\"}\">\r\n <span>\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>\r\n </a>`\r\n : `<span style=\"${sharedTextStyles} ${textDecoration && textDecoration !== \"none\" ? \"\" : \"text-decoration: none;\"} display: block; ${wordBreak ? `word-break: ${wordBreak};` : \"\"} ${textAlign ? `text-align: ${textAlign};` : \"\"} ${padding ? `padding: ${padding};` : \"\"}\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>`\r\n }\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!--<![endif]-->\r\n `,\r\n }}\r\n />\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Button, arePropsEqual);\r\n","import { CSSProperties, Fragment, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport { BorderConfig } from \"../types\";\r\n\r\nexport interface BackgroundImageType {\r\n src: string;\r\n repeat?: \"no-repeat\" | \"repeat\" | \"repeat-x\" | \"repeat-y\";\r\n size?: \"auto\" | \"cover\" | \"contain\";\r\n position?: string;\r\n}\r\n\r\nexport type ColumnConfig = {\r\n // Border and Padding\r\n borderRadius?: string;\r\n padding?: string;\r\n border?: BorderConfig;\r\n\r\n // Alignment (maps to vertical-align)\r\n alignItems?: \"start\" | \"center\" | \"end\";\r\n justifyContent?: \"start\" | \"center\" | \"end\";\r\n\r\n // background\r\n backgroundColor?: string;\r\n backgroundImage?: BackgroundImageType;\r\n\r\n // Width/Dimension\r\n width?: string;\r\n height?: string;\r\n\r\n // NEW: Gap property for spacing between children\r\n gap?: string;\r\n};\r\n\r\nexport type ColumnProps = {\r\n children?: ReactNode;\r\n config: ColumnConfig;\r\n devNode?: ReactNode;\r\n};\r\n\r\n// Define the exact set of acceptable values for the 'valign' attribute\r\ntype TdValign = \"top\" | \"middle\" | \"bottom\";\r\n\r\n// Define the exact set of acceptable values for the 'align' attribute\r\ntype Tdalign = \"left\" | \"center\" | \"right\";\r\n\r\n// Helper for vertical alignment\r\nconst vAlignMap: Record<\r\n NonNullable<ColumnConfig[\"justifyContent\"]>,\r\n TdValign\r\n> = {\r\n start: \"top\",\r\n center: \"middle\",\r\n end: \"bottom\",\r\n};\r\n\r\n// Helper for horizontal alignment\r\nconst alignMap: Record<NonNullable<ColumnConfig[\"alignItems\"]>, Tdalign> = {\r\n start: \"left\",\r\n center: \"center\",\r\n end: \"right\",\r\n};\r\n\r\n// Helper to convert border config to CSS border shorthand\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: CSSProperties = {};\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n } else {\r\n // If only individual borders are specified, explicitly set others to 'none'\r\n // to prevent Outlook Classic from showing black borders\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n style.borderTop = \"none\";\r\n style.borderRight = \"none\";\r\n style.borderBottom = \"none\";\r\n style.borderLeft = \"none\";\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n }\r\n if (border.right) {\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n }\r\n if (border.bottom) {\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n }\r\n if (border.left) {\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n }\r\n\r\n return style;\r\n}\r\n\r\nfunction Column({ children, config, devNode }: ColumnProps) {\r\n // Process children array for gap support\r\n const childrenArray = (\r\n Array.isArray(children) ? children : [children]\r\n ).filter((child) => child != null) as ReactNode[];\r\n const numChildren = childrenArray.length;\r\n\r\n // 1. Outer table style: Takes up the full width/height of its parent TD.\r\n // height here drives the *total* outer height of the column.\r\n const outerTableStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: config.height,\r\n borderCollapse: \"collapse\",\r\n };\r\n\r\n // 2. Outer TD style: Background and Border Radius (no border here).\r\n // height is set so the TD occupies the full declared height.\r\n const outerTdStyle: React.CSSProperties = {\r\n width: config.width,\r\n height: config.height,\r\n backgroundColor: config.backgroundColor,\r\n borderRadius: config.borderRadius,\r\n\r\n // Background Image styles\r\n backgroundImage: config.backgroundImage\r\n ? `url(${config.backgroundImage.src})`\r\n : undefined,\r\n backgroundRepeat: config.backgroundImage?.repeat,\r\n backgroundSize: config.backgroundImage?.size,\r\n backgroundPosition: config.backgroundImage?.position,\r\n\r\n // Overflow hidden to clip background to border-radius\r\n ...(config.borderRadius && { overflow: \"hidden\" }),\r\n };\r\n\r\n // 2b. Inner table style: Border and Border Radius.\r\n // height: 100% so it stretches to fill the outer TD's declared height.\r\n const innerTableStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: \"100%\", // fill the outer TD rather than re-declaring the pixel value\r\n borderCollapse: \"separate\",\r\n borderSpacing: 0,\r\n borderRadius: config.borderRadius,\r\n ...getBorderStyle(config.border),\r\n };\r\n\r\n // 3. Inner TD style: Padding and Vertical Alignment only.\r\n // *** No height here. ***\r\n // The outer TD/table owns the height; padding is purely inner spacing,\r\n // so the total rendered height = declared height (padding is inside).\r\n const innerTdStyle: React.CSSProperties = {\r\n padding: config.padding,\r\n // height intentionally omitted — setting it here would make browsers\r\n // treat it as content-box height and add padding on top, causing the\r\n // total to exceed the declared height in preview mode.\r\n verticalAlign: config.alignItems ? alignMap[config.alignItems] : \"top\",\r\n };\r\n\r\n // 4. Gap spacer style (used between children)\r\n const gapSpacerStyle: React.CSSProperties = {\r\n height: config.gap || \"0\",\r\n lineHeight: \"1px\",\r\n fontSize: \"1px\",\r\n width: \"100%\",\r\n };\r\n\r\n // Main content rendering\r\n const renderContent = () => (\r\n <table\r\n aria-label=\"Column Padding\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={innerTableStyle}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Inner TD: Padding and Vertical Alignment only — no height */}\r\n <td\r\n style={innerTdStyle}\r\n valign={\r\n config.justifyContent ? vAlignMap[config.justifyContent] : \"top\"\r\n }\r\n align={config.alignItems ? alignMap[config.alignItems] : \"left\"}\r\n >\r\n {/* Content wrapper for gap support */}\r\n {config.gap && numChildren > 1 ? (\r\n <table\r\n aria-label=\"Column Gap Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n >\r\n <tbody>\r\n {childrenArray.map((child, index) => (\r\n <Fragment key={`col-child-${index}`}>\r\n <tr>\r\n <td\r\n style={{\r\n verticalAlign: config.alignItems\r\n ? alignMap[config.alignItems]\r\n : \"top\",\r\n }}\r\n valign={\r\n config.justifyContent\r\n ? vAlignMap[config.justifyContent]\r\n : \"top\"\r\n }\r\n align={\r\n config.alignItems\r\n ? alignMap[config.alignItems]\r\n : \"left\"\r\n }\r\n >\r\n {child}\r\n </td>\r\n </tr>\r\n {/* Add gap spacer between children (not after last child) */}\r\n {index < numChildren - 1 && (\r\n <tr>\r\n <td style={gapSpacerStyle}>&nbsp;</td>\r\n </tr>\r\n )}\r\n </Fragment>\r\n ))}\r\n </tbody>\r\n </table>\r\n ) : (\r\n children\r\n )}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n );\r\n\r\n return (\r\n <table\r\n aria-label=\"Column Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n position: \"relative\",\r\n ...outerTableStyle,\r\n }}\r\n {...(config.height && { height: config.height })}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Outer TD: Background, Border Radius, Width, Height */}\r\n <td\r\n style={outerTdStyle}\r\n {...(config.width && { width: config.width })}\r\n {...(config.height && { height: config.height })}\r\n >\r\n {renderContent()}\r\n </td>\r\n </tr>\r\n </tbody>\r\n {devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Column, arePropsEqual);\r\n","import { CSSProperties, Fragment, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport { BorderConfig } from \"../types\";\r\n\r\nexport type WidthType = \"full\" | \"fixed\";\r\nexport type WidthDistributionType = \"equals\" | \"ratio\" | \"manual\";\r\n\r\nexport interface RatioConstraint {\r\n mainChildIndex: number;\r\n value: [number, number];\r\n}\r\n\r\nexport type ChildrenConstraints =\r\n | {\r\n widthDistributionType: \"equals\";\r\n }\r\n | {\r\n widthDistributionType: \"ratio\";\r\n ratio: RatioConstraint;\r\n }\r\n | {\r\n widthDistributionType: \"manual\";\r\n widths: string[];\r\n };\r\n\r\nexport interface ContainerConfig {\r\n widthType: WidthType;\r\n childrenConstraints: ChildrenConstraints;\r\n\r\n shouldWrap?: boolean;\r\n borderRadius?: string;\r\n border?: BorderConfig;\r\n padding?: string;\r\n gap?: string;\r\n width?: string;\r\n height?: string;\r\n alignItems?: \"start\" | \"center\" | \"end\";\r\n justifyContent?: \"start\" | \"center\" | \"end\";\r\n backgroundColor?: string;\r\n backgroundImage?: {\r\n src: string;\r\n repeat?: \"no-repeat\" | \"repeat\" | \"repeat-x\" | \"repeat-y\";\r\n size?: \"auto\" | \"cover\" | \"contain\";\r\n position?: string;\r\n };\r\n}\r\n\r\nexport type ContainerProps = {\r\n config: ContainerConfig;\r\n children?: ReactNode;\r\n devMode?: boolean;\r\n devNode?: ReactNode;\r\n};\r\n\r\nconst alignMap: Record<NonNullable<ContainerConfig[\"alignItems\"]>, string> = {\r\n start: \"top\",\r\n center: \"middle\",\r\n end: \"bottom\",\r\n};\r\n\r\ntype TdAlign = \"center\" | \"left\" | \"right\";\r\n\r\nconst justifyMap: Record<\r\n NonNullable<ContainerConfig[\"justifyContent\"]>,\r\n TdAlign\r\n> = {\r\n start: \"left\",\r\n center: \"center\",\r\n end: \"right\",\r\n};\r\n\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: CSSProperties = {};\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n } else {\r\n // If only individual borders are specified, explicitly set others to 'none'\r\n // to prevent Outlook Classic from showing black borders\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n style.borderTop = \"none\";\r\n style.borderRight = \"none\";\r\n style.borderBottom = \"none\";\r\n style.borderLeft = \"none\";\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n }\r\n if (border.right) {\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n }\r\n if (border.bottom) {\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n }\r\n if (border.left) {\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n }\r\n\r\n return style;\r\n}\r\n\r\nfunction Container({ children, config, devMode, devNode }: ContainerProps) {\r\n const { widthType, childrenConstraints } = config;\r\n\r\n const childrenArray = (\r\n Array.isArray(children) ? children : [children]\r\n ).filter((child) => child != null) as ReactNode[];\r\n const numChildren = childrenArray.length;\r\n\r\n const containerWidthPx = (() => {\r\n if (widthType === \"fixed\" && config.width && config.width.endsWith(\"px\")) {\r\n return parseInt(config.width, 10);\r\n }\r\n return 600;\r\n })();\r\n\r\n const gapWidthPx = (() => {\r\n if (config.gap && config.gap.endsWith(\"px\")) {\r\n return parseInt(config.gap, 10);\r\n }\r\n return 0;\r\n })();\r\n\r\n const getChildWidths = (() => {\r\n const { widthDistributionType } = childrenConstraints;\r\n const totalGapSpace = gapWidthPx * (numChildren > 1 ? numChildren - 1 : 0);\r\n const remainingContentSpace = containerWidthPx - totalGapSpace;\r\n\r\n switch (widthDistributionType) {\r\n case \"equals\":\r\n const equalContentWidth = remainingContentSpace / numChildren;\r\n return Array(numChildren).fill(`${equalContentWidth}px`);\r\n case \"ratio\": {\r\n const { ratio } = childrenConstraints as {\r\n widthDistributionType: \"ratio\";\r\n ratio: RatioConstraint;\r\n };\r\n const {\r\n mainChildIndex,\r\n value: [numerator, denominator],\r\n } = ratio;\r\n\r\n if (\r\n numChildren < 2 ||\r\n mainChildIndex < 0 ||\r\n mainChildIndex >= numChildren ||\r\n denominator === 0\r\n ) {\r\n const equalFallbackWidth = remainingContentSpace / numChildren;\r\n return Array(numChildren).fill(`${equalFallbackWidth}px`);\r\n }\r\n\r\n const mainChildWidth =\r\n (remainingContentSpace * numerator) / denominator;\r\n const remainingWidth = remainingContentSpace - mainChildWidth;\r\n const numOtherChildren = numChildren - 1;\r\n const otherChildWidth =\r\n numOtherChildren > 0 ? remainingWidth / numOtherChildren : 0;\r\n\r\n const widths = Array(numChildren).fill(`${otherChildWidth}px`);\r\n widths[mainChildIndex] = `${mainChildWidth}px`;\r\n\r\n return widths;\r\n }\r\n\r\n case \"manual\": {\r\n const { widths } = childrenConstraints as {\r\n widthDistributionType: \"manual\";\r\n widths: string[];\r\n };\r\n return widths.length === numChildren ? widths : [];\r\n }\r\n default:\r\n return [];\r\n }\r\n })();\r\n\r\n const outerTableStyle: CSSProperties = {\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n };\r\n\r\n // 1. Background TD Style - Background color, border radius, background image\r\n const backgroundTdStyle: CSSProperties = {\r\n backgroundColor: config.backgroundColor,\r\n borderRadius: config.borderRadius,\r\n maxWidth: widthType === \"fixed\" ? config.width || \"600px\" : undefined,\r\n backgroundImage: config.backgroundImage\r\n ? `url(${config.backgroundImage.src})`\r\n : undefined,\r\n backgroundRepeat: config.backgroundImage?.repeat,\r\n backgroundSize: config.backgroundImage?.size,\r\n backgroundPosition: config.backgroundImage?.position,\r\n // Overflow hidden to clip background to border-radius\r\n ...(config.borderRadius && { overflow: \"hidden\" }),\r\n };\r\n\r\n // 2. Border Table Style - Border and border radius\r\n const borderTableStyle: CSSProperties = {\r\n width: \"100%\",\r\n borderCollapse: \"separate\",\r\n borderSpacing: 0,\r\n borderRadius: config.borderRadius,\r\n ...getBorderStyle(config.border),\r\n };\r\n\r\n // 3. Padding TD Style\r\n const innerTdStyle: CSSProperties = {\r\n padding: config.padding,\r\n width: \"100%\",\r\n verticalAlign: config.alignItems ? alignMap[config.alignItems] : \"top\",\r\n };\r\n\r\n const contentTableStyle: CSSProperties = {\r\n width: \"100%\",\r\n height: config.height,\r\n borderCollapse: \"collapse\",\r\n };\r\n\r\n const gapTdStyle: CSSProperties = {\r\n width: config.gap || \"0\",\r\n lineHeight: \"1px\",\r\n fontSize: \"1px\",\r\n };\r\n\r\n const justifyAlign = config.justifyContent\r\n ? justifyMap[config.justifyContent]\r\n : \"center\";\r\n const containerWidthAttr =\r\n widthType === \"fixed\" ? containerWidthPx : undefined;\r\n const isStacking = config.shouldWrap && numChildren > 1;\r\n const msoFixedWrapper = \"\";\r\n const msoFixedFooter = \"\";\r\n\r\n const rowElements = childrenArray.map((child, index) => {\r\n const childTdStyle: CSSProperties = {\r\n width: getChildWidths[index],\r\n verticalAlign: config.alignItems ? alignMap[config.alignItems] : \"top\",\r\n textAlign: \"left\",\r\n };\r\n\r\n if (config.gap && index < numChildren - 1) {\r\n return (\r\n <Fragment key={`ctn:${index}`}>\r\n <td\r\n key={`child-${index}`}\r\n className={isStacking ? \"stack-td\" : undefined}\r\n width={getChildWidths[index]}\r\n style={childTdStyle}\r\n >\r\n {child}\r\n\r\n {isStacking && (\r\n <div\r\n className=\"mobile-gap-spacer\"\r\n style={{\r\n display: \"none\",\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n height: config.gap,\r\n }}\r\n >\r\n &nbsp;\r\n </div>\r\n )}\r\n </td>\r\n\r\n <td\r\n key={`gap-${index}`}\r\n className={isStacking ? \"desktop-gap-column\" : undefined}\r\n width={config.gap}\r\n style={gapTdStyle}\r\n >\r\n &nbsp;\r\n </td>\r\n </Fragment>\r\n );\r\n }\r\n\r\n return (\r\n <td\r\n key={`child-${index}`}\r\n className={isStacking ? \"stack-td\" : undefined}\r\n width={getChildWidths[index]}\r\n style={childTdStyle}\r\n >\r\n {child}\r\n </td>\r\n );\r\n });\r\n\r\n return (\r\n <table\r\n aria-label={`Container | Table Outer`}\r\n cellPadding={0}\r\n cellSpacing={0}\r\n role=\"presentation\"\r\n border={0}\r\n style={{\r\n position: \"relative\",\r\n ...outerTableStyle,\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n <td align={justifyAlign}>\r\n <div dangerouslySetInnerHTML={{ __html: msoFixedWrapper }} />\r\n\r\n {/* Outer table for width constraint */}\r\n <table\r\n className={[\r\n widthType === \"fixed\" ? \"container-fixed-width\" : undefined,\r\n devMode ? \"main-wrapper relative\" : undefined,\r\n ]\r\n .filter(Boolean)\r\n .join(\" \")}\r\n aria-label={`Container | Table Middle`}\r\n cellPadding={0}\r\n cellSpacing={0}\r\n role=\"presentation\"\r\n border={0}\r\n align={justifyAlign}\r\n style={{\r\n width: \"100%\",\r\n maxWidth:\r\n widthType === \"fixed\" ? config.width || \"600px\" : undefined,\r\n borderCollapse: \"collapse\",\r\n }}\r\n width={containerWidthAttr}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Background TD: Background color, border radius, background image */}\r\n <td style={backgroundTdStyle}>\r\n {/* Border Table: Border and border radius */}\r\n <table\r\n aria-label={`Container | Border Wrapper`}\r\n cellPadding={0}\r\n cellSpacing={0}\r\n role=\"presentation\"\r\n border={0}\r\n style={borderTableStyle}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Padding TD */}\r\n <td style={innerTdStyle}>\r\n {/* Content Table */}\r\n <table\r\n aria-label={`Container | Content Table`}\r\n cellPadding={0}\r\n cellSpacing={0}\r\n role=\"presentation\"\r\n border={0}\r\n style={contentTableStyle}\r\n >\r\n <tbody>\r\n <tr>{rowElements}</tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n {!!devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n\r\n <div dangerouslySetInnerHTML={{ __html: msoFixedFooter }} />\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Container, arePropsEqual);\r\n","import { memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\n\r\nexport interface DividerConfig {\r\n height?: string;\r\n color?: string;\r\n width?: string;\r\n margin?: string;\r\n align?: \"left\" | \"center\" | \"right\";\r\n hideOnMobile?: boolean;\r\n}\r\n\r\nexport type DividerProps = {\r\n config: DividerConfig;\r\n devNode?: ReactNode;\r\n};\r\n\r\nfunction Divider({ config, devNode }: DividerProps) {\r\n const {\r\n height = \"1px\",\r\n color = \"#cccccc\",\r\n width = \"100%\",\r\n margin = \"20px 0\",\r\n align = \"center\",\r\n hideOnMobile,\r\n } = config;\r\n\r\n const heightPx = parseInt(height, 10) || 1;\r\n\r\n // Parse margin into paddingTop / paddingBottom for the outer TD.\r\n // Outlook ignores shorthand \"20px 0\" on TDs — must be explicit.\r\n const [marginTopRaw = \"0\", marginRightRaw = \"0\", marginBottomRaw, marginLeftRaw] =\r\n margin.trim().split(/\\s+/);\r\n const marginTop = marginTopRaw;\r\n const marginBottom = marginBottomRaw ?? marginTopRaw; // \"20px 0\" → top=20px, bottom=20px\r\n void marginRightRaw;\r\n void marginLeftRaw;\r\n\r\n // Outlook requires align on the outer TD to correctly position\r\n // a fixed-width inner table (e.g. width=\"300px\").\r\n const alignAttr = align === \"left\" ? \"left\" : align === \"right\" ? \"right\" : \"center\";\r\n\r\n return (\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n position: \"relative\", // dev overlay anchor\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n border: \"0\",\r\n }}\r\n className={hideOnMobile ? \"hide-on-mobile\" : undefined}\r\n >\r\n <tbody>\r\n <tr>\r\n {/*\r\n Outer TD:\r\n - Uses explicit padding-top / padding-bottom instead of shorthand\r\n because Outlook/Word partially ignores padding shorthand on TDs.\r\n - align attribute (not just CSS text-align) drives centering of\r\n the inner table in Outlook.\r\n */}\r\n <td\r\n align={alignAttr}\r\n style={{\r\n paddingTop: marginTop,\r\n paddingBottom: marginBottom,\r\n paddingLeft: \"0\",\r\n paddingRight: \"0\",\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n }}\r\n >\r\n {/*\r\n Inner wrapper table:\r\n - width / align here position the line block itself.\r\n - NO background-color here — Outlook ignores it on <table>.\r\n - border=\"0\" as HTML attribute AND style — belt + braces for Outlook.\r\n */}\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n align={alignAttr}\r\n style={{\r\n width: width,\r\n borderCollapse: \"collapse\",\r\n border: \"0\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n {/*\r\n The actual divider line lives entirely on this TD:\r\n\r\n 1. height=\"N\" HTML attribute → Outlook uses this, not CSS height.\r\n 2. background-color on TD → only place Outlook respects it.\r\n 3. mso-line-height-rule:exactly → prevents Word inflating the row.\r\n 4. line-height === height → collapses the row in all clients.\r\n 5. font-size: 0 → kills any phantom text gap.\r\n 6. Empty content → &nbsp; adds ~1em phantom height in Outlook.\r\n\r\n MSO props cannot go through React's style object (it strips them),\r\n so we use a ref to write the raw style attribute after mount,\r\n and also set it as a static string via dangerouslySetInnerHTML\r\n on a child so it survives SSR / static rendering.\r\n */}\r\n <td\r\n {...({ height: heightPx } as Record<string, unknown>)}\r\n ref={(el) => {\r\n if (!el) return;\r\n el.setAttribute(\r\n \"style\",\r\n `height:${height};` +\r\n `line-height:${height};` +\r\n `font-size:0;` +\r\n `padding:0;` +\r\n `background-color:${color};` +\r\n `mso-line-height-rule:exactly;`\r\n );\r\n }}\r\n style={{\r\n // Fallback for non-Outlook clients (React-rendered style object).\r\n height: height,\r\n lineHeight: height,\r\n fontSize: \"0\",\r\n padding: \"0\",\r\n backgroundColor: color,\r\n }}\r\n />\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n\r\n {devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Divider, arePropsEqual);","// components/email/Font.tsx\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Declarative <Font> component for email <Head>.\r\n// Renders a @font-face rule (with optional MSO VML fallback comment) for a\r\n// single font family + weight + style combination.\r\n//\r\n// Usage (inside <Head>):\r\n// <Font\r\n// fontFamily=\"Roboto\"\r\n// fallbackFontFamily=\"Verdana\"\r\n// webFont={{\r\n// url: \"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2\",\r\n// format: \"woff2\",\r\n// }}\r\n// fontWeight={400}\r\n// fontStyle=\"normal\"\r\n// />\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type FontFormat =\r\n | \"woff2\"\r\n | \"woff\"\r\n | \"truetype\"\r\n | \"opentype\"\r\n | \"svg\"\r\n | \"embedded-opentype\";\r\n\r\nexport interface WebFont {\r\n /** Direct URL to the font file (woff2, woff, ttf, etc.) */\r\n url: string;\r\n /** Font format hint used in the CSS src descriptor */\r\n format: FontFormat;\r\n}\r\n\r\nexport interface FontProps {\r\n /** The CSS font-family name, e.g. \"Roboto\" */\r\n fontFamily: string;\r\n /**\r\n * Fallback font family used:\r\n * 1. In the MSO (Outlook) conditional comment so Outlook renders the\r\n * closest web-safe equivalent.\r\n * 2. As the CSS font-stack fallback after the web font.\r\n * Accepts a single string or an array for a prioritised fallback chain.\r\n */\r\n fallbackFontFamily?: string | string[];\r\n /**\r\n * Web font to load. When omitted the component only emits the MSO fallback\r\n * comment (useful for system fonts you still want to declare explicitly).\r\n */\r\n webFont?: WebFont;\r\n /** CSS font-weight — numeric (400) or keyword (\"bold\"). Default: 400 */\r\n fontWeight?: number | string;\r\n /** CSS font-style. Default: \"normal\" */\r\n fontStyle?: \"normal\" | \"italic\" | \"oblique\";\r\n}\r\n\r\n// ── Helpers ───────────────────────────────────────────────────────────────────\r\n\r\nfunction normaliseFallbacks(\r\n fallbackFontFamily: string | string[] | undefined,\r\n): string[] {\r\n if (!fallbackFontFamily) return [];\r\n return Array.isArray(fallbackFontFamily)\r\n ? fallbackFontFamily\r\n : [fallbackFontFamily];\r\n}\r\n\r\n/**\r\n * Build the CSS font-stack string from the primary family + fallbacks.\r\n * Wraps names that contain spaces in single quotes.\r\n */\r\nfunction buildFontStack(primary: string, fallbacks: string[]): string {\r\n const quote = (name: string) => (name.includes(\" \") ? `'${name}'` : name);\r\n return [primary, ...fallbacks].map(quote).join(\", \");\r\n}\r\n\r\n// ── Component ─────────────────────────────────────────────────────────────────\r\n\r\nexport default function Font({\r\n fontFamily,\r\n fallbackFontFamily,\r\n webFont,\r\n fontWeight = 400,\r\n fontStyle = \"normal\",\r\n}: FontProps) {\r\n const fallbacks = normaliseFallbacks(fallbackFontFamily);\r\n\r\n const fontFaceCss = webFont\r\n ? `\r\n@font-face {\r\n font-family: '${fontFamily}';\r\n font-style: ${fontStyle};\r\n font-weight: ${fontWeight};\r\n font-display: swap;\r\n src: url('${webFont.url}') format('${webFont.format}');\r\n mso-font-alt: '${fallbacks[0] ?? \"sans-serif\"}';\r\n}`.trim()\r\n : null;\r\n\r\n const msoComment =\r\n fallbacks.length > 0\r\n ? `<!--[if mso]>\\n<style type=\"text/css\">\\n .${cssClassName(fontFamily)} {\\n font-family: ${buildFontStack(fallbacks[0], fallbacks.slice(1))}, sans-serif !important;\\n }\\n</style>\\n<![endif]-->`\r\n : null;\r\n\r\n return (\r\n <>\r\n {fontFaceCss && (\r\n <style\r\n type=\"text/css\"\r\n dangerouslySetInnerHTML={{ __html: fontFaceCss }}\r\n />\r\n )}\r\n {/* Render MSO comment via a raw html string injected into a <head>-safe element */}\r\n {msoComment && (\r\n <style\r\n type=\"text/css\"\r\n dangerouslySetInnerHTML={{\r\n __html: `</style>${msoComment}<style type=\"text/css\">`,\r\n }}\r\n />\r\n )}\r\n </>\r\n );\r\n}\r\n\r\n// ── Utility: generate a stable CSS class name from a font family name ─────────\r\n// Used in the MSO conditional comment to scope the fallback rule.\r\nexport function cssClassName(fontFamily: string): string {\r\n return `font-${fontFamily.toLowerCase().replace(/\\s+/g, \"-\")}`;\r\n}\r\n","import { ReactNode } from \"react\";\r\nimport ResolvedFont from \"../types/ResolvedFont\";\r\nimport Font from \"./Font\";\r\n\r\nexport interface HeadProps {\r\n /** Additional elements like custom <style> blocks, <title>, etc. */\r\n children?: ReactNode;\r\n /** Global background color (used in CSS reset). */\r\n backgroundColor?: string;\r\n /** Subject line for the email title. */\r\n title?: string;\r\n /** Array of gap values (e.g. [\"8px\", \"12px\", \"48px\"]) to generate mobile wrap margin-bottom rules */\r\n rowGaps?: string[];\r\n /**\r\n * Resolved fonts from `loadEmailFonts()`.\r\n * Head will render a <Font> for every variant of every family.\r\n * This is the preferred API when using the builder pipeline.\r\n *\r\n * Example:\r\n * const { resolved } = await loadEmailFonts(\r\n * extractFontFamilies(doc)\r\n * );\r\n * <Head fonts={resolved} ... />\r\n */\r\n fonts?: ResolvedFont[];\r\n}\r\n\r\nexport default function Head({\r\n children,\r\n backgroundColor = \"#ffffff\",\r\n title = \"Email Preview\",\r\n rowGaps = [],\r\n fonts = [],\r\n}: HeadProps) {\r\n const msoResetStyles = `\r\n .ExternalClass { width: 100%; line-height: 100%; } \r\n .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div { line-height: 100%; }\r\n table { mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-collapse: collapse; border-spacing: 0; }\r\n td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }\r\n img { border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; }\r\n #MessageViewBody img { min-width: 100%; }\r\n a[x-apple-data-detectors] { \r\n color: inherit !important; \r\n text-decoration: none !important; \r\n font-size: inherit !important; \r\n font-family: inherit !important; \r\n font-weight: inherit !important; \r\n line-height: inherit !important; \r\n }\r\n body { background-color: ${backgroundColor} !important; }\r\n p { margin: 0; }\r\n `;\r\n\r\n const globalStyles = `\r\n @media screen and (max-width: 768px) {\r\n .container-fixed-width {\r\n width: 100% !important;\r\n max-width: 100% !important;\r\n }\r\n }\r\n @media screen and (max-width: 768px) {\r\n .hide-on-mobile {\r\n display: none !important;\r\n max-height: 0 !important;\r\n overflow: hidden !important;\r\n mso-hide: all;\r\n }\r\n }\r\n @media screen and (min-width: 769px) {\r\n .hide-on-desktop {\r\n display: none !important;\r\n max-height: 0 !important;\r\n overflow: hidden !important;\r\n mso-hide: all;\r\n }\r\n }\r\n @media screen and (max-width: 768px) {\r\n .stack-td {\r\n width: 100% !important;\r\n display: block !important;\r\n float: left;\r\n clear: both;\r\n padding-left: 0 !important;\r\n padding-right: 0 !important;\r\n }\r\n .desktop-gap-column { width: 0 !important; display: none !important; }\r\n .mobile-gap-spacer {\r\n display: block !important;\r\n width: 100% !important;\r\n font-size: 1px !important;\r\n line-height: 1px !important;\r\n mso-line-height-rule: exactly;\r\n }\r\n }\r\n @media only screen and (max-width: 768px) {\r\n .row-content-table[data-mobile-justify=\"center\"] { margin: 0 auto !important; float: none !important; }\r\n .row-content-table[data-mobile-justify=\"start\"] { margin: 0 !important; float: left !important; }\r\n .row-content-table[data-mobile-justify=\"end\"] { margin: 0 0 0 auto !important; float: right !important; }\r\n .row-content-table[data-mobile-align=\"center\"] .child-cell { vertical-align: middle !important; }\r\n .row-content-table[data-mobile-align=\"start\"] .child-cell { vertical-align: top !important; }\r\n .row-content-table[data-mobile-align=\"end\"] .child-cell { vertical-align: bottom !important; }\r\n .row-content-table[data-mobile-wrap=\"true\"] { width: 100% !important; max-width: 100% !important; }\r\n .row-content-table[data-mobile-wrap=\"true\"] > tbody > .content-tr { display: block !important; }\r\n .row-content-table[data-mobile-wrap=\"true\"] > tbody > .content-tr > .child-cell {\r\n display: block !important;\r\n width: 100% !important;\r\n box-sizing: border-box !important;\r\n }\r\n .row-content-table[data-mobile-wrap=\"true\"] > tbody > .content-tr > .row-gap-td {\r\n display: none !important;\r\n width: 0 !important;\r\n height: 0 !important;\r\n }\r\n .row-content-table[data-mobile-wrap=\"true\"] > tbody > .content-tr > .child-cell:not(:last-child) {\r\n margin-bottom: 20px !important;\r\n }\r\n ${[\"10px\", \"15px\", \"20px\", \"24px\", \"30px\", \"40px\", ...rowGaps]\r\n .filter(\r\n (gap: string, index: number, self: string[]) =>\r\n self.indexOf(gap) === index,\r\n )\r\n .map(\r\n (gap: string) => `\r\n .row-content-table[data-mobile-wrap=\"true\"][data-gap=\"${gap}\"] > tbody > .content-tr > .child-cell:not(:last-child) {\r\n margin-bottom: ${gap} !important;\r\n }`,\r\n )\r\n .join(\"\\n\")}\r\n }\r\n a { color: inherit; text-decoration: none; }\r\n ol, ul { margin: 0px; padding: 0px; list-style: none; }\r\n li {\r\n list-style-type: none !important;\r\n list-style: none !important;\r\n position: relative;\r\n padding-left: 0px;\r\n margin: 0px;\r\n display: block !important;\r\n }\r\n li::marker {\r\n content: \"\" !important;\r\n font-size: 0px !important;\r\n line-height: 0px !important;\r\n color: transparent !important;\r\n width: 0px !important;\r\n }\r\n li[data-list=\"bullet\"] {\r\n list-style-type: disc !important;\r\n list-style-position: inside !important;\r\n padding-left: 1.5em;\r\n display: list-item !important;\r\n }\r\n li[data-list=\"ordered\"] {\r\n list-style-type: decimal !important;\r\n list-style-position: inside !important;\r\n padding-left: 1.5em;\r\n display: list-item !important;\r\n }\r\n li[data-list=\"bullet\"]::marker,\r\n li[data-list=\"ordered\"]::marker {\r\n content: normal !important;\r\n font-size: inherit !important;\r\n color: inherit !important;\r\n width: auto !important;\r\n padding: 0 !important;\r\n margin: 0 !important;\r\n }\r\n h1, h2, h3, h4, h5, h6 { margin: 0; padding: 0; font-weight: inherit; }\r\n `;\r\n\r\n return (\r\n <head>\r\n <meta httpEquiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n <meta httpEquiv=\"X-UA-Compatible\" content=\"IE=edge\" />\r\n <title>{title}</title>\r\n\r\n {/* ── Font declarations — rendered FIRST, before any text ──────────────\r\n • fonts prop: auto-rendered from loadEmailFonts() pipeline\r\n • children <Font>s: manually declared (original API, still works) */}\r\n {fonts.flatMap((resolved: ResolvedFont) =>\r\n resolved.fontProps.map((props, i: number) => (\r\n <Font\r\n key={`${resolved.family}-${props.fontWeight}-${props.fontStyle}-${i}`}\r\n {...props}\r\n />\r\n )),\r\n )}\r\n\r\n {/* Manual <Font> children or any other <style>/<meta> tags */}\r\n {children}\r\n\r\n <style\r\n type=\"text/css\"\r\n dangerouslySetInnerHTML={{ __html: msoResetStyles }}\r\n />\r\n <style\r\n type=\"text/css\"\r\n dangerouslySetInnerHTML={{ __html: globalStyles }}\r\n />\r\n </head>\r\n );\r\n}\r\n","interface StyleMap {\r\n [property: string]: string;\r\n}\r\n\r\nexport interface DomNode {\r\n tagName: string;\r\n attributes: Record<string, string>;\r\n style: StyleMap;\r\n children: DomNode[];\r\n parent: DomNode | null;\r\n rawHtml: string;\r\n}\r\n\r\nexport default class MiniDomParser {\r\n private html: string;\r\n root: DomNode;\r\n\r\n constructor(html: string) {\r\n this.html = html;\r\n this.root = this.makeNode(\"root\", {}, null);\r\n this.parse();\r\n }\r\n\r\n private makeNode(\r\n tagName: string,\r\n attributes: Record<string, string>,\r\n parent: DomNode | null\r\n ): DomNode {\r\n return {\r\n tagName,\r\n attributes,\r\n style: this.parseStyle(attributes[\"style\"] ?? \"\"),\r\n children: [],\r\n parent,\r\n rawHtml: \"\",\r\n };\r\n }\r\n\r\n parseStyle(styleStr: string): StyleMap {\r\n const map: StyleMap = {};\r\n for (const declaration of styleStr.split(\";\")) {\r\n const [prop, ...rest] = declaration.split(\":\");\r\n if (!prop || !rest.length) continue;\r\n const key = prop.trim().toLowerCase();\r\n const val = rest.join(\":\").trim();\r\n if (key && val) map[key] = val;\r\n }\r\n return map;\r\n }\r\n\r\n private parseAttributes(attrStr: string): Record<string, string> {\r\n const attrs: Record<string, string> = {};\r\n const pattern = /(\\w[\\w-]*)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|(\\S+)))?/g;\r\n let m: RegExpExecArray | null;\r\n while ((m = pattern.exec(attrStr)) !== null) {\r\n const key = m[1].toLowerCase();\r\n const val = m[2] ?? m[3] ?? m[4] ?? \"\";\r\n attrs[key] = val;\r\n }\r\n return attrs;\r\n }\r\n\r\n private parse(): void {\r\n const tokenPattern = /(<\\/[\\w]+\\s*>|<[\\w][^>]*>|[^<]+)/gi;\r\n const stack: DomNode[] = [this.root];\r\n\r\n let m: RegExpExecArray | null;\r\n while ((m = tokenPattern.exec(this.html)) !== null) {\r\n const token = m[0];\r\n\r\n if (token.startsWith(\"</\")) {\r\n if (stack.length > 1) stack.pop();\r\n continue;\r\n }\r\n\r\n if (token.startsWith(\"<\")) {\r\n const tagMatch = token.match(/^<([\\w]+)([\\s\\S]*)>$/i);\r\n if (!tagMatch) continue;\r\n\r\n const tagName = tagMatch[1].toLowerCase();\r\n const attrStr = tagMatch[2].trim();\r\n const attrs = this.parseAttributes(attrStr);\r\n\r\n const current = stack[stack.length - 1];\r\n const node = this.makeNode(tagName, attrs, current);\r\n node.rawHtml = token;\r\n current.children.push(node);\r\n\r\n const selfClosing =\r\n /\\/$/.test(attrStr) ||\r\n [\"br\", \"hr\", \"img\", \"input\", \"meta\", \"link\"].includes(tagName);\r\n if (!selfClosing) stack.push(node);\r\n }\r\n }\r\n }\r\n\r\n private collectByTag(node: DomNode, tag: string, results: DomNode[]): void {\r\n if (node.tagName === tag) results.push(node);\r\n for (const child of node.children) {\r\n this.collectByTag(child, tag, results);\r\n }\r\n }\r\n\r\n querySelectorAllByTag(tag: string): DomNode[] {\r\n const results: DomNode[] = [];\r\n this.collectByTag(this.root, tag.toLowerCase(), results);\r\n return results;\r\n }\r\n}","import MiniDomParser, { DomNode } from \"./MiniDomParser\";\r\n\r\nfunction resolveInheritedStyle(node: DomNode, prop: string): string | undefined {\r\n let el = node.parent;\r\n while (el && el.tagName !== \"root\") {\r\n const val = el.style[prop];\r\n if (val && val !== \"inherit\") return val;\r\n el = el.parent;\r\n }\r\n return undefined;\r\n}\r\n\r\nconst BROWSER_LINK_DEFAULTS = [\"color\", \"text-decoration\"];\r\n\r\nfunction resolveAnchorStyles(anchor: DomNode, fallback?: Record<string, string>): string {\r\n const resolved: Record<string, string> = { ...anchor.style };\r\n\r\n for (const prop of BROWSER_LINK_DEFAULTS) {\r\n if (resolved[prop] && resolved[prop] !== \"inherit\") continue;\r\n\r\n const inherited = resolveInheritedStyle(anchor, prop);\r\n if (inherited) {\r\n resolved[prop] = inherited;\r\n } else if (fallback?.[prop]) {\r\n resolved[prop] = fallback[prop];\r\n }\r\n // if neither — leave it out entirely, don't force inherit\r\n }\r\n\r\n return Object.entries(resolved)\r\n .map(([k, v]) => `${k}:${v}`)\r\n .join(\";\");\r\n}\r\n\r\nexport default function injectLinkStyles(html: string, fallback?: Record<string, string>): string {\r\n if (!html || (!html.includes(\"<a \") && !html.includes(\"<a>\"))) return html;\r\n\r\n const parser = new MiniDomParser(html);\r\n const anchors = parser.querySelectorAllByTag(\"a\");\r\n\r\n let result = html;\r\n\r\n for (const anchor of anchors) {\r\n const resolvedStyle = resolveAnchorStyles(anchor, fallback ?? {});\r\n\r\n const cleanAttrs = anchor.rawHtml\r\n .replace(/^<a\\s*/i, \"\")\r\n .replace(/>$/, \"\")\r\n .replace(/style\\s*=\\s*(?:\"[^\"]*\"|'[^']*')/gi, \"\")\r\n .trim();\r\n\r\n const newTag = `<a ${cleanAttrs} style=\"${resolvedStyle}\">`.replace(/\\s+/g, \" \");\r\n result = result.replace(anchor.rawHtml, newTag);\r\n }\r\n\r\n return result;\r\n}","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport injectLinkStyles from \"./utils/injectLinkStyles\";\r\n\r\n// Define the available HTML heading levels\r\nexport type HeadingLevel = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\r\n\r\nexport interface HeadingConfig {\r\n /** The text content. */\r\n text?: ReactNode;\r\n\r\n /** HTML heading level (h1 through h6). */\r\n level?: HeadingLevel;\r\n\r\n /** Padding around the heading (e.g., \"10px 0\"). */\r\n padding?: string;\r\n\r\n /** Text color. */\r\n color?: string;\r\n\r\n /** Horizontal text alignment. */\r\n textAlign?: \"left\" | \"center\" | \"right\" | \"justify\";\r\n\r\n /** Font family (e.g., 'Arial, sans-serif'). */\r\n fontFamily?: string;\r\n\r\n /** Font size (e.g., '24px'). Overrides default size for the level. */\r\n fontSize?: string;\r\n\r\n /** Font weight (e.g., 'normal', 'bold', or '700'). */\r\n fontWeight?: string;\r\n\r\n /** Font style (e.g., 'italic'). */\r\n fontStyle?: string;\r\n\r\n /** Line height (e.g., '1.3' or '30px'). */\r\n lineHeight?: string;\r\n\r\n /** Letter spacing (e.g., '0.5px', '1px'). */\r\n letterSpacing?: string;\r\n\r\n /** Text transform (e.g., 'uppercase', 'lowercase', 'capitalize'). */\r\n textTransform?: string;\r\n\r\n /** Text decoration (e.g., 'underline', 'line-through'). */\r\n textDecoration?: string;\r\n\r\n /** Text direction (e.g., 'ltr', 'rtl'). */\r\n direction?: string;\r\n\r\n /** Vertical alignment (e.g., 'sub', 'super'). Applied to content wrapper in Text, applied to TD here for alignment. */\r\n verticalAlign?: string;\r\n\r\n /** Background color of the heading block. */\r\n backgroundColor?: string;\r\n\r\n /** Word break behavior (e.g., 'break-all', 'break-word', 'keep-all', 'normal'). */\r\n wordBreak?: string;\r\n\r\n /** White space handling (e.g., 'nowrap', 'pre', 'pre-wrap', 'pre-line', 'normal'). */\r\n whiteSpace?: string;\r\n}\r\n\r\nexport type HeadingProps = {\r\n config: HeadingConfig;\r\n devMode?: ReactNode;\r\n children?: ReactNode;\r\n};\r\n\r\nfunction Heading({ config, devMode, children }: HeadingProps) {\r\n const {\r\n text,\r\n level = \"h1\",\r\n padding,\r\n color,\r\n textAlign,\r\n fontFamily,\r\n fontSize,\r\n fontWeight,\r\n fontStyle,\r\n lineHeight,\r\n letterSpacing,\r\n textTransform,\r\n textDecoration,\r\n direction,\r\n verticalAlign,\r\n backgroundColor,\r\n wordBreak,\r\n whiteSpace,\r\n } = config;\r\n\r\n // Determine the content to render\r\n const content = text ?? children;\r\n const isString = typeof content === \"string\";\r\n\r\n // 1. TD Style: Where padding, background, width, and verticalAlign are applied.\r\n const tdStyle: CSSProperties = {\r\n padding: padding,\r\n backgroundColor: backgroundColor,\r\n width: \"100%\",\r\n verticalAlign: verticalAlign || \"top\",\r\n };\r\n\r\n // 2. Heading Tag Style: Applied directly to the H tag.\r\n const headingStyle: CSSProperties = {\r\n color: color,\r\n textAlign: textAlign,\r\n fontFamily: fontFamily,\r\n fontSize: fontSize,\r\n fontWeight: fontWeight,\r\n fontStyle: fontStyle,\r\n lineHeight: lineHeight,\r\n letterSpacing: letterSpacing,\r\n textTransform: textTransform as any,\r\n textDecoration: textDecoration,\r\n direction: direction as any,\r\n wordBreak: wordBreak as any,\r\n whiteSpace: whiteSpace as any,\r\n\r\n // Critical: Remove default top/bottom margin from HTML heading tags\r\n margin: \"0\",\r\n padding: \"0\",\r\n\r\n // Outlook specific fixes (using string indexing)\r\n [\"msoLineHeightRule\" as string]: \"exactly\",\r\n };\r\n\r\n const processedHtml = isString\r\n ? injectLinkStyles(content, headingStyle as Record<string, string>)\r\n : \"\";\r\n\r\n // Dynamically create the Heading element\r\n const HeadingTag = level;\r\n\r\n return (\r\n // Wrap the heading content in a table for padding/width/background management.\r\n <table\r\n aria-label=\"Heading Block Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* TD: Applies Padding, Background, and Alignment */}\r\n <td style={tdStyle} align={textAlign as \"left\" | \"center\" | \"right\"}>\r\n {/* The actual Heading Tag with all inline styles */}\r\n {isString ? (\r\n <HeadingTag\r\n style={headingStyle}\r\n dangerouslySetInnerHTML={{ __html: processedHtml }}\r\n />\r\n ) : (\r\n <HeadingTag style={headingStyle}>{content}</HeadingTag>\r\n )}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Heading, arePropsEqual);\r\n","import React, { ReactNode } from \"react\";\r\n\r\nexport interface HtmlProps {\r\n children: ReactNode;\r\n // Allows the global email background color to be set easily\r\n backgroundColor?: string;\r\n}\r\n\r\nexport default function Html({\r\n children,\r\n backgroundColor = \"#ffffff\",\r\n}: HtmlProps) {\r\n const htmlAttributes = {\r\n // Standard xmlns attribute\r\n xmlns: \"http://www.w3.org/1999/xhtml\",\r\n \r\n // Namespaced attributes (with colons) are safe in the JS object\r\n \"xmlns:v\": \"urn:schemas-microsoft-com:vml\",\r\n \"xmlns:o\": \"urn:schemas-microsoft-com:office:office\",\r\n\r\n lang: \"en\",\r\n xmlLang: \"en\",\r\n \r\n // bgcolor attribute\r\n bgcolor: backgroundColor,\r\n \r\n // Note: The 'children' prop is passed as the third argument to createElement, not here.\r\n };\r\n\r\n // React.createElement avoids the JSX transpiler error by passing attributes as a JS object.\r\n return React.createElement(\r\n 'html', // The element tag name\r\n htmlAttributes, // The attributes/props object\r\n children // The content to be rendered inside the <html> tag\r\n );\r\n}\r\n","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport { BorderConfig } from \"../types\";\r\nimport IInnerLink from \"../types/IInnerLink\";\r\n\r\n/**\r\n * RULES NOT TO BE REMOVED\r\n * -------------------\r\n * - Image should not be draggable in dev mode as we don't want to disrupt the builder dnd behavior\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types & Helpers (Kept internal for zero-dependency portability)\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface ImageMobileConfig {\r\n width?: string;\r\n height?: string;\r\n maxWidth?: string;\r\n maxHeight?: string;\r\n backgroundColor?: string;\r\n padding?: string;\r\n borderRadius?: string;\r\n border?: BorderConfig;\r\n objectFit?: CSSProperties[\"objectFit\"];\r\n objectPosition?: string;\r\n hidden?: boolean;\r\n}\r\n\r\nexport interface ImageConfig {\r\n src: string;\r\n alt: string;\r\n width?: string;\r\n height?: string;\r\n maxWidth?: string;\r\n maxHeight?: string;\r\n backgroundColor?: string;\r\n padding?: string;\r\n borderRadius?: string;\r\n border?: BorderConfig;\r\n innerLink?: IInnerLink;\r\n /**\r\n * @deprecated Use innerLink property instead\r\n */\r\n href?: string;\r\n /**\r\n * @deprecated Use innerLink property instead\r\n */\r\n target?: string;\r\n objectFit?: CSSProperties[\"objectFit\"];\r\n objectPosition?: string;\r\n mobile?: ImageMobileConfig;\r\n}\r\n\r\nexport type ImageProps = {\r\n config: ImageConfig;\r\n devNode?: ReactNode;\r\n devMode?: boolean;\r\n previewMode?: boolean;\r\n};\r\n\r\n// Helper to build link href based on innerLink type\r\nfunction buildLinkHref(innerLink?: IInnerLink): string | null {\r\n if (!innerLink || innerLink.type === \"none\") return null;\r\n\r\n switch (innerLink.type) {\r\n case \"url\":\r\n return innerLink.url || null;\r\n case \"email\":\r\n return innerLink.email ? `mailto:${innerLink.email}` : null;\r\n case \"phone\":\r\n return innerLink.phone ? `tel:${innerLink.phone}` : null;\r\n case \"anchor\":\r\n return innerLink.anchor ? `#${innerLink.anchor}` : null;\r\n case \"page_top\":\r\n return \"#top\";\r\n case \"page_bottom\":\r\n return \"#bottom\";\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n const style: CSSProperties = {};\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n }\r\n if (border.top)\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n if (border.right)\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n if (border.bottom)\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n if (border.left)\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n return style;\r\n}\r\n\r\nfunction getBorderStyleString(border?: BorderConfig): string {\r\n if (!border) return \"\";\r\n const styles: string[] = [];\r\n\r\n // Standard shorthand\r\n if (border.width && border.style && border.color) {\r\n styles.push(\r\n `border:${border.width} ${border.style} ${border.color} !important;`,\r\n );\r\n } else {\r\n // If desktop had a border and mobile wants \"none\", we must explicitly kill it\r\n styles.push(`border: none !important;`);\r\n }\r\n\r\n // Individual sides\r\n if (border.top)\r\n styles.push(\r\n `border-top:${border.top.width} ${border.top.style} ${border.top.color} !important;`,\r\n );\r\n if (border.right)\r\n styles.push(\r\n `border-right:${border.right.width} ${border.right.style} ${border.right.color} !important;`,\r\n );\r\n if (border.bottom)\r\n styles.push(\r\n `border-bottom:${border.bottom.width} ${border.bottom.style} ${border.bottom.color} !important;`,\r\n );\r\n if (border.left)\r\n styles.push(\r\n `border-left:${border.left.width} ${border.left.style} ${border.left.color} !important;`,\r\n );\r\n\r\n return styles.join(\" \");\r\n}\r\n\r\nfunction Image({ config, devNode, devMode }: ImageProps) {\r\n const { src, alt, innerLink, mobile } = config;\r\n\r\n // Resolve href and target from innerLink\r\n const href = buildLinkHref(innerLink);\r\n const target = innerLink?.target || \"_blank\";\r\n\r\n const seed = src + (alt || \"\");\r\n const instanceId = seed\r\n .split(\"\")\r\n .reduce((acc, char) => acc + char.charCodeAt(0), 0)\r\n .toString(36);\r\n const imgClass = `img-${instanceId}`;\r\n\r\n // 1. Desktop Dimensional Logic\r\n const desktopWidth = config.width || \"100%\";\r\n const isPercent = desktopWidth.includes(\"%\");\r\n const widthAttr = desktopWidth.replace(\"px\", \"\");\r\n const heightAttr = config.height?.replace(\"px\", \"\");\r\n\r\n // Determine the table's \"initial\" width.\r\n // If it's 300px, the table should be 300px, not 100%.\r\n const tableWidth = isPercent ? desktopWidth : `${widthAttr}px`;\r\n\r\n // When width is a percentage, Outlook ignores CSS and renders the image at\r\n // its intrinsic pixel size. Setting a concrete `width` HTML attribute gives\r\n // Outlook a value to constrain against while modern clients continue to use\r\n // the CSS `width: 100%` for fluid rendering.\r\n //\r\n // If `maxWidth` is a pixel value (e.g. \"600px\"), we extract the number and\r\n // use it as the HTML `width` attribute so Outlook enforces that cap.\r\n // Other clients ignore the attribute and rely on CSS styles instead.\r\n // If `maxWidth` is not set or is not a pixel value (e.g. \"100%\"), we fall\r\n // back to the original behaviour (numeric string for px widths, undefined\r\n // for % widths).\r\n const maxWidthPx = config.maxWidth?.endsWith(\"px\")\r\n ? parseInt(config.maxWidth, 10)\r\n : undefined;\r\n\r\n const imgWidthAttr = isPercent ? (maxWidthPx ?? undefined) : widthAttr;\r\n\r\n // 2. Mobile Overrides — only emit CSS properties that are explicitly set,\r\n // so unspecified properties are left untouched (no forced defaults).\r\n let mobileCss = \"\";\r\n if (mobile) {\r\n // .wrap-${imgClass} rules\r\n const wrapRules: string[] = [\r\n // Always reset min-width so the px lock from desktop can be overridden\r\n \"min-width: 0 !important;\",\r\n ];\r\n if (mobile.width !== undefined)\r\n wrapRules.push(`width: ${mobile.width} !important;`);\r\n if (mobile.maxWidth !== undefined)\r\n wrapRules.push(`max-width: ${mobile.maxWidth} !important;`);\r\n\r\n // .td-${imgClass} rules\r\n const tdRules: string[] = [];\r\n if (mobile.padding !== undefined)\r\n tdRules.push(`padding: ${mobile.padding} !important;`);\r\n if (mobile.backgroundColor !== undefined)\r\n tdRules.push(`background-color: ${mobile.backgroundColor} !important;`);\r\n\r\n // .${imgClass} rules\r\n const imgRules: string[] = [];\r\n if (mobile.width !== undefined)\r\n imgRules.push(`width: ${mobile.width} !important;`);\r\n if (mobile.height !== undefined)\r\n imgRules.push(`height: ${mobile.height} !important;`);\r\n if (mobile.maxWidth !== undefined)\r\n imgRules.push(`max-width: ${mobile.maxWidth} !important;`);\r\n if (mobile.maxHeight !== undefined)\r\n imgRules.push(`max-height: ${mobile.maxHeight} !important;`);\r\n if (mobile.borderRadius !== undefined)\r\n imgRules.push(`border-radius: ${mobile.borderRadius} !important;`);\r\n if (mobile.hidden !== undefined)\r\n imgRules.push(`display: ${mobile.hidden ? \"none\" : \"block\"} !important;`);\r\n if (mobile.objectFit !== undefined)\r\n imgRules.push(`object-fit: ${mobile.objectFit} !important;`);\r\n if (mobile.objectPosition !== undefined)\r\n imgRules.push(`object-position: ${mobile.objectPosition} !important;`);\r\n if (mobile.border !== undefined)\r\n imgRules.push(getBorderStyleString(mobile.border));\r\n\r\n mobileCss = `\r\n @media screen and (max-width: 768px) {\r\n .wrap-${imgClass} {\r\n /* This breaks the px lock from desktop and makes it fluid */\r\n ${wrapRules.join(\"\\n \")}\r\n }\r\n .td-${imgClass} {\r\n ${tdRules.join(\"\\n \")}\r\n }\r\n .${imgClass} {\r\n ${imgRules.join(\"\\n \")}\r\n }\r\n }\r\n `;\r\n }\r\n\r\n const imgStyle: CSSProperties = {\r\n display: \"block\",\r\n width: isPercent ? \"100%\" : desktopWidth,\r\n height: config.height || \"auto\",\r\n maxWidth: config.maxWidth || \"100%\",\r\n maxHeight: config.maxHeight || \"none\",\r\n borderRadius: config.borderRadius || \"0\",\r\n ...getBorderStyle(config.border),\r\n outline: \"none\",\r\n textDecoration: \"none\",\r\n objectFit: config.objectFit,\r\n objectPosition: config.objectPosition,\r\n };\r\n\r\n const imageElement = (\r\n <img\r\n src={src}\r\n alt={alt}\r\n width={imgWidthAttr}\r\n height={heightAttr !== \"auto\" ? heightAttr : undefined}\r\n className={imgClass}\r\n style={imgStyle}\r\n draggable={!devMode}\r\n />\r\n );\r\n\r\n return (\r\n <>\r\n {mobile && <style dangerouslySetInnerHTML={{ __html: mobileCss }} />}\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n className={`wrap-${imgClass}`}\r\n align=\"center\" // Ensures a 300px image stays centered in its parent\r\n style={{\r\n width: tableWidth, // Fixed px here prevents the 100% \"ghost space\"\r\n maxWidth: \"100%\",\r\n borderCollapse: \"collapse\",\r\n margin: \"0 auto\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n <td\r\n className={`td-${imgClass}`}\r\n align=\"center\"\r\n style={{\r\n padding: config.padding,\r\n backgroundColor: config.backgroundColor,\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n width: tableWidth, // Lock the cell as well\r\n }}\r\n >\r\n {href && !devMode ? (\r\n <a\r\n href={href}\r\n target={target}\r\n {...(target === \"_blank\"\r\n ? { rel: \"noopener noreferrer\" }\r\n : {})}\r\n style={{ display: \"block\", width: \"100%\" }}\r\n >\r\n {imageElement}\r\n </a>\r\n ) : (\r\n imageElement\r\n )}\r\n </td>\r\n </tr>\r\n </tbody>\r\n {devMode && !!devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n </>\r\n );\r\n}\r\n\r\nexport default memo(Image, arePropsEqual);\r\n","import { CSSProperties, Fragment, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport {\r\n AlignItems,\r\n BorderConfig,\r\n JustifyContent,\r\n TdAlign,\r\n TdValign,\r\n} from \"../types\";\r\nimport IInnerLink from \"../types/IInnerLink\";\r\n\r\nconst justifyMap: Record<JustifyContent, TdAlign> = {\r\n start: \"left\",\r\n center: \"center\",\r\n end: \"right\",\r\n};\r\nconst alignMap: Record<AlignItems, TdValign> = {\r\n start: \"top\",\r\n center: \"middle\",\r\n end: \"bottom\",\r\n};\r\n\r\nexport interface BackgroundImageType {\r\n src: string;\r\n repeat?: \"no-repeat\" | \"repeat\" | \"repeat-x\" | \"repeat-y\";\r\n size?: \"auto\" | \"cover\" | \"contain\";\r\n position?: string;\r\n}\r\n\r\nexport interface RowConfig {\r\n gap?: string;\r\n justifyContent?: JustifyContent;\r\n alignItems?: AlignItems;\r\n width?: string;\r\n height?: string;\r\n\r\n /**\r\n * When true, the content table uses width:100% so Outlook Classic has a\r\n * hard boundary and text children can wrap correctly.\r\n * Use this for rows that contain text blocks alongside images.\r\n *\r\n * When false/undefined (default), the content table uses width:auto so\r\n * children shrink-wrap to their natural sizes — preserving the original\r\n * behavior. Use this for icon rows, button rows, social link rows.\r\n */\r\n fillWidth?: boolean;\r\n\r\n // Styling props\r\n padding?: string;\r\n backgroundColor?: string;\r\n backgroundImage?: BackgroundImageType;\r\n borderRadius?: string;\r\n border?: BorderConfig;\r\n\r\n // Link support\r\n innerLink?: IInnerLink;\r\n\r\n // Mobile specific overrides\r\n mobile?: {\r\n justifyContent?: JustifyContent;\r\n alignItems?: AlignItems;\r\n wrap?: boolean;\r\n };\r\n}\r\n\r\nexport type RowProps = {\r\n children?: ReactNode;\r\n config: RowConfig;\r\n devNode?: ReactNode;\r\n devMode?: boolean;\r\n};\r\n\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: CSSProperties = {};\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n } else {\r\n // If only individual borders are specified, explicitly set others to 'none'\r\n // to prevent Outlook Classic from showing black borders\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n style.borderTop = \"none\";\r\n style.borderRight = \"none\";\r\n style.borderBottom = \"none\";\r\n style.borderLeft = \"none\";\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n }\r\n if (border.right) {\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n }\r\n if (border.bottom) {\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n }\r\n if (border.left) {\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n }\r\n\r\n return style;\r\n}\r\n\r\nfunction getHrefFromInnerLink(innerLink?: IInnerLink): string | undefined {\r\n if (!innerLink || innerLink.type === \"none\") return undefined;\r\n\r\n switch (innerLink.type) {\r\n case \"url\":\r\n return innerLink.url;\r\n case \"email\":\r\n return innerLink.email ? `mailto:${innerLink.email}` : undefined;\r\n case \"phone\":\r\n return innerLink.phone ? `tel:${innerLink.phone}` : undefined;\r\n case \"anchor\":\r\n return innerLink.anchor ? `#${innerLink.anchor}` : undefined;\r\n case \"page_top\":\r\n return \"#\";\r\n case \"page_bottom\":\r\n return \"#bottom\";\r\n default:\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction Row({ children, config, devNode, devMode }: RowProps) {\r\n const childrenArray = (\r\n Array.isArray(children) ? children : [children]\r\n ).filter((child) => child != null) as ReactNode[];\r\n\r\n const numChildren = childrenArray.length;\r\n\r\n const href = getHrefFromInnerLink(config.innerLink);\r\n const target = config.innerLink?.target || \"_blank\";\r\n\r\n // 1. Outer TD: Background, Border Radius, Width, Height.\r\n const backgroundTdStyle: React.CSSProperties = {\r\n backgroundColor: config.backgroundColor,\r\n borderRadius: config.borderRadius,\r\n width: config.width || \"100%\",\r\n height: config.height,\r\n backgroundImage: config.backgroundImage\r\n ? `url(${config.backgroundImage.src})`\r\n : undefined,\r\n backgroundRepeat: config.backgroundImage?.repeat,\r\n backgroundSize: config.backgroundImage?.size,\r\n backgroundPosition: config.backgroundImage?.position,\r\n ...(config.borderRadius && { overflow: \"hidden\" }),\r\n };\r\n\r\n // 2. Inner Table: Border and Border Radius.\r\n const borderTableStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n borderCollapse: \"separate\",\r\n borderSpacing: 0,\r\n borderRadius: config.borderRadius,\r\n ...getBorderStyle(config.border),\r\n };\r\n\r\n // 3. Padding TD.\r\n const paddingTdStyle: React.CSSProperties = {\r\n padding: config.padding,\r\n width: \"100%\",\r\n verticalAlign: \"top\",\r\n };\r\n\r\n // 4. Content Table.\r\n //\r\n // fillWidth: false/undefined (default) → width: \"auto\"\r\n // Original behavior. Children shrink-wrap to their natural sizes.\r\n // Use for icon rows, button rows, social link rows.\r\n // Centering works via the Justification Wrapper TD (align + width=\"100%\").\r\n //\r\n // fillWidth: true → width: \"100%\"\r\n // Content table fills available space, giving Outlook Classic a hard\r\n // boundary so text children get a constrained box and line wrapping\r\n // triggers correctly. Use for rows containing text + image layouts.\r\n const contentTableStyle: React.CSSProperties = {\r\n width: config.fillWidth ? \"100%\" : \"auto\",\r\n height: \"100%\",\r\n borderCollapse: \"collapse\",\r\n minWidth: \"1px\",\r\n ...(!config.fillWidth && { maxWidth: config.width || \"100%\" }),\r\n };\r\n\r\n // 5. Gap TD.\r\n const gapTdStyle: React.CSSProperties = {\r\n width: config.gap || \"0\",\r\n lineHeight: \"1px\",\r\n fontSize: \"1px\",\r\n };\r\n\r\n const tdAlign = config.justifyContent\r\n ? justifyMap[config.justifyContent]\r\n : \"left\";\r\n const tdValign = config.alignItems ? alignMap[config.alignItems] : \"top\";\r\n\r\n const content = (\r\n <table\r\n aria-label=\"Row Outer\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n position: \"relative\",\r\n width: config.width || \"100%\",\r\n height: config.height,\r\n borderCollapse: \"collapse\",\r\n }}\r\n {...(config.height && { height: config.height })}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Outer TD: Background, Background Image, Border Radius, Width, Height */}\r\n <td\r\n style={backgroundTdStyle}\r\n {...(config.height && { height: config.height })}\r\n >\r\n {/* Inner Table: Border and Border Radius */}\r\n <table\r\n aria-label=\"Row Border Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={borderTableStyle}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Padding TD */}\r\n <td style={paddingTdStyle}>\r\n <table\r\n aria-label=\"Row Justification Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n {/*\r\n * width=\"100%\" as HTML attribute (respected by Outlook Classic)\r\n * establishes the outer boundary for text wrapping when fillWidth\r\n * is true. align handles justifyContent for both modes:\r\n * - fillWidth: false → centers the auto-width content table\r\n * - fillWidth: true → aligns content within the full-width table\r\n */}\r\n <td\r\n align={tdAlign}\r\n width=\"100%\"\r\n style={{ width: \"100%\" }}\r\n >\r\n <table\r\n aria-label=\"Row Content\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={contentTableStyle}\r\n {...(config.height && { height: config.height })}\r\n className=\"content-table row-content-table\"\r\n data-mobile-justify={\r\n config.mobile?.justifyContent\r\n }\r\n data-mobile-align={config.mobile?.alignItems}\r\n data-mobile-wrap={\r\n config.mobile?.wrap ? \"true\" : undefined\r\n }\r\n data-gap={config.gap}\r\n >\r\n <tbody>\r\n <tr className=\"content-tr\">\r\n {childrenArray.map((child, index) => (\r\n <Fragment key={`row-child-${index}`}>\r\n <td\r\n valign={tdValign}\r\n style={{\r\n verticalAlign: tdValign,\r\n textAlign: \"left\",\r\n padding: \"0\",\r\n margin: \"0\",\r\n }}\r\n className=\"child-cell\"\r\n >\r\n {child}\r\n </td>\r\n\r\n {/* Gap between children, not after last */}\r\n {index < numChildren - 1 &&\r\n config.gap && (\r\n <td\r\n key={`row-gap-${index}`}\r\n width={config.gap}\r\n style={gapTdStyle}\r\n className=\"row-gap-td\"\r\n >\r\n &nbsp;\r\n </td>\r\n )}\r\n </Fragment>\r\n ))}\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n {devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n\r\n if (href && !devMode) {\r\n return (\r\n <a\r\n href={href}\r\n {...(target && { target })}\r\n style={{\r\n textDecoration: \"none\",\r\n color: \"inherit\",\r\n display: \"block\",\r\n }}\r\n >\r\n {content}\r\n </a>\r\n );\r\n }\r\n\r\n return content;\r\n}\r\n\r\nexport default memo(Row, arePropsEqual);\r\n","import React, { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport { BorderConfig } from \"../types\";\r\n\r\nexport type SectionConfig = {\r\n sectionType: \"header\" | \"footer\" | \"content\";\r\n gap?: string;\r\n backgroundColor?: string;\r\n padding?: string;\r\n border?: BorderConfig;\r\n backgroundImage?: {\r\n src: string;\r\n repeat?: string;\r\n size?: string;\r\n position?: string;\r\n };\r\n};\r\n\r\nexport interface SectionProps {\r\n config: SectionConfig;\r\n children?: ReactNode;\r\n devNode?: ReactNode;\r\n}\r\n\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: CSSProperties = {};\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n } else {\r\n // If only individual borders are specified, explicitly set others to 'none'\r\n // to prevent Outlook Classic from showing black borders\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n style.borderTop = \"none\";\r\n style.borderRight = \"none\";\r\n style.borderBottom = \"none\";\r\n style.borderLeft = \"none\";\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n }\r\n if (border.right) {\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n }\r\n if (border.bottom) {\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n }\r\n if (border.left) {\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n }\r\n\r\n return style;\r\n}\r\n\r\nconst Section: React.FC<SectionProps> = ({\r\n config,\r\n children,\r\n devNode,\r\n}: SectionProps) => {\r\n const { sectionType, padding } = config;\r\n return (\r\n <table\r\n aria-label={`Section |Table | ${sectionType}`}\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n backgroundColor: config.backgroundColor,\r\n ...getBorderStyle(config.border),\r\n backgroundImage: config.backgroundImage\r\n ? `url(${config.backgroundImage.src})`\r\n : undefined,\r\n backgroundRepeat: config.backgroundImage?.repeat,\r\n backgroundSize: config.backgroundImage?.size,\r\n backgroundPosition: config.backgroundImage?.position,\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n <td\r\n style={{\r\n padding: padding,\r\n }}\r\n >\r\n {children}\r\n </td>\r\n </tr>\r\n </tbody>\r\n {devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>\r\n <span\r\n style={{\r\n backgroundColor: \"black\",\r\n color: \"white\",\r\n padding: \"4px\",\r\n fontSize: \"14px\",\r\n position: \"absolute\",\r\n left: 0,\r\n top: 0,\r\n }}\r\n >\r\n Section | {sectionType}\r\n </span>\r\n {children}\r\n </td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n};\r\n\r\nexport default memo(Section, arePropsEqual);\r\n","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\n\r\nexport interface SpacerConfig {\r\n /** The height of the vertical space (e.g., \"20px\"). Required. */\r\n height: string;\r\n hideOnMobile?: boolean;\r\n}\r\n\r\nexport type SpacerProps = {\r\n config: SpacerConfig;\r\n devNode?: ReactNode;\r\n};\r\n\r\nfunction Spacer({ config, devNode }: SpacerProps) {\r\n const { height, hideOnMobile } = config;\r\n\r\n // 1. Spacer Table Style\r\n const spacerTableStyle: CSSProperties = {\r\n // Crucial for compatibility: Ensures no background or border interference\r\n backgroundColor: \"transparent\",\r\n borderCollapse: \"collapse\",\r\n border: \"0\",\r\n width: \"100%\",\r\n\r\n // Note the CSS standard dash convention: 'mso-table-lspace'\r\n // [\"mso-table-lspace\" as string]: \"0pt\",\r\n [\"msoTableLspace\" as string]: \"0pt\",\r\n // [\"mso-table-rspace\" as string]: \"0pt\",\r\n [\"msoTableRspace\" as string]: \"0pt\",\r\n };\r\n\r\n // 2. Spacer TD Style: The element that creates the actual vertical space\r\n const spacerTdStyle: CSSProperties = {\r\n height: height,\r\n // Critical: Suppress any vertical height created by text/font\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n padding: \"0\",\r\n };\r\n\r\n // Parse height for the HTML attribute\r\n const spacerHeightAttribute = parseInt(height, 10) || 1;\r\n\r\n return (\r\n // Outer table ensures the spacer spans the full width of its container\r\n <table\r\n aria-label=\"Vertical Spacer\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n // --- Start dev\r\n position: \"relative\",\r\n // --- End dev\r\n\r\n ...spacerTableStyle,\r\n }}\r\n // Explicit HTML height attribute is necessary for Outlook reliability\r\n {...({ height: spacerHeightAttribute } as any)}\r\n className={hideOnMobile ? \"hide-on-mobile\" : undefined}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* TD: Manages the fixed height of the spacer */}\r\n <td\r\n style={spacerTdStyle}\r\n // Explicit height attribute\r\n height={spacerHeightAttribute}\r\n >\r\n {/* The non-breaking space ensures the TD renders even if completely empty */}\r\n &nbsp;\r\n </td>\r\n </tr>\r\n </tbody>\r\n {devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Spacer, arePropsEqual);\r\n","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport injectLinkStyles from \"./utils/injectLinkStyles\";\r\n\r\nexport interface TextConfig {\r\n /** The text content or React nodes to render. */\r\n text?: string;\r\n\r\n /** Padding around the text (applied to the containing TD). */\r\n padding?: string;\r\n\r\n /** Text color. */\r\n color?: string;\r\n\r\n /** Horizontal text alignment (e.g., 'left', 'center'). */\r\n textAlign?: \"left\" | \"center\" | \"right\" | \"justify\";\r\n\r\n /** Font family (e.g., 'Arial, sans-serif'). */\r\n fontFamily?: string;\r\n\r\n /** Font size (e.g., '16px'). */\r\n fontSize?: string;\r\n\r\n /** Font weight (e.g., 'bold' or '700'). */\r\n fontWeight?: string;\r\n\r\n /** Font style (e.g., 'italic'). */\r\n fontStyle?: string;\r\n\r\n /** Line height (e.g., '1.5' or '24px'). */\r\n lineHeight?: string | number;\r\n\r\n /** Letter spacing (e.g., '0.5px', '1px'). */\r\n letterSpacing?: string;\r\n\r\n /** Text transform (e.g., 'uppercase', 'lowercase', 'capitalize'). */\r\n textTransform?: string;\r\n\r\n /** Text decoration (e.g., 'underline', 'line-through'). */\r\n textDecoration?: string;\r\n\r\n /** Text direction (e.g., 'ltr', 'rtl'). */\r\n direction?: string;\r\n\r\n /** Vertical alignment (e.g., 'sub', 'super'). */\r\n verticalAlign?: string;\r\n\r\n /** Background color of the text block. */\r\n backgroundColor?: string;\r\n\r\n /** Opacity of the text (e.g., '0.5', '1'). */\r\n opacity?: string | number;\r\n\r\n /** White space handling (e.g., 'normal', 'nowrap', 'pre', 'pre-wrap'). */\r\n whiteSpace?: string;\r\n\r\n /** Word break behavior (e.g., 'break-all', 'break-word', 'keep-all', 'normal'). */\r\n wordBreak?: string;\r\n maxWidth?: string;\r\n listStyle?: string;\r\n}\r\n\r\nexport type TextProps = {\r\n config: TextConfig;\r\n devMode?: ReactNode;\r\n children?: ReactNode;\r\n};\r\n\r\nfunction Text({ config, devMode, children }: TextProps) {\r\n const {\r\n text,\r\n padding,\r\n color,\r\n textAlign,\r\n fontFamily,\r\n fontSize,\r\n fontWeight,\r\n fontStyle,\r\n lineHeight,\r\n letterSpacing,\r\n textTransform,\r\n textDecoration,\r\n direction,\r\n verticalAlign,\r\n backgroundColor,\r\n opacity,\r\n whiteSpace,\r\n wordBreak = \"break-all\",\r\n maxWidth,\r\n } = config;\r\n\r\n // 1. TD Style: Where padding and background are reliably applied.\r\n const tdStyle: CSSProperties = {\r\n padding: padding,\r\n backgroundColor: backgroundColor,\r\n width: \"100%\",\r\n verticalAlign: \"top\",\r\n };\r\n\r\n // 2. Content Style: Applied directly to a wrapper element\r\n const contentStyle: CSSProperties = {\r\n color: color,\r\n textAlign: textAlign,\r\n fontFamily: fontFamily,\r\n fontSize: fontSize,\r\n fontWeight: fontWeight,\r\n fontStyle: fontStyle,\r\n lineHeight: lineHeight,\r\n letterSpacing: letterSpacing,\r\n textTransform: textTransform as any,\r\n textDecoration: textDecoration,\r\n direction: direction as any,\r\n verticalAlign: verticalAlign,\r\n opacity: opacity,\r\n whiteSpace: whiteSpace as any,\r\n wordBreak: wordBreak as any,\r\n margin: \"0\",\r\n padding: \"0\",\r\n maxWidth,\r\n };\r\n\r\n // Determine content to render\r\n const content = text ?? children;\r\n const isString = typeof content === \"string\";\r\n\r\n const processedHtml = isString\r\n ? injectLinkStyles(content, contentStyle as Record<string, string>)\r\n : \"\";\r\n\r\n return (\r\n <table\r\n aria-label=\"Text Block Wrapper\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={{\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n <td style={tdStyle} align={textAlign as \"left\" | \"center\" | \"right\"}>\r\n {isString ? (\r\n <div\r\n style={contentStyle}\r\n dangerouslySetInnerHTML={{ __html: processedHtml }}\r\n />\r\n ) : (\r\n <div style={contentStyle}>{content}</div>\r\n )}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Text, arePropsEqual);\r\n","import { CSSProperties, memo, ReactNode } from \"react\";\r\nimport IInnerLink from \"../types/IInnerLink\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\nimport { BorderConfig } from \"../types\";\r\n\r\nexport interface IconConfig {\r\n /** Icon identifier for the Iconify API */\r\n iconIdentifier?: string;\r\n\r\n /** Width of the icon */\r\n width?: string | number;\r\n\r\n /** Height of the icon */\r\n height?: string | number;\r\n\r\n /** Rotation angle in degrees */\r\n rotate?: number;\r\n\r\n /** Rotation orientation: clockwise or counter-clockwise */\r\n rotateOrientation?: \"cw\" | \"ccw\";\r\n\r\n /** Icon color (hex format for best compatibility) */\r\n color?: string;\r\n\r\n /** Link configuration for clickable icons */\r\n innerLink?: IInnerLink;\r\n\r\n /** Background color of the containing TD */\r\n backgroundColor?: string;\r\n\r\n /** Padding around the icon */\r\n padding?: string;\r\n\r\n /** Border radius for the icon container */\r\n borderRadius?: string;\r\n\r\n /** Border configuration for the icon container */\r\n border?: BorderConfig;\r\n\r\n /** Horizontal alignment within the container */\r\n justifyContent?: \"start\" | \"center\" | \"end\";\r\n}\r\n\r\nexport type IconProps = {\r\n config: IconConfig;\r\n devNode?: ReactNode;\r\n devMode?: boolean;\r\n children?: ReactNode;\r\n};\r\n\r\n// Map alignment to HTML 'align' attribute\r\nconst justifyMap: Record<\r\n NonNullable<IconConfig[\"justifyContent\"]>,\r\n \"left\" | \"center\" | \"right\"\r\n> = {\r\n start: \"left\",\r\n center: \"center\",\r\n end: \"right\",\r\n};\r\n\r\nfunction getBorderStyle(border?: BorderConfig): CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: CSSProperties = {};\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n } else {\r\n // If only individual borders are specified, explicitly set others to 'none'\r\n // to prevent Outlook Classic from showing black borders\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n style.borderTop = \"none\";\r\n style.borderRight = \"none\";\r\n style.borderBottom = \"none\";\r\n style.borderLeft = \"none\";\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n style.borderTop = `${border.top.width} ${border.top.style} ${border.top.color}`;\r\n }\r\n if (border.right) {\r\n style.borderRight = `${border.right.width} ${border.right.style} ${border.right.color}`;\r\n }\r\n if (border.bottom) {\r\n style.borderBottom = `${border.bottom.width} ${border.bottom.style} ${border.bottom.color}`;\r\n }\r\n if (border.left) {\r\n style.borderLeft = `${border.left.width} ${border.left.style} ${border.left.color}`;\r\n }\r\n\r\n return style;\r\n}\r\n\r\nfunction getBorderStyleString(border?: BorderConfig): string {\r\n if (!border) return \"\";\r\n\r\n const styles: string[] = [];\r\n\r\n // If a full border is specified, apply it\r\n if (border.width && border.style && border.color) {\r\n styles.push(`border: ${border.width} ${border.style} ${border.color};`);\r\n } else {\r\n // If only individual borders are specified\r\n const hasIndividualBorders =\r\n border.top || border.right || border.bottom || border.left;\r\n\r\n if (hasIndividualBorders) {\r\n // Default all borders to none\r\n styles.push(\"border-top: none;\");\r\n styles.push(\"border-right: none;\");\r\n styles.push(\"border-bottom: none;\");\r\n styles.push(\"border-left: none;\");\r\n }\r\n }\r\n\r\n // Override with specific borders if provided\r\n if (border.top) {\r\n styles.push(\r\n `border-top: ${border.top.width} ${border.top.style} ${border.top.color};`,\r\n );\r\n }\r\n if (border.right) {\r\n styles.push(\r\n `border-right: ${border.right.width} ${border.right.style} ${border.right.color};`,\r\n );\r\n }\r\n if (border.bottom) {\r\n styles.push(\r\n `border-bottom: ${border.bottom.width} ${border.bottom.style} ${border.bottom.color};`,\r\n );\r\n }\r\n if (border.left) {\r\n styles.push(\r\n `border-left: ${border.left.width} ${border.left.style} ${border.left.color};`,\r\n );\r\n }\r\n\r\n return styles.join(\" \");\r\n}\r\n\r\n// Helper to build Iconify API URL\r\nfunction buildIconifyUrl(config: IconConfig): string | null {\r\n const {\r\n iconIdentifier,\r\n height = 24,\r\n color = \"000000\",\r\n rotate = 0,\r\n rotateOrientation = \"cw\",\r\n } = config;\r\n\r\n if (!iconIdentifier) return null;\r\n\r\n // Parse height to extract numeric value\r\n const parseHeight = (h: string | number): number => {\r\n if (typeof h === \"number\") return h;\r\n // Extract numeric value from string (e.g., \"24px\" -> 24)\r\n const match = String(h).match(/^(-?\\d*\\.?\\d+)/);\r\n return match ? parseFloat(match[1]) : 24;\r\n };\r\n\r\n const numericHeight = parseHeight(height);\r\n\r\n // Remove # from color if present\r\n const cleanColor = color.replace(\"#\", \"\");\r\n\r\n // Build URL from template\r\n const template =\r\n process.env.ICONIFY_API_IMAGE_URI ||\r\n \"https://iconify.pagenflow.com/api/image/{{height}}/{{color}}/{{rotate}}-{{rotate-orientation}}/{{icon-full-name}}.png\";\r\n\r\n return template\r\n .replace(\"{{height}}\", String(numericHeight * 4))\r\n .replace(\"{{color}}\", cleanColor)\r\n .replace(\"{{rotate}}\", String(rotate))\r\n .replace(\"{{rotate-orientation}}\", rotateOrientation)\r\n .replace(\"{{icon-full-name}}\", iconIdentifier);\r\n}\r\n\r\n// Helper to build link href based on innerLink type\r\nfunction buildLinkHref(innerLink?: IInnerLink): string | null {\r\n if (!innerLink || innerLink.type === \"none\") return null;\r\n\r\n switch (innerLink.type) {\r\n case \"url\":\r\n return innerLink.url || null;\r\n case \"email\":\r\n return innerLink.email ? `mailto:${innerLink.email}` : null;\r\n case \"phone\":\r\n return innerLink.phone ? `tel:${innerLink.phone}` : null;\r\n case \"anchor\":\r\n return innerLink.anchor ? `#${innerLink.anchor}` : null;\r\n case \"page_top\":\r\n return \"#top\";\r\n case \"page_bottom\":\r\n return \"#bottom\";\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nfunction Icon({ config, devNode, devMode, children }: IconProps) {\r\n const {\r\n // base64Source,\r\n width,\r\n height,\r\n backgroundColor,\r\n padding = \"0\",\r\n borderRadius = \"0\",\r\n border,\r\n innerLink,\r\n justifyContent = \"center\",\r\n } = config;\r\n\r\n // Determine icon source\r\n const iconSrc = buildIconifyUrl(config);\r\n const href = buildLinkHref(innerLink);\r\n const target = innerLink?.target || \"_blank\";\r\n const align = justifyMap[justifyContent];\r\n\r\n // Get border styles\r\n const borderStyle = getBorderStyle(border);\r\n const borderStyleString = getBorderStyleString(border);\r\n\r\n // Convert width/height to string with px if number\r\n const widthStr = typeof width === \"number\" ? `${width}px` : width;\r\n const heightStr = typeof height === \"number\" ? `${height}px` : height;\r\n\r\n // Parse numeric values for HTML attributes\r\n const widthNum =\r\n typeof width === \"number\"\r\n ? width\r\n : typeof width === \"string\" && width.endsWith(\"px\")\r\n ? parseInt(width, 10)\r\n : undefined;\r\n const heightNum =\r\n typeof height === \"number\"\r\n ? height\r\n : typeof height === \"string\" && height.endsWith(\"px\")\r\n ? parseInt(height, 10)\r\n : undefined;\r\n\r\n // 1. Image Style: Critical for compatibility\r\n const imgStyle: CSSProperties = {\r\n display: \"block\", // Prevents extra vertical space\r\n border: 0, // No default border\r\n width: widthStr || \"auto\",\r\n height: heightStr || \"auto\",\r\n objectFit: \"contain\",\r\n };\r\n\r\n // 2. Link Style: No underline or color changes\r\n const linkStyle: CSSProperties = {\r\n display: \"block\",\r\n textDecoration: \"none\",\r\n border: 0,\r\n outline: \"none\",\r\n };\r\n\r\n // 3. Outer TD Style: Background and border-radius wrapper with border\r\n const outerTdStyle: CSSProperties = {\r\n backgroundColor: backgroundColor,\r\n borderRadius: borderRadius,\r\n overflow: \"hidden\",\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n };\r\n\r\n // 4. Inner Table Style: Apply border here with border-collapse: separate\r\n const innerTableStyle: CSSProperties = {\r\n width: \"100%\",\r\n borderCollapse: \"separate\",\r\n borderSpacing: 0,\r\n borderRadius: borderRadius,\r\n ...borderStyle,\r\n };\r\n\r\n // 5. Inner TD Style: Padding\r\n const innerTdStyle: CSSProperties = {\r\n padding: padding,\r\n fontSize: \"0\", // CRITICAL: Collapses extra space\r\n lineHeight: \"0\", // CRITICAL: Collapses extra space\r\n };\r\n\r\n // --- VML Calculation for Outlook Compatibility ---\r\n const numericPadding = parseInt(padding.split(\" \")[0] || \"0\", 10);\r\n const vmlWidth = (widthNum || 24) + numericPadding * 2;\r\n const vmlHeight = (heightNum || 24) + numericPadding * 2;\r\n\r\n // VML colors must use full hex format\r\n const vmlFillColor = backgroundColor?.startsWith(\"#\")\r\n ? backgroundColor\r\n : backgroundColor\r\n ? `#${backgroundColor}`\r\n : \"#ffffff\";\r\n\r\n // Calculate arcsize percentage for VML\r\n const numericBorderRadius = parseInt(borderRadius || \"0\", 10);\r\n const arcsize =\r\n numericBorderRadius > 0\r\n ? Math.min(\r\n (numericBorderRadius / Math.min(vmlWidth, vmlHeight)) * 100,\r\n 100,\r\n )\r\n : 0;\r\n\r\n // VML stroke color for border\r\n const vmlStrokeColor = border?.color || vmlFillColor;\r\n const vmlStrokeWeight = border?.width ? parseInt(border.width, 10) : 0;\r\n const hasVmlStroke = vmlStrokeWeight > 0;\r\n\r\n // Build VML code for Outlook\r\n const vmlIcon =\r\n backgroundColor && numericBorderRadius > 0\r\n ? `\r\n <!--[if mso]>\r\n <v:roundrect xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w=\"urn:schemas-microsoft-com:office:word\" ${href && !devMode ? `href=\"${href}\"` : \"\"} style=\"height:${vmlHeight}px;width:${vmlWidth}px;v-text-anchor:middle;\" arcsize=\"${arcsize}%\" ${hasVmlStroke ? `strokecolor=\"${vmlStrokeColor}\" strokeweight=\"${vmlStrokeWeight}px\"` : 'stroke=\"false\"'} fillcolor=\"${vmlFillColor}\">\r\n <w:anchorlock/>\r\n <v:textbox inset=\"0,0,0,0\" style=\"text-align: center;\">\r\n <center style=\"padding:${padding};\">\r\n <img src=\"${iconSrc || \"\"}\" alt=\"\" width=\"${widthNum || 24}\" height=\"${heightNum || 24}\" border=\"0\" style=\"display:block;border:0;object-fit:contain;\" />\r\n </center>\r\n </v:textbox>\r\n </v:roundrect>\r\n <![endif]-->\r\n `\r\n : \"\";\r\n\r\n // If no icon source, return empty\r\n if (!iconSrc && !devMode) {\r\n return null;\r\n }\r\n\r\n // Icon image element\r\n const iconElement =\r\n devMode && !!children ? (\r\n children\r\n ) : iconSrc ? (\r\n <img\r\n draggable={false}\r\n src={iconSrc}\r\n alt=\"\"\r\n style={imgStyle}\r\n width={widthNum}\r\n height={heightNum}\r\n {...{ border: 0 as any }}\r\n />\r\n ) : (\r\n <></>\r\n );\r\n\r\n // Wrap in link if href exists and not in dev mode\r\n const content =\r\n href && !devMode ? (\r\n <a\r\n href={href}\r\n target={target}\r\n style={linkStyle}\r\n {...(target === \"_blank\" ? { rel: \"noopener noreferrer\" } : {})}\r\n >\r\n {iconElement}\r\n </a>\r\n ) : (\r\n iconElement\r\n );\r\n\r\n // Build the HTML content with VML support (only when NOT in dev mode)\r\n const useVML = !devMode && backgroundColor && numericBorderRadius > 0;\r\n\r\n const htmlContent = useVML\r\n ? `\r\n ${vmlIcon}\r\n <!--[if !mso]><!-->\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse: collapse; width: 100%;\">\r\n <tbody>\r\n <tr>\r\n <td style=\"background-color: ${backgroundColor}; border-radius: ${borderRadius}; overflow: hidden; font-size: 0; line-height: 0;\">\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse: separate; border-spacing: 0; border-radius: ${borderRadius}; width: 100%; ${borderStyleString}\">\r\n <tbody>\r\n <tr>\r\n <td style=\"padding: ${padding}; font-size: 0; line-height: 0;\">\r\n ${\r\n href\r\n ? `<a href=\"${href}\" target=\"${target}\" style=\"display:block;text-decoration:none;border:0;outline:none;\" ${target === \"_blank\" ? 'rel=\"noopener noreferrer\"' : \"\"}>\r\n <img draggable=\"false\" src=\"${iconSrc}\" alt=\"\" width=\"${widthNum || 24}\" height=\"${heightNum || 24}\" border=\"0\" style=\"display:block;border:0;width:${widthStr || \"auto\"};height:${heightStr || \"auto\"};object-fit:contain;\" />\r\n </a>`\r\n : `<img draggable=\"false\" src=\"${iconSrc}\" alt=\"\" width=\"${widthNum || 24}\" height=\"${heightNum || 24}\" border=\"0\" style=\"display:block;border:0;width:${widthStr || \"auto\"};height:${heightStr || \"auto\"};object-fit:contain;\" />`\r\n }\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!--<![endif]-->\r\n `\r\n : null;\r\n\r\n return (\r\n <table\r\n aria-label=\"Icon\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n align={align}\r\n style={{\r\n // --- Start dev\r\n position: \"relative\",\r\n // --- End dev\r\n\r\n width: \"auto\",\r\n borderCollapse: \"collapse\",\r\n\r\n // base\r\n boxSizing: \"border-box\",\r\n border: 0,\r\n margin: 0,\r\n padding: 0,\r\n }}\r\n onClick={devMode ? (e) => e.preventDefault() : undefined}\r\n >\r\n <tbody>\r\n <tr>\r\n {useVML ? (\r\n <td\r\n dangerouslySetInnerHTML={{\r\n __html: htmlContent ?? \"\",\r\n }}\r\n />\r\n ) : (\r\n <td style={outerTdStyle} align={align}>\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n style={innerTableStyle}\r\n >\r\n <tbody>\r\n <tr>\r\n <td style={innerTdStyle} align={align}>\r\n {content}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n )}\r\n </tr>\r\n </tbody>\r\n {devMode && !!devNode && (\r\n <tfoot>\r\n <tr>\r\n <td>{devNode}</td>\r\n </tr>\r\n </tfoot>\r\n )}\r\n </table>\r\n );\r\n}\r\n\r\nexport default memo(Icon, arePropsEqual);\r\n","/**\r\n * MSO conditional comment helpers.\r\n *\r\n * Follows the same pattern as Icon.tsx: raw HTML is injected via\r\n * dangerouslySetInnerHTML on a <td>, which is the only way to emit\r\n * unescaped conditional comment strings without a post-processing step.\r\n *\r\n * Accepts an HTML string (not ReactNode) — the caller is responsible\r\n * for building the inner HTML, exactly like Icon does with vmlIcon/htmlContent.\r\n *\r\n * Usage:\r\n *\r\n * <MsoOnly html={`<img src=\"...\" />`} />\r\n * <NonMso html={`<table>...</table>`} />\r\n */\r\n\r\ntype Props = { html: string };\r\n\r\n/**\r\n * Content rendered by Outlook Classic only.\r\n * Outputs: <!--[if mso]> ... <![endif]-->\r\n */\r\nexport function MsoOnly({ html }: Props) {\r\n return (\r\n <td\r\n dangerouslySetInnerHTML={{\r\n __html: `<!--[if mso]>${html}<![endif]-->`,\r\n }}\r\n />\r\n );\r\n}\r\n\r\n/**\r\n * Content hidden from Outlook Classic, visible in all other clients.\r\n * Outputs: <!--[if !mso]><!--> ... <!--<![endif]-->\r\n */\r\nexport function NonMso({ html }: Props) {\r\n return (\r\n <td\r\n dangerouslySetInnerHTML={{\r\n __html: `<!--[if !mso]><!-->${html}<!--<![endif]-->`,\r\n }}\r\n />\r\n );\r\n}"],"names":["_jsxs","_jsx","global","exports","justifyMap","buildLinkHref","getBorderStyleString","memo","alignMap","getBorderStyle","Fragment","_Fragment"],"mappings":"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"}