@pagenflow/email 1.3.3 → 1.3.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.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/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"],"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 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\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 // ✅ FIX 1: Use string indexing for MSO property\r\n // ['ms-text-size-adjust' as string]: '100%',\r\n [\"msTextSizeAdjust\" as string]: \"100%\",\r\n // [\"mso-line-height-rule\" as string]: \"exactly\",\r\n [\"msoLineHeightRule\" as string]: \"exactly\",\r\n\r\n // Base font for body\r\n fontFamily: \"Arial, Helvetica, sans-serif\",\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\r\n // ✅ FIX 1 (on table): Use string indexing for MSO property\r\n [\"msoLineHeightRule\" as string]: \"exactly\",\r\n // ['mso-line-height-rule' as string]: 'exactly',\r\n\r\n borderCollapse: \"collapse\",\r\n };\r\n\r\n return (\r\n // The <body> tag with inline styles\r\n <body style={bodyStyle}>\r\n {/* Center tag is a legacy but reliable way to center content in some clients */}\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 {/* Top-level table for background, centering, and wrapping content */}\r\n <table\r\n role=\"presentation\"\r\n border={0 as any} // 🔒 Use number attribute and type assertion for border\r\n cellPadding={0}\r\n cellSpacing={0}\r\n align=\"center\"\r\n width=\"100%\"\r\n style={outerTableStyle} // Use the type-safe style object\r\n >\r\n <tbody>\r\n <tr>\r\n <td align=\"center\" style={{ padding: \"0\", margin: \"0\" }}>\r\n {/* All email content (Sections, Containers, etc.) goes here */}\r\n {children}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </center>\r\n\r\n {/* MSO fix for bottom scrollbar */}\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 { 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 /** The destination URL for the button. Required. */\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 /** Width of the button (e.g., \"200px\" or \"100%\"). */\r\n width?: 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 /** 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 /** Font family (e.g., 'Arial, sans-serif'). */\r\n fontFamily?: string;\r\n\r\n /** White space behavior (e.g., 'normal', 'nowrap', 'pre-wrap'). */\r\n whiteSpace?: 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\nfunction Button({ config, devMode }: ButtonProps) {\r\n const {\r\n href,\r\n children,\r\n backgroundColor = \"#007bff\", // Default blue\r\n color = \"#ffffff\",\r\n padding = \"12px 24px\",\r\n borderRadius = \"3px\",\r\n width,\r\n justifyContent = \"center\",\r\n textAlign = \"center\",\r\n fontSize = \"16px\",\r\n fontWeight = \"500\",\r\n fontStyle,\r\n lineHeight = \"1.2\",\r\n letterSpacing,\r\n textTransform,\r\n textDecoration = \"none\",\r\n fontFamily = \"Arial, sans-serif\",\r\n whiteSpace = \"normal\",\r\n } = config;\r\n\r\n // 1. Link (A) Tag Styles (Fallback for Webmail/Mobile)\r\n const linkStyle: CSSProperties = {\r\n color: color,\r\n textDecoration: textDecoration,\r\n display: \"block\",\r\n // Apply padding here for simplicity, though the TD is more reliable\r\n padding: padding,\r\n wordBreak: \"break-word\",\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 textAlign: textAlign,\r\n whiteSpace: whiteSpace as any,\r\n };\r\n\r\n // 2. 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 // Overflow hidden to clip background to border-radius\r\n ...(borderRadius && { overflow: \"hidden\" }),\r\n };\r\n\r\n // --- VML Calculation and Code for Outlook Compatibility ---\r\n\r\n // VML needs fixed pixel height. We estimate it based on padding.\r\n const numericPadding = parseInt(padding.split(\" \")[0] || \"12\", 10);\r\n const vmlHeight = numericPadding * 2 + 20; // Estimate height based on padding + font size\r\n const vmlWidth = width ? parseInt(width, 10) : 200; // Default VML width (fixed)\r\n\r\n // VML colors must use the full hex format (e.g., #000000)\r\n const vmlFillColor = backgroundColor.startsWith(\"#\")\r\n ? backgroundColor\r\n : `#${backgroundColor}`;\r\n\r\n const align = justifyMap[justifyContent];\r\n\r\n // Build VML font styles\r\n const vmlFontWeight = fontWeight || \"bold\";\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 && whiteSpace !== \"normal\" ? `white-space:${whiteSpace};` : \"\";\r\n\r\n // VML code uses MSO conditional comments to render only in Outlook\r\n const 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}\" style=\"height:${vmlHeight}px;v-text-anchor:middle;width:${vmlWidth}px;\" arcsize=\"${(parseInt(borderRadius) / vmlHeight) * 100}%\" strokecolor=\"${vmlFillColor}\" fillcolor=\"${vmlFillColor}\">\r\n <w:anchorlock/>\r\n <center style=\"color:${color};font-family:${fontFamily};font-size:${fontSize};font-weight:${vmlFontWeight};${vmlFontStyle}${vmlLetterSpacing}${vmlTextTransform}${vmlTextDecoration}${vmlWhiteSpace}\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </center>\r\n </v:roundrect>\r\n <![endif]-->\r\n `;\r\n\r\n return (\r\n // Outer table for alignment (center the button horizontally)\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n align={align} // This centers the table (and thus the button)\r\n style={{\r\n // --- Start dev\r\n position: \"relative\",\r\n // --- End dev\r\n\r\n width: 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 <td\r\n dangerouslySetInnerHTML={{\r\n __html: `\r\n ${devMode ? \"\" : 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=\"background-color: ${backgroundTdStyle.backgroundColor}; border-radius: ${backgroundTdStyle.borderRadius}; width: ${backgroundTdStyle.width}; ${borderRadius ? \"overflow: hidden;\" : \"\"}\">\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse: separate; border-spacing: 0; border-radius: ${borderRadius}; width: 100%;\">\r\n <tbody>\r\n <tr>\r\n <td style=\"padding: ${padding};\">\r\n ${\r\n devMode\r\n ? `<span style=\"color: ${color}; font-family: ${fontFamily}; font-size: ${fontSize}; font-weight: ${fontWeight}; font-style: ${fontStyle || \"normal\"}; line-height: ${lineHeight}; letter-spacing: ${letterSpacing || \"normal\"}; text-transform: ${textTransform || \"none\"}; text-decoration: ${textDecoration}; white-space: ${whiteSpace}; display: ${linkStyle.display}; text-align: ${textAlign}; word-break: ${linkStyle.wordBreak};\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>`\r\n : `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color: ${color}; text-decoration: ${textDecoration}; display: ${linkStyle.display}; word-break: ${linkStyle.wordBreak}; font-family: ${fontFamily}; font-size: ${fontSize}; font-weight: ${fontWeight}; font-style: ${fontStyle || \"normal\"}; line-height: ${lineHeight}; letter-spacing: ${letterSpacing || \"normal\"}; text-transform: ${textTransform || \"none\"}; text-align: ${textAlign}; white-space: ${whiteSpace};\">\r\n <span style=\"color: ${color}; font-family: ${fontFamily}; font-size: ${fontSize}; font-weight: ${fontWeight}; font-style: ${fontStyle || \"normal\"}; line-height: ${lineHeight}; letter-spacing: ${letterSpacing || \"normal\"}; text-transform: ${textTransform || \"none\"}; text-decoration: ${textDecoration}; white-space: ${whiteSpace};\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>\r\n </a>`\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 );\r\n}\r\n\r\nexport default memo(Button, arePropsEqual);\r\n","import { 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): React.CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: React.CSSProperties = {};\r\n\r\n // Check for unified border\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n }\r\n\r\n // Individual sides override unified border\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 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 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 const innerTableStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: config.height,\r\n borderCollapse: \"separate\", // Changed from collapse to separate for border-radius\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\r\n const innerTdStyle: React.CSSProperties = {\r\n padding: config.padding,\r\n height: config.height,\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 */}\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 {...(config.height && { height: config.height })}\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, 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 (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n }\r\n\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=\"desktop-gap-column\"\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 { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\n\r\nexport interface DividerConfig {\r\n /** Thickness of the line (e.g., \"1px\"). */\r\n height?: string;\r\n\r\n /** Color of the line. */\r\n color?: string;\r\n\r\n /** Width of the line (e.g., \"100%\" or \"300px\"). */\r\n width?: string;\r\n\r\n /** Spacing above and below the divider (e.g., \"20px 0\"). */\r\n margin?: string;\r\n\r\n /** Horizontal alignment of the divider. */\r\n align?: \"left\" | \"center\" | \"right\";\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 } = config;\r\n\r\n // 1. Outer TD Style: Applies the vertical spacing (margin)\r\n const outerTdStyle: CSSProperties = {\r\n padding: margin,\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n width: \"100%\",\r\n };\r\n\r\n // 2. Divider Table Style: Applies the line properties\r\n const dividerTableStyle: CSSProperties = {\r\n width: width,\r\n height: height,\r\n backgroundColor: color,\r\n borderCollapse: \"collapse\",\r\n border: \"0\",\r\n\r\n // ✅ FIX 1: Use string literal indexing for MSO properties\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 // Parse height for the HTML attribute\r\n const dividerHeightAttribute = parseInt(height, 10) || 1;\r\n\r\n return (\r\n <table\r\n aria-label=\"Divider Wrapper\"\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: \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* TD: Manages spacing (margin) and alignment */}\r\n <td style={outerTdStyle} align={align}>\r\n {/* Inner Table: This is the actual divider line */}\r\n <table\r\n aria-label=\"Divider Line\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n align={align}\r\n style={dividerTableStyle}\r\n // ✅ FIX 2: Apply the HTML height attribute using type assertion\r\n {...({ height: dividerHeightAttribute } as any)}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Empty TD that is forced to the line's height/color */}\r\n <td\r\n style={{\r\n height: height,\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n padding: \"0\",\r\n }}\r\n >\r\n &nbsp;\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\r\nexport default memo(Divider, arePropsEqual);\r\n","import { ReactNode } from \"react\";\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}\r\n\r\nexport default function Head({\r\n children,\r\n backgroundColor = \"#ffffff\",\r\n title = \"Email Preview\",\r\n}: HeadProps) {\r\n // Outlook (MSO) Styles and Reset\r\n const msoResetStyles = `\r\n /* Forces Outlook to render 100% width and prevents line-height issues */\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 \r\n /* Reset tables for MSO and border issues */\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 \r\n /* Reset images */\r\n img { border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; }\r\n \r\n /* Fix for Gmail image wrapping and blue links */\r\n #MessageViewBody img { min-width: 100%; }\r\n \r\n /* --- APPLE BLUE LINK FIX --- */\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\r\n /* 🔒 NEW: Set global background color via CSS for clients that respect it */\r\n body { background-color: ${backgroundColor} !important; }\r\n\r\n /* Disable browser default margin */\r\n p {\r\n margin: 0;\r\n }\r\n `;\r\n\r\n const globalStyles = `\r\n @media screen and (max-width: 600px) {\r\n .container-fixed-width {\r\n width: 100% !important;\r\n max-width: 100% !important;\r\n }\r\n }\r\n\r\n @media screen and (max-width: 600px) {\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\r\n .desktop-gap-column {\r\n width: 0 !important;\r\n display: none !important;\r\n }\r\n\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\r\n @media only screen and (max-width: 600px) {\r\n /* 1. Handling Mobile Alignment (Justify) */\r\n /* We target the inner table alignment */\r\n .responsive-row[data-mobile-justify=\"center\"] .content-table {\r\n margin: 0 auto !important;\r\n float: none !important;\r\n }\r\n .responsive-row[data-mobile-justify=\"start\"] .content-table {\r\n margin: 0 !important;\r\n float: left !important;\r\n }\r\n .responsive-row[data-mobile-justify=\"end\"] .content-table {\r\n margin: 0 0 0 auto !important;\r\n float: right !important;\r\n }\r\n\r\n /* 2. Handling Mobile Vertical Alignment (Align Items) */\r\n /* We target the child cells if they are still side-by-side */\r\n .responsive-row[data-mobile-align=\"center\"] .child-cell {\r\n vertical-align: middle !important;\r\n }\r\n .responsive-row[data-mobile-align=\"start\"] .child-cell {\r\n vertical-align: top !important;\r\n }\r\n .responsive-row[data-mobile-align=\"end\"] .child-cell {\r\n vertical-align: bottom !important;\r\n }\r\n }\r\n \r\n /* ================================================= */\r\n /* 🔒 UNIVERSAL LINK RESET */\r\n a {\r\n color: inherit;\r\n text-decoration: none;\r\n }\r\n /* ================================================= */\r\n\r\n /* ================================================= */\r\n /* 🔒 LIST STYLE ENFORCEMENT */\r\n \r\n /* Reset all lists and list items */\r\n ol, ul {\r\n margin: 0px;\r\n padding: 0px;\r\n list-style: none;\r\n }\r\n \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\r\n /* 🔒 FORCE HIDE ::marker pseudo-element for non-list items */\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\r\n /* Apply bullet styles only to items with data-list=\"bullet\" */\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\r\n /* Apply ordered styles only to items with data-list=\"ordered\" */\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\r\n /* Ensure marker only takes its natural size with no extra spacing */\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 /* ================================================= */\r\n\r\n /* ================================================= */\r\n /* 🔒 HEADING STYLE RESET */\r\n h1, h2, h3, h4, h5, h6 {\r\n margin: 0;\r\n padding: 0;\r\n font-weight: inherit; /* Disables browser defaults */\r\n }\r\n /* ================================================= */\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 <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 {children}\r\n </head>\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 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'). */ // ADDED\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'). */ // ADDED\r\n letterSpacing?: string;\r\n\r\n /** Text transform (e.g., 'uppercase', 'lowercase', 'capitalize'). */ // ADDED\r\n textTransform?: string;\r\n\r\n /** Text decoration (e.g., 'underline', 'line-through'). */ // ADDED\r\n textDecoration?: string;\r\n\r\n /** Text direction (e.g., 'ltr', 'rtl'). */ // ADDED\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. */ // ADDED\r\n verticalAlign?: string;\r\n \r\n /** Background color of the heading block. */ // ADDED\r\n backgroundColor?: 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 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 } = config;\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 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\r\n // Critical: Remove default top/bottom margin from HTML heading tags\r\n margin: \"0\",\r\n padding: \"0\",\r\n\r\n // Ensures compatibility with MSO/general font rendering\r\n fontFamily: \"Arial, Helvetica, sans-serif\",\r\n\r\n // Outlook specific fixes (using string indexing)\r\n [\"msoLineHeightRule\" as string]: \"exactly\",\r\n // [\"mso-line-height-rule\" 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 <HeadingTag\r\n style={headingStyle}\r\n dangerouslySetInnerHTML={{ __html: text ?? children ?? \"\" }}\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);","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\n\r\nexport interface ImageConfig {\r\n /** The source URL of the image. Required. */\r\n src: string;\r\n\r\n /** Alt text for accessibility. Required. */\r\n alt: string;\r\n\r\n /** Width of the image. Can be fixed (e.g., \"600px\") or percentage (e.g., \"100%\"). */\r\n width?: string;\r\n\r\n /** Height of the image. Optional, usually auto-calculated if width is set. */\r\n height?: string;\r\n\r\n maxWidth?: string;\r\n maxHeight?: string;\r\n\r\n /** Background color of the containing TD/parent element if the image has transparency. */\r\n backgroundColor?: string;\r\n\r\n /** Padding around the image (applied to the containing TD). */\r\n padding?: string;\r\n\r\n /** Border radius for the image (CSS only, limited compatibility). */\r\n borderRadius?: string;\r\n\r\n /** Optional URL to make the image clickable */\r\n href?: string;\r\n\r\n /** Link target attribute (e.g., \"_blank\" for new window) */\r\n target?: string;\r\n}\r\n\r\nexport type ImageProps = {\r\n config: ImageConfig;\r\n devNode?: ReactNode;\r\n devMode?: boolean;\r\n};\r\n\r\nfunction Image({ config, devNode, devMode }: ImageProps) {\r\n const {\r\n src,\r\n alt,\r\n width,\r\n height,\r\n maxHeight,\r\n maxWidth,\r\n backgroundColor,\r\n padding,\r\n borderRadius,\r\n href,\r\n target,\r\n } = config;\r\n\r\n // 1. Image Style: Critical for compatibility, especially display: block\r\n const imgStyle: CSSProperties = {\r\n // Basic image properties\r\n display: \"block\", // Prevents extra vertical space/gaps below the image\r\n objectFit: \"cover\", // For controlling how the image fits (modern CSS, may be ignored)\r\n\r\n // Dimensions (using CSS fallback)\r\n width: width || \"100%\",\r\n height: height || \"auto\",\r\n maxWidth: maxWidth || \"100%\",\r\n maxHeight: maxHeight,\r\n\r\n // Styling\r\n border: \"0\", // Ensures no default browser/client border\r\n borderRadius: borderRadius,\r\n };\r\n\r\n // 2. Link Style: Ensure 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. TD Style: Where padding and background are reliably applied\r\n const tdStyle: CSSProperties = {\r\n padding: padding,\r\n backgroundColor: backgroundColor,\r\n fontSize: \"0\", // CRITICAL: Collapses extra space from Outlook/Gmail\r\n lineHeight: \"0\", // CRITICAL: Collapses extra space from Outlook/Gmail\r\n };\r\n\r\n // Image element with proper attributes for email compatibility\r\n const imageElement = (\r\n <img\r\n draggable={false}\r\n src={src}\r\n alt={alt}\r\n style={imgStyle}\r\n // For Outlook: Use the smaller of width or maxWidth for the HTML attribute\r\n width={(() => {\r\n const widthPx = width?.endsWith(\"px\") ? parseInt(width, 10) : undefined;\r\n const maxWidthPx = maxWidth?.endsWith(\"px\")\r\n ? parseInt(maxWidth, 10)\r\n : undefined;\r\n\r\n if (widthPx && maxWidthPx) {\r\n return Math.min(widthPx, maxWidthPx);\r\n }\r\n return widthPx || maxWidthPx;\r\n })()}\r\n height={height?.endsWith(\"px\") ? parseInt(height, 10) : undefined}\r\n {...{ border: 0 as any }}\r\n />\r\n );\r\n\r\n // Wrap image in link if href is provided 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 // Add rel for security when opening in new tab\r\n {...(target === \"_blank\" ? { rel: \"noopener noreferrer\" } : {})}\r\n >\r\n {imageElement}\r\n </a>\r\n ) : (\r\n imageElement\r\n );\r\n\r\n return (\r\n // We wrap the image in a table to reliably apply padding, background, and alignment.\r\n <table\r\n aria-label={`Image Wrapper for: ${alt}`}\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 || \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n onClick={devMode ? (e) => e.preventDefault() : undefined}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* TD for Padding, Background, and Space Collapse */}\r\n <td style={tdStyle} align=\"center\">\r\n {content}\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\nexport default memo(Image, arePropsEqual);\r\n","import { 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\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 // 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 // Mobile specific overrides\r\n mobile?: {\r\n justifyContent?: JustifyContent;\r\n alignItems?: AlignItems;\r\n };\r\n}\r\n\r\nexport type RowProps = {\r\n children: ReactNode;\r\n config: RowConfig;\r\n devNode?: ReactNode;\r\n};\r\n\r\nfunction getBorderStyle(border?: BorderConfig): React.CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: React.CSSProperties = {};\r\n\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n }\r\n\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 Row({ children, config, devNode }: 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 // 1. Outer TD for Background and Border Radius (no border here)\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\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 // 2. Inner Table for Border and Border Radius\r\n const borderTableStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n borderCollapse: \"separate\", // Changed from collapse to separate for border-radius\r\n borderSpacing: 0,\r\n borderRadius: config.borderRadius,\r\n ...getBorderStyle(config.border),\r\n };\r\n\r\n // 3. TD for Padding\r\n const paddingTdStyle: React.CSSProperties = {\r\n padding: config.padding,\r\n width: \"100%\",\r\n height: \"100%\",\r\n verticalAlign: \"top\",\r\n };\r\n\r\n // 4. Content Table - horizontal layout\r\n const contentTableStyle: React.CSSProperties = {\r\n width: \"auto\",\r\n height: \"100%\",\r\n borderCollapse: \"collapse\",\r\n minWidth: \"1px\",\r\n maxWidth: config.width || \"100%\",\r\n };\r\n\r\n // 5. Gap styles for horizontal spacing between children\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 return (\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 data-mobile-justify={config.mobile?.justifyContent}\r\n data-mobile-align={config.mobile?.alignItems}\r\n className=\"responsive-row\"\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 <td align={tdAlign}>\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\"\r\n >\r\n <tbody>\r\n <tr className=\"content-tr\">\r\n {/* Horizontal layout with gap support */}\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 {/* Add horizontal gap between children (not after last child) */}\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 >\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\r\nexport default memo(Row, arePropsEqual);\r\n","import React, { 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): React.CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: React.CSSProperties = {};\r\n\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n }\r\n\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}\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 } = 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 // ✅ FIX: Use string literal indexing for MSO properties\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 >\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 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\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 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 } = 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 (like a <div> or <p>)\r\n // or inherited by the children. For max compatibility, we apply core styles\r\n // directly to the TD or a wrapper <p> (if children is just a string).\r\n const contentStyle: CSSProperties = {\r\n color: color,\r\n textAlign: textAlign,\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 margin: \"0\", // Crucial: Remove default margin from <p> tags\r\n padding: \"0\",\r\n fontFamily: \"Arial, Helvetica, sans-serif\", // Use a widely supported font stack\r\n };\r\n\r\n return (\r\n // Wrap the text content in a table for padding/background/width management.\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: Applies Padding, Background, and Alignment */}\r\n <td style={tdStyle} align={textAlign as \"left\" | \"center\" | \"right\"}>\r\n {/* Apply core text styles to a wrapper element.\r\n We use a simple <span> or <div> wrapper here to hold the styles \r\n and then render the children inside it.\r\n */}\r\n <div\r\n style={contentStyle}\r\n dangerouslySetInnerHTML={{ __html: text ?? children ?? \"\" }}\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"],"names":["_jsxs","_jsx","global","exports","justifyMap","alignMap","getBorderStyle"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.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/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"],"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 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\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 // ✅ FIX 1: Use string indexing for MSO property\r\n // ['ms-text-size-adjust' as string]: '100%',\r\n [\"msTextSizeAdjust\" as string]: \"100%\",\r\n // [\"mso-line-height-rule\" as string]: \"exactly\",\r\n [\"msoLineHeightRule\" as string]: \"exactly\",\r\n\r\n // Base font for body\r\n fontFamily: \"Arial, Helvetica, sans-serif\",\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\r\n // ✅ FIX 1 (on table): Use string indexing for MSO property\r\n [\"msoLineHeightRule\" as string]: \"exactly\",\r\n // ['mso-line-height-rule' as string]: 'exactly',\r\n\r\n borderCollapse: \"collapse\",\r\n };\r\n\r\n return (\r\n // The <body> tag with inline styles\r\n <body style={bodyStyle}>\r\n {/* Center tag is a legacy but reliable way to center content in some clients */}\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 {/* Top-level table for background, centering, and wrapping content */}\r\n <table\r\n role=\"presentation\"\r\n border={0 as any} // 🔒 Use number attribute and type assertion for border\r\n cellPadding={0}\r\n cellSpacing={0}\r\n align=\"center\"\r\n width=\"100%\"\r\n style={outerTableStyle} // Use the type-safe style object\r\n >\r\n <tbody>\r\n <tr>\r\n <td align=\"center\" style={{ padding: \"0\", margin: \"0\" }}>\r\n {/* All email content (Sections, Containers, etc.) goes here */}\r\n {children}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </center>\r\n\r\n {/* MSO fix for bottom scrollbar */}\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 { 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 /** The destination URL for the button. Required. */\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 /** Width of the button (e.g., \"200px\" or \"100%\"). */\r\n width?: 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 /** 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 /** Font family (e.g., 'Arial, sans-serif'). */\r\n fontFamily?: string;\r\n\r\n /** White space behavior (e.g., 'normal', 'nowrap', 'pre-wrap'). */\r\n whiteSpace?: 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\nfunction Button({ config, devMode }: ButtonProps) {\r\n const {\r\n href,\r\n children,\r\n backgroundColor = \"#007bff\", // Default blue\r\n color = \"#ffffff\",\r\n padding = \"12px 24px\",\r\n borderRadius = \"3px\",\r\n width,\r\n justifyContent = \"center\",\r\n textAlign = \"center\",\r\n fontSize = \"16px\",\r\n fontWeight = \"500\",\r\n fontStyle,\r\n lineHeight = \"1.2\",\r\n letterSpacing,\r\n textTransform,\r\n textDecoration = \"none\",\r\n fontFamily = \"Arial, sans-serif\",\r\n whiteSpace = \"normal\",\r\n } = config;\r\n\r\n // 1. Link (A) Tag Styles (Fallback for Webmail/Mobile)\r\n const linkStyle: CSSProperties = {\r\n color: color,\r\n textDecoration: textDecoration,\r\n display: \"block\",\r\n // Apply padding here for simplicity, though the TD is more reliable\r\n padding: padding,\r\n wordBreak: \"break-word\",\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 textAlign: textAlign,\r\n whiteSpace: whiteSpace as any,\r\n };\r\n\r\n // 2. 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 // Overflow hidden to clip background to border-radius\r\n ...(borderRadius && { overflow: \"hidden\" }),\r\n };\r\n\r\n // --- VML Calculation and Code for Outlook Compatibility ---\r\n\r\n // VML needs fixed pixel height. We estimate it based on padding.\r\n const numericPadding = parseInt(padding.split(\" \")[0] || \"12\", 10);\r\n const vmlHeight = numericPadding * 2 + 20; // Estimate height based on padding + font size\r\n const vmlWidth = width ? parseInt(width, 10) : 200; // Default VML width (fixed)\r\n\r\n // VML colors must use the full hex format (e.g., #000000)\r\n const vmlFillColor = backgroundColor.startsWith(\"#\")\r\n ? backgroundColor\r\n : `#${backgroundColor}`;\r\n\r\n const align = justifyMap[justifyContent];\r\n\r\n // Build VML font styles\r\n const vmlFontWeight = fontWeight || \"bold\";\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 && whiteSpace !== \"normal\" ? `white-space:${whiteSpace};` : \"\";\r\n\r\n // VML code uses MSO conditional comments to render only in Outlook\r\n const 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}\" style=\"height:${vmlHeight}px;v-text-anchor:middle;width:${vmlWidth}px;\" arcsize=\"${(parseInt(borderRadius) / vmlHeight) * 100}%\" strokecolor=\"${vmlFillColor}\" fillcolor=\"${vmlFillColor}\">\r\n <w:anchorlock/>\r\n <center style=\"color:${color};font-family:${fontFamily};font-size:${fontSize};font-weight:${vmlFontWeight};${vmlFontStyle}${vmlLetterSpacing}${vmlTextTransform}${vmlTextDecoration}${vmlWhiteSpace}\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </center>\r\n </v:roundrect>\r\n <![endif]-->\r\n `;\r\n\r\n return (\r\n // Outer table for alignment (center the button horizontally)\r\n <table\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n align={align} // This centers the table (and thus the button)\r\n style={{\r\n // --- Start dev\r\n position: \"relative\",\r\n // --- End dev\r\n\r\n width: 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 <td\r\n dangerouslySetInnerHTML={{\r\n __html: `\r\n ${devMode ? \"\" : 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=\"background-color: ${backgroundTdStyle.backgroundColor}; border-radius: ${backgroundTdStyle.borderRadius}; width: ${backgroundTdStyle.width}; ${borderRadius ? \"overflow: hidden;\" : \"\"}\">\r\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse: separate; border-spacing: 0; border-radius: ${borderRadius}; width: 100%;\">\r\n <tbody>\r\n <tr>\r\n <td style=\"padding: ${padding};\">\r\n ${\r\n devMode\r\n ? `<span style=\"color: ${color}; font-family: ${fontFamily}; font-size: ${fontSize}; font-weight: ${fontWeight}; font-style: ${fontStyle || \"normal\"}; line-height: ${lineHeight}; letter-spacing: ${letterSpacing || \"normal\"}; text-transform: ${textTransform || \"none\"}; text-decoration: ${textDecoration}; white-space: ${whiteSpace}; display: ${linkStyle.display}; text-align: ${textAlign}; word-break: ${linkStyle.wordBreak};\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>`\r\n : `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color: ${color}; text-decoration: ${textDecoration}; display: ${linkStyle.display}; word-break: ${linkStyle.wordBreak}; font-family: ${fontFamily}; font-size: ${fontSize}; font-weight: ${fontWeight}; font-style: ${fontStyle || \"normal\"}; line-height: ${lineHeight}; letter-spacing: ${letterSpacing || \"normal\"}; text-transform: ${textTransform || \"none\"}; text-align: ${textAlign}; white-space: ${whiteSpace};\">\r\n <span style=\"color: ${color}; font-family: ${fontFamily}; font-size: ${fontSize}; font-weight: ${fontWeight}; font-style: ${fontStyle || \"normal\"}; line-height: ${lineHeight}; letter-spacing: ${letterSpacing || \"normal\"}; text-transform: ${textTransform || \"none\"}; text-decoration: ${textDecoration}; white-space: ${whiteSpace};\">\r\n ${typeof children === \"string\" ? children : \"\"}\r\n </span>\r\n </a>`\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 );\r\n}\r\n\r\nexport default memo(Button, arePropsEqual);\r\n","import { 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): React.CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: React.CSSProperties = {};\r\n\r\n // Check for unified border\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n }\r\n\r\n // Individual sides override unified border\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 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 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 const innerTableStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: config.height,\r\n borderCollapse: \"separate\", // Changed from collapse to separate for border-radius\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\r\n const innerTdStyle: React.CSSProperties = {\r\n padding: config.padding,\r\n height: config.height,\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 */}\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 {...(config.height && { height: config.height })}\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, 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 (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n }\r\n\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=\"desktop-gap-column\"\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 { CSSProperties, memo, ReactNode } from \"react\";\r\nimport { arePropsEqual } from \"../utils/memoUtils\";\r\n\r\nexport interface DividerConfig {\r\n /** Thickness of the line (e.g., \"1px\"). */\r\n height?: string;\r\n\r\n /** Color of the line. */\r\n color?: string;\r\n\r\n /** Width of the line (e.g., \"100%\" or \"300px\"). */\r\n width?: string;\r\n\r\n /** Spacing above and below the divider (e.g., \"20px 0\"). */\r\n margin?: string;\r\n\r\n /** Horizontal alignment of the divider. */\r\n align?: \"left\" | \"center\" | \"right\";\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 } = config;\r\n\r\n // 1. Outer TD Style: Applies the vertical spacing (margin)\r\n const outerTdStyle: CSSProperties = {\r\n padding: margin,\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n width: \"100%\",\r\n };\r\n\r\n // 2. Divider Table Style: Applies the line properties\r\n const dividerTableStyle: CSSProperties = {\r\n width: width,\r\n height: height,\r\n backgroundColor: color,\r\n borderCollapse: \"collapse\",\r\n border: \"0\",\r\n\r\n // ✅ FIX 1: Use string literal indexing for MSO properties\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 // Parse height for the HTML attribute\r\n const dividerHeightAttribute = parseInt(height, 10) || 1;\r\n\r\n return (\r\n <table\r\n aria-label=\"Divider Wrapper\"\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: \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* TD: Manages spacing (margin) and alignment */}\r\n <td style={outerTdStyle} align={align}>\r\n {/* Inner Table: This is the actual divider line */}\r\n <table\r\n aria-label=\"Divider Line\"\r\n role=\"presentation\"\r\n cellPadding={0}\r\n cellSpacing={0}\r\n border={0}\r\n align={align}\r\n style={dividerTableStyle}\r\n // ✅ FIX 2: Apply the HTML height attribute using type assertion\r\n {...({ height: dividerHeightAttribute } as any)}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* Empty TD that is forced to the line's height/color */}\r\n <td\r\n style={{\r\n height: height,\r\n fontSize: \"0\",\r\n lineHeight: \"0\",\r\n padding: \"0\",\r\n }}\r\n >\r\n &nbsp;\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\r\nexport default memo(Divider, arePropsEqual);\r\n","import { ReactNode } from \"react\";\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}\r\n\r\nexport default function Head({\r\n children,\r\n backgroundColor = \"#ffffff\",\r\n title = \"Email Preview\",\r\n}: HeadProps) {\r\n // Outlook (MSO) Styles and Reset\r\n const msoResetStyles = `\r\n /* Forces Outlook to render 100% width and prevents line-height issues */\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 \r\n /* Reset tables for MSO and border issues */\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 \r\n /* Reset images */\r\n img { border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; }\r\n \r\n /* Fix for Gmail image wrapping and blue links */\r\n #MessageViewBody img { min-width: 100%; }\r\n \r\n /* --- APPLE BLUE LINK FIX --- */\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\r\n /* 🔒 NEW: Set global background color via CSS for clients that respect it */\r\n body { background-color: ${backgroundColor} !important; }\r\n\r\n /* Disable browser default margin */\r\n p {\r\n margin: 0;\r\n }\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\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\r\n .desktop-gap-column {\r\n width: 0 !important;\r\n display: none !important;\r\n }\r\n\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\r\n @media only screen and (max-width: 768px) {\r\n /* 1. Handling Mobile Alignment (Justify) - Works for both wrapped and non-wrapped */\r\n /* We target the inner table alignment */\r\n .responsive-row[data-mobile-justify=\"center\"] .content-table {\r\n margin: 0 auto !important;\r\n float: none !important;\r\n }\r\n .responsive-row[data-mobile-justify=\"start\"] .content-table {\r\n margin: 0 !important;\r\n float: left !important;\r\n }\r\n .responsive-row[data-mobile-justify=\"end\"] .content-table {\r\n margin: 0 0 0 auto !important;\r\n float: right !important;\r\n }\r\n\r\n /* Mobile justify for wrapped children - we need to target the outer wrapper td */\r\n .responsive-row[data-mobile-wrap=\"true\"][data-mobile-justify=\"center\"] td[align] {\r\n text-align: center !important;\r\n }\r\n .responsive-row[data-mobile-wrap=\"true\"][data-mobile-justify=\"start\"] td[align] {\r\n text-align: left !important;\r\n }\r\n .responsive-row[data-mobile-wrap=\"true\"][data-mobile-justify=\"end\"] td[align] {\r\n text-align: right !important;\r\n }\r\n\r\n /* Also apply to child content tables for better support */\r\n .responsive-row[data-mobile-wrap=\"true\"][data-mobile-justify=\"center\"] .child-cell table {\r\n margin-left: auto !important;\r\n margin-right: auto !important;\r\n }\r\n .responsive-row[data-mobile-wrap=\"true\"][data-mobile-justify=\"start\"] .child-cell table {\r\n margin-left: 0 !important;\r\n margin-right: auto !important;\r\n }\r\n .responsive-row[data-mobile-wrap=\"true\"][data-mobile-justify=\"end\"] .child-cell table {\r\n margin-left: auto !important;\r\n margin-right: 0 !important;\r\n }\r\n\r\n /* 2. Handling Mobile Vertical Alignment (Align Items) */\r\n /* For non-wrapped rows - controls vertical alignment when cells are side-by-side */\r\n .responsive-row[data-mobile-align=\"center\"]:not([data-mobile-wrap=\"true\"]) .child-cell {\r\n vertical-align: middle !important;\r\n }\r\n .responsive-row[data-mobile-align=\"start\"]:not([data-mobile-wrap=\"true\"]) .child-cell {\r\n vertical-align: top !important;\r\n }\r\n .responsive-row[data-mobile-align=\"end\"]:not([data-mobile-wrap=\"true\"]) .child-cell {\r\n vertical-align: bottom !important;\r\n }\r\n\r\n /* For wrapped rows - alignItems controls vertical alignment of content within each child cell */\r\n .responsive-row[data-mobile-wrap=\"true\"][data-mobile-align=\"center\"] .child-cell {\r\n vertical-align: middle !important;\r\n }\r\n .responsive-row[data-mobile-wrap=\"true\"][data-mobile-align=\"start\"] .child-cell {\r\n vertical-align: top !important;\r\n }\r\n .responsive-row[data-mobile-wrap=\"true\"][data-mobile-align=\"end\"] .child-cell {\r\n vertical-align: bottom !important;\r\n }\r\n\r\n /* 3. Handling Mobile Wrap - Pure CSS Solution */\r\n /* Force table to act like block container */\r\n .responsive-row[data-mobile-wrap=\"true\"] .content-table {\r\n width: 100% !important;\r\n max-width: 100% !important;\r\n }\r\n \r\n /* Force table row to stack cells */\r\n .responsive-row[data-mobile-wrap=\"true\"] .content-tr {\r\n display: block !important;\r\n }\r\n \r\n /* Force each child cell to be full width block */\r\n .responsive-row[data-mobile-wrap=\"true\"] .child-cell {\r\n display: block !important;\r\n width: 100% !important;\r\n box-sizing: border-box !important;\r\n }\r\n \r\n /* Hide horizontal gap cells and create vertical spacing with padding */\r\n .responsive-row[data-mobile-wrap=\"true\"] .row-gap-td {\r\n display: none !important;\r\n width: 0 !important;\r\n height: 0 !important;\r\n }\r\n \r\n /* Add vertical spacing between stacked cells using margin */\r\n .responsive-row[data-mobile-wrap=\"true\"] .child-cell:not(:last-child) {\r\n margin-bottom: 20px !important;\r\n }\r\n \r\n /* Dynamic gap support - common values */\r\n .responsive-row[data-mobile-wrap=\"true\"][data-gap=\"10px\"] .child-cell:not(:last-child) {\r\n margin-bottom: 10px !important;\r\n }\r\n .responsive-row[data-mobile-wrap=\"true\"][data-gap=\"15px\"] .child-cell:not(:last-child) {\r\n margin-bottom: 15px !important;\r\n }\r\n .responsive-row[data-mobile-wrap=\"true\"][data-gap=\"20px\"] .child-cell:not(:last-child) {\r\n margin-bottom: 20px !important;\r\n }\r\n .responsive-row[data-mobile-wrap=\"true\"][data-gap=\"24px\"] .child-cell:not(:last-child) {\r\n margin-bottom: 24px !important;\r\n }\r\n .responsive-row[data-mobile-wrap=\"true\"][data-gap=\"30px\"] .child-cell:not(:last-child) {\r\n margin-bottom: 30px !important;\r\n }\r\n .responsive-row[data-mobile-wrap=\"true\"][data-gap=\"40px\"] .child-cell:not(:last-child) {\r\n margin-bottom: 40px !important;\r\n }\r\n }\r\n \r\n /* ================================================= */\r\n /* 🔒 UNIVERSAL LINK RESET */\r\n a {\r\n color: inherit;\r\n text-decoration: none;\r\n }\r\n /* ================================================= */\r\n\r\n /* ================================================= */\r\n /* 🔒 LIST STYLE ENFORCEMENT */\r\n \r\n /* Reset all lists and list items */\r\n ol, ul {\r\n margin: 0px;\r\n padding: 0px;\r\n list-style: none;\r\n }\r\n \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\r\n /* 🔒 FORCE HIDE ::marker pseudo-element for non-list items */\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\r\n /* Apply bullet styles only to items with data-list=\"bullet\" */\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\r\n /* Apply ordered styles only to items with data-list=\"ordered\" */\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\r\n /* Ensure marker only takes its natural size with no extra spacing */\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 /* ================================================= */\r\n\r\n /* ================================================= */\r\n /* 🔒 HEADING STYLE RESET */\r\n h1, h2, h3, h4, h5, h6 {\r\n margin: 0;\r\n padding: 0;\r\n font-weight: inherit; /* Disables browser defaults */\r\n }\r\n /* ================================================= */\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 <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 {children}\r\n </head>\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 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\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 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 } = 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 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\r\n // Critical: Remove default top/bottom margin from HTML heading tags\r\n margin: \"0\",\r\n padding: \"0\",\r\n\r\n // Ensures compatibility with MSO/general font rendering\r\n fontFamily: \"Arial, Helvetica, sans-serif\",\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\n\r\nexport interface ImageConfig {\r\n /** The source URL of the image. Required. */\r\n src: string;\r\n\r\n /** Alt text for accessibility. Required. */\r\n alt: string;\r\n\r\n /** Width of the image. Can be fixed (e.g., \"600px\") or percentage (e.g., \"100%\"). */\r\n width?: string;\r\n\r\n /** Height of the image. Optional, usually auto-calculated if width is set. */\r\n height?: string;\r\n\r\n maxWidth?: string;\r\n maxHeight?: string;\r\n\r\n /** Background color of the containing TD/parent element if the image has transparency. */\r\n backgroundColor?: string;\r\n\r\n /** Padding around the image (applied to the containing TD). */\r\n padding?: string;\r\n\r\n /** Border radius for the image (CSS only, limited compatibility). */\r\n borderRadius?: string;\r\n\r\n /** Optional URL to make the image clickable */\r\n href?: string;\r\n\r\n /** Link target attribute (e.g., \"_blank\" for new window) */\r\n target?: string;\r\n}\r\n\r\nexport type ImageProps = {\r\n config: ImageConfig;\r\n devNode?: ReactNode;\r\n devMode?: boolean;\r\n};\r\n\r\nfunction Image({ config, devNode, devMode }: ImageProps) {\r\n const {\r\n src,\r\n alt,\r\n width,\r\n height,\r\n maxHeight,\r\n maxWidth,\r\n backgroundColor,\r\n padding,\r\n borderRadius,\r\n href,\r\n target,\r\n } = config;\r\n\r\n // 1. Image Style: Critical for compatibility, especially display: block\r\n const imgStyle: CSSProperties = {\r\n // Basic image properties\r\n display: \"block\", // Prevents extra vertical space/gaps below the image\r\n objectFit: \"cover\", // For controlling how the image fits (modern CSS, may be ignored)\r\n\r\n // Dimensions (using CSS fallback)\r\n width: width || \"100%\",\r\n height: height || \"auto\",\r\n maxWidth: maxWidth || \"100%\",\r\n maxHeight: maxHeight,\r\n\r\n // Styling\r\n border: \"0\", // Ensures no default browser/client border\r\n borderRadius: borderRadius,\r\n };\r\n\r\n // 2. Link Style: Ensure 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. TD Style: Where padding and background are reliably applied\r\n const tdStyle: CSSProperties = {\r\n padding: padding,\r\n backgroundColor: backgroundColor,\r\n fontSize: \"0\", // CRITICAL: Collapses extra space from Outlook/Gmail\r\n lineHeight: \"0\", // CRITICAL: Collapses extra space from Outlook/Gmail\r\n };\r\n\r\n // Image element with proper attributes for email compatibility\r\n const imageElement = (\r\n <img\r\n draggable={false}\r\n src={src}\r\n alt={alt}\r\n style={imgStyle}\r\n // For Outlook: Use the smaller of width or maxWidth for the HTML attribute\r\n width={(() => {\r\n const widthPx = width?.endsWith(\"px\") ? parseInt(width, 10) : undefined;\r\n const maxWidthPx = maxWidth?.endsWith(\"px\")\r\n ? parseInt(maxWidth, 10)\r\n : undefined;\r\n\r\n if (widthPx && maxWidthPx) {\r\n return Math.min(widthPx, maxWidthPx);\r\n }\r\n return widthPx || maxWidthPx;\r\n })()}\r\n height={height?.endsWith(\"px\") ? parseInt(height, 10) : undefined}\r\n {...{ border: 0 as any }}\r\n />\r\n );\r\n\r\n // Wrap image in link if href is provided 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 // Add rel for security when opening in new tab\r\n {...(target === \"_blank\" ? { rel: \"noopener noreferrer\" } : {})}\r\n >\r\n {imageElement}\r\n </a>\r\n ) : (\r\n imageElement\r\n );\r\n\r\n return (\r\n // We wrap the image in a table to reliably apply padding, background, and alignment.\r\n <table\r\n aria-label={`Image Wrapper for: ${alt}`}\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 || \"100%\",\r\n borderCollapse: \"collapse\",\r\n }}\r\n onClick={devMode ? (e) => e.preventDefault() : undefined}\r\n >\r\n <tbody>\r\n <tr>\r\n {/* TD for Padding, Background, and Space Collapse */}\r\n <td style={tdStyle} align=\"center\">\r\n {content}\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\nexport default memo(Image, arePropsEqual);\r\n","import { 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\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 // 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 // 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};\r\n\r\nfunction getBorderStyle(border?: BorderConfig): React.CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: React.CSSProperties = {};\r\n\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n }\r\n\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 Row({ children, config, devNode }: 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 // 1. Outer TD for Background and Border Radius (no border here)\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\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 // 2. Inner Table for Border and Border Radius\r\n const borderTableStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n borderCollapse: \"separate\", // Changed from collapse to separate for border-radius\r\n borderSpacing: 0,\r\n borderRadius: config.borderRadius,\r\n ...getBorderStyle(config.border),\r\n };\r\n\r\n // 3. TD for Padding\r\n const paddingTdStyle: React.CSSProperties = {\r\n padding: config.padding,\r\n width: \"100%\",\r\n height: \"100%\",\r\n verticalAlign: \"top\",\r\n };\r\n\r\n // 4. Content Table - horizontal layout\r\n const contentTableStyle: React.CSSProperties = {\r\n width: \"auto\",\r\n height: \"100%\",\r\n borderCollapse: \"collapse\",\r\n minWidth: \"1px\",\r\n maxWidth: config.width || \"100%\",\r\n };\r\n\r\n // 5. Gap styles for horizontal spacing between children\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 return (\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 data-mobile-justify={config.mobile?.justifyContent}\r\n data-mobile-align={config.mobile?.alignItems}\r\n data-mobile-wrap={config.mobile?.wrap ? \"true\" : undefined}\r\n data-gap={config.gap}\r\n className=\"responsive-row\"\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 <td align={tdAlign}>\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\"\r\n >\r\n <tbody>\r\n <tr className=\"content-tr\">\r\n {/* Horizontal layout with gap support */}\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 {/* Add horizontal gap between children (not after last child) */}\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\r\nexport default memo(Row, arePropsEqual);","import React, { 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): React.CSSProperties {\r\n if (!border) return {};\r\n\r\n const style: React.CSSProperties = {};\r\n\r\n if (border.width && border.style && border.color) {\r\n style.border = `${border.width} ${border.style} ${border.color}`;\r\n }\r\n\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}\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 } = 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 // ✅ FIX: Use string literal indexing for MSO properties\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 >\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 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\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 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 } = 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 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 margin: \"0\",\r\n padding: \"0\",\r\n fontFamily: \"Arial, Helvetica, sans-serif\",\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\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 /** 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\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 // 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(Number(height) * Number(2)))\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 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 || \"_self\";\r\n const align = justifyMap[justifyContent];\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 };\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. TD Style: Padding and background\r\n const tdStyle: CSSProperties = {\r\n padding: padding,\r\n backgroundColor: backgroundColor,\r\n fontSize: \"0\", // CRITICAL: Collapses extra space\r\n lineHeight: \"0\", // CRITICAL: Collapses extra space7\r\n borderRadius: borderRadius,\r\n overflow: \"hidden\",\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 // 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}%\" 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;\" />\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=\"\" // Icons are decorative, empty alt is appropriate\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}; padding: ${padding}; font-size: 0; line-height: 0; overflow: hidden;\">\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\"};\" />\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\"};\" />`\r\n }\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: widthStr || \"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={tdStyle} align={align}>\r\n {content}\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"],"names":["_jsxs","_jsx","global","exports","justifyMap","alignMap","getBorderStyle","_Fragment"],"mappings":"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"}