@pinkpixel/marzipan 1.2.1 → 1.2.2

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.
@@ -11,26 +11,23 @@ export function buildTableMarkdown(rowsOrOpts, colsArg) {
11
11
  const headers = opts.headers ?? Array.from({ length: safeCols }, (_, i) => `Header ${i + 1}`);
12
12
  const alignment = opts.alignment ?? Array(safeCols).fill('left');
13
13
  const headerRow = headers.slice(0, safeCols).map(h => h || ' ').join(' | ');
14
+ // Compute per-column widths so body rows match the header row width.
15
+ // This ensures clicks in the overlay correctly land inside cell text in the textarea.
16
+ const cellWidths = headers.slice(0, safeCols).map(h => Math.max(3, (h || ' ').length));
14
17
  const divider = Array.from({ length: safeCols }, (_, i) => {
15
18
  const align = alignment[i] ?? 'left';
19
+ const w = cellWidths[i];
16
20
  if (align === 'center')
17
- return ':---:';
21
+ return ':' + '-'.repeat(Math.max(1, w - 2)) + ':';
18
22
  if (align === 'right')
19
- return '---:';
20
- return '---';
23
+ return '-'.repeat(Math.max(2, w - 1)) + ':';
24
+ return '-'.repeat(w);
21
25
  }).join(' | ');
22
- const body = Array.from({ length: safeRows }, () => Array.from({ length: safeCols }, () => ' ').join(' | '))
26
+ const body = Array.from({ length: safeRows }, () => cellWidths.map(w => ' '.repeat(w)).join(' | '))
23
27
  .map((row) => `| ${row} |`)
24
28
  .join('\n');
25
- // Build annotation comment for non-default styles
26
- let annotation = '';
27
- const parts = [];
28
- if (opts.style && opts.style !== 'default')
29
- parts.push(`style=${opts.style}`);
30
- if (opts.borderStyle && opts.borderStyle !== 'solid')
31
- parts.push(`border=${opts.borderStyle}`);
32
- if (parts.length)
33
- annotation = `<!-- mz-table: ${parts.join(' ')} -->\n`;
29
+ // Build annotation comment when a non-default header color is chosen.
30
+ const annotation = opts.headerColor ? `<!-- mz-table: header=${opts.headerColor} -->\n` : '';
34
31
  return `${annotation}| ${headerRow} |\n| ${divider} |\n${body}\n`;
35
32
  }
36
33
  export function resolvePositiveInteger(value, fallback) {
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/plugins/utils/table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/plugins/utils/table.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AACA;;;GAGG;AAIH;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,GAAQ,UAs5B/C"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AACA;;;GAGG;AAIH;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,GAAQ,UA+3B/C"}
package/dist/styles.js CHANGED
@@ -796,42 +796,71 @@ export function generateStyles(options = {}) {
796
796
  height: 2px !important;
797
797
  }
798
798
 
799
- /* Tables - GFM-style table rendering */
799
+ /* ──────────────────────────────────────────────────────────────────
800
+ * TABLES
801
+ *
802
+ * Strategy: in edit mode the raw pipe lines (table-row, table-separator,
803
+ * mz-table-annotation) stay as plain <div> text lines — perfectly
804
+ * line-aligned with the textarea because they are just text. The
805
+ * postProcessHTML assembles a real <table> in the DOM alongside those
806
+ * divs, but we hide the <table> in edit mode and show only the raw lines.
807
+ * In preview mode we flip: hide the raw lines, show the <table>.
808
+ * ────────────────────────────────────────────────────────────────── */
809
+
810
+ /* Edit mode: hide the rendered <table>, show the raw lines */
811
+ .marzipan-container:not(.preview-mode) .marzipan-preview .marzipan-table {
812
+ display: none !important;
813
+ }
814
+
815
+ /* Edit mode: dim annotation comment and separator so they look secondary */
816
+ .marzipan-container:not(.preview-mode) .marzipan-preview .mz-table-annotation,
817
+ .marzipan-container:not(.preview-mode) .marzipan-preview .table-separator {
818
+ opacity: 0.45 !important;
819
+ }
820
+
821
+ /* Preview mode: hide raw pipe lines, show the <table> */
822
+ .marzipan-container.preview-mode .marzipan-preview .table-row,
823
+ .marzipan-container.preview-mode .marzipan-preview .table-separator,
824
+ .marzipan-container.preview-mode .marzipan-preview .mz-table-annotation {
825
+ display: none !important;
826
+ }
827
+
828
+ /* ── Rendered table styles (preview mode only) ── */
800
829
  .marzipan-preview .marzipan-table {
801
830
  border-collapse: collapse !important;
802
- margin: 1em 0 !important;
831
+ margin: 0.5em 0 !important;
803
832
  width: auto !important;
804
- overflow: auto !important;
805
833
  display: table !important;
806
834
  }
