@servicetitan/dte-unlayer 0.124.0 → 0.126.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"nunjucks.d.ts","sourceRoot":"","sources":["../../src/display-conditions/nunjucks.ts"],"names":[],"mappings":"AAEA,OAAO,EAKH,qBAAqB,EAGrB,uBAAuB,EAE1B,MAAM,SAAS,CAAC;AA4KjB,wBAAgB,4BAA4B,CACxC,KAAK,EAAE,qBAAqB,GAC7B,uBAAuB,GAAG,IAAI,CAUhC;AAoRD;;;GAGG;AACH,wBAAgB,4BAA4B,CACxC,SAAS,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,GACtD,qBAAqB,GAAG,IAAI,CA4C9B"}
1
+ {"version":3,"file":"nunjucks.d.ts","sourceRoot":"","sources":["../../src/display-conditions/nunjucks.ts"],"names":[],"mappings":"AAEA,OAAO,EAIH,qBAAqB,EAGrB,uBAAuB,EAE1B,MAAM,SAAS,CAAC;AAsKjB,wBAAgB,4BAA4B,CACxC,KAAK,EAAE,qBAAqB,GAC7B,uBAAuB,GAAG,IAAI,CAShC;AAoRD;;;GAGG;AACH,wBAAgB,4BAA4B,CACxC,SAAS,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,GACtD,qBAAqB,GAAG,IAAI,CA4C9B"}
@@ -1,10 +1,6 @@
1
1
  import { buildFormFieldKey, parseFormFieldKey, toNunjucksFieldReference } from '../shared/forms';
2
2
  import { generateId } from './constants';
3
- import { CONDITION_OPERATORS, VALUE_LESS_OPERATORS } from './types';
4
- const OPERATOR_LABEL_MAP = new Map(CONDITION_OPERATORS.map((op)=>[
5
- op.value,
6
- op.label
7
- ]));
3
+ import { VALUE_LESS_OPERATORS } from './types';
8
4
  function escapeNunjucksString(s) {
9
5
  return s.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
10
6
  }
@@ -118,30 +114,14 @@ function isValueLessOperator(operator) {
118
114
  }
119
115
  return combined;
120
116
  }
