@emabuild/core 0.4.0 → 0.4.1

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,5 +1,5 @@
1
1
  import { html as p } from "lit";
2
- import { s as o, j as b, e as u } from "./index-2S5kBS5_.js";
2
+ import { s as o, j as b, e as u } from "./index-CLXq1CZC.js";
3
3
  const n = [
4
4
  { label: "Name", name: "name", type: "text", placeholder: "Your name" },
5
5
  { label: "Email", name: "email", type: "email", placeholder: "your@email.com" }
@@ -67,4 +67,4 @@ const n = [
67
67
  export {
68
68
  y as formTool
69
69
  };
70
- //# sourceMappingURL=form-tool-DsPgMShR.js.map
70
+ //# sourceMappingURL=form-tool-a_WVnfC2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-tool-DsPgMShR.js","sources":["../src/tools/built-in/form-tool.ts"],"sourcesContent":["/**\n * @module form-tool\n *\n * Input form with configurable fields and submit button.\n * Only available in \"web\" display mode (forms don't work in email).\n *\n * Email compatibility: N/A — this tool is for web/popup display mode only.\n */\n\nimport { html, TemplateResult } from 'lit';\nimport type { ContentValues } from '@emabuild/types';\nimport type { LitToolDefinition } from '../tool-registry.js';\nimport { str, jsonParse } from '../helpers/value-extractor.js';\nimport { emailTableCell } from '../helpers/email-html.js';\nimport type { FormField } from '../helpers/types.js';\n\nconst DEFAULT_FIELDS: FormField[] = [\n { label: 'Name', name: 'name', type: 'text', placeholder: 'Your name' },\n { label: 'Email', name: 'email', type: 'email', placeholder: 'your@email.com' },\n];\n\nexport const formTool: LitToolDefinition = {\n name: 'form',\n label: 'Form',\n icon: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M7 7h10\"/><path d=\"M7 12h10\"/><path d=\"M7 17h6\"/></svg>`,\n supportedDisplayModes: ['web'],\n position: 13,\n options: {\n form: {\n title: 'Form',\n options: {\n actionUrl: { label: 'Action URL', defaultValue: '#', widget: 'text' },\n method: { label: 'Method', defaultValue: 'POST', widget: 'text' },\n submitText: { label: 'Submit Text', defaultValue: 'Submit', widget: 'text' },\n fields: { label: 'Fields (JSON)', defaultValue: JSON.stringify(DEFAULT_FIELDS), widget: 'rich_text' },\n },\n },\n style: {\n title: 'Style',\n options: {\n buttonBg: { label: 'Button Color', defaultValue: '#3b82f6', widget: 'color_picker' },\n buttonColor: { label: 'Button Text', defaultValue: '#ffffff', widget: 'color_picker' },\n },\n },\n spacing: {\n title: 'Spacing',\n options: { containerPadding: { label: 'Padding', defaultValue: '10px', widget: 'padding' } },\n },\n },\n defaultValues: {\n actionUrl: '#', method: 'POST', submitText: 'Submit',\n fields: JSON.stringify(DEFAULT_FIELDS), buttonBg: '#3b82f6',\n buttonColor: '#ffffff', containerPadding: '10px',\n },\n renderer: {\n renderEditor(values: ContentValues): TemplateResult {\n const padding = str(values, 'containerPadding', '10px');\n const submitText = str(values, 'submitText', 'Submit');\n const btnBg = str(values, 'buttonBg', '#3b82f6');\n const btnColor = str(values, 'buttonColor', '#ffffff');\n const fields = jsonParse<FormField[]>(values.fields, DEFAULT_FIELDS);\n\n return html`\n <div style=\"font-family:arial,sans-serif;\">\n ${fields.map((f) => html`\n <div style=\"margin-bottom:12px;\">\n <label style=\"display:block;font-size:13px;color:#374151;margin-bottom:4px;font-weight:500;\">${f.label}</label>\n <input type=${f.type || 'text'} placeholder=${f.placeholder || ''} style=\"width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:4px;font-size:14px;box-sizing:border-box;\" />\n </div>\n `)}\n <button style=\"background:${btnBg};color:${btnColor};border:none;padding:10px 24px;border-radius:4px;font-size:14px;font-weight:600;cursor:pointer;\">${submitText}</button>\n </div>\n `;\n },\n renderHtml(values: ContentValues): string {\n const padding = str(values, 'containerPadding', '10px');\n const actionUrl = str(values, 'actionUrl', '#');\n const method = str(values, 'method', 'POST');\n const submitText = str(values, 'submitText', 'Submit');\n const btnBg = str(values, 'buttonBg', '#3b82f6');\n const btnColor = str(values, 'buttonColor', '#ffffff');\n const fields = jsonParse<FormField[]>(values.fields, DEFAULT_FIELDS);\n const font = 'font-family:arial,helvetica,sans-serif;';\n\n const fieldsHtml = fields.map((f) =>\n `<div style=\"margin-bottom:12px;\"><label style=\"display:block;font-size:13px;color:#374151;margin-bottom:4px;font-weight:500;${font}\">${f.label}</label><input type=\"${f.type || 'text'}\" name=\"${f.name}\" placeholder=\"${f.placeholder || ''}\" style=\"width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:4px;font-size:14px;box-sizing:border-box;${font}\" /></div>`\n ).join('');\n\n const inner = `<form action=\"${actionUrl}\" method=\"${method}\">${fieldsHtml}<button type=\"submit\" style=\"background-color:${btnBg};color:${btnColor};border:none;padding:10px 24px;border-radius:4px;font-size:14px;font-weight:600;cursor:pointer;${font}\">${submitText}</button></form>`;\n return emailTableCell(inner, { padding });\n },\n },\n};\n"],"names":["DEFAULT_FIELDS","formTool","values","str","submitText","btnBg","btnColor","fields","jsonParse","html","f","padding","actionUrl","method","font","fieldsHtml","inner","emailTableCell"],"mappings":"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"}
1
+ {"version":3,"file":"form-tool-a_WVnfC2.js","sources":["../src/tools/built-in/form-tool.ts"],"sourcesContent":["/**\n * @module form-tool\n *\n * Input form with configurable fields and submit button.\n * Only available in \"web\" display mode (forms don't work in email).\n *\n * Email compatibility: N/A — this tool is for web/popup display mode only.\n */\n\nimport { html, TemplateResult } from 'lit';\nimport type { ContentValues } from '@emabuild/types';\nimport type { LitToolDefinition } from '../tool-registry.js';\nimport { str, jsonParse } from '../helpers/value-extractor.js';\nimport { emailTableCell } from '../helpers/email-html.js';\nimport type { FormField } from '../helpers/types.js';\n\nconst DEFAULT_FIELDS: FormField[] = [\n { label: 'Name', name: 'name', type: 'text', placeholder: 'Your name' },\n { label: 'Email', name: 'email', type: 'email', placeholder: 'your@email.com' },\n];\n\nexport const formTool: LitToolDefinition = {\n name: 'form',\n label: 'Form',\n icon: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M7 7h10\"/><path d=\"M7 12h10\"/><path d=\"M7 17h6\"/></svg>`,\n supportedDisplayModes: ['web'],\n position: 13,\n options: {\n form: {\n title: 'Form',\n options: {\n actionUrl: { label: 'Action URL', defaultValue: '#', widget: 'text' },\n method: { label: 'Method', defaultValue: 'POST', widget: 'text' },\n submitText: { label: 'Submit Text', defaultValue: 'Submit', widget: 'text' },\n fields: { label: 'Fields (JSON)', defaultValue: JSON.stringify(DEFAULT_FIELDS), widget: 'rich_text' },\n },\n },\n style: {\n title: 'Style',\n options: {\n buttonBg: { label: 'Button Color', defaultValue: '#3b82f6', widget: 'color_picker' },\n buttonColor: { label: 'Button Text', defaultValue: '#ffffff', widget: 'color_picker' },\n },\n },\n spacing: {\n title: 'Spacing',\n options: { containerPadding: { label: 'Padding', defaultValue: '10px', widget: 'padding' } },\n },\n },\n defaultValues: {\n actionUrl: '#', method: 'POST', submitText: 'Submit',\n fields: JSON.stringify(DEFAULT_FIELDS), buttonBg: '#3b82f6',\n buttonColor: '#ffffff', containerPadding: '10px',\n },\n renderer: {\n renderEditor(values: ContentValues): TemplateResult {\n const padding = str(values, 'containerPadding', '10px');\n const submitText = str(values, 'submitText', 'Submit');\n const btnBg = str(values, 'buttonBg', '#3b82f6');\n const btnColor = str(values, 'buttonColor', '#ffffff');\n const fields = jsonParse<FormField[]>(values.fields, DEFAULT_FIELDS);\n\n return html`\n <div style=\"font-family:arial,sans-serif;\">\n ${fields.map((f) => html`\n <div style=\"margin-bottom:12px;\">\n <label style=\"display:block;font-size:13px;color:#374151;margin-bottom:4px;font-weight:500;\">${f.label}</label>\n <input type=${f.type || 'text'} placeholder=${f.placeholder || ''} style=\"width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:4px;font-size:14px;box-sizing:border-box;\" />\n </div>\n `)}\n <button style=\"background:${btnBg};color:${btnColor};border:none;padding:10px 24px;border-radius:4px;font-size:14px;font-weight:600;cursor:pointer;\">${submitText}</button>\n </div>\n `;\n },\n renderHtml(values: ContentValues): string {\n const padding = str(values, 'containerPadding', '10px');\n const actionUrl = str(values, 'actionUrl', '#');\n const method = str(values, 'method', 'POST');\n const submitText = str(values, 'submitText', 'Submit');\n const btnBg = str(values, 'buttonBg', '#3b82f6');\n const btnColor = str(values, 'buttonColor', '#ffffff');\n const fields = jsonParse<FormField[]>(values.fields, DEFAULT_FIELDS);\n const font = 'font-family:arial,helvetica,sans-serif;';\n\n const fieldsHtml = fields.map((f) =>\n `<div style=\"margin-bottom:12px;\"><label style=\"display:block;font-size:13px;color:#374151;margin-bottom:4px;font-weight:500;${font}\">${f.label}</label><input type=\"${f.type || 'text'}\" name=\"${f.name}\" placeholder=\"${f.placeholder || ''}\" style=\"width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:4px;font-size:14px;box-sizing:border-box;${font}\" /></div>`\n ).join('');\n\n const inner = `<form action=\"${actionUrl}\" method=\"${method}\">${fieldsHtml}<button type=\"submit\" style=\"background-color:${btnBg};color:${btnColor};border:none;padding:10px 24px;border-radius:4px;font-size:14px;font-weight:600;cursor:pointer;${font}\">${submitText}</button></form>`;\n return emailTableCell(inner, { padding });\n },\n },\n};\n"],"names":["DEFAULT_FIELDS","formTool","values","str","submitText","btnBg","btnColor","fields","jsonParse","html","f","padding","actionUrl","method","font","fieldsHtml","inner","emailTableCell"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { html as l } from "lit";
2
2
  import { unsafeHTML as i } from "lit/directives/unsafe-html.js";
3
- import { e as o, s as t } from "./index-2S5kBS5_.js";
3
+ import { e as o, s as t } from "./index-CLXq1CZC.js";
4
4
  const r = {
5
5
  name: "html",
6
6
  label: "HTML",
@@ -46,4 +46,4 @@ const r = {
46
46
  export {
47
47
  r as htmlTool
48
48
  };
49
- //# sourceMappingURL=html-tool-BxhBGl4L.js.map
49
+ //# sourceMappingURL=html-tool-RhawxTfJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"html-tool-BxhBGl4L.js","sources":["../src/tools/built-in/html-tool.ts"],"sourcesContent":["/**\n * @module html-tool\n *\n * Raw HTML content block for custom code injection.\n *\n * Email compatibility: Content is inserted as-is inside a table cell.\n * The user is responsible for email-safe HTML in this block.\n */\n\nimport { html, TemplateResult } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport type { ContentValues } from '@emabuild/types';\nimport type { LitToolDefinition } from '../tool-registry.js';\nimport { str } from '../helpers/value-extractor.js';\nimport { emailTableCell } from '../helpers/email-html.js';\n\nexport const htmlTool: LitToolDefinition = {\n name: 'html',\n label: 'HTML',\n icon: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"16 18 22 12 16 6\"/><polyline points=\"8 6 2 12 8 18\"/></svg>`,\n supportedDisplayModes: ['email', 'web'],\n position: 6,\n options: {\n html: {\n title: 'HTML',\n options: {\n html: {\n label: 'Custom HTML',\n defaultValue: '<div style=\"padding:20px;text-align:center;color:#999;\">Custom HTML Block</div>',\n widget: 'rich_text',\n },\n },\n },\n spacing: {\n title: 'Spacing',\n options: { containerPadding: { label: 'Padding', defaultValue: '10px', widget: 'text' } },\n },\n general: {\n title: 'General',\n options: {\n hideDesktop: { label: 'Hide on Desktop', defaultValue: false, widget: 'toggle' },\n hideMobile: { label: 'Hide on Mobile', defaultValue: false, widget: 'toggle' },\n },\n },\n },\n defaultValues: {\n html: '<div style=\"padding:20px;text-align:center;color:#999;\">Custom HTML Block</div>',\n containerPadding: '10px',\n },\n renderer: {\n renderEditor(values: ContentValues): TemplateResult {\n return html`<div style=\"\">${unsafeHTML(str(values, 'html'))}</div>`;\n },\n renderHtml(values: ContentValues): string {\n return emailTableCell(str(values, 'html'), { padding: str(values, 'containerPadding', '10px') });\n },\n },\n};\n"],"names":["htmlTool","values","html","unsafeHTML","str","emailTableCell"],"mappings":";;;AAgBO,MAAMA,IAA8B;AAAA,EACzC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,uBAAuB,CAAC,SAAS,KAAK;AAAA,EACtC,UAAU;AAAA,EACV,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,SAAS;AAAA,QACP,MAAM;AAAA,UACJ,OAAO;AAAA,UACP,cAAc;AAAA,UACd,QAAQ;AAAA,QAAA;AAAA,MACV;AAAA,IACF;AAAA,IAEF,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS,EAAE,kBAAkB,EAAE,OAAO,WAAW,cAAc,QAAQ,QAAQ,OAAA,EAAO;AAAA,IAAE;AAAA,IAE1F,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,QACP,aAAa,EAAE,OAAO,mBAAmB,cAAc,IAAO,QAAQ,SAAA;AAAA,QACtE,YAAY,EAAE,OAAO,kBAAkB,cAAc,IAAO,QAAQ,SAAA;AAAA,MAAS;AAAA,IAC/E;AAAA,EACF;AAAA,EAEF,eAAe;AAAA,IACb,MAAM;AAAA,IACN,kBAAkB;AAAA,EAAA;AAAA,EAEpB,UAAU;AAAA,IACR,aAAaC,GAAuC;AAClD,aAAOC,kBAAqBC,EAAWC,EAAIH,GAAQ,MAAM,CAAC,CAAC;AAAA,IAC7D;AAAA,IACA,WAAWA,GAA+B;AACxC,aAAOI,EAAeD,EAAIH,GAAQ,MAAM,GAAG,EAAE,SAASG,EAAIH,GAAQ,oBAAoB,MAAM,EAAA,CAAG;AAAA,IACjG;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"html-tool-RhawxTfJ.js","sources":["../src/tools/built-in/html-tool.ts"],"sourcesContent":["/**\n * @module html-tool\n *\n * Raw HTML content block for custom code injection.\n *\n * Email compatibility: Content is inserted as-is inside a table cell.\n * The user is responsible for email-safe HTML in this block.\n */\n\nimport { html, TemplateResult } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport type { ContentValues } from '@emabuild/types';\nimport type { LitToolDefinition } from '../tool-registry.js';\nimport { str } from '../helpers/value-extractor.js';\nimport { emailTableCell } from '../helpers/email-html.js';\n\nexport const htmlTool: LitToolDefinition = {\n name: 'html',\n label: 'HTML',\n icon: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"16 18 22 12 16 6\"/><polyline points=\"8 6 2 12 8 18\"/></svg>`,\n supportedDisplayModes: ['email', 'web'],\n position: 6,\n options: {\n html: {\n title: 'HTML',\n options: {\n html: {\n label: 'Custom HTML',\n defaultValue: '<div style=\"padding:20px;text-align:center;color:#999;\">Custom HTML Block</div>',\n widget: 'rich_text',\n },\n },\n },\n spacing: {\n title: 'Spacing',\n options: { containerPadding: { label: 'Padding', defaultValue: '10px', widget: 'text' } },\n },\n general: {\n title: 'General',\n options: {\n hideDesktop: { label: 'Hide on Desktop', defaultValue: false, widget: 'toggle' },\n hideMobile: { label: 'Hide on Mobile', defaultValue: false, widget: 'toggle' },\n },\n },\n },\n defaultValues: {\n html: '<div style=\"padding:20px;text-align:center;color:#999;\">Custom HTML Block</div>',\n containerPadding: '10px',\n },\n renderer: {\n renderEditor(values: ContentValues): TemplateResult {\n return html`<div style=\"\">${unsafeHTML(str(values, 'html'))}</div>`;\n },\n renderHtml(values: ContentValues): string {\n return emailTableCell(str(values, 'html'), { padding: str(values, 'containerPadding', '10px') });\n },\n },\n};\n"],"names":["htmlTool","values","html","unsafeHTML","str","emailTableCell"],"mappings":";;;AAgBO,MAAMA,IAA8B;AAAA,EACzC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,uBAAuB,CAAC,SAAS,KAAK;AAAA,EACtC,UAAU;AAAA,EACV,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,SAAS;AAAA,QACP,MAAM;AAAA,UACJ,OAAO;AAAA,UACP,cAAc;AAAA,UACd,QAAQ;AAAA,QAAA;AAAA,MACV;AAAA,IACF;AAAA,IAEF,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS,EAAE,kBAAkB,EAAE,OAAO,WAAW,cAAc,QAAQ,QAAQ,OAAA,EAAO;AAAA,IAAE;AAAA,IAE1F,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,QACP,aAAa,EAAE,OAAO,mBAAmB,cAAc,IAAO,QAAQ,SAAA;AAAA,QACtE,YAAY,EAAE,OAAO,kBAAkB,cAAc,IAAO,QAAQ,SAAA;AAAA,MAAS;AAAA,IAC/E;AAAA,EACF;AAAA,EAEF,eAAe;AAAA,IACb,MAAM;AAAA,IACN,kBAAkB;AAAA,EAAA;AAAA,EAEpB,UAAU;AAAA,IACR,aAAaC,GAAuC;AAClD,aAAOC,kBAAqBC,EAAWC,EAAIH,GAAQ,MAAM,CAAC,CAAC;AAAA,IAC7D;AAAA,IACA,WAAWA,GAA+B;AACxC,aAAOI,EAAeD,EAAIH,GAAQ,MAAM,GAAG,EAAE,SAASG,EAAIH,GAAQ,oBAAoB,MAAM,EAAA,CAAG;AAAA,IACjG;AAAA,EAAA;AAEJ;"}
@@ -1,6 +1,6 @@
1
1
  import { css as _, LitElement as T, nothing as x, html as d } from "lit";
2
2
  import { property as v, customElement as S, state as E } from "lit/decorators.js";
3
- import { unsafeHTML as ie } from "lit/directives/unsafe-html.js";
3
+ import { unsafeHTML as J } from "lit/directives/unsafe-html.js";
4
4
  import { styleMap as He } from "lit/directives/style-map.js";
5
5
  import { repeat as ye } from "lit/directives/repeat.js";
6
6
  class B {
@@ -77,7 +77,7 @@ function Ce(...e) {
77
77
  if (ze(t)) return t;
78
78
  return "#ffffff";
79
79
  }
80
- function te(e, t = 0) {
80
+ function oe(e, t = 0) {
81
81
  return typeof e == "number" ? e : typeof e == "string" && parseInt(e, 10) || t;
82
82
  }
83
83
  function Ue(e) {
@@ -299,20 +299,20 @@ function ve(e) {
299
299
  if (y === "text" || y === "heading" || y === "paragraph") {
300
300
  const C = ze(f.color) ? f.color : n, A = Ce(f.backgroundColor, $), I = V(C, A);
301
301
  if (I !== null) {
302
- const Q = te(f.fontSize, 14), Oe = ["700", "800", "900"].includes(f.fontWeight || ""), ke = Q >= 18 || Q >= 14 && Oe ? 3 : 4.5;
302
+ const Q = oe(f.fontSize, 14), Oe = ["700", "800", "900"].includes(f.fontWeight || ""), ke = Q >= 18 || Q >= 14 && Oe ? 3 : 4.5;
303
303
  I < ke && t.push({ severity: I < 3 ? "error" : "warning", rule: "color-contrast", message: `Ratio ${I.toFixed(1)}:1 (min ${ke}:1). "${C}" on "${A}".`, element: w, elementId: m.id });
304
304
  }
305
- const W = te(f.fontSize, 14);
305
+ const W = oe(f.fontSize, 14);
306
306
  y !== "heading" && W > 0 && W < 12 && t.push({ severity: "warning", rule: "font-size", message: `Font size ${W}px below 12px minimum.`, element: w, elementId: m.id });
307
- const ee = Ue(f.lineHeight);
308
- ee !== null && ee < 1.2 && y !== "heading" && t.push({ severity: "warning", rule: "line-height", message: `Line height ${String(f.lineHeight)} too tight (min 1.5x).`, element: w, elementId: m.id }), f.textAlign === "justify" && t.push({ severity: "warning", rule: "text-justify", message: "Justified text reduces readability.", element: w, elementId: m.id });
307
+ const te = Ue(f.lineHeight);
308
+ te !== null && te < 1.2 && y !== "heading" && t.push({ severity: "warning", rule: "line-height", message: `Line height ${String(f.lineHeight)} too tight (min 1.5x).`, element: w, elementId: m.id }), f.textAlign === "justify" && t.push({ severity: "warning", rule: "text-justify", message: "Justified text reduces readability.", element: w, elementId: m.id });
309
309
  }
310
310
  if (y === "button") {
311
311
  const C = f.backgroundColor || "#3b82f6", A = f.textColor || "#ffffff", I = V(A, C);
312
312
  I !== null && I < 4.5 && t.push({ severity: I < 3 ? "error" : "warning", rule: "color-contrast", message: `Button contrast ${I.toFixed(1)}:1 (min 4.5:1).`, element: w, elementId: m.id });
313
313
  const W = V(C, $);
314
314
  W !== null && W < 3 && t.push({ severity: "warning", rule: "btn-visibility", message: `Button blends with background (${W.toFixed(1)}:1).`, element: w, elementId: m.id }), (f.text || "").trim() || t.push({ severity: "error", rule: "link-text", message: "Button has no visible text.", element: w, elementId: m.id });
315
- const ee = (f.buttonPadding || "10px 20px").split(/\s+/), Q = te(f.fontSize, 14) + te(ee[0], 10) * 2;
315
+ const te = (f.buttonPadding || "10px 20px").split(/\s+/), Q = oe(f.fontSize, 14) + oe(te[0], 10) * 2;
316
316
  Q < 44 && t.push({ severity: "info", rule: "touch-target", message: `Button height ~${Q}px (min 44px).`, element: w, elementId: m.id });
317
317
  }
318
318
  if (y === "heading" && (s = !0, a.push(f.headingType || "h1")), y === "text" || y === "paragraph") {
@@ -519,13 +519,13 @@ function Ke(e, t, o = {}) {
519
519
  function de(e, t) {
520
520
  return e.body.rows.find((o) => o.id === t);
521
521
  }
522
- function oe(e, t) {
522
+ function re(e, t) {
523
523
  for (const o of e.body.rows) {
524
524
  const r = o.columns.find((i) => i.id === t);
525
525
  if (r) return r;
526
526
  }
527
527
  }
528
- function re(e, t) {
528
+ function ie(e, t) {
529
529
  for (const o of e.body.rows)
530
530
  for (const r of o.columns) {
531
531
  const i = r.contents.find((n) => n.id === t);
@@ -722,13 +722,13 @@ class Ze {
722
722
  // ── Column Operations ──────────────────────────────────────
723
723
  /** Update column-level values. Returns true if updated. */
724
724
  updateColumnValues(t, o) {
725
- const r = oe(this.design, t);
725
+ const r = re(this.design, t);
726
726
  return r ? (this.history.push(this.design), Object.assign(r.values, o), this.notifyChannels("design"), this.emitUpdate("content_updated"), !0) : !1;
727
727
  }
728
728
  // ── Content Operations ─────────────────────────────────────
729
729
  /** Add content to a column at the given index. Returns the inserted content. */
730
730
  addContent(t, o, r) {
731
- const i = oe(this.design, t);
731
+ const i = re(this.design, t);
732
732
  if (!i) return;
733
733
  const n = structuredClone(o);
734
734
  return this.history.push(this.design), r !== void 0 && r >= 0 && r <= i.contents.length ? i.contents.splice(r, 0, n) : i.contents.push(n), this.syncCounters(), this.notifyChannels("design"), this.emitUpdate("content_added", n), n;
@@ -745,13 +745,13 @@ class Ze {
745
745
  }
746
746
  /** Update content values by ID. Returns true if updated. */
747
747
  updateContentValues(t, o) {
748
- const r = re(this.design, t);
748
+ const r = ie(this.design, t);
749
749
  return r ? (this.history.push(this.design), Object.assign(r.values, o), this.notifyChannels("design"), this.emitUpdate("content_updated"), !0) : !1;
750
750
  }
751
751
  /** Move a content block to a different column at a given index. Returns true if moved. */
752
752
  moveContent(t, o, r) {
753
- if (!re(this.design, t)) return !1;
754
- const n = oe(this.design, o);
753
+ if (!ie(this.design, t)) return !1;
754
+ const n = re(this.design, o);
755
755
  if (!n) return !1;
756
756
  this.history.push(this.design);
757
757
  let s;
@@ -769,7 +769,7 @@ class Ze {
769
769
  }
770
770
  /** Duplicate a content block, inserting the copy right after the original */
771
771
  duplicateContent(t) {
772
- const o = re(this.design, t);
772
+ const o = ie(this.design, t);
773
773
  if (o)
774
774
  for (const r of this.design.body.rows)
775
775
  for (const i of r.columns) {
@@ -791,10 +791,10 @@ class Ze {
791
791
  return de(this.design, t);
792
792
  }
793
793
  findColumn(t) {
794
- return oe(this.design, t);
794
+ return re(this.design, t);
795
795
  }
796
796
  findContent(t) {
797
- return re(this.design, t);
797
+ return ie(this.design, t);
798
798
  }
799
799
  findParentColumn(t) {
800
800
  return Je(this.design, t);
@@ -1309,7 +1309,7 @@ const it = [
1309
1309
  const t = p(e, "backgroundColor", "transparent"), o = p(e, "color", "inherit"), r = p(e, "lineHeight", "140%"), i = p(e, "textAlign", "left"), n = be(e), s = p(e, "text");
1310
1310
  return d`
1311
1311
  <div style="background-color:${t};color:${o};line-height:${r};text-align:${i};font-family:${n};">
1312
- ${ie(s)}
1312
+ ${J(s)}
1313
1313
  </div>
1314
1314
  `;
1315
1315
  },
@@ -1389,7 +1389,7 @@ const it = [
1389
1389
  letterSpacing: p(e, "letterSpacing", "normal"),
1390
1390
  fontFamily: be(e)
1391
1391
  }, o = De(e, "Heading");
1392
- return d`<div style=${He(t)}>${ie(o)}</div>`;
1392
+ return d`<div style=${He(t)}>${J(o)}</div>`;
1393
1393
  },
1394
1394
  renderHtml(e) {
1395
1395
  const t = p(e, "containerPadding", "10px"), o = p(e, "fontSize", "22px"), r = p(e, "color", "#000000"), i = p(e, "textAlign", "left"), n = p(e, "fontWeight", "700"), s = p(e, "lineHeight", "140%"), a = p(e, "letterSpacing", "normal"), c = be(e), l = p(e, "headingType", "h1"), u = De(e, "Heading"), h = `<${l} style="margin:0;font-size:${o};color:${r};text-align:${i};font-weight:${n};line-height:${s};letter-spacing:${a};font-family:${c};">${u}</${l}>`;
@@ -1435,7 +1435,7 @@ const it = [
1435
1435
  renderer: {
1436
1436
  renderEditor(e) {
1437
1437
  const t = p(e, "color", "#374151"), o = p(e, "lineHeight", "160%"), r = p(e, "textAlign", "left");
1438
- return d`<div style="color:${t};line-height:${o};text-align:${r};">${ie(p(e, "text"))}</div>`;
1438
+ return d`<div style="color:${t};line-height:${o};text-align:${r};">${J(p(e, "text"))}</div>`;
1439
1439
  },
1440
1440
  renderHtml(e) {
1441
1441
  const t = p(e, "containerPadding", "10px"), o = p(e, "color", "#374151"), r = p(e, "lineHeight", "160%"), i = p(e, "textAlign", "left"), n = p(e, "letterSpacing", "normal"), s = `<div style="font-size:14px;color:${o};line-height:${r};text-align:${i};letter-spacing:${n};word-wrap:break-word;">${p(e, "text")}</div>`;
@@ -1572,7 +1572,7 @@ const it = [
1572
1572
  const { bg: t, color: o } = Pe(e), r = p(e, "fontSize", "14px"), i = p(e, "fontWeight", "700"), n = p(e, "borderRadius", "4px"), s = p(e, "buttonPadding", p(e, "padding", "10px 20px")), a = p(e, "text", "Click Me"), c = p(e, "textAlign", "center"), l = p(e, "buttonWidth", "auto"), u = p(e, "borderWidth", "0px"), h = p(e, "borderColor", t), g = u !== "0px" ? `border:${u} solid ${h};` : "border:none;", b = l === "auto" ? "display:inline-block;" : `display:block;width:${l};`;
1573
1573
  return d`
1574
1574
  <div style="text-align:${c};">
1575
- <a style="${b}background-color:${t};color:${o};font-size:${r};font-weight:${i};border-radius:${n};padding:${s};text-decoration:none;text-align:center;${g}cursor:pointer;font-family:arial,helvetica,sans-serif;">${a}</a>
1575
+ <a style="${b}background-color:${t};color:${o};font-size:${r};font-weight:${i};border-radius:${n};padding:${s};text-decoration:none;text-align:center;${g}cursor:pointer;font-family:arial,helvetica,sans-serif;">${J(a)}</a>
1576
1576
  </div>
1577
1577
  `;
1578
1578
  },
@@ -1643,31 +1643,31 @@ const it = [
1643
1643
  ], Ee = [
1644
1644
  {
1645
1645
  meta: { name: "html", label: "HTML", icon: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>', position: 6 },
1646
- loader: () => import("./html-tool-BxhBGl4L.js").then((e) => e.htmlTool)
1646
+ loader: () => import("./html-tool-RhawxTfJ.js").then((e) => e.htmlTool)
1647
1647
  },
1648
1648
  {
1649
1649
  meta: { name: "social", label: "Social", icon: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"/><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"/></svg>', position: 8 },
1650
- loader: () => import("./social-tool-C1FeCyUm.js").then((e) => e.socialTool)
1650
+ loader: () => import("./social-tool-CUjd50d7.js").then((e) => e.socialTool)
1651
1651
  },
1652
1652
  {
1653
1653
  meta: { name: "menu", label: "Menu", icon: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="4" y1="6" x2="20" y2="6"/><line x1="4" y1="12" x2="20" y2="12"/><line x1="4" y1="18" x2="20" y2="18"/></svg>', position: 9 },
1654
- loader: () => import("./menu-tool-IZqYp8Vb.js").then((e) => e.menuTool)
1654
+ loader: () => import("./menu-tool-BkQwnMyx.js").then((e) => e.menuTool)
1655
1655
  },
1656
1656
  {
1657
1657
  meta: { name: "video", label: "Video", icon: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="5 3 19 12 5 21 5 3"/></svg>', position: 10 },
1658
- loader: () => import("./video-tool-CHhPfHaS.js").then((e) => e.videoTool)
1658
+ loader: () => import("./video-tool-C8evvYgp.js").then((e) => e.videoTool)
1659
1659
  },
1660
1660
  {
1661
1661
  meta: { name: "timer", label: "Timer", icon: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>', position: 11 },
1662
- loader: () => import("./timer-tool-Dpw9p0uW.js").then((e) => e.timerTool)
1662
+ loader: () => import("./timer-tool-CwBZNCmI.js").then((e) => e.timerTool)
1663
1663
  },
1664
1664
  {
1665
1665
  meta: { name: "table", label: "Table", icon: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M3 15h18"/><path d="M9 3v18"/><path d="M15 3v18"/></svg>', position: 12 },
1666
- loader: () => import("./table-tool-BD72-Fuj.js").then((e) => e.tableTool)
1666
+ loader: () => import("./table-tool-Bi0-Rvry.js").then((e) => e.tableTool)
1667
1667
  },
1668
1668
  {
1669
1669
  meta: { name: "form", label: "Form", icon: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M7 7h10"/><path d="M7 12h10"/><path d="M7 17h6"/></svg>', position: 13 },
1670
- loader: () => import("./form-tool-DsPgMShR.js").then((e) => e.formTool)
1670
+ loader: () => import("./form-tool-a_WVnfC2.js").then((e) => e.formTool)
1671
1671
  }
1672
1672
  ];
1673
1673
  function mt(e, t, o) {
@@ -2309,7 +2309,7 @@ se([
2309
2309
  j = se([
2310
2310
  S("me-inline-toolbar")
2311
2311
  ], j);
2312
- var zt = Object.defineProperty, Bt = Object.getOwnPropertyDescriptor, J = (e, t, o, r) => {
2312
+ var zt = Object.defineProperty, Bt = Object.getOwnPropertyDescriptor, X = (e, t, o, r) => {
2313
2313
  for (var i = r > 1 ? void 0 : r ? Bt(t, o) : t, n = e.length - 1, s; n >= 0; n--)
2314
2314
  (s = e[n]) && (i = (r ? s(t, o, i) : s(i)) || i);
2315
2315
  return r && i && zt(t, o, i), i;
@@ -2589,22 +2589,22 @@ M.styles = _`
2589
2589
  }
2590
2590
  .inline-editable:focus { outline: none; }
2591
2591
  `;
2592
- J([
2592
+ X([
2593
2593
  v({ attribute: !1 })
2594
2594
  ], M.prototype, "content", 2);
2595
- J([
2595
+ X([
2596
2596
  v({ attribute: !1 })
2597
2597
  ], M.prototype, "store", 1);
2598
- J([
2598
+ X([
2599
2599
  v({ attribute: !1 })
2600
2600
  ], M.prototype, "toolRegistry", 2);
2601
- J([
2601
+ X([
2602
2602
  E()
2603
2603
  ], M.prototype, "editing", 2);
2604
- M = J([
2604
+ M = X([
2605
2605
  S("me-content-renderer")
2606
2606
  ], M);
2607
- var Wt = Object.defineProperty, jt = Object.getOwnPropertyDescriptor, X = (e, t, o, r) => {
2607
+ var Wt = Object.defineProperty, jt = Object.getOwnPropertyDescriptor, Z = (e, t, o, r) => {
2608
2608
  for (var i = r > 1 ? void 0 : r ? jt(t, o) : t, n = e.length - 1, s; n >= 0; n--)
2609
2609
  (s = e[n]) && (i = (r ? s(t, o, i) : s(i)) || i);
2610
2610
  return r && i && Wt(t, o, i), i;
@@ -2671,19 +2671,19 @@ L.styles = _`
2671
2671
  opacity: 1;
2672
2672
  }
2673
2673
  `;
2674
- X([
2674
+ Z([
2675
2675
  v({ attribute: !1 })
2676
2676
  ], L.prototype, "column", 2);
2677
- X([
2677
+ Z([
2678
2678
  v({ attribute: !1 })
2679
2679
  ], L.prototype, "store", 1);
2680
- X([
2680
+ Z([
2681
2681
  v({ attribute: !1 })
2682
2682
  ], L.prototype, "toolRegistry", 2);
2683
- X([
2683
+ Z([
2684
2684
  v({ type: Number })
2685
2685
  ], L.prototype, "widthPercent", 2);
2686
- L = X([
2686
+ L = Z([
2687
2687
  S("me-column-renderer")
2688
2688
  ], L);
2689
2689
  var Ot = Object.defineProperty, Ht = Object.getOwnPropertyDescriptor, ae = (e, t, o, r) => {
@@ -2911,7 +2911,7 @@ ae([
2911
2911
  O = ae([
2912
2912
  S("me-row-renderer")
2913
2913
  ], O);
2914
- var Vt = Object.defineProperty, Ft = Object.getOwnPropertyDescriptor, Z = (e, t, o, r) => {
2914
+ var Vt = Object.defineProperty, Ft = Object.getOwnPropertyDescriptor, ee = (e, t, o, r) => {
2915
2915
  for (var i = r > 1 ? void 0 : r ? Ft(t, o) : t, n = e.length - 1, s; n >= 0; n--)
2916
2916
  (s = e[n]) && (i = (r ? s(t, o, i) : s(i)) || i);
2917
2917
  return r && i && Vt(t, o, i), i;
@@ -3283,19 +3283,19 @@ z.styles = _`
3283
3283
  background: var(--me-primary);
3284
3284
  }
3285
3285
  `;
3286
- Z([
3286
+ ee([
3287
3287
  v({ attribute: !1 })
3288
3288
  ], z.prototype, "store", 1);
3289
- Z([
3289
+ ee([
3290
3290
  v({ attribute: !1 })
3291
3291
  ], z.prototype, "toolRegistry", 2);
3292
- Z([
3292
+ ee([
3293
3293
  E()
3294
3294
  ], z.prototype, "quickAddIndex", 2);
3295
- Z([
3295
+ ee([
3296
3296
  E()
3297
3297
  ], z.prototype, "quickAddPos", 2);
3298
- z = Z([
3298
+ z = ee([
3299
3299
  S("me-editor-canvas")
3300
3300
  ], z);
3301
3301
  var Ut = Object.defineProperty, qt = Object.getOwnPropertyDescriptor, je = (e, t, o, r) => {
@@ -3589,7 +3589,7 @@ let H = class extends T {
3589
3589
  <div class="tool-item"
3590
3590
  draggable="true"
3591
3591
  @dragstart=${(t) => this.handleDragStart(t, e.name)}>
3592
- <div class="tool-icon">${ie(e.icon)}</div>
3592
+ <div class="tool-icon">${J(e.icon)}</div>
3593
3593
  <span>${e.label}</span>
3594
3594
  </div>
3595
3595
  `;
@@ -4433,4 +4433,4 @@ export {
4433
4433
  p as s,
4434
4434
  Et as t
4435
4435
  };
4436
- //# sourceMappingURL=index-2S5kBS5_.js.map
4436
+ //# sourceMappingURL=index-CLXq1CZC.js.map