807
-
835
+
808
836
  .marzipan-preview .marzipan-table th,
809
837
  .marzipan-preview .marzipan-table td {
810
838
  border: 1px solid var(--border, rgba(128,128,128,0.4)) !important;
811
- padding: 0.4em 0.8em !important;
839
+ padding: 0.5em 1em !important;
812
840
  text-align: left !important;
813
841
  }
814
-
842
+
815
843
  .marzipan-preview .marzipan-table th {
816
844
  background: var(--bg-secondary, rgba(128,128,128,0.15)) !important;
817
845
  font-weight: 600 !important;
846
+ padding: 0.65em 1em !important;
818
847
  }
819
-
848
+
820
849
  .marzipan-preview .marzipan-table tr:nth-child(even) td {
821
850
  background: var(--bg-secondary, rgba(128,128,128,0.05)) !important;
822
851
  }
823
-
852
+
824
853
  .marzipan-preview .marzipan-table thead,
825
854
  .marzipan-preview .marzipan-table tbody,
826
855
  .marzipan-preview .marzipan-table tr {
827
856
  display: table-row-group !important;
828
857
  }
829
-
858
+
830
859
  .marzipan-preview .marzipan-table tr {
831
860
  display: table-row !important;
832
861
  }
833
862
 
834
- /* Table alignment (parsed from GFM :--- :---: ---: markers) */
863
+ /* Column alignment */
835
864
  .marzipan-preview .marzipan-table th[style*="text-align: center"],