121
- function operatorLabel(operator) {
122
- var _OPERATOR_LABEL_MAP_get;
123
- return (_OPERATOR_LABEL_MAP_get = OPERATOR_LABEL_MAP.get(operator)) !== null && _OPERATOR_LABEL_MAP_get !== void 0 ? _OPERATOR_LABEL_MAP_get : operator;
124
- }
125
- function generateTypeAndLabel(state) {
126
- const parts = [];
127
- for (const group of state.groups){
128
- for (const c of group.conditions){
129
- if (!c.dataPointKey) {
130
- continue;
131
- }
132
- if (isValueLessOperator(c.operator)) {
133
- parts.push(`${c.dataPointKey} ${operatorLabel(c.operator)}`);
134
- } else if (c.value.trim()) {
135
- parts.push(`${c.dataPointKey} ${operatorLabel(c.operator)} ${c.value.trim()}`);
136
- }
137
- }
138
- }
139
- const summary = parts.slice(0, 2).join('; ') + (parts.length > 2 ? '…' : '');
140
- const type = state.behavior === 'show' ? 'Display when' : 'Hide when';
141
- const label = summary || (state.behavior === 'show' ? 'Show when' : 'Hide when');
117
+ function generateConditionText(state) {
118
+ const conditionCount = state.groups.reduce((count, group)=>count + group.conditions.filter((c)=>c.dataPointKey && (isValueLessOperator(c.operator) || c.value.trim() !== '')).length, 0);
119
+ const label = state.behavior === 'show' ? 'Show condition configured' : 'Hide condition configured';
120
+ const description = conditionCount === 1 ? '1 condition is currently applied' : `${conditionCount} conditions are currently applied`;
142
121
  return {
143
- type,
144
- label
122
+ description,
123
+ label,
124
+ type: ''
145
125
  };
146
126
  }
147
127
  export function buildUnlayerDisplayCondition(state) {
@@ -151,8 +131,7 @@ export function buildUnlayerDisplayCondition(state) {
151
131
  }
152
132
  const before = `{% if ${expr} %}`;
153
133
  const after = '{% endif %}';
154
- const { label, type } = generateTypeAndLabel(state);
155
- const description = state.groups.length > 1 ? `${state.groups.length} rules` : undefined;
134
+ const { description, label, type } = generateConditionText(state);
156
135
  return {
157
136
  after,
158
137
  before,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/display-conditions/nunjucks.ts"],"sourcesContent":["import { buildFormFieldKey, parseFormFieldKey, toNunjucksFieldReference } from '../shared/forms';\nimport { generateId } from './constants';\nimport {\n CONDITION_OPERATORS,\n ConditionGroup,\n ConditionOperator,\n DisplayBehavior,\n DisplayConditionState,\n LogicalOperator,\n SingleCondition,\n UnlayerDisplayCondition,\n VALUE_LESS_OPERATORS,\n} from './types';\n\nconst OPERATOR_LABEL_MAP = new Map<string, string>(\n CONDITION_OPERATORS.map(op => [op.value, op.label]),\n);\n\nfunction escapeNunjucksString(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\nfunction nunjucksValueLiteral(value: string): string {\n return `'${escapeNunjucksString(value)}'`;\n}\n\nfunction isEscapedAt(s: string, index: number): boolean {\n let slashCount = 0;\n for (let i = index - 1; i >= 0 && s[i] === '\\\\'; i--) {\n slashCount++;\n }\n return slashCount % 2 === 1;\n}\n\nfunction isValueLessOperator(operator: string): boolean {\n return VALUE_LESS_OPERATORS.includes(operator as ConditionOperator);\n}\n\n/**\n * Build a single condition expression in Nunjucks.\n * Wrapped in () so splitting never breaks composite expressions.\n */\nfunction buildSingleConditionExpression(\n dataPointKey: string,\n operator: string,\n value: string,\n): string {\n const path = toNunjucksFieldReference(dataPointKey);\n const defaulted = `(${path} | default(''))`;\n const numDefaulted = `(${path} | default(0))`;\n const normalizedValue = value.trim();\n const literal = normalizedValue ? nunjucksValueLiteral(normalizedValue) : \"''\";\n const numLiteral =\n /^-?(?:\\d+\\.?\\d*|\\.\\d+)$/.test(normalizedValue) && normalizedValue !== '-'\n ? normalizedValue\n : '0';\n let inner: string;\n\n switch (operator) {\n case 'is_equal_to':\n inner = `${defaulted} == ${literal}`;\n break;\n case 'is_not_equal_to':\n inner = `${defaulted} != ${literal}`;\n break;\n case 'contains':\n inner = `${literal} in ${defaulted}`;\n break;\n case 'does_not_contain':\n inner = `not (${literal} in ${defaulted})`;\n break;\n case 'starts_with':\n inner = `(${defaulted} | startswith(${literal}))`;\n break;\n case 'ends_with':\n inner = `(${defaulted} | endswith(${literal}))`;\n break;\n case 'is_empty':\n inner = `${defaulted} == '' or (${defaulted} | length) == 0`;\n break;\n case 'is_not_empty':\n inner = `${defaulted} != '' and (${defaulted} | length) > 0`;\n break;\n case 'num_eq':\n inner = `${numDefaulted} == ${numLiteral}`;\n break;\n case 'num_neq':\n inner = `${numDefaulted} != ${numLiteral}`;\n break;\n case 'num_gt':\n inner = `${numDefaulted} > ${numLiteral}`;\n break;\n case 'num_lt':\n inner = `${numDefaulted} < ${numLiteral}`;\n break;\n case 'num_gte':\n inner = `${numDefaulted} >= ${numLiteral}`;\n break;\n case 'num_lte':\n inner = `${numDefaulted} <= ${numLiteral}`;\n break;\n default:\n inner = `${defaulted} == ${literal}`;\n }\n return `(${inner})`;\n}\n\n/**\n * Build group expression. Each condition is connected by its own logical operator.\n * E.g. (cond1) and (cond2) or (cond3)\n */\nfunction buildGroupExpression(group: ConditionGroup): string {\n const valid = group.conditions.filter(\n c => c.dataPointKey && (isValueLessOperator(c.operator) || c.value.trim() !== ''),\n );\n if (valid.length === 0) {\n return '';\n }\n let result = buildSingleConditionExpression(\n valid[0].dataPointKey,\n valid[0].operator,\n valid[0].value,\n );\n for (let i = 1; i < valid.length; i++) {\n const joiner = valid[i].logicalOperator === 'or' ? ' or ' : ' and ';\n result +=\n joiner +\n buildSingleConditionExpression(\n valid[i].dataPointKey,\n valid[i].operator,\n valid[i].value,\n );\n }\n // Wrap group in parens so top-level rule AND split works cleanly\n return valid.length > 1 ? `(${result})` : result;\n}\n\n/**\n * Build full condition expression.\n * Rules (groups) are connected by each group's logical operator.\n * hide behavior wraps everything in not().\n */\nfunction buildFullConditionExpression(state: DisplayConditionState): string {\n const validGroups = state.groups\n .map(group => ({ expression: buildGroupExpression(group), group }))\n .filter(item => !!item.expression);\n if (validGroups.length === 0) {\n return '';\n }\n let combined = validGroups[0].expression;\n for (let i = 1; i < validGroups.length; i++) {\n const joiner = validGroups[i].group.logicalOperator === 'or' ? ' or ' : ' and ';\n combined += `${joiner}${validGroups[i].expression}`;\n }\n if (state.behavior === 'hide') {\n return `not (${combined})`;\n }\n return combined;\n}\n\nfunction operatorLabel(operator: string): string {\n return OPERATOR_LABEL_MAP.get(operator) ?? operator;\n}\n\nfunction generateTypeAndLabel(state: DisplayConditionState): { type: string; label: string } {\n const parts: string[] = [];\n for (const group of state.groups) {\n for (const c of group.conditions) {\n if (!c.dataPointKey) {\n continue;\n }\n if (isValueLessOperator(c.operator)) {\n parts.push(`${c.dataPointKey} ${operatorLabel(c.operator)}`);\n } else if (c.value.trim()) {\n parts.push(`${c.dataPointKey} ${operatorLabel(c.operator)} ${c.value.trim()}`);\n }\n }\n }\n const summary = parts.slice(0, 2).join('; ') + (parts.length > 2 ? '…' : '');\n const type = state.behavior === 'show' ? 'Display when' : 'Hide when';\n const label = summary || (state.behavior === 'show' ? 'Show when' : 'Hide when');\n return { type, label };\n}\n\nexport function buildUnlayerDisplayCondition(\n state: DisplayConditionState,\n): UnlayerDisplayCondition | null {\n const expr = buildFullConditionExpression(state);\n if (!expr) {\n return null;\n }\n const before = `{% if ${expr} %}`;\n const after = '{% endif %}';\n const { label, type } = generateTypeAndLabel(state);\n const description = state.groups.length > 1 ? `${state.groups.length} rules` : undefined;\n return { after, before, description, label, type };\n}\n\n/*\n * ---------------------------------------------------------------------------\n * Parse helpers\n * ---------------------------------------------------------------------------\n */\n\nfunction stripOuterParens(s: string): string {\n const t = s.trim();\n if (t.length < 2 || !t.startsWith('(') || t.at(-1) !== ')') {\n return t;\n }\n let depth = 1;\n for (let i = 1; i < t.length - 1; i++) {\n if (t[i] === '(') {\n depth++;\n } else if (t[i] === ')') {\n depth--;\n if (depth === 0) {\n return t;\n }\n }\n }\n return depth === 1 ? t.slice(1, -1).trim() : t;\n}\n\n/**\n * Tokenize an expression into alternating tokens of (expr, operator).\n * Returns: [expr, 'and'|'or', expr, 'and'|'or', expr, ...]\n *\n * This scans for top-level \" and \" / \" or \" while respecting parens,\n * and records which separator was found between each pair.\n */\nfunction tokenizeGroupExpression(expr: string): {\n conditionExprs: string[];\n operators: LogicalOperator[];\n} {\n const conditionExprs: string[] = [];\n const operators: LogicalOperator[] = [];\n let depth = 0;\n let inSingleQuote = false;\n let start = 0;\n\n for (let i = 0; i < expr.length; i++) {\n const c = expr[i];\n if (c === \"'\" && !isEscapedAt(expr, i)) {\n inSingleQuote = !inSingleQuote;\n } else if (!inSingleQuote && c === '(') {\n depth++;\n } else if (!inSingleQuote && c === ')') {\n depth = Math.max(0, depth - 1);\n } else if (!inSingleQuote && depth === 0) {\n // Check for \" and \" or \" or \" at this position\n if (expr.slice(i, i + 5) === ' and ') {\n conditionExprs.push(expr.slice(start, i).trim());\n operators.push('and');\n start = i + 5;\n i += 4;\n continue;\n }\n if (expr.slice(i, i + 4) === ' or ') {\n conditionExprs.push(expr.slice(start, i).trim());\n operators.push('or');\n start = i + 4;\n i += 3;\n continue;\n }\n }\n }\n conditionExprs.push(expr.slice(start).trim());\n return { conditionExprs, operators };\n}\n\nfunction unescapeNunjucksString(s: string): string {\n return s.replaceAll('\\\\\\\\', '\\\\').replaceAll(String.raw`\\'`, \"'\");\n}\n\nconst SIMPLE_DATA_POINT_PATH = String.raw`[\\w.]+`;\nconst FORM_RUNTIME_DATA_POINT_PATH = String.raw`__submission_fields\\[\"\\d+\"\\]\\[\"[A-Za-z0-9]+\"\\]`;\nconst DATA_POINT_PATH = String.raw`(${SIMPLE_DATA_POINT_PATH}|${FORM_RUNTIME_DATA_POINT_PATH})`;\nconst RE_STR_DEFAULT = String.raw`\\(${DATA_POINT_PATH}\\s*\\|\\s*default\\s*\\(\\s*''\\s*\\)\\)`;\nconst RE_NUM_DEFAULT = String.raw`\\(${DATA_POINT_PATH}\\s*\\|\\s*default\\s*\\(\\s*0\\s*\\)\\)`;\nconst QUOTED_CONTENT = String.raw`((?:[^'\\\\]|\\\\.)*)`;\n\nfunction toSingleCondition(\n operator: ConditionOperator,\n dataPointKey: string,\n value: string,\n logicalOp?: LogicalOperator,\n): SingleCondition {\n const normalizedDataPointKey = (() => {\n const parsed = parseFormFieldKey(dataPointKey.trim());\n if (!parsed) {\n return dataPointKey.trim();\n }\n return buildFormFieldKey(parsed.formId, parsed.fieldId);\n })();\n const condition: SingleCondition = {\n dataPointKey: normalizedDataPointKey,\n id: generateId(),\n operator,\n value,\n };\n if (logicalOp) {\n condition.logicalOperator = logicalOp;\n }\n return condition;\n}\n\nfunction parseQuotedValue(s: string): { value: string; rest: string } | null {\n if (!s.startsWith(\"'\")) {\n return null;\n }\n let i = 1;\n let value = '';\n while (i < s.length) {\n if (s[i] === '\\\\' && i + 1 < s.length) {\n value += s[i + 1] === \"'\" ? \"'\" : s[i + 1];\n i += 2;\n continue;\n }\n if (s[i] === \"'\") {\n return { rest: s.slice(i + 1).trim(), value: unescapeNunjucksString(value) };\n }\n value += s[i];\n i++;\n }\n return null;\n}\n\ninterface ParsePattern {\n getValue: (match: RegExpMatchArray) => string | null;\n operator: ConditionOperator;\n pathGroup: number;\n pattern: RegExp;\n}\n\nconst PARSE_PATTERNS: ParsePattern[] = [\n // value-less\n {\n getValue: () => '',\n operator: 'is_empty',\n pathGroup: 1,\n pattern: new RegExp(\n String.raw`^${RE_STR_DEFAULT}\\s*==\\s*''\\s+or\\s+\\(\\(${DATA_POINT_PATH}\\s*\\|\\s*default\\s*\\(\\s*''\\s*\\)\\)\\s*\\|\\s*length\\)\\s*==\\s*0$`,\n ),\n },\n {\n getValue: () => '',\n operator: 'is_not_empty',\n pathGroup: 1,\n pattern: new RegExp(\n String.raw`^${RE_STR_DEFAULT}\\s*!=\\s*''\\s+and\\s+\\(\\(${DATA_POINT_PATH}\\s*\\|\\s*default\\s*\\(\\s*''\\s*\\)\\)\\s*\\|\\s*length\\)\\s*>\\s*0$`,\n ),\n },\n // string with value\n {\n getValue: m => parseQuotedValue(m[2].trim())?.value ?? null,\n operator: 'is_equal_to',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_STR_DEFAULT}\\s*==\\s+(.+)$`),\n },\n {\n getValue: m => parseQuotedValue(m[2].trim())?.value ?? null,\n operator: 'is_not_equal_to',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_STR_DEFAULT}\\s*!=\\s+(.+)$`),\n },\n {\n getValue: m => unescapeNunjucksString(m[1]),\n operator: 'contains',\n pathGroup: 2,\n pattern: new RegExp(String.raw`^'${QUOTED_CONTENT}'\\s+in\\s+${RE_STR_DEFAULT}$`),\n },\n {\n getValue: m => unescapeNunjucksString(m[1]),\n operator: 'does_not_contain',\n pathGroup: 2,\n pattern: new RegExp(\n String.raw`^not\\s*\\(\\s*'${QUOTED_CONTENT}'\\s+in\\s+${RE_STR_DEFAULT}\\s*\\)\\s*$`,\n ),\n },\n {\n getValue: m => parseQuotedValue(m[2].trim())?.value ?? null,\n operator: 'starts_with',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_STR_DEFAULT}\\s*\\|\\s*startswith\\s*\\(\\s*(.+)\\s*\\)\\s*$`),\n },\n {\n getValue: m => parseQuotedValue(m[2].trim())?.value ?? null,\n operator: 'ends_with',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_STR_DEFAULT}\\s*\\|\\s*endswith\\s*\\(\\s*(.+)\\s*\\)\\s*$`),\n },\n // number operators (>= and <= before > and < to avoid partial match)\n {\n getValue: m => m[2].trim(),\n operator: 'num_gte',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*>=\\s*(.+)$`),\n },\n {\n getValue: m => m[2].trim(),\n operator: 'num_lte',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*<=\\s*(.+)$`),\n },\n {\n getValue: m => m[2].trim(),\n operator: 'num_eq',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*==\\s*(.+)$`),\n },\n {\n getValue: m => m[2].trim(),\n operator: 'num_neq',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*!=\\s*(.+)$`),\n },\n {\n getValue: m => m[2].trim(),\n operator: 'num_gt',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*>\\s*(.+)$`),\n },\n {\n getValue: m => m[2].trim(),\n operator: 'num_lt',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*<\\s*(.+)$`),\n },\n];\n\nfunction parseSingleConditionExpression(\n expr: string,\n logicalOp?: LogicalOperator,\n): SingleCondition | null {\n const trimmed = expr.trim();\n for (const { getValue, operator, pathGroup, pattern } of PARSE_PATTERNS) {\n const match = new RegExp(pattern).exec(trimmed);\n if (!match) {\n continue;\n }\n const value = getValue(match);\n if (value === null) {\n continue;\n }\n return toSingleCondition(operator, match[pathGroup], value, logicalOp);\n }\n return null;\n}\n\n/**\n * Parse a group expression into conditions with per-condition logical operators.\n */\nfunction parseGroupExpression(groupExpr: string): SingleCondition[] | null {\n const { conditionExprs, operators } = tokenizeGroupExpression(groupExpr);\n const conditions: SingleCondition[] = [];\n\n for (let i = 0; i < conditionExprs.length; i++) {\n const cs = conditionExprs[i];\n if (!cs) {\n continue;\n }\n const unwrapped = stripOuterParens(cs);\n const logicalOp = i > 0 ? operators[i - 1] : undefined;\n const single = parseSingleConditionExpression(unwrapped, logicalOp);\n if (single) {\n conditions.push(single);\n }\n }\n\n return conditions.length > 0 ? conditions : null;\n}\n\n/**\n * Parse a saved Unlayer display condition back into modal state for prefilling.\n * Returns null if the condition is missing or cannot be parsed.\n */\nexport function parseUnlayerDisplayCondition(\n condition: UnlayerDisplayCondition | null | undefined,\n): DisplayConditionState | null {\n if (!condition?.before) {\n return null;\n }\n const ifMatch = new RegExp(/\\{%\\s*if\\s+(.+)\\s*%\\}/s).exec(condition.before);\n if (!ifMatch) {\n return null;\n }\n let expr = ifMatch[1].trim();\n\n let behavior: DisplayBehavior = 'show';\n if (expr.startsWith('not (') && expr.endsWith(')')) {\n behavior = 'hide';\n expr = expr.slice(5, -1).trim();\n }\n\n const { conditionExprs: ruleStrings, operators: groupOperators } =\n tokenizeGroupExpression(expr);\n const groups: ConditionGroup[] = [];\n\n for (let i = 0; i < ruleStrings.length; i++) {\n const rs = ruleStrings[i];\n if (!rs) {\n continue;\n }\n const unwrapped = stripOuterParens(rs);\n const conditions = parseGroupExpression(unwrapped);\n if (conditions) {\n const group: ConditionGroup = {\n conditions,\n id: generateId(),\n };\n if (i > 0) {\n group.logicalOperator = groupOperators[i - 1] ?? 'and';\n }\n groups.push(group);\n }\n }\n\n if (groups.length === 0) {\n return null;\n }\n\n return { behavior, groups };\n}\n"],"names":["buildFormFieldKey","parseFormFieldKey","toNunjucksFieldReference","generateId","CONDITION_OPERATORS","VALUE_LESS_OPERATORS","OPERATOR_LABEL_MAP","Map","map","op","value","label","escapeNunjucksString","s","replace","nunjucksValueLiteral","isEscapedAt","index","slashCount","i","isValueLessOperator","operator","includes","buildSingleConditionExpression","dataPointKey","path","defaulted","numDefaulted","normalizedValue","trim","literal","numLiteral","test","inner","buildGroupExpression","group","valid","conditions","filter","c","length","result","joiner","logicalOperator","buildFullConditionExpression","state","validGroups","groups","expression","item","combined","behavior","operatorLabel","get","generateTypeAndLabel","parts","push","summary","slice","join","type","buildUnlayerDisplayCondition","expr","before","after","description","undefined","stripOuterParens","t","startsWith","at","depth","tokenizeGroupExpression","conditionExprs","operators","inSingleQuote","start","Math","max","unescapeNunjucksString","replaceAll","String","raw","SIMPLE_DATA_POINT_PATH","FORM_RUNTIME_DATA_POINT_PATH","DATA_POINT_PATH","RE_STR_DEFAULT","RE_NUM_DEFAULT","QUOTED_CONTENT","toSingleCondition","logicalOp","normalizedDataPointKey","parsed","formId","fieldId","condition","id","parseQuotedValue","rest","PARSE_PATTERNS","getValue","pathGroup","pattern","RegExp","m","parseSingleConditionExpression","trimmed","match","exec","parseGroupExpression","groupExpr","cs","unwrapped","single","parseUnlayerDisplayCondition","ifMatch","endsWith","ruleStrings","groupOperators","rs"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,iBAAiB,EAAEC,wBAAwB,QAAQ,kBAAkB;AACjG,SAASC,UAAU,QAAQ,cAAc;AACzC,SACIC,mBAAmB,EAQnBC,oBAAoB,QACjB,UAAU;AAEjB,MAAMC,qBAAqB,IAAIC,IAC3BH,oBAAoBI,GAAG,CAACC,CAAAA,KAAM;QAACA,GAAGC,KAAK;QAAED,GAAGE,KAAK;KAAC;AAGtD,SAASC,qBAAqBC,CAAS;IACnC,OAAOA,EAAEC,OAAO,CAAC,OAAO,QAAQA,OAAO,CAAC,MAAM;AAClD;AAEA,SAASC,qBAAqBL,KAAa;IACvC,OAAO,CAAC,CAAC,EAAEE,qBAAqBF,OAAO,CAAC,CAAC;AAC7C;AAEA,SAASM,YAAYH,CAAS,EAAEI,KAAa;IACzC,IAAIC,aAAa;IACjB,IAAK,IAAIC,IAAIF,QAAQ,GAAGE,KAAK,KAAKN,CAAC,CAACM,EAAE,KAAK,MAAMA,IAAK;QAClDD;IACJ;IACA,OAAOA,aAAa,MAAM;AAC9B;AAEA,SAASE,oBAAoBC,QAAgB;IACzC,OAAOhB,qBAAqBiB,QAAQ,CAACD;AACzC;AAEA;;;CAGC,GACD,SAASE,+BACLC,YAAoB,EACpBH,QAAgB,EAChBX,KAAa;IAEb,MAAMe,OAAOvB,yBAAyBsB;IACtC,MAAME,YAAY,CAAC,CAAC,EAAED,KAAK,eAAe,CAAC;IAC3C,MAAME,eAAe,CAAC,CAAC,EAAEF,KAAK,cAAc,CAAC;IAC7C,MAAMG,kBAAkBlB,MAAMmB,IAAI;IAClC,MAAMC,UAAUF,kBAAkBb,qBAAqBa,mBAAmB;IAC1E,MAAMG,aACF,0BAA0BC,IAAI,CAACJ,oBAAoBA,oBAAoB,MACjEA,kBACA;IACV,IAAIK;IAEJ,OAAQZ;QACJ,KAAK;YACDY,QAAQ,GAAGP,UAAU,IAAI,EAAEI,SAAS;YACpC;QACJ,KAAK;YACDG,QAAQ,GAAGP,UAAU,IAAI,EAAEI,SAAS;YACpC;QACJ,KAAK;YACDG,QAAQ,GAAGH,QAAQ,IAAI,EAAEJ,WAAW;YACpC;QACJ,KAAK;YACDO,QAAQ,CAAC,KAAK,EAAEH,QAAQ,IAAI,EAAEJ,UAAU,CAAC,CAAC;YAC1C;QACJ,KAAK;YACDO,QAAQ,CAAC,CAAC,EAAEP,UAAU,cAAc,EAAEI,QAAQ,EAAE,CAAC;YACjD;QACJ,KAAK;YACDG,QAAQ,CAAC,CAAC,EAAEP,UAAU,YAAY,EAAEI,QAAQ,EAAE,CAAC;YAC/C;QACJ,KAAK;YACDG,QAAQ,GAAGP,UAAU,WAAW,EAAEA,UAAU,eAAe,CAAC;YAC5D;QACJ,KAAK;YACDO,QAAQ,GAAGP,UAAU,YAAY,EAAEA,UAAU,cAAc,CAAC;YAC5D;QACJ,KAAK;YACDO,QAAQ,GAAGN,aAAa,IAAI,EAAEI,YAAY;YAC1C;QACJ,KAAK;YACDE,QAAQ,GAAGN,aAAa,IAAI,EAAEI,YAAY;YAC1C;QACJ,KAAK;YACDE,QAAQ,GAAGN,aAAa,GAAG,EAAEI,YAAY;YACzC;QACJ,KAAK;YACDE,QAAQ,GAAGN,aAAa,GAAG,EAAEI,YAAY;YACzC;QACJ,KAAK;YACDE,QAAQ,GAAGN,aAAa,IAAI,EAAEI,YAAY;YAC1C;QACJ,KAAK;YACDE,QAAQ,GAAGN,aAAa,IAAI,EAAEI,YAAY;YAC1C;QACJ;YACIE,QAAQ,GAAGP,UAAU,IAAI,EAAEI,SAAS;IAC5C;IACA,OAAO,CAAC,CAAC,EAAEG,MAAM,CAAC,CAAC;AACvB;AAEA;;;CAGC,GACD,SAASC,qBAAqBC,KAAqB;IAC/C,MAAMC,QAAQD,MAAME,UAAU,CAACC,MAAM,CACjCC,CAAAA,IAAKA,EAAEf,YAAY,IAAKJ,CAAAA,oBAAoBmB,EAAElB,QAAQ,KAAKkB,EAAE7B,KAAK,CAACmB,IAAI,OAAO,EAAC;IAEnF,IAAIO,MAAMI,MAAM,KAAK,GAAG;QACpB,OAAO;IACX;IACA,IAAIC,SAASlB,+BACTa,KAAK,CAAC,EAAE,CAACZ,YAAY,EACrBY,KAAK,CAAC,EAAE,CAACf,QAAQ,EACjBe,KAAK,CAAC,EAAE,CAAC1B,KAAK;IAElB,IAAK,IAAIS,IAAI,GAAGA,IAAIiB,MAAMI,MAAM,EAAErB,IAAK;QACnC,MAAMuB,SAASN,KAAK,CAACjB,EAAE,CAACwB,eAAe,KAAK,OAAO,SAAS;QAC5DF,UACIC,SACAnB,+BACIa,KAAK,CAACjB,EAAE,CAACK,YAAY,EACrBY,KAAK,CAACjB,EAAE,CAACE,QAAQ,EACjBe,KAAK,CAACjB,EAAE,CAACT,KAAK;IAE1B;IACA,iEAAiE;IACjE,OAAO0B,MAAMI,MAAM,GAAG,IAAI,CAAC,CAAC,EAAEC,OAAO,CAAC,CAAC,GAAGA;AAC9C;AAEA;;;;CAIC,GACD,SAASG,6BAA6BC,KAA4B;IAC9D,MAAMC,cAAcD,MAAME,MAAM,CAC3BvC,GAAG,CAAC2B,CAAAA,QAAU,CAAA;YAAEa,YAAYd,qBAAqBC;YAAQA;QAAM,CAAA,GAC/DG,MAAM,CAACW,CAAAA,OAAQ,CAAC,CAACA,KAAKD,UAAU;IACrC,IAAIF,YAAYN,MAAM,KAAK,GAAG;QAC1B,OAAO;IACX;IACA,IAAIU,WAAWJ,WAAW,CAAC,EAAE,CAACE,UAAU;IACxC,IAAK,IAAI7B,IAAI,GAAGA,IAAI2B,YAAYN,MAAM,EAAErB,IAAK;QACzC,MAAMuB,SAASI,WAAW,CAAC3B,EAAE,CAACgB,KAAK,CAACQ,eAAe,KAAK,OAAO,SAAS;QACxEO,YAAY,GAAGR,SAASI,WAAW,CAAC3B,EAAE,CAAC6B,UAAU,EAAE;IACvD;IACA,IAAIH,MAAMM,QAAQ,KAAK,QAAQ;QAC3B,OAAO,CAAC,KAAK,EAAED,SAAS,CAAC,CAAC;IAC9B;IACA,OAAOA;AACX;AAEA,SAASE,cAAc/B,QAAgB;QAC5Bf;IAAP,OAAOA,CAAAA,0BAAAA,mBAAmB+C,GAAG,CAAChC,uBAAvBf,qCAAAA,0BAAoCe;AAC/C;AAEA,SAASiC,qBAAqBT,KAA4B;IACtD,MAAMU,QAAkB,EAAE;IAC1B,KAAK,MAAMpB,SAASU,MAAME,MAAM,CAAE;QAC9B,KAAK,MAAMR,KAAKJ,MAAME,UAAU,CAAE;YAC9B,IAAI,CAACE,EAAEf,YAAY,EAAE;gBACjB;YACJ;YACA,IAAIJ,oBAAoBmB,EAAElB,QAAQ,GAAG;gBACjCkC,MAAMC,IAAI,CAAC,GAAGjB,EAAEf,YAAY,CAAC,CAAC,EAAE4B,cAAcb,EAAElB,QAAQ,GAAG;YAC/D,OAAO,IAAIkB,EAAE7B,KAAK,CAACmB,IAAI,IAAI;gBACvB0B,MAAMC,IAAI,CAAC,GAAGjB,EAAEf,YAAY,CAAC,CAAC,EAAE4B,cAAcb,EAAElB,QAAQ,EAAE,CAAC,EAAEkB,EAAE7B,KAAK,CAACmB,IAAI,IAAI;YACjF;QACJ;IACJ;IACA,MAAM4B,UAAUF,MAAMG,KAAK,CAAC,GAAG,GAAGC,IAAI,CAAC,QAASJ,CAAAA,MAAMf,MAAM,GAAG,IAAI,MAAM,EAAC;IAC1E,MAAMoB,OAAOf,MAAMM,QAAQ,KAAK,SAAS,iBAAiB;IAC1D,MAAMxC,QAAQ8C,WAAYZ,CAAAA,MAAMM,QAAQ,KAAK,SAAS,cAAc,WAAU;IAC9E,OAAO;QAAES;QAAMjD;IAAM;AACzB;AAEA,OAAO,SAASkD,6BACZhB,KAA4B;IAE5B,MAAMiB,OAAOlB,6BAA6BC;IAC1C,IAAI,CAACiB,MAAM;QACP,OAAO;IACX;IACA,MAAMC,SAAS,CAAC,MAAM,EAAED,KAAK,GAAG,CAAC;IACjC,MAAME,QAAQ;IACd,MAAM,EAAErD,KAAK,EAAEiD,IAAI,EAAE,GAAGN,qBAAqBT;IAC7C,MAAMoB,cAAcpB,MAAME,MAAM,CAACP,MAAM,GAAG,IAAI,GAAGK,MAAME,MAAM,CAACP,MAAM,CAAC,MAAM,CAAC,GAAG0B;IAC/E,OAAO;QAAEF;QAAOD;QAAQE;QAAatD;QAAOiD;IAAK;AACrD;AAEA;;;;CAIC,GAED,SAASO,iBAAiBtD,CAAS;IAC/B,MAAMuD,IAAIvD,EAAEgB,IAAI;IAChB,IAAIuC,EAAE5B,MAAM,GAAG,KAAK,CAAC4B,EAAEC,UAAU,CAAC,QAAQD,EAAEE,EAAE,CAAC,CAAC,OAAO,KAAK;QACxD,OAAOF;IACX;IACA,IAAIG,QAAQ;IACZ,IAAK,IAAIpD,IAAI,GAAGA,IAAIiD,EAAE5B,MAAM,GAAG,GAAGrB,IAAK;QACnC,IAAIiD,CAAC,CAACjD,EAAE,KAAK,KAAK;YACdoD;QACJ,OAAO,IAAIH,CAAC,CAACjD,EAAE,KAAK,KAAK;YACrBoD;YACA,IAAIA,UAAU,GAAG;gBACb,OAAOH;YACX;QACJ;IACJ;IACA,OAAOG,UAAU,IAAIH,EAAEV,KAAK,CAAC,GAAG,CAAC,GAAG7B,IAAI,KAAKuC;AACjD;AAEA;;;;;;CAMC,GACD,SAASI,wBAAwBV,IAAY;IAIzC,MAAMW,iBAA2B,EAAE;IACnC,MAAMC,YAA+B,EAAE;IACvC,IAAIH,QAAQ;IACZ,IAAII,gBAAgB;IACpB,IAAIC,QAAQ;IAEZ,IAAK,IAAIzD,IAAI,GAAGA,IAAI2C,KAAKtB,MAAM,EAAErB,IAAK;QAClC,MAAMoB,IAAIuB,IAAI,CAAC3C,EAAE;QACjB,IAAIoB,MAAM,OAAO,CAACvB,YAAY8C,MAAM3C,IAAI;YACpCwD,gBAAgB,CAACA;QACrB,OAAO,IAAI,CAACA,iBAAiBpC,MAAM,KAAK;YACpCgC;QACJ,OAAO,IAAI,CAACI,iBAAiBpC,MAAM,KAAK;YACpCgC,QAAQM,KAAKC,GAAG,CAAC,GAAGP,QAAQ;QAChC,OAAO,IAAI,CAACI,iBAAiBJ,UAAU,GAAG;YACtC,+CAA+C;YAC/C,IAAIT,KAAKJ,KAAK,CAACvC,GAAGA,IAAI,OAAO,SAAS;gBAClCsD,eAAejB,IAAI,CAACM,KAAKJ,KAAK,CAACkB,OAAOzD,GAAGU,IAAI;gBAC7C6C,UAAUlB,IAAI,CAAC;gBACfoB,QAAQzD,IAAI;gBACZA,KAAK;gBACL;YACJ;YACA,IAAI2C,KAAKJ,KAAK,CAACvC,GAAGA,IAAI,OAAO,QAAQ;gBACjCsD,eAAejB,IAAI,CAACM,KAAKJ,KAAK,CAACkB,OAAOzD,GAAGU,IAAI;gBAC7C6C,UAAUlB,IAAI,CAAC;gBACfoB,QAAQzD,IAAI;gBACZA,KAAK;gBACL;YACJ;QACJ;IACJ;IACAsD,eAAejB,IAAI,CAACM,KAAKJ,KAAK,CAACkB,OAAO/C,IAAI;IAC1C,OAAO;QAAE4C;QAAgBC;IAAU;AACvC;AAEA,SAASK,uBAAuBlE,CAAS;IACrC,OAAOA,EAAEmE,UAAU,CAAC,QAAQ,MAAMA,UAAU,CAACC,OAAOC,GAAG,CAAC,EAAE,CAAC,EAAE;AACjE;AAEA,MAAMC,yBAAyBF,OAAOC,GAAG,CAAC,MAAM,CAAC;AACjD,MAAME,+BAA+BH,OAAOC,GAAG,CAAC,8CAA8C,CAAC;AAC/F,MAAMG,kBAAkBJ,OAAOC,GAAG,CAAC,CAAC,EAAEC,uBAAuB,CAAC,EAAEC,6BAA6B,CAAC,CAAC;AAC/F,MAAME,iBAAiBL,OAAOC,GAAG,CAAC,EAAE,EAAEG,gBAAgB,gCAAgC,CAAC;AACvF,MAAME,iBAAiBN,OAAOC,GAAG,CAAC,EAAE,EAAEG,gBAAgB,+BAA+B,CAAC;AACtF,MAAMG,iBAAiBP,OAAOC,GAAG,CAAC,iBAAiB,CAAC;AAEpD,SAASO,kBACLpE,QAA2B,EAC3BG,YAAoB,EACpBd,KAAa,EACbgF,SAA2B;IAE3B,MAAMC,yBAAyB,AAAC,CAAA;QAC5B,MAAMC,SAAS3F,kBAAkBuB,aAAaK,IAAI;QAClD,IAAI,CAAC+D,QAAQ;YACT,OAAOpE,aAAaK,IAAI;QAC5B;QACA,OAAO7B,kBAAkB4F,OAAOC,MAAM,EAAED,OAAOE,OAAO;IAC1D,CAAA;IACA,MAAMC,YAA6B;QAC/BvE,cAAcmE;QACdK,IAAI7F;QACJkB;QACAX;IACJ;IACA,IAAIgF,WAAW;QACXK,UAAUpD,eAAe,GAAG+C;IAChC;IACA,OAAOK;AACX;AAEA,SAASE,iBAAiBpF,CAAS;IAC/B,IAAI,CAACA,EAAEwD,UAAU,CAAC,MAAM;QACpB,OAAO;IACX;IACA,IAAIlD,IAAI;IACR,IAAIT,QAAQ;IACZ,MAAOS,IAAIN,EAAE2B,MAAM,CAAE;QACjB,IAAI3B,CAAC,CAACM,EAAE,KAAK,QAAQA,IAAI,IAAIN,EAAE2B,MAAM,EAAE;YACnC9B,SAASG,CAAC,CAACM,IAAI,EAAE,KAAK,MAAM,MAAMN,CAAC,CAACM,IAAI,EAAE;YAC1CA,KAAK;YACL;QACJ;QACA,IAAIN,CAAC,CAACM,EAAE,KAAK,KAAK;YACd,OAAO;gBAAE+E,MAAMrF,EAAE6C,KAAK,CAACvC,IAAI,GAAGU,IAAI;gBAAInB,OAAOqE,uBAAuBrE;YAAO;QAC/E;QACAA,SAASG,CAAC,CAACM,EAAE;QACbA;IACJ;IACA,OAAO;AACX;AASA,MAAMgF,iBAAiC;IACnC,aAAa;IACb;QACIC,UAAU,IAAM;QAChB/E,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OACTtB,OAAOC,GAAG,CAAC,CAAC,EAAEI,eAAe,sBAAsB,EAAED,gBAAgB,0DAA0D,CAAC;IAExI;IACA;QACIe,UAAU,IAAM;QAChB/E,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OACTtB,OAAOC,GAAG,CAAC,CAAC,EAAEI,eAAe,uBAAuB,EAAED,gBAAgB,yDAAyD,CAAC;IAExI;IACA,oBAAoB;IACpB;QACIe,UAAUI,CAAAA;gBAAKP;gBAAAA;mBAAAA,CAAAA,2BAAAA,oBAAAA,iBAAiBO,CAAC,CAAC,EAAE,CAAC3E,IAAI,iBAA1BoE,wCAAAA,kBAA+BvF,KAAK,cAApCuF,qCAAAA,0BAAwC;;QACvD5E,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OAAOtB,OAAOC,GAAG,CAAC,CAAC,EAAEI,eAAe,aAAa,CAAC;IACnE;IACA;QACIc,UAAUI,CAAAA;gBAAKP;gBAAAA;mBAAAA,CAAAA,2BAAAA,oBAAAA,iBAAiBO,CAAC,CAAC,EAAE,CAAC3E,IAAI,iBAA1BoE,wCAAAA,kBAA+BvF,KAAK,cAApCuF,qCAAAA,0BAAwC;;QACvD5E,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OAAOtB,OAAOC,GAAG,CAAC,CAAC,EAAEI,eAAe,aAAa,CAAC;IACnE;IACA;QACIc,UAAUI,CAAAA,IAAKzB,uBAAuByB,CAAC,CAAC,EAAE;QAC1CnF,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OAAOtB,OAAOC,GAAG,CAAC,EAAE,EAAEM,eAAe,SAAS,EAAEF,eAAe,CAAC,CAAC;IAClF;IACA;QACIc,UAAUI,CAAAA,IAAKzB,uBAAuByB,CAAC,CAAC,EAAE;QAC1CnF,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OACTtB,OAAOC,GAAG,CAAC,aAAa,EAAEM,eAAe,SAAS,EAAEF,eAAe,SAAS,CAAC;IAErF;IACA;QACIc,UAAUI,CAAAA;gBAAKP;gBAAAA;mBAAAA,CAAAA,2BAAAA,oBAAAA,iBAAiBO,CAAC,CAAC,EAAE,CAAC3E,IAAI,iBAA1BoE,wCAAAA,kBAA+BvF,KAAK,cAApCuF,qCAAAA,0BAAwC;;QACvD5E,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OAAOtB,OAAOC,GAAG,CAAC,CAAC,EAAEI,eAAe,uCAAuC,CAAC;IAC7F;IACA;QACIc,UAAUI,CAAAA;gBAAKP;gBAAAA;mBAAAA,CAAAA,2BAAAA,oBAAAA,iBAAiBO,CAAC,CAAC,EAAE,CAAC3E,IAAI,iBAA1BoE,wCAAAA,kBAA+BvF,KAAK,cAApCuF,qCAAAA,0BAAwC;;QACvD5E,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OAAOtB,OAAOC,GAAG,CAAC,CAAC,EAAEI,eAAe,qCAAqC,CAAC;IAC3F;IACA,qEAAqE;IACrE;QACIc,UAAUI,CAAAA,IAAKA,CAAC,CAAC,EAAE,CAAC3E,IAAI;QACxBR,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OAAOtB,OAAOC,GAAG,CAAC,CAAC,EAAEK,eAAe,aAAa,CAAC;IACnE;IACA;QACIa,UAAUI,CAAAA,IAAKA,CAAC,CAAC,EAAE,CAAC3E,IAAI;QACxBR,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OAAOtB,OAAOC,GAAG,CAAC,CAAC,EAAEK,eAAe,aAAa,CAAC;IACnE;IACA;QACIa,UAAUI,CAAAA,IAAKA,CAAC,CAAC,EAAE,CAAC3E,IAAI;QACxBR,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OAAOtB,OAAOC,GAAG,CAAC,CAAC,EAAEK,eAAe,aAAa,CAAC;IACnE;IACA;QACIa,UAAUI,CAAAA,IAAKA,CAAC,CAAC,EAAE,CAAC3E,IAAI;QACxBR,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OAAOtB,OAAOC,GAAG,CAAC,CAAC,EAAEK,eAAe,aAAa,CAAC;IACnE;IACA;QACIa,UAAUI,CAAAA,IAAKA,CAAC,CAAC,EAAE,CAAC3E,IAAI;QACxBR,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OAAOtB,OAAOC,GAAG,CAAC,CAAC,EAAEK,eAAe,YAAY,CAAC;IAClE;IACA;QACIa,UAAUI,CAAAA,IAAKA,CAAC,CAAC,EAAE,CAAC3E,IAAI;QACxBR,UAAU;QACVgF,WAAW;QACXC,SAAS,IAAIC,OAAOtB,OAAOC,GAAG,CAAC,CAAC,EAAEK,eAAe,YAAY,CAAC;IAClE;CACH;AAED,SAASkB,+BACL3C,IAAY,EACZ4B,SAA2B;IAE3B,MAAMgB,UAAU5C,KAAKjC,IAAI;IACzB,KAAK,MAAM,EAAEuE,QAAQ,EAAE/E,QAAQ,EAAEgF,SAAS,EAAEC,OAAO,EAAE,IAAIH,eAAgB;QACrE,MAAMQ,QAAQ,IAAIJ,OAAOD,SAASM,IAAI,CAACF;QACvC,IAAI,CAACC,OAAO;YACR;QACJ;QACA,MAAMjG,QAAQ0F,SAASO;QACvB,IAAIjG,UAAU,MAAM;YAChB;QACJ;QACA,OAAO+E,kBAAkBpE,UAAUsF,KAAK,CAACN,UAAU,EAAE3F,OAAOgF;IAChE;IACA,OAAO;AACX;AAEA;;CAEC,GACD,SAASmB,qBAAqBC,SAAiB;IAC3C,MAAM,EAAErC,cAAc,EAAEC,SAAS,EAAE,GAAGF,wBAAwBsC;IAC9D,MAAMzE,aAAgC,EAAE;IAExC,IAAK,IAAIlB,IAAI,GAAGA,IAAIsD,eAAejC,MAAM,EAAErB,IAAK;QAC5C,MAAM4F,KAAKtC,cAAc,CAACtD,EAAE;QAC5B,IAAI,CAAC4F,IAAI;YACL;QACJ;QACA,MAAMC,YAAY7C,iBAAiB4C;QACnC,MAAMrB,YAAYvE,IAAI,IAAIuD,SAAS,CAACvD,IAAI,EAAE,GAAG+C;QAC7C,MAAM+C,SAASR,+BAA+BO,WAAWtB;QACzD,IAAIuB,QAAQ;YACR5E,WAAWmB,IAAI,CAACyD;QACpB;IACJ;IAEA,OAAO5E,WAAWG,MAAM,GAAG,IAAIH,aAAa;AAChD;AAEA;;;CAGC,GACD,OAAO,SAAS6E,6BACZnB,SAAqD;IAErD,IAAI,EAACA,sBAAAA,gCAAAA,UAAWhC,MAAM,GAAE;QACpB,OAAO;IACX;IACA,MAAMoD,UAAU,IAAIZ,OAAO,0BAA0BK,IAAI,CAACb,UAAUhC,MAAM;IAC1E,IAAI,CAACoD,SAAS;QACV,OAAO;IACX;IACA,IAAIrD,OAAOqD,OAAO,CAAC,EAAE,CAACtF,IAAI;IAE1B,IAAIsB,WAA4B;IAChC,IAAIW,KAAKO,UAAU,CAAC,YAAYP,KAAKsD,QAAQ,CAAC,MAAM;QAChDjE,WAAW;QACXW,OAAOA,KAAKJ,KAAK,CAAC,GAAG,CAAC,GAAG7B,IAAI;IACjC;IAEA,MAAM,EAAE4C,gBAAgB4C,WAAW,EAAE3C,WAAW4C,cAAc,EAAE,GAC5D9C,wBAAwBV;IAC5B,MAAMf,SAA2B,EAAE;IAEnC,IAAK,IAAI5B,IAAI,GAAGA,IAAIkG,YAAY7E,MAAM,EAAErB,IAAK;QACzC,MAAMoG,KAAKF,WAAW,CAAClG,EAAE;QACzB,IAAI,CAACoG,IAAI;YACL;QACJ;QACA,MAAMP,YAAY7C,iBAAiBoD;QACnC,MAAMlF,aAAawE,qBAAqBG;QACxC,IAAI3E,YAAY;YACZ,MAAMF,QAAwB;gBAC1BE;gBACA2D,IAAI7F;YACR;YACA,IAAIgB,IAAI,GAAG;oBACiBmG;gBAAxBnF,MAAMQ,eAAe,GAAG2E,CAAAA,mBAAAA,cAAc,CAACnG,IAAI,EAAE,cAArBmG,8BAAAA,mBAAyB;YACrD;YACAvE,OAAOS,IAAI,CAACrB;QAChB;IACJ;IAEA,IAAIY,OAAOP,MAAM,KAAK,GAAG;QACrB,OAAO;IACX;IAEA,OAAO;QAAEW;QAAUJ;IAAO;AAC9B"}
1
+ {"version":3,"sources":["../../src/display-conditions/nunjucks.ts"],"sourcesContent":["import { buildFormFieldKey, parseFormFieldKey, toNunjucksFieldReference } from '../shared/forms';\nimport { generateId } from './constants';\nimport {\n ConditionGroup,\n ConditionOperator,\n DisplayBehavior,\n DisplayConditionState,\n LogicalOperator,\n SingleCondition,\n UnlayerDisplayCondition,\n VALUE_LESS_OPERATORS,\n} from './types';\n\nfunction escapeNunjucksString(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\nfunction nunjucksValueLiteral(value: string): string {\n return `'${escapeNunjucksString(value)}'`;\n}\n\nfunction isEscapedAt(s: string, index: number): boolean {\n let slashCount = 0;\n for (let i = index - 1; i >= 0 && s[i] === '\\\\'; i--) {\n slashCount++;\n }\n return slashCount % 2 === 1;\n}\n\nfunction isValueLessOperator(operator: string): boolean {\n return VALUE_LESS_OPERATORS.includes(operator as ConditionOperator);\n}\n\n/**\n * Build a single condition expression in Nunjucks.\n * Wrapped in () so splitting never breaks composite expressions.\n */\nfunction buildSingleConditionExpression(\n dataPointKey: string,\n operator: string,\n value: string,\n): string {\n const path = toNunjucksFieldReference(dataPointKey);\n const defaulted = `(${path} | default(''))`;\n const numDefaulted = `(${path} | default(0))`;\n const normalizedValue = value.trim();\n const literal = normalizedValue ? nunjucksValueLiteral(normalizedValue) : \"''\";\n const numLiteral =\n /^-?(?:\\d+\\.?\\d*|\\.\\d+)$/.test(normalizedValue) && normalizedValue !== '-'\n ? normalizedValue\n : '0';\n let inner: string;\n\n switch (operator) {\n case 'is_equal_to':\n inner = `${defaulted} == ${literal}`;\n break;\n case 'is_not_equal_to':\n inner = `${defaulted} != ${literal}`;\n break;\n case 'contains':\n inner = `${literal} in ${defaulted}`;\n break;\n case 'does_not_contain':\n inner = `not (${literal} in ${defaulted})`;\n break;\n case 'starts_with':\n inner = `(${defaulted} | startswith(${literal}))`;\n break;\n case 'ends_with':\n inner = `(${defaulted} | endswith(${literal}))`;\n break;\n case 'is_empty':\n inner = `${defaulted} == '' or (${defaulted} | length) == 0`;\n break;\n case 'is_not_empty':\n inner = `${defaulted} != '' and (${defaulted} | length) > 0`;\n break;\n case 'num_eq':\n inner = `${numDefaulted} == ${numLiteral}`;\n break;\n case 'num_neq':\n inner = `${numDefaulted} != ${numLiteral}`;\n break;\n case 'num_gt':\n inner = `${numDefaulted} > ${numLiteral}`;\n break;\n case 'num_lt':\n inner = `${numDefaulted} < ${numLiteral}`;\n break;\n case 'num_gte':\n inner = `${numDefaulted} >= ${numLiteral}`;\n break;\n case 'num_lte':\n inner = `${numDefaulted} <= ${numLiteral}`;\n break;\n default:\n inner = `${defaulted} == ${literal}`;\n }\n return `(${inner})`;\n}\n\n/**\n * Build group expression. Each condition is connected by its own logical operator.\n * E.g. (cond1) and (cond2) or (cond3)\n */\nfunction buildGroupExpression(group: ConditionGroup): string {\n const valid = group.conditions.filter(\n c => c.dataPointKey && (isValueLessOperator(c.operator) || c.value.trim() !== ''),\n );\n if (valid.length === 0) {\n return '';\n }\n let result = buildSingleConditionExpression(\n valid[0].dataPointKey,\n valid[0].operator,\n valid[0].value,\n );\n for (let i = 1; i < valid.length; i++) {\n const joiner = valid[i].logicalOperator === 'or' ? ' or ' : ' and ';\n result +=\n joiner +\n buildSingleConditionExpression(\n valid[i].dataPointKey,\n valid[i].operator,\n valid[i].value,\n );\n }\n // Wrap group in parens so top-level rule AND split works cleanly\n return valid.length > 1 ? `(${result})` : result;\n}\n\n/**\n * Build full condition expression.\n * Rules (groups) are connected by each group's logical operator.\n * hide behavior wraps everything in not().\n */\nfunction buildFullConditionExpression(state: DisplayConditionState): string {\n const validGroups = state.groups\n .map(group => ({ expression: buildGroupExpression(group), group }))\n .filter(item => !!item.expression);\n if (validGroups.length === 0) {\n return '';\n }\n let combined = validGroups[0].expression;\n for (let i = 1; i < validGroups.length; i++) {\n const joiner = validGroups[i].group.logicalOperator === 'or' ? ' or ' : ' and ';\n combined += `${joiner}${validGroups[i].expression}`;\n }\n if (state.behavior === 'hide') {\n return `not (${combined})`;\n }\n return combined;\n}\n\nfunction generateConditionText(state: DisplayConditionState): {\n description: string;\n label: string;\n type: string;\n} {\n const conditionCount = state.groups.reduce(\n (count, group) =>\n count +\n group.conditions.filter(\n c => c.dataPointKey && (isValueLessOperator(c.operator) || c.value.trim() !== ''),\n ).length,\n 0,\n );\n const label =\n state.behavior === 'show' ? 'Show condition configured' : 'Hide condition configured';\n const description =\n conditionCount === 1\n ? '1 condition is currently applied'\n : `${conditionCount} conditions are currently applied`;\n return { description, label, type: '' };\n}\n\nexport function buildUnlayerDisplayCondition(\n state: DisplayConditionState,\n): UnlayerDisplayCondition | null {\n const expr = buildFullConditionExpression(state);\n if (!expr) {\n return null;\n }\n const before = `{% if ${expr} %}`;\n const after = '{% endif %}';\n const { description, label, type } = generateConditionText(state);\n return { after, before, description, label, type };\n}\n\n/*\n * ---------------------------------------------------------------------------\n * Parse helpers\n * ---------------------------------------------------------------------------\n */\n\nfunction stripOuterParens(s: string): string {\n const t = s.trim();\n if (t.length < 2 || !t.startsWith('(') || t.at(-1) !== ')') {\n return t;\n }\n let depth = 1;\n for (let i = 1; i < t.length - 1; i++) {\n if (t[i] === '(') {\n depth++;\n } else if (t[i] === ')') {\n depth--;\n if (depth === 0) {\n return t;\n }\n }\n }\n return depth === 1 ? t.slice(1, -1).trim() : t;\n}\n\n/**\n * Tokenize an expression into alternating tokens of (expr, operator).\n * Returns: [expr, 'and'|'or', expr, 'and'|'or', expr, ...]\n *\n * This scans for top-level \" and \" / \" or \" while respecting parens,\n * and records which separator was found between each pair.\n */\nfunction tokenizeGroupExpression(expr: string): {\n conditionExprs: string[];\n operators: LogicalOperator[];\n} {\n const conditionExprs: string[] = [];\n const operators: LogicalOperator[] = [];\n let depth = 0;\n let inSingleQuote = false;\n let start = 0;\n\n for (let i = 0; i < expr.length; i++) {\n const c = expr[i];\n if (c === \"'\" && !isEscapedAt(expr, i)) {\n inSingleQuote = !inSingleQuote;\n } else if (!inSingleQuote && c === '(') {\n depth++;\n } else if (!inSingleQuote && c === ')') {\n depth = Math.max(0, depth - 1);\n } else if (!inSingleQuote && depth === 0) {\n // Check for \" and \" or \" or \" at this position\n if (expr.slice(i, i + 5) === ' and ') {\n conditionExprs.push(expr.slice(start, i).trim());\n operators.push('and');\n start = i + 5;\n i += 4;\n continue;\n }\n if (expr.slice(i, i + 4) === ' or ') {\n conditionExprs.push(expr.slice(start, i).trim());\n operators.push('or');\n start = i + 4;\n i += 3;\n continue;\n }\n }\n }\n conditionExprs.push(expr.slice(start).trim());\n return { conditionExprs, operators };\n}\n\nfunction unescapeNunjucksString(s: string): string {\n return s.replaceAll('\\\\\\\\', '\\\\').replaceAll(String.raw`\\'`, \"'\");\n}\n\nconst SIMPLE_DATA_POINT_PATH = String.raw`[\\w.]+`;\nconst FORM_RUNTIME_DATA_POINT_PATH = String.raw`__submission_fields\\[\"\\d+\"\\]\\[\"[A-Za-z0-9]+\"\\]`;\nconst DATA_POINT_PATH = String.raw`(${SIMPLE_DATA_POINT_PATH}|${FORM_RUNTIME_DATA_POINT_PATH})`;\nconst RE_STR_DEFAULT = String.raw`\\(${DATA_POINT_PATH}\\s*\\|\\s*default\\s*\\(\\s*''\\s*\\)\\)`;\nconst RE_NUM_DEFAULT = String.raw`\\(${DATA_POINT_PATH}\\s*\\|\\s*default\\s*\\(\\s*0\\s*\\)\\)`;\nconst QUOTED_CONTENT = String.raw`((?:[^'\\\\]|\\\\.)*)`;\n\nfunction toSingleCondition(\n operator: ConditionOperator,\n dataPointKey: string,\n value: string,\n logicalOp?: LogicalOperator,\n): SingleCondition {\n const normalizedDataPointKey = (() => {\n const parsed = parseFormFieldKey(dataPointKey.trim());\n if (!parsed) {\n return dataPointKey.trim();\n }\n return buildFormFieldKey(parsed.formId, parsed.fieldId);\n })();\n const condition: SingleCondition = {\n dataPointKey: normalizedDataPointKey,\n id: generateId(),\n operator,\n value,\n };\n if (logicalOp) {\n condition.logicalOperator = logicalOp;\n }\n return condition;\n}\n\nfunction parseQuotedValue(s: string): { value: string; rest: string } | null {\n if (!s.startsWith(\"'\")) {\n return null;\n }\n let i = 1;\n let value = '';\n while (i < s.length) {\n if (s[i] === '\\\\' && i + 1 < s.length) {\n value += s[i + 1] === \"'\" ? \"'\" : s[i + 1];\n i += 2;\n continue;\n }\n if (s[i] === \"'\") {\n return { rest: s.slice(i + 1).trim(), value: unescapeNunjucksString(value) };\n }\n value += s[i];\n i++;\n }\n return null;\n}\n\ninterface ParsePattern {\n getValue: (match: RegExpMatchArray) => string | null;\n operator: ConditionOperator;\n pathGroup: number;\n pattern: RegExp;\n}\n\nconst PARSE_PATTERNS: ParsePattern[] = [\n // value-less\n {\n getValue: () => '',\n operator: 'is_empty',\n pathGroup: 1,\n pattern: new RegExp(\n String.raw`^${RE_STR_DEFAULT}\\s*==\\s*''\\s+or\\s+\\(\\(${DATA_POINT_PATH}\\s*\\|\\s*default\\s*\\(\\s*''\\s*\\)\\)\\s*\\|\\s*length\\)\\s*==\\s*0$`,\n ),\n },\n {\n getValue: () => '',\n operator: 'is_not_empty',\n pathGroup: 1,\n pattern: new RegExp(\n String.raw`^${RE_STR_DEFAULT}\\s*!=\\s*''\\s+and\\s+\\(\\(${DATA_POINT_PATH}\\s*\\|\\s*default\\s*\\(\\s*''\\s*\\)\\)\\s*\\|\\s*length\\)\\s*>\\s*0$`,\n ),\n },\n // string with value\n {\n getValue: m => parseQuotedValue(m[2].trim())?.value ?? null,\n operator: 'is_equal_to',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_STR_DEFAULT}\\s*==\\s+(.+)$`),\n },\n {\n getValue: m => parseQuotedValue(m[2].trim())?.value ?? null,\n operator: 'is_not_equal_to',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_STR_DEFAULT}\\s*!=\\s+(.+)$`),\n },\n {\n getValue: m => unescapeNunjucksString(m[1]),\n operator: 'contains',\n pathGroup: 2,\n pattern: new RegExp(String.raw`^'${QUOTED_CONTENT}'\\s+in\\s+${RE_STR_DEFAULT}$`),\n },\n {\n getValue: m => unescapeNunjucksString(m[1]),\n operator: 'does_not_contain',\n pathGroup: 2,\n pattern: new RegExp(\n String.raw`^not\\s*\\(\\s*'${QUOTED_CONTENT}'\\s+in\\s+${RE_STR_DEFAULT}\\s*\\)\\s*$`,\n ),\n },\n {\n getValue: m => parseQuotedValue(m[2].trim())?.value ?? null,\n operator: 'starts_with',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_STR_DEFAULT}\\s*\\|\\s*startswith\\s*\\(\\s*(.+)\\s*\\)\\s*$`),\n },\n {\n getValue: m => parseQuotedValue(m[2].trim())?.value ?? null,\n operator: 'ends_with',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_STR_DEFAULT}\\s*\\|\\s*endswith\\s*\\(\\s*(.+)\\s*\\)\\s*$`),\n },\n // number operators (>= and <= before > and < to avoid partial match)\n {\n getValue: m => m[2].trim(),\n operator: 'num_gte',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*>=\\s*(.+)$`),\n },\n {\n getValue: m => m[2].trim(),\n operator: 'num_lte',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*<=\\s*(.+)$`),\n },\n {\n getValue: m => m[2].trim(),\n operator: 'num_eq',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*==\\s*(.+)$`),\n },\n {\n getValue: m => m[2].trim(),\n operator: 'num_neq',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*!=\\s*(.+)$`),\n },\n {\n getValue: m => m[2].trim(),\n operator: 'num_gt',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*>\\s*(.+)$`),\n },\n {\n getValue: m => m[2].trim(),\n operator: 'num_lt',\n pathGroup: 1,\n pattern: new RegExp(String.raw`^${RE_NUM_DEFAULT}\\s*<\\s*(.+)$`),\n },\n];\n\nfunction parseSingleConditionExpression(\n expr: string,\n logicalOp?: LogicalOperator,\n): SingleCondition | null {\n const trimmed = expr.trim();\n for (const { getValue, operator, pathGroup, pattern } of PARSE_PATTERNS) {\n const match = new RegExp(pattern).exec(trimmed);\n if (!match) {\n continue;\n }\n const value = getValue(match);\n if (value === null) {\n continue;\n }\n return toSingleCondition(operator, match[pathGroup], value, logicalOp);\n }\n return null;\n}\n\n/**\n * Parse a group expression into conditions with per-condition logical operators.\n */\nfunction parseGroupExpression(groupExpr: string): SingleCondition[] | null {\n const { conditionExprs, operators } = tokenizeGroupExpression(groupExpr);\n const conditions: SingleCondition[] = [];\n\n for (let i = 0; i < conditionExprs.length; i++) {\n const cs = conditionExprs[i];\n if (!cs) {\n continue;\n }\n const unwrapped = stripOuterParens(cs);\n const logicalOp = i > 0 ? operators[i - 1] : undefined;\n const single = parseSingleConditionExpression(unwrapped, logicalOp);\n if (single) {\n conditions.push(single);\n }\n }\n\n return conditions.length > 0 ? conditions : null;\n}\n\n/**\n * Parse a saved Unlayer display condition back into modal state for prefilling.\n * Returns null if the condition is missing or cannot be parsed.\n */\nexport function parseUnlayerDisplayCondition(\n condition: UnlayerDisplayCondition | null | undefined,\n): DisplayConditionState | null {\n if (!condition?.before) {\n return null;\n }\n const ifMatch = new RegExp(/\\{%\\s*if\\s+(.+)\\s*%\\}/s).exec(condition.before);\n if (!ifMatch) {\n return null;\n }\n let expr = ifMatch[1].trim();\n\n let behavior: DisplayBehavior = 'show';\n if (expr.startsWith('not (') && expr.endsWith(')')) {\n behavior = 'hide';\n expr = expr.slice(5, -1).trim();\n }\n\n const { conditionExprs: ruleStrings, operators: groupOperators } =\n tokenizeGroupExpression(expr);\n const groups: ConditionGroup[] = [];\n\n for (let i = 0; i < ruleStrings.length; i++) {\n const rs = ruleStrings[i];\n if (!rs) {\n continue;\n }\n const unwrapped = stripOuterParens(rs);\n const conditions = parseGroupExpression(unwrapped);\n if (conditions) {\n const group: ConditionGroup = {\n conditions,\n id: generateId(),\n };\n if (i > 0) {\n group.logicalOperator = groupOperators[i - 1] ?? 'and';\n }\n groups.push(group);\n }\n }\n\n if (groups.length === 0) {\n return null;\n }\n\n return { behavior, groups };\n}\n"],"names":["buildFormFieldKey","parseFormFieldKey","toNunjucksFieldReference","generateId","VALUE_LESS_OPERATORS","escapeNunjucksString","s","replace","nunjucksValueLiteral","value","isEscapedAt","index","slashCount","i","isValueLessOperator","operator","includes","buildSingleConditionExpression","dataPointKey","path","defaulted","numDefaulted","normalizedValue","trim","literal","numLiteral","test","inner","buildGroupExpression","group","valid","conditions","filter","c","length","result","joiner","logicalOperator","buildFullConditionExpression","state","validGroups","groups","map","expression","item","combined","behavior","generateConditionText","conditionCount","reduce","count","label","description","type","buildUnlayerDisplayCondition","expr","before","after","stripOuterParens","t","startsWith","at","depth","slice","tokenizeGroupExpression","conditionExprs","operators","inSingleQuote","start","Math","max","push","unescapeNunjucksString","replaceAll","String","raw","SIMPLE_DATA_POINT_PATH","FORM_RUNTIME_DATA_POINT_PATH","DATA_POINT_PATH","RE_STR_DEFAULT","RE_NUM_DEFAULT","QUOTED_CONTENT","toSingleCondition","logicalOp","normalizedDataPointKey","parsed","formId","fieldId","condition","id","parseQuotedValue","rest","PARSE_PATTERNS","getValue","pathGroup","pattern","RegExp","m","parseSingleConditionExpression","trimmed","match","exec","parseGroupExpression","groupExpr","cs","unwrapped","undefined","single","parseUnlayerDisplayCondition","ifMatch","endsWith","ruleStrings","groupOperators","rs"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAA4C,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AASzD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIhG,MAAM,WAAW,uBAAuB;IACpC,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAmBD,qBAAa,YAAY;IAkBT,QAAQ,CAAC,KAAK,EAAE,wBAAwB;IAjBpD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,WAAW,CAAC,CAAoC;IACxD,OAAO,CAAC,UAAU,CAAC,CAA0C;IAC7D,OAAO,CAAC,gBAAgB,CAAC,CAAwC;IACjE,OAAO,CAAC,SAAS,CAAC,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAC,CAA2C;IAC7D,OAAO,CAAC,SAAS,CAAC,CAAgD;IAClE,OAAO,CAAC,cAAc,CAAC,CAA2B;IAClD,OAAO,CAAC,iBAAiB,CAAC,CAAkC;IAC5D,OAAO,CAAC,mBAAmB,CAAC,CAAgC;gBAEvC,KAAK,EAAE,wBAAwB;IA2BpD,IAAI,GAAU,WAAW,cAAc,mBAiBrC;IAEF,OAAO,aAUL;IAEF,OAAO,GAAI,MAAM,iBAAiB,UAGhC;IAEF,SAAS,GAAI,SAAS,mBAAmB,UAUvC;IAEF,WAAW,GAAI,WAAW,YAAY,CAAC,YAAY,CAAC,UAElD;IAEF,iBAAiB,GAAI,iBAAiB,YAAY,CAAC,kBAAkB,CAAC,UAEpE;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,YAAY,GAAI,YAAY,YAAY,CAAC,aAAa,CAAC,UAErD;IAEF,eAAe,GAAI,eAAe,YAAY,CAAC,gBAAgB,CAAC,UAE9D;IAEF,kBAAkB,GAAI,kBAAkB,YAAY,CAAC,mBAAmB,CAAC,UAEvE;IAEF,oBAAoB,GAAI,oBAAoB,YAAY,CAAC,qBAAqB,CAAC,UAE7E;IAEF,YAAY,GAAI,OAAO,QAAQ,EAAE,UAE/B;IAEF,cAAc,GAAI,QAAQ,MAAM,EAAE,QAAQ,aAAa,EAAE,UAEvD;IAEF,mBAAmB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAEnD;IAEF,OAAO,CAAC,cAAc,CAQpB;IAEF,OAAO,CAAC,eAAe,CAmCrB;IAEF,OAAO,CAAC,aAAa,CAuEnB;IAEF,OAAO,CAAC,WAAW,CAUjB;IAEF,OAAO,CAAC,WAAW,CAqCjB;IAEF,OAAO,CAAC,aAAa,CA+CnB;CACL"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAA4C,MAAM,gBAAgB,CAAC;AAE7F,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AASzD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAoFhG,MAAM,WAAW,uBAAuB;IACpC,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAmBD,qBAAa,YAAY;IAkBT,QAAQ,CAAC,KAAK,EAAE,wBAAwB;IAjBpD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,WAAW,CAAC,CAAoC;IACxD,OAAO,CAAC,UAAU,CAAC,CAA0C;IAC7D,OAAO,CAAC,gBAAgB,CAAC,CAAwC;IACjE,OAAO,CAAC,SAAS,CAAC,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAC,CAA2C;IAC7D,OAAO,CAAC,SAAS,CAAC,CAAgD;IAClE,OAAO,CAAC,cAAc,CAAC,CAA2B;IAClD,OAAO,CAAC,iBAAiB,CAAC,CAAkC;IAC5D,OAAO,CAAC,mBAAmB,CAAC,CAAgC;gBAEvC,KAAK,EAAE,wBAAwB;IA2BpD,IAAI,GAAU,WAAW,cAAc,mBAiBrC;IAEF,OAAO,aAUL;IAEF,OAAO,GAAI,MAAM,iBAAiB,UAGhC;IAEF,SAAS,GAAI,SAAS,mBAAmB,UAUvC;IAEF,WAAW,GAAI,WAAW,YAAY,CAAC,YAAY,CAAC,UAElD;IAEF,iBAAiB,GAAI,iBAAiB,YAAY,CAAC,kBAAkB,CAAC,UAEpE;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,YAAY,GAAI,YAAY,YAAY,CAAC,aAAa,CAAC,UAErD;IAEF,eAAe,GAAI,eAAe,YAAY,CAAC,gBAAgB,CAAC,UAE9D;IAEF,kBAAkB,GAAI,kBAAkB,YAAY,CAAC,mBAAmB,CAAC,UAEvE;IAEF,oBAAoB,GAAI,oBAAoB,YAAY,CAAC,qBAAqB,CAAC,UAE7E;IAEF,YAAY,GAAI,OAAO,QAAQ,EAAE,UAE/B;IAEF,cAAc,GAAI,QAAQ,MAAM,EAAE,QAAQ,aAAa,EAAE,UAEvD;IAEF,mBAAmB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAEnD;IAEF,OAAO,CAAC,cAAc,CAQpB;IAEF,OAAO,CAAC,eAAe,CAmCrB;IAEF,OAAO,CAAC,aAAa,CAuEnB;IAEF,OAAO,CAAC,WAAW,CAUjB;IAEF,OAAO,CAAC,WAAW,CAqCjB;IAEF,OAAO,CAAC,aAAa,CA+CnB;CACL"}
package/dist/store.js CHANGED
@@ -13,10 +13,67 @@ function _define_property(obj, key, value) {
13
13
  }
14
14
  import { loadScript } from './loadScript';
15
15
  import { defaultImageValidation } from './shared/configs';
16
+ import { unlayerSupportedFonts } from './shared/fonts';
16
17
  import { unlayerToolsParseTwinKey } from './shared/tools';
17
18
  import { unlayerToolsIterate } from './tools';
18
19
  import { createUnlayerEditor, DesignUpdatedEventType } from './unlayer';
19
20
  const defaultScriptUrl = 'https://editor.unlayer.com/embed.js?2';
21
+ const normalizeFontToken = (font)=>font.replace(/["']/g, '').split(',')[0].trim().toLowerCase();
22
+ const getDesignFontTokens = (value, out)=>{
23
+ if (!value || typeof value !== 'object') {
24
+ return;
25
+ }
26
+ if (Array.isArray(value)) {
27
+ for (const item of value){
28
+ getDesignFontTokens(item, out);
29
+ }
30
+ return;
31
+ }
32
+ for (const [key, fieldValue] of Object.entries(value)){
33
+ if (key === 'fontFamily') {
34
+ if (typeof fieldValue === 'string') {
35
+ out.add(normalizeFontToken(fieldValue));
36
+ } else if (fieldValue && typeof fieldValue === 'object') {
37
+ const fontFamilyValue = fieldValue;
38
+ if (typeof fontFamilyValue.label === 'string') {
39
+ out.add(normalizeFontToken(fontFamilyValue.label));
40
+ }
41
+ if (typeof fontFamilyValue.value === 'string') {
42
+ out.add(normalizeFontToken(fontFamilyValue.value));
43
+ }
44
+ }
45
+ }
46
+ if (fieldValue && typeof fieldValue === 'object') {
47
+ getDesignFontTokens(fieldValue, out);
48
+ }
49
+ }
50
+ };
51
+ const ensureChunksFonts = (data)=>{
52
+ var _data;
53
+ if (!data || typeof data !== 'object') {
54
+ return data;
55
+ }
56
+ var _chunks;
57
+ (_chunks = (_data = data).chunks) !== null && _chunks !== void 0 ? _chunks : _data.chunks = {};
58
+ const fontUrls = new Set(Array.isArray(data.chunks.fonts) ? data.chunks.fonts.filter((url)=>typeof url === 'string') : []);
59
+ const usedFontTokens = new Set();
60
+ getDesignFontTokens(data.design, usedFontTokens);
61
+ const html = typeof data.html === 'string' ? data.html.toLowerCase() : '';
62
+ for (const font of unlayerSupportedFonts){
63
+ if (!font.url) {
64
+ continue;
65
+ }
66
+ const labelToken = normalizeFontToken(font.label);
67
+ const valueToken = normalizeFontToken(font.value);
68
+ const isUsedInDesign = usedFontTokens.has(labelToken) || usedFontTokens.has(valueToken);
69
+ const isUsedInHtml = !!html && (html.includes(labelToken) || html.includes(valueToken));
70
+ if (isUsedInDesign || isUsedInHtml) {
71
+ fontUrls.add(font.url);
72
+ }
73
+ }
74
+ data.chunks.fonts = Array.from(fontUrls);
75
+ return data;
76
+ };
20
77
  // We are using exclusive lists here, because we can't be sure that we know all unlayer event types
21
78
  const eventsNotChangingToolsList = [
22
79
  DesignUpdatedEventType.ContentMoved,
@@ -384,7 +441,7 @@ export class UnlayerStore {
384
441
  exportHtml: (cb)=>{
385
442
  var _this_editor;
386
443
  (_this_editor = this.editor) === null || _this_editor === void 0 ? void 0 : _this_editor.exportHtml((data)=>{
387
- cb(data);
444
+ cb(ensureChunksFonts(data));
388
445
  });
389
446
  },
390
447
  sendFormList: (forms)=>{
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { loadScript } from './loadScript';\nimport { defaultImageValidation } from './shared/configs';\nimport { UnlayerEditorTwin, UnlayerEventConfig, UnlayerEventRegister } from './shared/const';\nimport { FormFieldInfo, FormInfo } from './shared/forms';\nimport { unlayerToolsParseTwinKey } from './shared/tools';\nimport { unlayerToolsIterate } from './tools';\nimport {\n createUnlayerEditor,\n DesignUpdatedEventType,\n EventDesignUpdated,\n Unlayer,\n} from './unlayer';\nimport { CreateUnlayerEditorProps, UnlayerDesignFormat, UnlayerRef } from './unlayer-interface';\n\nconst defaultScriptUrl = 'https://editor.unlayer.com/embed.js?2';\n\nexport interface UnlayerDesignChangeInfo {\n isToolsListChanged: boolean;\n}\n\n// We are using exclusive lists here, because we can't be sure that we know all unlayer event types\nconst eventsNotChangingToolsList: DesignUpdatedEventType[] = [\n DesignUpdatedEventType.ContentMoved,\n DesignUpdatedEventType.ContentModified,\n DesignUpdatedEventType.ColumnModified,\n DesignUpdatedEventType.RowMoved,\n DesignUpdatedEventType.RowModified,\n DesignUpdatedEventType.BodyModified,\n];\n\nconst eventsNotAddingTools: DesignUpdatedEventType[] = [\n ...eventsNotChangingToolsList,\n DesignUpdatedEventType.ContentRemoved,\n DesignUpdatedEventType.ColumnRemoved,\n DesignUpdatedEventType.RowRemoved,\n];\n\nexport class UnlayerStore {\n readonly unlayerRef: UnlayerRef;\n\n private editor: Unlayer | undefined;\n private isInit = false;\n private iframe?: HTMLIFrameElement;\n private hasDesign = false;\n\n private onMessageCB?: (type: string, data: any) => void;\n private onChangeCB?: (info: UnlayerDesignChangeInfo) => void;\n private onSnapshotSaveCB?: (snapshot: UnlayerEditorTwin) => void;\n private onReadyCB?: () => void;\n private onImageCB?: (file: File) => Promise<{ url: string }>;\n private onErrorCB?: (title: string, description?: string) => void;\n private onFormSelectCB?: (formId: number) => void;\n private onCalcFieldOpenCB?: (usedFormIds: number[]) => void;\n private onCalcFieldSelectCB?: (fieldKeys: string[]) => void;\n\n constructor(readonly props: CreateUnlayerEditorProps) {\n this.props.eSignFieldTypes = ['Signature', 'Initials', 'Date Signed', 'Full Name'];\n\n this.unlayerRef = {\n loadDesign: design => {\n this.editor?.loadDesign(design);\n },\n saveDesign: cb => {\n this.editor?.saveDesign(cb);\n },\n exportHtml: cb => {\n this.editor?.exportHtml(data => {\n cb(data);\n });\n },\n sendFormList: forms => {\n this.sendFormList(forms);\n },\n sendFormFields: (formId, fields) => {\n this.sendFormFields(formId, fields);\n },\n sendCalcFieldLabels: labels => {\n this.sendCalcFieldLabels(labels);\n },\n };\n }\n\n init = async (container: HTMLDivElement) => {\n if (this.isInit) {\n return;\n }\n\n this.isInit = true;\n\n setTimeout(() => window.addEventListener('message', this.onPostMessage));\n\n await loadScript(defaultScriptUrl);\n\n this.editor = createUnlayerEditor(container, this.props);\n this.editor.addEventListener('design:loaded', this.onDesignLoaded);\n this.editor.addEventListener('design:updated', this.onDesignUpdated);\n this.editor.registerCallback('image', this.uploadImage);\n\n this.iframe = container.querySelector(`iframe`) ?? undefined;\n };\n\n destroy = () => {\n window.removeEventListener('message', this.onPostMessage);\n\n if (this.editor) {\n this.editor.removeEventListener('design:loaded', this.onDesignLoaded);\n this.editor.removeEventListener('design:updated', this.onDesignUpdated);\n this.editor.unregisterCallback('image', this.uploadImage);\n\n this.editor = undefined;\n }\n };\n\n addTwin = (twin: UnlayerEditorTwin) => {\n this.props.toolTwins?.push(twin);\n this.sendMessage('--add-twin', JSON.parse(JSON.stringify(twin)));\n };\n\n setDesign = (design?: UnlayerDesignFormat) => {\n if (!this.editor) {\n return;\n }\n\n this.hasDesign = !!design;\n\n if (design) {\n this.editor.loadDesign(design);\n }\n };\n\n setOnChange = (onChange?: UnlayerStore['onChangeCB']) => {\n this.onChangeCB = onChange;\n };\n\n setOnSnapshotSave = (onSnapshotSave?: UnlayerStore['onSnapshotSaveCB']) => {\n this.onSnapshotSaveCB = onSnapshotSave;\n };\n\n setOnReady = (onReady?: UnlayerStore['onReadyCB']) => {\n this.onReadyCB = onReady;\n };\n\n setOnImage = (onImage?: UnlayerStore['onImageCB']) => {\n this.onImageCB = onImage;\n };\n\n setOnError = (onError?: UnlayerStore['onErrorCB']) => {\n this.onErrorCB = onError;\n };\n\n setOnMessage = (onMessage?: UnlayerStore['onMessageCB']) => {\n this.onMessageCB = onMessage;\n };\n\n setOnFormSelect = (onFormSelect?: UnlayerStore['onFormSelectCB']) => {\n this.onFormSelectCB = onFormSelect;\n };\n\n setOnCalcFieldOpen = (onCalcFieldOpen?: UnlayerStore['onCalcFieldOpenCB']) => {\n this.onCalcFieldOpenCB = onCalcFieldOpen;\n };\n\n setOnCalcFieldSelect = (onCalcFieldSelect?: UnlayerStore['onCalcFieldSelectCB']) => {\n this.onCalcFieldSelectCB = onCalcFieldSelect;\n };\n\n sendFormList = (forms: FormInfo[]) => {\n this.sendMessage('--form-list', { forms });\n };\n\n sendFormFields = (formId: number, fields: FormFieldInfo[]) => {\n this.sendMessage('--form-fields', { formId, fields });\n };\n\n sendCalcFieldLabels = (labels: Record<string, string>) => {\n this.sendMessage('--calc-field-labels', { labels });\n };\n\n private onDesignLoaded = () => {\n if (!this.hasDesign) {\n this.hasDesign = true;\n this.editor?.setBodyValues({\n backgroundColor: 'rgba(0,0,0,0)',\n contentWidth: '100%',\n });\n }\n };\n\n private onDesignUpdated = (event: EventDesignUpdated) => {\n const isToolAdded = !eventsNotAddingTools.includes(event.type);\n const isToolsListChanged = !eventsNotChangingToolsList.includes(event.type);\n\n if (isToolAdded) {\n this.editor?.exportHtml(data => {\n let hasChanges = false;\n\n unlayerToolsIterate(data.design, tool => {\n const realTool = tool.slug\n ? unlayerToolsParseTwinKey(tool.slug ?? '')\n : undefined;\n\n if (realTool) {\n hasChanges = true;\n\n if (tool.slug) {\n delete data.design.counters[`u_content_custom_${tool.slug}`];\n delete tool.values._meta.htmlID;\n }\n\n tool.type = realTool.type;\n tool.slug = realTool.slug;\n }\n });\n\n if (hasChanges) {\n this.setDesign(data.design);\n }\n\n this.onChangeCB?.({ isToolsListChanged });\n });\n } else {\n this.onChangeCB?.({ isToolsListChanged });\n }\n };\n\n private onPostMessage = (e: MessageEvent) => {\n if (!e.data?.['-dte-message-from']) {\n return;\n }\n\n const type = e.data?.['-dte-message-from']?.type;\n const data = e.data?.['-dte-message-from']?.data;\n\n if (!type) {\n return;\n }\n\n if (type === '--ready' || type === '--registered') {\n this.onReadyCB?.();\n } else if (type === '--core-loaded') {\n const configData: UnlayerEventConfig = {\n dummyData: this.props.dummyData,\n schema: this.props.schema,\n generics: this.props.generics,\n genericConfigMode: this.props.genericConfigMode,\n isSnapshotMode: this.props.isSnapshotMode,\n holidays: this.props.holidays,\n };\n\n this.sendMessage('--config', JSON.parse(JSON.stringify(configData)));\n } else if (type === '--form-select') {\n this.onFormSelectCB?.(data?.formId);\n } else if (type === '--calc-field-open') {\n this.onCalcFieldOpenCB?.(data?.usedFormIds ?? []);\n } else if (type === '--calc-field-select') {\n if (this.onCalcFieldSelectCB) {\n this.onCalcFieldSelectCB(data?.fieldKeys ?? []);\n } else {\n this.sendCalcFieldLabels({});\n }\n } else if (type === '--data-loaded') {\n const data: UnlayerEventRegister = {\n customTools: this.props.tools.map(tool => ({ key: tool.key })),\n toolTwins: this.props.toolTwins,\n eSignRecipients: this.props.eSignRecipients,\n eSignFieldTypes: this.props.eSignFieldTypes,\n units: this.props.units?.map(unit => ({\n ...unit,\n values: {\n ...unit.values,\n adminConfig: undefined,\n },\n })),\n };\n\n this.sendMessage('--register', JSON.parse(JSON.stringify(data)));\n } else if (type === '--save-snapshot') {\n this.editor?.exportHtml(template => {\n unlayerToolsIterate(template.design, tool => {\n if (tool.values?.twin?.id === data.id) {\n if (!tool.slug) {\n return;\n }\n\n this.onSnapshotSaveCB?.({\n title: '',\n tool: tool.slug,\n values: tool.values,\n });\n return false;\n }\n });\n });\n }\n\n this.onMessageCB?.(type, data);\n };\n\n private sendMessage = (type: string, data?: any) => {\n this.iframe?.contentWindow?.postMessage(\n {\n '-dte-message-to': {\n type,\n data,\n },\n },\n '*',\n );\n };\n\n private uploadImage = async (\n data: { attachments: File[] },\n done: (result: { progress: number; url?: string }) => void,\n ) => {\n if (!this.onImageCB) {\n done({ progress: 100 });\n throw new Error('image upload is not implemented');\n }\n\n if (!data.attachments?.length) {\n return;\n }\n\n const file = data.attachments[0];\n\n const res = await this.validateImage(file, {\n ...defaultImageValidation,\n ...(this.props.imageValidation ?? {}),\n });\n\n if (!res.isValid) {\n this.onErrorCB?.(res.title, res.description);\n return;\n }\n\n done({ progress: 0 });\n\n try {\n const { url } = await this.onImageCB(file);\n done({ progress: 100, url });\n } catch {\n this.onErrorCB?.(\n 'Image upload failed',\n 'Something went wrong while uploading the image. Please try again or select another image.',\n );\n done({ progress: 100 });\n }\n };\n\n private validateImage = async (\n file: File,\n imageValidation: { maxFileSize: number; maxWidth: number; maxHeight: number },\n ): Promise<{ isValid: boolean; title: string; description: string }> => {\n const { maxFileSize, maxHeight, maxWidth } = imageValidation;\n\n if (file.size > maxFileSize) {\n const maxSizeMB = (maxFileSize / 1024 / 1024).toFixed(2);\n const fileSizeMB = (file.size / 1024 / 1024).toFixed(2);\n return {\n isValid: false,\n title: 'Image size limit reached',\n description: `This image is ${fileSizeMB}MB, which is above the ${maxSizeMB}MB limit. Please upload a smaller file to continue.`,\n };\n }\n\n return new Promise(resolve => {\n const img = new Image();\n const objectUrl = URL.createObjectURL(file);\n\n img.onload = () => {\n URL.revokeObjectURL(objectUrl);\n const { height, width } = img;\n\n if (width > maxWidth || height > maxHeight) {\n resolve({\n isValid: false,\n title: 'Dimension limit reached',\n description: `These image dimensions (${width}x${height}px) exceed the ${maxWidth}x${maxHeight}px limit. Please resize the image and try again.`,\n });\n } else {\n resolve({ isValid: true, title: '', description: '' });\n }\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(objectUrl);\n resolve({\n isValid: false,\n title: 'The image is broken',\n description:\n 'Looks like this image isn’t valid. Please choose another image and try again.',\n });\n };\n\n img.src = objectUrl;\n });\n };\n}\n"],"names":["loadScript","defaultImageValidation","unlayerToolsParseTwinKey","unlayerToolsIterate","createUnlayerEditor","DesignUpdatedEventType","defaultScriptUrl","eventsNotChangingToolsList","ContentMoved","ContentModified","ColumnModified","RowMoved","RowModified","BodyModified","eventsNotAddingTools","ContentRemoved","ColumnRemoved","RowRemoved","UnlayerStore","props","unlayerRef","editor","isInit","iframe","hasDesign","onMessageCB","onChangeCB","onSnapshotSaveCB","onReadyCB","onImageCB","onErrorCB","onFormSelectCB","onCalcFieldOpenCB","onCalcFieldSelectCB","init","destroy","addTwin","setDesign","setOnChange","setOnSnapshotSave","setOnReady","setOnImage","setOnError","setOnMessage","setOnFormSelect","setOnCalcFieldOpen","setOnCalcFieldSelect","sendFormList","sendFormFields","sendCalcFieldLabels","onDesignLoaded","onDesignUpdated","onPostMessage","sendMessage","uploadImage","validateImage","container","setTimeout","window","addEventListener","registerCallback","querySelector","undefined","removeEventListener","unregisterCallback","twin","toolTwins","push","JSON","parse","stringify","design","loadDesign","onChange","onSnapshotSave","onReady","onImage","onError","onMessage","onFormSelect","onCalcFieldOpen","onCalcFieldSelect","forms","formId","fields","labels","setBodyValues","backgroundColor","contentWidth","event","isToolAdded","includes","type","isToolsListChanged","exportHtml","data","hasChanges","tool","realTool","slug","counters","values","_meta","htmlID","e","configData","dummyData","schema","generics","genericConfigMode","isSnapshotMode","holidays","usedFormIds","fieldKeys","customTools","tools","map","key","eSignRecipients","eSignFieldTypes","units","unit","adminConfig","template","id","title","contentWindow","postMessage","done","progress","Error","attachments","length","file","res","imageValidation","isValid","description","url","maxFileSize","maxHeight","maxWidth","size","maxSizeMB","toFixed","fileSizeMB","Promise","resolve","img","Image","objectUrl","URL","createObjectURL","onload","revokeObjectURL","height","width","onerror","src","saveDesign","cb"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { loadScript } from './loadScript';\nimport { defaultImageValidation } from './shared/configs';\nimport { UnlayerEditorTwin, UnlayerEventConfig, UnlayerEventRegister } from './shared/const';\nimport { unlayerSupportedFonts } from './shared/fonts';\nimport { FormFieldInfo, FormInfo } from './shared/forms';\nimport { unlayerToolsParseTwinKey } from './shared/tools';\nimport { unlayerToolsIterate } from './tools';\nimport {\n createUnlayerEditor,\n DesignUpdatedEventType,\n EventDesignUpdated,\n Unlayer,\n} from './unlayer';\nimport { CreateUnlayerEditorProps, UnlayerDesignFormat, UnlayerRef } from './unlayer-interface';\n\nconst defaultScriptUrl = 'https://editor.unlayer.com/embed.js?2';\n\nconst normalizeFontToken = (font: string) =>\n font\n .replace(/[\"']/g, '')\n .split(',')[0]\n .trim()\n .toLowerCase();\n\nconst getDesignFontTokens = (value: any, out: Set<string>) => {\n if (!value || typeof value !== 'object') {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n getDesignFontTokens(item, out);\n }\n\n return;\n }\n\n for (const [key, fieldValue] of Object.entries(value)) {\n if (key === 'fontFamily') {\n if (typeof fieldValue === 'string') {\n out.add(normalizeFontToken(fieldValue));\n } else if (fieldValue && typeof fieldValue === 'object') {\n const fontFamilyValue = fieldValue as { label?: string; value?: string };\n\n if (typeof fontFamilyValue.label === 'string') {\n out.add(normalizeFontToken(fontFamilyValue.label));\n }\n\n if (typeof fontFamilyValue.value === 'string') {\n out.add(normalizeFontToken(fontFamilyValue.value));\n }\n }\n }\n\n if (fieldValue && typeof fieldValue === 'object') {\n getDesignFontTokens(fieldValue, out);\n }\n }\n};\n\nconst ensureChunksFonts = (data: any) => {\n if (!data || typeof data !== 'object') {\n return data;\n }\n\n data.chunks ??= {};\n\n const fontUrls = new Set<string>(\n Array.isArray(data.chunks.fonts)\n ? data.chunks.fonts.filter((url: unknown): url is string => typeof url === 'string')\n : [],\n );\n\n const usedFontTokens = new Set<string>();\n getDesignFontTokens(data.design, usedFontTokens);\n\n const html = typeof data.html === 'string' ? data.html.toLowerCase() : '';\n\n for (const font of unlayerSupportedFonts) {\n if (!font.url) {\n continue;\n }\n\n const labelToken = normalizeFontToken(font.label);\n const valueToken = normalizeFontToken(font.value);\n const isUsedInDesign = usedFontTokens.has(labelToken) || usedFontTokens.has(valueToken);\n const isUsedInHtml = !!html && (html.includes(labelToken) || html.includes(valueToken));\n\n if (isUsedInDesign || isUsedInHtml) {\n fontUrls.add(font.url);\n }\n }\n\n data.chunks.fonts = Array.from(fontUrls);\n return data;\n};\n\nexport interface UnlayerDesignChangeInfo {\n isToolsListChanged: boolean;\n}\n\n// We are using exclusive lists here, because we can't be sure that we know all unlayer event types\nconst eventsNotChangingToolsList: DesignUpdatedEventType[] = [\n DesignUpdatedEventType.ContentMoved,\n DesignUpdatedEventType.ContentModified,\n DesignUpdatedEventType.ColumnModified,\n DesignUpdatedEventType.RowMoved,\n DesignUpdatedEventType.RowModified,\n DesignUpdatedEventType.BodyModified,\n];\n\nconst eventsNotAddingTools: DesignUpdatedEventType[] = [\n ...eventsNotChangingToolsList,\n DesignUpdatedEventType.ContentRemoved,\n DesignUpdatedEventType.ColumnRemoved,\n DesignUpdatedEventType.RowRemoved,\n];\n\nexport class UnlayerStore {\n readonly unlayerRef: UnlayerRef;\n\n private editor: Unlayer | undefined;\n private isInit = false;\n private iframe?: HTMLIFrameElement;\n private hasDesign = false;\n\n private onMessageCB?: (type: string, data: any) => void;\n private onChangeCB?: (info: UnlayerDesignChangeInfo) => void;\n private onSnapshotSaveCB?: (snapshot: UnlayerEditorTwin) => void;\n private onReadyCB?: () => void;\n private onImageCB?: (file: File) => Promise<{ url: string }>;\n private onErrorCB?: (title: string, description?: string) => void;\n private onFormSelectCB?: (formId: number) => void;\n private onCalcFieldOpenCB?: (usedFormIds: number[]) => void;\n private onCalcFieldSelectCB?: (fieldKeys: string[]) => void;\n\n constructor(readonly props: CreateUnlayerEditorProps) {\n this.props.eSignFieldTypes = ['Signature', 'Initials', 'Date Signed', 'Full Name'];\n\n this.unlayerRef = {\n loadDesign: design => {\n this.editor?.loadDesign(design);\n },\n saveDesign: cb => {\n this.editor?.saveDesign(cb);\n },\n exportHtml: cb => {\n this.editor?.exportHtml(data => {\n cb(ensureChunksFonts(data));\n });\n },\n sendFormList: forms => {\n this.sendFormList(forms);\n },\n sendFormFields: (formId, fields) => {\n this.sendFormFields(formId, fields);\n },\n sendCalcFieldLabels: labels => {\n this.sendCalcFieldLabels(labels);\n },\n };\n }\n\n init = async (container: HTMLDivElement) => {\n if (this.isInit) {\n return;\n }\n\n this.isInit = true;\n\n setTimeout(() => window.addEventListener('message', this.onPostMessage));\n\n await loadScript(defaultScriptUrl);\n\n this.editor = createUnlayerEditor(container, this.props);\n this.editor.addEventListener('design:loaded', this.onDesignLoaded);\n this.editor.addEventListener('design:updated', this.onDesignUpdated);\n this.editor.registerCallback('image', this.uploadImage);\n\n this.iframe = container.querySelector(`iframe`) ?? undefined;\n };\n\n destroy = () => {\n window.removeEventListener('message', this.onPostMessage);\n\n if (this.editor) {\n this.editor.removeEventListener('design:loaded', this.onDesignLoaded);\n this.editor.removeEventListener('design:updated', this.onDesignUpdated);\n this.editor.unregisterCallback('image', this.uploadImage);\n\n this.editor = undefined;\n }\n };\n\n addTwin = (twin: UnlayerEditorTwin) => {\n this.props.toolTwins?.push(twin);\n this.sendMessage('--add-twin', JSON.parse(JSON.stringify(twin)));\n };\n\n setDesign = (design?: UnlayerDesignFormat) => {\n if (!this.editor) {\n return;\n }\n\n this.hasDesign = !!design;\n\n if (design) {\n this.editor.loadDesign(design);\n }\n };\n\n setOnChange = (onChange?: UnlayerStore['onChangeCB']) => {\n this.onChangeCB = onChange;\n };\n\n setOnSnapshotSave = (onSnapshotSave?: UnlayerStore['onSnapshotSaveCB']) => {\n this.onSnapshotSaveCB = onSnapshotSave;\n };\n\n setOnReady = (onReady?: UnlayerStore['onReadyCB']) => {\n this.onReadyCB = onReady;\n };\n\n setOnImage = (onImage?: UnlayerStore['onImageCB']) => {\n this.onImageCB = onImage;\n };\n\n setOnError = (onError?: UnlayerStore['onErrorCB']) => {\n this.onErrorCB = onError;\n };\n\n setOnMessage = (onMessage?: UnlayerStore['onMessageCB']) => {\n this.onMessageCB = onMessage;\n };\n\n setOnFormSelect = (onFormSelect?: UnlayerStore['onFormSelectCB']) => {\n this.onFormSelectCB = onFormSelect;\n };\n\n setOnCalcFieldOpen = (onCalcFieldOpen?: UnlayerStore['onCalcFieldOpenCB']) => {\n this.onCalcFieldOpenCB = onCalcFieldOpen;\n };\n\n setOnCalcFieldSelect = (onCalcFieldSelect?: UnlayerStore['onCalcFieldSelectCB']) => {\n this.onCalcFieldSelectCB = onCalcFieldSelect;\n };\n\n sendFormList = (forms: FormInfo[]) => {\n this.sendMessage('--form-list', { forms });\n };\n\n sendFormFields = (formId: number, fields: FormFieldInfo[]) => {\n this.sendMessage('--form-fields', { formId, fields });\n };\n\n sendCalcFieldLabels = (labels: Record<string, string>) => {\n this.sendMessage('--calc-field-labels', { labels });\n };\n\n private onDesignLoaded = () => {\n if (!this.hasDesign) {\n this.hasDesign = true;\n this.editor?.setBodyValues({\n backgroundColor: 'rgba(0,0,0,0)',\n contentWidth: '100%',\n });\n }\n };\n\n private onDesignUpdated = (event: EventDesignUpdated) => {\n const isToolAdded = !eventsNotAddingTools.includes(event.type);\n const isToolsListChanged = !eventsNotChangingToolsList.includes(event.type);\n\n if (isToolAdded) {\n this.editor?.exportHtml(data => {\n let hasChanges = false;\n\n unlayerToolsIterate(data.design, tool => {\n const realTool = tool.slug\n ? unlayerToolsParseTwinKey(tool.slug ?? '')\n : undefined;\n\n if (realTool) {\n hasChanges = true;\n\n if (tool.slug) {\n delete data.design.counters[`u_content_custom_${tool.slug}`];\n delete tool.values._meta.htmlID;\n }\n\n tool.type = realTool.type;\n tool.slug = realTool.slug;\n }\n });\n\n if (hasChanges) {\n this.setDesign(data.design);\n }\n\n this.onChangeCB?.({ isToolsListChanged });\n });\n } else {\n this.onChangeCB?.({ isToolsListChanged });\n }\n };\n\n private onPostMessage = (e: MessageEvent) => {\n if (!e.data?.['-dte-message-from']) {\n return;\n }\n\n const type = e.data?.['-dte-message-from']?.type;\n const data = e.data?.['-dte-message-from']?.data;\n\n if (!type) {\n return;\n }\n\n if (type === '--ready' || type === '--registered') {\n this.onReadyCB?.();\n } else if (type === '--core-loaded') {\n const configData: UnlayerEventConfig = {\n dummyData: this.props.dummyData,\n schema: this.props.schema,\n generics: this.props.generics,\n genericConfigMode: this.props.genericConfigMode,\n isSnapshotMode: this.props.isSnapshotMode,\n holidays: this.props.holidays,\n };\n\n this.sendMessage('--config', JSON.parse(JSON.stringify(configData)));\n } else if (type === '--form-select') {\n this.onFormSelectCB?.(data?.formId);\n } else if (type === '--calc-field-open') {\n this.onCalcFieldOpenCB?.(data?.usedFormIds ?? []);\n } else if (type === '--calc-field-select') {\n if (this.onCalcFieldSelectCB) {\n this.onCalcFieldSelectCB(data?.fieldKeys ?? []);\n } else {\n this.sendCalcFieldLabels({});\n }\n } else if (type === '--data-loaded') {\n const data: UnlayerEventRegister = {\n customTools: this.props.tools.map(tool => ({ key: tool.key })),\n toolTwins: this.props.toolTwins,\n eSignRecipients: this.props.eSignRecipients,\n eSignFieldTypes: this.props.eSignFieldTypes,\n units: this.props.units?.map(unit => ({\n ...unit,\n values: {\n ...unit.values,\n adminConfig: undefined,\n },\n })),\n };\n\n this.sendMessage('--register', JSON.parse(JSON.stringify(data)));\n } else if (type === '--save-snapshot') {\n this.editor?.exportHtml(template => {\n unlayerToolsIterate(template.design, tool => {\n if (tool.values?.twin?.id === data.id) {\n if (!tool.slug) {\n return;\n }\n\n this.onSnapshotSaveCB?.({\n title: '',\n tool: tool.slug,\n values: tool.values,\n });\n return false;\n }\n });\n });\n }\n\n this.onMessageCB?.(type, data);\n };\n\n private sendMessage = (type: string, data?: any) => {\n this.iframe?.contentWindow?.postMessage(\n {\n '-dte-message-to': {\n type,\n data,\n },\n },\n '*',\n );\n };\n\n private uploadImage = async (\n data: { attachments: File[] },\n done: (result: { progress: number; url?: string }) => void,\n ) => {\n if (!this.onImageCB) {\n done({ progress: 100 });\n throw new Error('image upload is not implemented');\n }\n\n if (!data.attachments?.length) {\n return;\n }\n\n const file = data.attachments[0];\n\n const res = await this.validateImage(file, {\n ...defaultImageValidation,\n ...(this.props.imageValidation ?? {}),\n });\n\n if (!res.isValid) {\n this.onErrorCB?.(res.title, res.description);\n return;\n }\n\n done({ progress: 0 });\n\n try {\n const { url } = await this.onImageCB(file);\n done({ progress: 100, url });\n } catch {\n this.onErrorCB?.(\n 'Image upload failed',\n 'Something went wrong while uploading the image. Please try again or select another image.',\n );\n done({ progress: 100 });\n }\n };\n\n private validateImage = async (\n file: File,\n imageValidation: { maxFileSize: number; maxWidth: number; maxHeight: number },\n ): Promise<{ isValid: boolean; title: string; description: string }> => {\n const { maxFileSize, maxHeight, maxWidth } = imageValidation;\n\n if (file.size > maxFileSize) {\n const maxSizeMB = (maxFileSize / 1024 / 1024).toFixed(2);\n const fileSizeMB = (file.size / 1024 / 1024).toFixed(2);\n return {\n isValid: false,\n title: 'Image size limit reached',\n description: `This image is ${fileSizeMB}MB, which is above the ${maxSizeMB}MB limit. Please upload a smaller file to continue.`,\n };\n }\n\n return new Promise(resolve => {\n const img = new Image();\n const objectUrl = URL.createObjectURL(file);\n\n img.onload = () => {\n URL.revokeObjectURL(objectUrl);\n const { height, width } = img;\n\n if (width > maxWidth || height > maxHeight) {\n resolve({\n isValid: false,\n title: 'Dimension limit reached',\n description: `These image dimensions (${width}x${height}px) exceed the ${maxWidth}x${maxHeight}px limit. Please resize the image and try again.`,\n });\n } else {\n resolve({ isValid: true, title: '', description: '' });\n }\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(objectUrl);\n resolve({\n isValid: false,\n title: 'The image is broken',\n description:\n 'Looks like this image isn’t valid. Please choose another image and try again.',\n });\n };\n\n img.src = objectUrl;\n });\n };\n}\n"],"names":["loadScript","defaultImageValidation","unlayerSupportedFonts","unlayerToolsParseTwinKey","unlayerToolsIterate","createUnlayerEditor","DesignUpdatedEventType","defaultScriptUrl","normalizeFontToken","font","replace","split","trim","toLowerCase","getDesignFontTokens","value","out","Array","isArray","item","key","fieldValue","Object","entries","add","fontFamilyValue","label","ensureChunksFonts","data","chunks","fontUrls","Set","fonts","filter","url","usedFontTokens","design","html","labelToken","valueToken","isUsedInDesign","has","isUsedInHtml","includes","from","eventsNotChangingToolsList","ContentMoved","ContentModified","ColumnModified","RowMoved","RowModified","BodyModified","eventsNotAddingTools","ContentRemoved","ColumnRemoved","RowRemoved","UnlayerStore","props","unlayerRef","editor","isInit","iframe","hasDesign","onMessageCB","onChangeCB","onSnapshotSaveCB","onReadyCB","onImageCB","onErrorCB","onFormSelectCB","onCalcFieldOpenCB","onCalcFieldSelectCB","init","destroy","addTwin","setDesign","setOnChange","setOnSnapshotSave","setOnReady","setOnImage","setOnError","setOnMessage","setOnFormSelect","setOnCalcFieldOpen","setOnCalcFieldSelect","sendFormList","sendFormFields","sendCalcFieldLabels","onDesignLoaded","onDesignUpdated","onPostMessage","sendMessage","uploadImage","validateImage","container","setTimeout","window","addEventListener","registerCallback","querySelector","undefined","removeEventListener","unregisterCallback","twin","toolTwins","push","JSON","parse","stringify","loadDesign","onChange","onSnapshotSave","onReady","onImage","onError","onMessage","onFormSelect","onCalcFieldOpen","onCalcFieldSelect","forms","formId","fields","labels","setBodyValues","backgroundColor","contentWidth","event","isToolAdded","type","isToolsListChanged","exportHtml","hasChanges","tool","realTool","slug","counters","values","_meta","htmlID","e","configData","dummyData","schema","generics","genericConfigMode","isSnapshotMode","holidays","usedFormIds","fieldKeys","customTools","tools","map","eSignRecipients","eSignFieldTypes","units","unit","adminConfig","template","id","title","contentWindow","postMessage","done","progress","Error","attachments","length","file","res","imageValidation","isValid","description","maxFileSize","maxHeight","maxWidth","size","maxSizeMB","toFixed","fileSizeMB","Promise","resolve","img","Image","objectUrl","URL","createObjectURL","onload","revokeObjectURL","height","width","onerror","src","saveDesign","cb"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/dte-unlayer",
3
- "version": "0.124.0",
3
+ "version": "0.126.0",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "typings": "./dist/index.d.ts",
@@ -1,7 +1,6 @@
1
1
  import { buildFormFieldKey, parseFormFieldKey, toNunjucksFieldReference } from '../shared/forms';
2
2
  import { generateId } from './constants';
3
3
  import {
4
- CONDITION_OPERATORS,
5
4
  ConditionGroup,
6
5
  ConditionOperator,
7
6
  DisplayBehavior,
@@ -12,10 +11,6 @@ import {
12
11
  VALUE_LESS_OPERATORS,
13
12
  } from './types';
14
13
 
15
- const OPERATOR_LABEL_MAP = new Map<string, string>(
16
- CONDITION_OPERATORS.map(op => [op.value, op.label]),
17
- );
18
-
19
14
  function escapeNunjucksString(s: string): string {
20
15
  return s.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
21
16
  }
@@ -158,28 +153,26 @@ function buildFullConditionExpression(state: DisplayConditionState): string {
158
153
  return combined;
159
154
  }
160
155
 
161
- function operatorLabel(operator: string): string {
162
- return OPERATOR_LABEL_MAP.get(operator) ?? operator;
163
- }
164
-
165
- function generateTypeAndLabel(state: DisplayConditionState): { type: string; label: string } {
166
- const parts: string[] = [];
167
- for (const group of state.groups) {
168
- for (const c of group.conditions) {
169
- if (!c.dataPointKey) {
170
- continue;
171
- }
172
- if (isValueLessOperator(c.operator)) {
173
- parts.push(`${c.dataPointKey} ${operatorLabel(c.operator)}`);
174
- } else if (c.value.trim()) {
175
- parts.push(`${c.dataPointKey} ${operatorLabel(c.operator)} ${c.value.trim()}`);
176
- }
177
- }
178
- }
179
- const summary = parts.slice(0, 2).join('; ') + (parts.length > 2 ? '…' : '');
180
- const type = state.behavior === 'show' ? 'Display when' : 'Hide when';
181
- const label = summary || (state.behavior === 'show' ? 'Show when' : 'Hide when');
182
- return { type, label };
156
+ function generateConditionText(state: DisplayConditionState): {
157
+ description: string;
158
+ label: string;
159
+ type: string;
160
+ } {
161
+ const conditionCount = state.groups.reduce(
162
+ (count, group) =>
163
+ count +
164
+ group.conditions.filter(
165
+ c => c.dataPointKey && (isValueLessOperator(c.operator) || c.value.trim() !== ''),
166
+ ).length,
167
+ 0,
168
+ );
169
+ const label =
170
+ state.behavior === 'show' ? 'Show condition configured' : 'Hide condition configured';
171
+ const description =
172
+ conditionCount === 1
173
+ ? '1 condition is currently applied'
174
+ : `${conditionCount} conditions are currently applied`;
175
+ return { description, label, type: '' };
183
176
  }
184
177
 
185
178
  export function buildUnlayerDisplayCondition(
@@ -191,8 +184,7 @@ export function buildUnlayerDisplayCondition(
191
184
  }
192
185
  const before = `{% if ${expr} %}`;
193
186
  const after = '{% endif %}';
194
- const { label, type } = generateTypeAndLabel(state);
195
- const description = state.groups.length > 1 ? `${state.groups.length} rules` : undefined;
187
+ const { description, label, type } = generateConditionText(state);
196
188
  return { after, before, description, label, type };
197
189
  }
198
190
 
package/src/store.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { loadScript } from './loadScript';
2
2
  import { defaultImageValidation } from './shared/configs';
3
3
  import { UnlayerEditorTwin, UnlayerEventConfig, UnlayerEventRegister } from './shared/const';
4
+ import { unlayerSupportedFonts } from './shared/fonts';
4
5
  import { FormFieldInfo, FormInfo } from './shared/forms';
5
6
  import { unlayerToolsParseTwinKey } from './shared/tools';
6
7
  import { unlayerToolsIterate } from './tools';
@@ -14,6 +15,86 @@ import { CreateUnlayerEditorProps, UnlayerDesignFormat, UnlayerRef } from './unl
14
15
 
15
16
  const defaultScriptUrl = 'https://editor.unlayer.com/embed.js?2';
16
17
 
18
+ const normalizeFontToken = (font: string) =>
19
+ font
20
+ .replace(/["']/g, '')
21
+ .split(',')[0]
22
+ .trim()
23
+ .toLowerCase();
24
+
25
+ const getDesignFontTokens = (value: any, out: Set<string>) => {
26
+ if (!value || typeof value !== 'object') {
27
+ return;
28
+ }
29
+
30
+ if (Array.isArray(value)) {
31
+ for (const item of value) {
32
+ getDesignFontTokens(item, out);
33
+ }
34
+
35
+ return;
36
+ }
37
+
38
+ for (const [key, fieldValue] of Object.entries(value)) {
39
+ if (key === 'fontFamily') {
40
+ if (typeof fieldValue === 'string') {
41
+ out.add(normalizeFontToken(fieldValue));
42
+ } else if (fieldValue && typeof fieldValue === 'object') {
43
+ const fontFamilyValue = fieldValue as { label?: string; value?: string };
44
+
45
+ if (typeof fontFamilyValue.label === 'string') {
46
+ out.add(normalizeFontToken(fontFamilyValue.label));
47
+ }
48
+
49
+ if (typeof fontFamilyValue.value === 'string') {
50
+ out.add(normalizeFontToken(fontFamilyValue.value));
51
+ }
52
+ }
53
+ }
54
+
55
+ if (fieldValue && typeof fieldValue === 'object') {
56
+ getDesignFontTokens(fieldValue, out);
57
+ }
58
+ }
59
+ };
60
+
61
+ const ensureChunksFonts = (data: any) => {
62
+ if (!data || typeof data !== 'object') {
63
+ return data;
64
+ }
65
+
66
+ data.chunks ??= {};
67
+
68
+ const fontUrls = new Set<string>(
69
+ Array.isArray(data.chunks.fonts)
70
+ ? data.chunks.fonts.filter((url: unknown): url is string => typeof url === 'string')
71
+ : [],
72
+ );
73
+
74
+ const usedFontTokens = new Set<string>();
75
+ getDesignFontTokens(data.design, usedFontTokens);
76
+
77
+ const html = typeof data.html === 'string' ? data.html.toLowerCase() : '';
78
+
79
+ for (const font of unlayerSupportedFonts) {
80
+ if (!font.url) {
81
+ continue;
82
+ }
83
+
84
+ const labelToken = normalizeFontToken(font.label);
85
+ const valueToken = normalizeFontToken(font.value);
86
+ const isUsedInDesign = usedFontTokens.has(labelToken) || usedFontTokens.has(valueToken);
87
+ const isUsedInHtml = !!html && (html.includes(labelToken) || html.includes(valueToken));
88
+
89
+ if (isUsedInDesign || isUsedInHtml) {
90
+ fontUrls.add(font.url);
91
+ }
92
+ }
93
+
94
+ data.chunks.fonts = Array.from(fontUrls);
95
+ return data;
96
+ };
97
+
17
98
  export interface UnlayerDesignChangeInfo {
18
99
  isToolsListChanged: boolean;
19
100
  }
@@ -65,7 +146,7 @@ export class UnlayerStore {
65
146
  },
66
147
  exportHtml: cb => {
67
148
  this.editor?.exportHtml(data => {
68
- cb(data);
149
+ cb(ensureChunksFonts(data));
69
150
  });
70
151
  },
71
152
  sendFormList: forms => {