836
865
  .marzipan-preview .marzipan-table td[style*="text-align: center"] {
837
866
  text-align: center !important;
@@ -841,65 +870,13 @@ export function generateStyles(options = {}) {
841
870
  text-align: right !important;
842
871
  }
843
872
 
844
- /* Table style presets */
845
- .marzipan-preview .marzipan-table.mz-table-striped tr:nth-child(odd) td {
846
- background: transparent !important;
847
- }
848
- .marzipan-preview .marzipan-table.mz-table-striped tr:nth-child(even) td {
849
- background: var(--bg-secondary, rgba(128,128,128,0.08)) !important;
850
- }
851
-
852
- .marzipan-preview .marzipan-table.mz-table-rainbow tr:nth-child(even) td { background: transparent !important; }
853
- .marzipan-preview .marzipan-table.mz-table-rainbow tbody tr:nth-child(6n+1) td { background: rgba(236,72,153,0.10) !important; }
854
- .marzipan-preview .marzipan-table.mz-table-rainbow tbody tr:nth-child(6n+2) td { background: rgba(139,92,246,0.10) !important; }
855
- .marzipan-preview .marzipan-table.mz-table-rainbow tbody tr:nth-child(6n+3) td { background: rgba(6,182,212,0.10) !important; }
856
- .marzipan-preview .marzipan-table.mz-table-rainbow tbody tr:nth-child(6n+4) td { background: rgba(16,185,129,0.10) !important; }
857
- .marzipan-preview .marzipan-table.mz-table-rainbow tbody tr:nth-child(6n+5) td { background: rgba(245,158,11,0.10) !important; }
858
- .marzipan-preview .marzipan-table.mz-table-rainbow tbody tr:nth-child(6n+6) td { background: rgba(59,130,246,0.10) !important; }
859
- .marzipan-preview .marzipan-table.mz-table-rainbow th {
860
- background: rgba(236,72,153,0.18) !important;
861
- }
862
-
863
- .marzipan-preview .marzipan-table.mz-table-minimal {
864
- border: none !important;
865
- }
866
- .marzipan-preview .marzipan-table.mz-table-minimal th,
867
- .marzipan-preview .marzipan-table.mz-table-minimal td {
868
- border: none !important;
869
- border-bottom: 1px solid var(--border, rgba(128,128,128,0.25)) !important;
870
- }
871
- .marzipan-preview .marzipan-table.mz-table-minimal th {
872
- border-bottom: 2px solid var(--border, rgba(128,128,128,0.5)) !important;
873
- background: transparent !important;
874
- }
875
- .marzipan-preview .marzipan-table.mz-table-minimal tr:nth-child(even) td {
876
- background: transparent !important;
877
- }
878
-
879
- /* Table border style presets */
880
- .marzipan-preview .marzipan-table.mz-border-dashed th,
881
- .marzipan-preview .marzipan-table.mz-border-dashed td {
882
- border-style: dashed !important;
883
- }
884
- .marzipan-preview .marzipan-table.mz-border-dotted th,
885
- .marzipan-preview .marzipan-table.mz-border-dotted td {
886
- border-style: dotted !important;
887
- }
888
- .marzipan-preview .marzipan-table.mz-border-double th,
889
- .marzipan-preview .marzipan-table.mz-border-double td {
890
- border-style: double !important;
891
- border-width: 3px !important;
892
- }
893
- .marzipan-preview .marzipan-table.mz-border-none th,
894
- .marzipan-preview .marzipan-table.mz-border-none td {
895
- border-color: transparent !important;
896
- }
897
-
898
- /* In preview mode - hide table syntax markers */
899
- .marzipan-container.preview-mode .marzipan-wrapper .marzipan-preview .table-row,
900
- .marzipan-container.preview-mode .marzipan-wrapper .marzipan-preview .table-separator {
901
- display: none !important;
902
- }
873
+ /* Header color options */
874
+ .marzipan-preview .marzipan-table.mz-header-pink th { background: rgba(236,72,153,0.22) !important; }
875
+ .marzipan-preview .marzipan-table.mz-header-purple th { background: rgba(139,92,246,0.22) !important; }
876
+ .marzipan-preview .marzipan-table.mz-header-blue th { background: rgba(59,130,246,0.22) !important; }
877
+ .marzipan-preview .marzipan-table.mz-header-cyan th { background: rgba(6,182,212,0.22) !important; }
878
+ .marzipan-preview .marzipan-table.mz-header-green th { background: rgba(16,185,129,0.22) !important; }
879
+ .marzipan-preview .marzipan-table.mz-header-amber th { background: rgba(245,158,11,0.22) !important; }
903
880
 
904
881
  /* Images - responsive and styled */
905
882
  .marzipan-preview .marzipan-image {
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,UAAe,EAAE;IAC9C,MAAM,EACJ,QAAQ,GAAG,MAAM,EACjB,UAAU,GAAG,GAAG;IAChB,iFAAiF;IACjF,UAAU,GAAG,kNAAkN,EAC/N,OAAO,GAAG,MAAM,EAChB,KAAK,GAAG,IAAI,EACZ,MAAM,GAAG,EAAE,EACZ,GAAG,OAAO,CAAC;IAEZ,4BAA4B;IAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;;;UAI9C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,OAAO,GAAG,OAAO,KAAK,GAAG,cAAc,CAAC;IAC1C,CAAC,CAAC;SACD,IAAI,CAAC,YAAY,CAAC;;;GAG1B,CAAC,CAAC,CAAC,EAAE,CAAC;IAEP,uCAAuC;IACvC,MAAM,SAAS,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyCD,SAAS,CAAC,CAAC,CAAC;;QAEZ,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA0CH,UAAU;;6CAEc,QAAQ;iDACJ,UAAU;;;;;;;;;yCASlB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAmmB3B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAiCV,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkJzB,YAAY;GACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,UAAe,EAAE;IAC9C,MAAM,EACJ,QAAQ,GAAG,MAAM,EACjB,UAAU,GAAG,GAAG;IAChB,iFAAiF;IACjF,UAAU,GAAG,kNAAkN,EAC/N,OAAO,GAAG,MAAM,EAChB,KAAK,GAAG,IAAI,EACZ,MAAM,GAAG,EAAE,EACZ,GAAG,OAAO,CAAC;IAEZ,4BAA4B;IAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;;;UAI9C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,OAAO,GAAG,OAAO,KAAK,GAAG,cAAc,CAAC;IAC1C,CAAC,CAAC;SACD,IAAI,CAAC,YAAY,CAAC;;;GAG1B,CAAC,CAAC,CAAC,EAAE,CAAC;IAEP,uCAAuC;IACvC,MAAM,SAAS,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyCD,SAAS,CAAC,CAAC,CAAC;;QAEZ,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA0CH,UAAU;;6CAEc,QAAQ;iDACJ,UAAU;;;;;;;;;yCASlB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAmmB3B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAiCV,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2HzB,YAAY;GACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ function b(r, o) {
2
+ let e;
3
+ typeof r == "number" ? e = { rows: r, cols: o ?? 2 } : e = r;
4
+ const n = Math.max(1, Math.floor(e.rows)), a = Math.max(1, Math.floor(e.cols)), m = e.headers ?? Array.from({ length: a }, (t, l) => `Header ${l + 1}`), d = e.alignment ?? Array(a).fill("left"), u = m.slice(0, a).map((t) => t || " ").join(" | "), f = m.slice(0, a).map((t) => Math.max(3, (t || " ").length)), p = Array.from({ length: a }, (t, l) => {
5
+ const c = d[l] ?? "left", i = f[l];
6
+ return c === "center" ? ":" + "-".repeat(Math.max(1, i - 2)) + ":" : c === "right" ? "-".repeat(Math.max(2, i - 1)) + ":" : "-".repeat(i);
7
+ }).join(" | "), y = Array.from(
8
+ { length: n },
9
+ () => f.map((t) => " ".repeat(t)).join(" | ")
10
+ ).map((t) => `| ${t} |`).join(`
11
+ `);
12
+ let h = "";
13
+ const s = [];
14
+ return e.style && e.style !== "default" && s.push(`style=${e.style}`), e.borderStyle && e.borderStyle !== "solid" && s.push(`border=${e.borderStyle}`), s.length && (h = `<!-- mz-table: ${s.join(" ")} -->
15
+ `), `${h}| ${u} |
16
+ | ${p} |
17
+ ${y}
18
+ `;
19
+ }
20
+ function g(r, o) {
21
+ if (r === null)
22
+ return null;
23
+ const e = r.trim();
24
+ if (!e)
25
+ return Math.max(1, o);
26
+ const n = Number.parseInt(e, 10);
27
+ return Number.isNaN(n) || n < 1 ? Math.max(1, o) : n;
28
+ }
29
+ export {
30
+ b,
31
+ g as r
32
+ };
33
+ //# sourceMappingURL=table-DkW9Xd6r.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-DkW9Xd6r.js","sources":["../src/plugins/utils/table.ts"],"sourcesContent":["export type ColumnAlignment = 'left' | 'center' | 'right';\nexport type TableStyle = 'default' | 'striped' | 'rainbow' | 'minimal';\nexport type BorderStyle = 'solid' | 'dashed' | 'dotted' | 'double' | 'none';\n\nexport interface TableBuildOptions {\n rows: number;\n cols: number;\n headers?: string[];\n alignment?: ColumnAlignment[];\n style?: TableStyle;\n borderStyle?: BorderStyle;\n}\n\nexport function buildTableMarkdown(rowsOrOpts: number | TableBuildOptions, colsArg?: number): string {\n let opts: TableBuildOptions;\n if (typeof rowsOrOpts === 'number') {\n opts = { rows: rowsOrOpts, cols: colsArg ?? 2 };\n } else {\n opts = rowsOrOpts;\n }\n\n const safeRows = Math.max(1, Math.floor(opts.rows));\n const safeCols = Math.max(1, Math.floor(opts.cols));\n const headers = opts.headers ?? Array.from({ length: safeCols }, (_, i) => `Header ${i + 1}`);\n const alignment = opts.alignment ?? Array(safeCols).fill('left' as ColumnAlignment);\n\n const headerRow = headers.slice(0, safeCols).map(h => h || ' ').join(' | ');\n\n // Compute per-column widths so body rows match the header row width.\n // This ensures clicks in the overlay correctly land inside cell text in the textarea.\n const cellWidths = headers.slice(0, safeCols).map(h => Math.max(3, (h || ' ').length));\n\n const divider = Array.from({ length: safeCols }, (_, i) => {\n const align = alignment[i] ?? 'left';\n const w = cellWidths[i];\n if (align === 'center') return ':' + '-'.repeat(Math.max(1, w - 2)) + ':';\n if (align === 'right') return '-'.repeat(Math.max(2, w - 1)) + ':';\n return '-'.repeat(w);\n }).join(' | ');\n\n const body = Array.from({ length: safeRows }, () =>\n cellWidths.map(w => ' '.repeat(w)).join(' | '),\n )\n .map((row) => `| ${row} |`)\n .join('\\n');\n\n // Build annotation comment for non-default styles\n let annotation = '';\n const parts: string[] = [];\n if (opts.style && opts.style !== 'default') parts.push(`style=${opts.style}`);\n if (opts.borderStyle && opts.borderStyle !== 'solid') parts.push(`border=${opts.borderStyle}`);\n if (parts.length) annotation = `<!-- mz-table: ${parts.join(' ')} -->\\n`;\n\n return `${annotation}| ${headerRow} |\\n| ${divider} |\\n${body}\\n`;\n}\n\nexport function resolvePositiveInteger(value: string | null, fallback: number): number | null {\n if (value === null) {\n return null;\n }\n\n const trimmed = value.trim();\n if (!trimmed) {\n return Math.max(1, fallback);\n }\n\n const parsed = Number.parseInt(trimmed, 10);\n if (Number.isNaN(parsed) || parsed < 1) {\n return Math.max(1, fallback);\n }\n\n return parsed;\n}\n"],"names":["buildTableMarkdown","rowsOrOpts","colsArg","opts","safeRows","safeCols","headers","_","i","alignment","headerRow","h","cellWidths","divider","align","w","body","row","annotation","parts","resolvePositiveInteger","value","fallback","trimmed","parsed"],"mappings":"AAaO,SAASA,EAAmBC,GAAwCC,GAA0B;AACnG,MAAIC;AACJ,EAAI,OAAOF,KAAe,WACxBE,IAAO,EAAE,MAAMF,GAAY,MAAMC,KAAW,EAAA,IAE5CC,IAAOF;AAGT,QAAMG,IAAW,KAAK,IAAI,GAAG,KAAK,MAAMD,EAAK,IAAI,CAAC,GAC5CE,IAAW,KAAK,IAAI,GAAG,KAAK,MAAMF,EAAK,IAAI,CAAC,GAC5CG,IAAUH,EAAK,WAAW,MAAM,KAAK,EAAE,QAAQE,EAAA,GAAY,CAACE,GAAGC,MAAM,UAAUA,IAAI,CAAC,EAAE,GACtFC,IAAYN,EAAK,aAAa,MAAME,CAAQ,EAAE,KAAK,MAAyB,GAE5EK,IAAYJ,EAAQ,MAAM,GAAGD,CAAQ,EAAE,IAAI,CAAAM,MAAKA,KAAK,GAAG,EAAE,KAAK,KAAK,GAIpEC,IAAaN,EAAQ,MAAM,GAAGD,CAAQ,EAAE,IAAI,CAAAM,MAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,MAAM,CAAC,GAE/EE,IAAU,MAAM,KAAK,EAAE,QAAQR,EAAA,GAAY,CAACE,GAAGC,MAAM;AACzD,UAAMM,IAAQL,EAAUD,CAAC,KAAK,QACxBO,IAAIH,EAAWJ,CAAC;AACtB,WAAIM,MAAU,WAAiB,MAAM,IAAI,OAAO,KAAK,IAAI,GAAGC,IAAI,CAAC,CAAC,IAAI,MAClED,MAAU,UAAgB,IAAI,OAAO,KAAK,IAAI,GAAGC,IAAI,CAAC,CAAC,IAAI,MACxD,IAAI,OAAOA,CAAC;AAAA,EACrB,CAAC,EAAE,KAAK,KAAK,GAEPC,IAAO,MAAM;AAAA,IAAK,EAAE,QAAQZ,EAAA;AAAA,IAAY,MAC5CQ,EAAW,IAAI,CAAAG,MAAK,IAAI,OAAOA,CAAC,CAAC,EAAE,KAAK,KAAK;AAAA,EAAA,EAE5C,IAAI,CAACE,MAAQ,KAAKA,CAAG,IAAI,EACzB,KAAK;AAAA,CAAI;AAGZ,MAAIC,IAAa;AACjB,QAAMC,IAAkB,CAAA;AACxB,SAAIhB,EAAK,SAASA,EAAK,UAAU,eAAiB,KAAK,SAASA,EAAK,KAAK,EAAE,GACxEA,EAAK,eAAeA,EAAK,gBAAgB,aAAe,KAAK,UAAUA,EAAK,WAAW,EAAE,GACzFgB,EAAM,WAAQD,IAAa,kBAAkBC,EAAM,KAAK,GAAG,CAAC;AAAA,IAEzD,GAAGD,CAAU,KAAKR,CAAS;AAAA,IAASG,CAAO;AAAA,EAAOG,CAAI;AAAA;AAC/D;AAEO,SAASI,EAAuBC,GAAsBC,GAAiC;AAC5F,MAAID,MAAU;AACZ,WAAO;AAGT,QAAME,IAAUF,EAAM,KAAA;AACtB,MAAI,CAACE;AACH,WAAO,KAAK,IAAI,GAAGD,CAAQ;AAG7B,QAAME,IAAS,OAAO,SAASD,GAAS,EAAE;AAC1C,SAAI,OAAO,MAAMC,CAAM,KAAKA,IAAS,IAC5B,KAAK,IAAI,GAAGF,CAAQ,IAGtBE;AACT;"}
@@ -0,0 +1,31 @@
1
+ function M(r, o) {
2
+ let e;
3
+ typeof r == "number" ? e = { rows: r, cols: o ?? 2 } : e = r;
4
+ const n = Math.max(1, Math.floor(e.rows)), a = Math.max(1, Math.floor(e.cols)), l = e.headers ?? Array.from({ length: a }, (t, s) => `Header ${s + 1}`), c = e.alignment ?? Array(a).fill("left"), f = l.slice(0, a).map((t) => t || " ").join(" | "), m = l.slice(0, a).map((t) => Math.max(3, (t || " ").length)), d = Array.from({ length: a }, (t, s) => {
5
+ const h = c[s] ?? "left", i = m[s];
6
+ return h === "center" ? ":" + "-".repeat(Math.max(1, i - 2)) + ":" : h === "right" ? "-".repeat(Math.max(2, i - 1)) + ":" : "-".repeat(i);
7
+ }).join(" | "), u = Array.from(
8
+ { length: n },
9
+ () => m.map((t) => " ".repeat(t)).join(" | ")
10
+ ).map((t) => `| ${t} |`).join(`
11
+ `);
12
+ return `${e.headerColor ? `<!-- mz-table: header=${e.headerColor} -->
13
+ ` : ""}| ${f} |
14
+ | ${d} |
15
+ ${u}
16
+ `;
17
+ }
18
+ function g(r, o) {
19
+ if (r === null)
20
+ return null;
21
+ const e = r.trim();
22
+ if (!e)
23
+ return Math.max(1, o);
24
+ const n = Number.parseInt(e, 10);
25
+ return Number.isNaN(n) || n < 1 ? Math.max(1, o) : n;
26
+ }
27
+ export {
28
+ M as b,
29
+ g as r
30
+ };
31
+ //# sourceMappingURL=table-DtH1DJ20.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-DtH1DJ20.js","sources":["../src/plugins/utils/table.ts"],"sourcesContent":["export type ColumnAlignment = 'left' | 'center' | 'right';\n\nexport interface TableBuildOptions {\n rows: number;\n cols: number;\n headers?: string[];\n alignment?: ColumnAlignment[];\n /** Optional header row color, e.g. 'pink' | 'purple' | 'blue' | 'cyan' | 'green' | 'amber' */\n headerColor?: string;\n}\n\nexport function buildTableMarkdown(rowsOrOpts: number | TableBuildOptions, colsArg?: number): string {\n let opts: TableBuildOptions;\n if (typeof rowsOrOpts === 'number') {\n opts = { rows: rowsOrOpts, cols: colsArg ?? 2 };\n } else {\n opts = rowsOrOpts;\n }\n\n const safeRows = Math.max(1, Math.floor(opts.rows));\n const safeCols = Math.max(1, Math.floor(opts.cols));\n const headers = opts.headers ?? Array.from({ length: safeCols }, (_, i) => `Header ${i + 1}`);\n const alignment = opts.alignment ?? Array(safeCols).fill('left' as ColumnAlignment);\n\n const headerRow = headers.slice(0, safeCols).map(h => h || ' ').join(' | ');\n\n // Compute per-column widths so body rows match the header row width.\n // This ensures clicks in the overlay correctly land inside cell text in the textarea.\n const cellWidths = headers.slice(0, safeCols).map(h => Math.max(3, (h || ' ').length));\n\n const divider = Array.from({ length: safeCols }, (_, i) => {\n const align = alignment[i] ?? 'left';\n const w = cellWidths[i];\n if (align === 'center') return ':' + '-'.repeat(Math.max(1, w - 2)) + ':';\n if (align === 'right') return '-'.repeat(Math.max(2, w - 1)) + ':';\n return '-'.repeat(w);\n }).join(' | ');\n\n const body = Array.from({ length: safeRows }, () =>\n cellWidths.map(w => ' '.repeat(w)).join(' | '),\n )\n .map((row) => `| ${row} |`)\n .join('\\n');\n\n // Build annotation comment when a non-default header color is chosen.\n const annotation = opts.headerColor ? `<!-- mz-table: header=${opts.headerColor} -->\\n` : '';\n\n return `${annotation}| ${headerRow} |\\n| ${divider} |\\n${body}\\n`;\n}\n\nexport function resolvePositiveInteger(value: string | null, fallback: number): number | null {\n if (value === null) {\n return null;\n }\n\n const trimmed = value.trim();\n if (!trimmed) {\n return Math.max(1, fallback);\n }\n\n const parsed = Number.parseInt(trimmed, 10);\n if (Number.isNaN(parsed) || parsed < 1) {\n return Math.max(1, fallback);\n }\n\n return parsed;\n}\n"],"names":["buildTableMarkdown","rowsOrOpts","colsArg","opts","safeRows","safeCols","headers","_","i","alignment","headerRow","h","cellWidths","divider","align","w","body","row","resolvePositiveInteger","value","fallback","trimmed","parsed"],"mappings":"AAWO,SAASA,EAAmBC,GAAwCC,GAA0B;AACnG,MAAIC;AACJ,EAAI,OAAOF,KAAe,WACxBE,IAAO,EAAE,MAAMF,GAAY,MAAMC,KAAW,EAAA,IAE5CC,IAAOF;AAGT,QAAMG,IAAW,KAAK,IAAI,GAAG,KAAK,MAAMD,EAAK,IAAI,CAAC,GAC5CE,IAAW,KAAK,IAAI,GAAG,KAAK,MAAMF,EAAK,IAAI,CAAC,GAC5CG,IAAUH,EAAK,WAAW,MAAM,KAAK,EAAE,QAAQE,EAAA,GAAY,CAACE,GAAGC,MAAM,UAAUA,IAAI,CAAC,EAAE,GACtFC,IAAYN,EAAK,aAAa,MAAME,CAAQ,EAAE,KAAK,MAAyB,GAE5EK,IAAYJ,EAAQ,MAAM,GAAGD,CAAQ,EAAE,IAAI,CAAAM,MAAKA,KAAK,GAAG,EAAE,KAAK,KAAK,GAIpEC,IAAaN,EAAQ,MAAM,GAAGD,CAAQ,EAAE,IAAI,CAAAM,MAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,MAAM,CAAC,GAE/EE,IAAU,MAAM,KAAK,EAAE,QAAQR,EAAA,GAAY,CAACE,GAAGC,MAAM;AACzD,UAAMM,IAAQL,EAAUD,CAAC,KAAK,QACxBO,IAAIH,EAAWJ,CAAC;AACtB,WAAIM,MAAU,WAAiB,MAAM,IAAI,OAAO,KAAK,IAAI,GAAGC,IAAI,CAAC,CAAC,IAAI,MAClED,MAAU,UAAgB,IAAI,OAAO,KAAK,IAAI,GAAGC,IAAI,CAAC,CAAC,IAAI,MACxD,IAAI,OAAOA,CAAC;AAAA,EACrB,CAAC,EAAE,KAAK,KAAK,GAEPC,IAAO,MAAM;AAAA,IAAK,EAAE,QAAQZ,EAAA;AAAA,IAAY,MAC5CQ,EAAW,IAAI,CAAAG,MAAK,IAAI,OAAOA,CAAC,CAAC,EAAE,KAAK,KAAK;AAAA,EAAA,EAE5C,IAAI,CAACE,MAAQ,KAAKA,CAAG,IAAI,EACzB,KAAK;AAAA,CAAI;AAKZ,SAAO,GAFYd,EAAK,cAAc,yBAAyBA,EAAK,WAAW;AAAA,IAAW,EAEtE,KAAKO,CAAS;AAAA,IAASG,CAAO;AAAA,EAAOG,CAAI;AAAA;AAC/D;AAEO,SAASE,EAAuBC,GAAsBC,GAAiC;AAC5F,MAAID,MAAU;AACZ,WAAO;AAGT,QAAME,IAAUF,EAAM,KAAA;AACtB,MAAI,CAACE;AACH,WAAO,KAAK,IAAI,GAAGD,CAAQ;AAG7B,QAAME,IAAS,OAAO,SAASD,GAAS,EAAE;AAC1C,SAAI,OAAO,MAAMC,CAAM,KAAKA,IAAS,IAC5B,KAAK,IAAI,GAAGF,CAAQ,IAGtBE;AACT;"}
@@ -31,7 +31,7 @@ export default defineConfig({
31
31
  { text: 'Plugins', link: '/plugins' },
32
32
  { text: '🛝 Playground', link: 'https://bakeshop.pinkpixel.dev' },
33
33
  {
34
- text: 'v1.1.0',
34
+ text: 'v1.2.2',
35
35
  items: [
36
36
  { text: 'Changelog', link: 'https://github.com/pinkpixel-dev/marzipan/blob/main/CHANGELOG.md' },
37
37
  ]
package/docs/plugins.md CHANGED
@@ -52,7 +52,7 @@ Every factory returns an object that Marzipan consumes internally. You can mix a
52
52
  | `mermaidPlugin` | `@pinkpixel/marzipan/plugins/mermaidPlugin` | Lazy-loads Mermaid from npm/ESM and renders diagrams inline. |
53
53
  | `mermaidExternalPlugin` | `@pinkpixel/marzipan/plugins/mermaidExternal` | Mermaid integration that targets a CDN script tag—perfect for sandboxed playgrounds. |
54
54
  | `tablePlugin` | `@pinkpixel/marzipan/plugins/tablePlugin` | Toolbar-driven table generator with inline editing controls. |
55
- | `tableGridPlugin` | `@pinkpixel/marzipan/plugins/tableGridPlugin` | Grid popover with alignment, style presets, and border options (exports `tableGridStyles`). |
55
+ | `tableGridPlugin` | `@pinkpixel/marzipan/plugins/tableGridPlugin` | Grid popover with alignment and header color options (exports `tableGridStyles`). |
56
56
  | `tableGeneratorPlugin` | `@pinkpixel/marzipan/plugins/tableGenerator` | Quick GFM table inserter with prompt-driven sizing. |
57
57
  | `tinyHighlightPlugin` | `@pinkpixel/marzipan/plugins/tinyHighlight` | Zero-runtime syntax highlighting for fenced code blocks (`tinyHighlightStyles` helper available). |
58
58
 
@@ -60,7 +60,7 @@ Every factory returns an object that Marzipan consumes internally. You can mix a
60
60
 
61
61
  ## Table Plugin Enhancements
62
62
 
63
- The table plugins now support rich styling via GFM alignment markers and an HTML comment annotation system.
63
+ The table plugins support GFM alignment markers and an optional header color annotation.
64
64
 
65
65
  ### Column Alignment
66
66
 
@@ -74,35 +74,26 @@ GFM column alignment is fully supported. Use `:---` (left), `:---:` (center), or
74
74
 
75
75
  The `tableGridPlugin` popover includes alignment buttons (Left / Center / Right) that set the alignment for all columns.
76
76
 
77
- ### Style Presets
77
+ ### Header Color
78
78
 
79
- Four style presets are available via the `<!-- mz-table: style=<preset> -->` annotation:
79
+ The `tableGridPlugin` popover includes a **Header Color** row with six pastel swatches plus a “none” option:
80
80
 
81
- | Preset | Description |
82
- | --------- | ------------------------------------------------------ |
83
- | `default` | Standard table styling — no extra classes. |
84
- | `striped` | Alternating row backgrounds for readability. |
85
- | `rainbow` | Cycles through six pastel colours per row. |
86
- | `minimal` | Light borders with a clean, reduced-chrome appearance. |
87
-
88
- ### Border Styles
89
-
90
- Border styles are set via the `border=<style>` annotation parameter:
91
-
92
- | Style | Description |
93
- | -------- | --------------------------------- |
94
- | `solid` | Standard solid borders (default). |
95
- | `dashed` | Dashed cell borders. |
96
- | `dotted` | Dotted cell borders. |
97
- | `double` | Double-line cell borders. |
98
- | `none` | No visible borders. |
81
+ | Color value | Appearance |
82
+ | ----------- | ---------------------------- |
83
+ | `pink` | Soft pink header background |
84
+ | `purple` | Muted purple background |
85
+ | `blue` | Light blue background |
86
+ | `cyan` | Aqua/teal background |
87
+ | `green` | Sage green background |
88
+ | `amber` | Warm amber/yellow background |
89
+ | _(none)_ | No color — plain header |
99
90
 
100
91
  ### Annotation Syntax
101
92
 
102
- Place a hidden HTML comment immediately before the table to apply style and border options:
93
+ Place a hidden HTML comment immediately before the table to apply a header color:
103
94
 
104
95
  ```markdown
105
- <!-- mz-table: style=rainbow border=dashed -->
96
+ <!-- mz-table: header=purple -->
106
97
 
107
98
  | Name | Score |
108
99
  | ----- | ----- |
@@ -110,21 +101,20 @@ Place a hidden HTML comment immediately before the table to apply style and bord
110
101
  | Bob | 87 |
111
102
  ```
112
103
 
113
- The comment is invisible to standard markdown renderers and only parsed by Marzipan.
104
+ The comment is invisible to standard markdown renderers and is only parsed by Marzipan. In edit mode the raw pipe-text lines are shown directly in the overlay (preserving pixel-perfect cursor alignment); the styled `<table>` is rendered only in preview mode.
114
105
 
115
106
  ### `tableGridPlugin` Popover
116
107
 
117
- The grid popover now includes an options panel below the size grid with:
108
+ The grid popover includes an options panel below the size grid with:
118
109
 
119
110
  - **Align** – Left / Center / Right toggle buttons.
120
- - **Style** – Default / Striped / Rainbow / Minimal presets.
121
- - **Border** – Solid / Dashed / Dotted / Double / None options.
111
+ - **Header color** – Six pastel color swatches plus a “none” dot.
122
112
 
123
113
  Preferences are persisted to `localStorage` (key `marzipan.table.prefs`) so they survive page reloads.
124
114
 
125
115
  ### `buildTableMarkdown` Utility
126
116
 
127
- The `buildTableMarkdown()` helper (exported from `@pinkpixel/marzipan/plugins/utils/table`) now accepts a `TableBuildOptions` object:
117
+ The `buildTableMarkdown()` helper (exported from `@pinkpixel/marzipan`) accepts a `TableBuildOptions` object:
128
118
 
129
119
  ```ts
130
120
  import { buildTableMarkdown } from "@pinkpixel/marzipan";
@@ -134,8 +124,7 @@ const md = buildTableMarkdown({
134
124
  rows: 3,
135
125
  cols: 4,
136
126
  alignment: ["left", "center", "right", "left"],
137
- style: "striped",
138
- borderStyle: "dashed",
127
+ headerColor: "blue",
139
128
  });
140
129
  ```
141
130
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pinkpixel/marzipan",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "Pure TypeScript markdown editor library with overlay preview",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",