@pixerate/editor-svelte 0.3.9 → 0.3.11

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.
package/dist/index.css CHANGED
@@ -6,6 +6,10 @@
6
6
  pointer-events: none;
7
7
  height: 0;
8
8
  }
9
+ .dark .pixerate-editor-content .is-empty::before,
10
+ html.dark .pixerate-editor-content .is-empty::before {
11
+ color: #6b7280;
12
+ }
9
13
 
10
14
  /* svelte-css:src/spreadsheet/SpreadsheetEditor.svelte.css */
11
15
  .col-resize-handle.svelte-m799ch {
@@ -1 +1 @@
1
- {"version":3,"sources":["svelte-css:src/EditableTextNodeEditor.svelte.css","svelte-css:src/spreadsheet/SpreadsheetEditor.svelte.css"],"sourcesContent":["\n .pixerate-editor-content .is-empty::before {\n content: attr(data-placeholder);\n float: left;\n color: #9ca3af;\n pointer-events: none;\n height: 0;\n }\n\n","\n .col-resize-handle.svelte-m799ch {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 12px;\n right: -6px;\n cursor: col-resize !important;\n z-index: 20;\n display: flex;\n justify-content: center;\n touch-action: none;\n }\n .col-resize-handle-line.svelte-m799ch {\n width: 2px;\n height: 100%;\n transition: background-color 150ms ease;\n background-color: transparent;\n pointer-events: none;\n }\n .col-resize-handle.svelte-m799ch:hover .col-resize-handle-line:where(.svelte-m799ch) {\n background-color: var(--primary, #6366f1);\n opacity: 0.75;\n }\n .col-resize-handle-line.active.svelte-m799ch,\n .col-resize-handle.active.svelte-m799ch .col-resize-handle-line:where(.svelte-m799ch) {\n background-color: var(--primary, #6366f1);\n opacity: 1;\n }\n table.table-fixed.svelte-m799ch th:where(.svelte-m799ch) {\n overflow: hidden;\n }\n table.table-fixed.svelte-m799ch td:where(.svelte-m799ch) {\n max-width: 0;\n overflow: hidden;\n }\n\n"],"mappings":";AACE,CAAC,wBAAwB,CAAC,QAAQ;AAChC,WAAS,KAAK;AACd,SAAO;AACP,SAAO;AACP,kBAAgB;AAChB,UAAQ;AACV;;;ACNA,CAAC,iBAAiB,CAAC;AACjB,YAAU;AACV,OAAK;AACL,UAAQ;AACR,SAAO;AACP,SAAO;AACP,UAAQ;AACR,WAAS;AACT,WAAS;AACT,mBAAiB;AACjB,gBAAc;AAChB;AACA,CAAC,sBAAsB,CAZJ;AAajB,SAAO;AACP,UAAQ;AACR,cAAY,iBAAiB,MAAM;AACnC,oBAAkB;AAClB,kBAAgB;AAClB;AACA,CAnBC,iBAmBiB,CAnBC,aAmBa,OAAO,CAPtC,sBAO6D,OAAO,CAnBlD;AAoBjB,oBAAkB,IAAI,SAAS,EAAE;AACjC,WAAS;AACX;AACA,CAXC,sBAWsB,CAAC,MAAM,CAvBX;AAwBnB,CAxBC,iBAwBiB,CADM,MACC,CAxBN,cAwBqB,CAZvC,sBAY8D,OAAO,CAxBnD;AAyBjB,oBAAkB,IAAI,SAAS,EAAE;AACjC,WAAS;AACX;AACA,KAAK,CAAC,WAAW,CA5BE,cA4Ba,EAAE,OAAO,CA5BtB;AA6BjB,YAAU;AACZ;AACA,KAAK,CAHC,WAGW,CA/BE,cA+Ba,EAAE,OAAO,CA/BtB;AAgCjB,aAAW;AACX,YAAU;AACZ;","names":[]}
1
+ {"version":3,"sources":["svelte-css:src/EditableTextNodeEditor.svelte.css","svelte-css:src/spreadsheet/SpreadsheetEditor.svelte.css"],"sourcesContent":["\n .pixerate-editor-content .is-empty::before {\n content: attr(data-placeholder);\n float: left;\n color: #9ca3af;\n pointer-events: none;\n height: 0;\n }\n\n .dark .pixerate-editor-content .is-empty::before,\n html.dark .pixerate-editor-content .is-empty::before {\n color: #6b7280;\n }\n\n","\n .col-resize-handle.svelte-m799ch {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 12px;\n right: -6px;\n cursor: col-resize !important;\n z-index: 20;\n display: flex;\n justify-content: center;\n touch-action: none;\n }\n .col-resize-handle-line.svelte-m799ch {\n width: 2px;\n height: 100%;\n transition: background-color 150ms ease;\n background-color: transparent;\n pointer-events: none;\n }\n .col-resize-handle.svelte-m799ch:hover .col-resize-handle-line:where(.svelte-m799ch) {\n background-color: var(--primary, #6366f1);\n opacity: 0.75;\n }\n .col-resize-handle-line.active.svelte-m799ch,\n .col-resize-handle.active.svelte-m799ch .col-resize-handle-line:where(.svelte-m799ch) {\n background-color: var(--primary, #6366f1);\n opacity: 1;\n }\n table.table-fixed.svelte-m799ch th:where(.svelte-m799ch) {\n overflow: hidden;\n }\n table.table-fixed.svelte-m799ch td:where(.svelte-m799ch) {\n max-width: 0;\n overflow: hidden;\n }\n\n"],"mappings":";AACE,CAAC,wBAAwB,CAAC,QAAQ;AAChC,WAAS,KAAK;AACd,SAAO;AACP,SAAO;AACP,kBAAgB;AAChB,UAAQ;AACV;AAEA,CAAC,KAAK,CARL,wBAQ8B,CARL,QAQc;AACxC,IAAI,CADH,KACS,CATT,wBASkC,CATT,QASkB;AAC1C,SAAO;AACT;;;ACXA,CAAC,iBAAiB,CAAC;AACjB,YAAU;AACV,OAAK;AACL,UAAQ;AACR,SAAO;AACP,SAAO;AACP,UAAQ;AACR,WAAS;AACT,WAAS;AACT,mBAAiB;AACjB,gBAAc;AAChB;AACA,CAAC,sBAAsB,CAZJ;AAajB,SAAO;AACP,UAAQ;AACR,cAAY,iBAAiB,MAAM;AACnC,oBAAkB;AAClB,kBAAgB;AAClB;AACA,CAnBC,iBAmBiB,CAnBC,aAmBa,OAAO,CAPtC,sBAO6D,OAAO,CAnBlD;AAoBjB,oBAAkB,IAAI,SAAS,EAAE;AACjC,WAAS;AACX;AACA,CAXC,sBAWsB,CAAC,MAAM,CAvBX;AAwBnB,CAxBC,iBAwBiB,CADM,MACC,CAxBN,cAwBqB,CAZvC,sBAY8D,OAAO,CAxBnD;AAyBjB,oBAAkB,IAAI,SAAS,EAAE;AACjC,WAAS;AACX;AACA,KAAK,CAAC,WAAW,CA5BE,cA4Ba,EAAE,OAAO,CA5BtB;AA6BjB,YAAU;AACZ;AACA,KAAK,CAHC,WAGW,CA/BE,cA+Ba,EAAE,OAAO,CA/BtB;AAgCjB,aAAW;AACX,YAAU;AACZ;","names":[]}
package/dist/index.js CHANGED
@@ -41,10 +41,10 @@ function createReactiveEditor(initialContent = "", extensions = [], options = {}
41
41
 
42
42
  // src/EditableTextNodeEditor.svelte
43
43
  var root = $2.from_html(`<div class="flex items-center justify-center p-4 text-sm text-gray-500">Loading editor...</div>`);
44
- var root_1 = $2.from_html(`<div draggable="false"><!> <div class="pixerate-editor-content prose w-full max-w-none focus:outline-none"></div></div>`);
44
+ var root_1 = $2.from_html(`<div draggable="false"><!> <div></div></div>`);
45
45
  function EditableTextNodeEditor($$anchor, $$props) {
46
46
  $2.push($$props, true);
47
- let className = $2.prop($$props, "class", 3, ""), content = $2.prop($$props, "content", 3, void 0), showMenu = $2.prop($$props, "showMenu", 3, true), editable = $2.prop($$props, "editable", 3, true), editor = $2.prop($$props, "editor", 15), extensions = $2.prop($$props, "extensions", 19, () => []), placeholder = $2.prop($$props, "placeholder", 3, "");
47
+ let className = $2.prop($$props, "class", 3, ""), editorClass = $2.prop($$props, "editorClass", 3, ""), content = $2.prop($$props, "content", 3, void 0), showMenu = $2.prop($$props, "showMenu", 3, true), editable = $2.prop($$props, "editable", 3, true), editor = $2.prop($$props, "editor", 15), extensions = $2.prop($$props, "extensions", 19, () => []), placeholder = $2.prop($$props, "placeholder", 3, "");
48
48
  let element = $2.state(void 0);
49
49
  $2.user_effect(() => {
50
50
  if (editor() && editor().isEditable !== editable()) {
@@ -91,7 +91,15 @@ function EditableTextNodeEditor($$anchor, $$props) {
91
91
  var div_2 = $2.sibling(node, 2);
92
92
  $2.bind_this(div_2, ($$value) => $2.set(element, $$value), () => $2.get(element));
93
93
  $2.reset(div);
94
- $2.template_effect(() => $2.set_class(div, 1, `pixerate-editor-container ${className()}`));
94
+ $2.template_effect(
95
+ ($0) => {
96
+ $2.set_class(div, 1, `pixerate-editor-container ${className()}`);
97
+ $2.set_class(div_2, 1, $0);
98
+ },
99
+ [
100
+ () => $2.clsx(`pixerate-editor-content prose dark:prose-invert w-full max-w-none focus:outline-none ${editorClass()}`.trim())
101
+ ]
102
+ );
95
103
  $2.append($$anchor, div);
96
104
  $2.pop();
97
105
  }
@@ -415,6 +423,10 @@ function createReactiveSpreadsheet(options = {}) {
415
423
  controller.setColumnWidth(colId, width);
416
424
  $6.set(doc, { ...controller.document }, true);
417
425
  },
426
+ autoFitColumnWidth(colId, customWidth) {
427
+ controller.autoFitColumnWidth(colId, customWidth);
428
+ $6.set(doc, { ...controller.document }, true);
429
+ },
418
430
  loadDocument(document2) {
419
431
  controller.loadDocument(document2);
420
432
  $6.set(doc, { ...controller.document }, true);
@@ -562,9 +574,13 @@ function SpreadsheetEditor($$anchor, $$props) {
562
574
  }
563
575
  let rafId = null;
564
576
  let pendingWidth = width;
577
+ let hasDragged = false;
565
578
  const handleMouseMove = (moveEvent) => {
566
579
  if (!$7.get(resizingColId)) return;
567
580
  const delta = moveEvent.clientX - $7.get(resizeStartX);
581
+ if (Math.abs(delta) > 2) {
582
+ hasDragged = true;
583
+ }
568
584
  pendingWidth = Math.max(30, $7.get(resizeStartWidth) + delta);
569
585
  if (rafId === null) {
570
586
  rafId = requestAnimationFrame(() => {
@@ -580,7 +596,7 @@ function SpreadsheetEditor($$anchor, $$props) {
580
596
  cancelAnimationFrame(rafId);
581
597
  rafId = null;
582
598
  }
583
- if ($7.get(resizingColId)) {
599
+ if ($7.get(resizingColId) && hasDragged) {
584
600
  sheetState().setColumnWidth($7.get(resizingColId), pendingWidth);
585
601
  const col = sheetState().document.columns.find((c) => c.id === $7.get(resizingColId));
586
602
  if (col && $$props.onColumnResize) {
@@ -598,6 +614,107 @@ function SpreadsheetEditor($$anchor, $$props) {
598
614
  window.addEventListener("mousemove", handleMouseMove);
599
615
  window.addEventListener("mouseup", handleMouseUp);
600
616
  }
617
+ function measureElementContentWidth(el, container) {
618
+ if (typeof document === "undefined") return 0;
619
+ let maxW = el.scrollWidth || 0;
620
+ const firstChild = el.firstElementChild;
621
+ if (firstChild && firstChild.scrollWidth > maxW) {
622
+ maxW = firstChild.scrollWidth;
623
+ }
624
+ const truncated = el.querySelectorAll(".truncate, [title], span, div");
625
+ truncated.forEach((node) => {
626
+ if (node.scrollWidth > maxW) {
627
+ maxW = node.scrollWidth;
628
+ }
629
+ });
630
+ try {
631
+ const clone = firstChild ? firstChild.cloneNode(true) : el.cloneNode(true);
632
+ clone.style.cssText = `
633
+ position: absolute !important;
634
+ visibility: hidden !important;
635
+ width: max-content !important;
636
+ min-width: max-content !important;
637
+ max-width: none !important;
638
+ overflow: visible !important;
639
+ white-space: nowrap !important;
640
+ pointer-events: none !important;
641
+ top: -9999px !important;
642
+ left: -9999px !important;
643
+ `;
644
+ const allNodes = clone.querySelectorAll("*");
645
+ allNodes.forEach((node) => {
646
+ node.style.maxWidth = "none";
647
+ node.style.overflow = "visible";
648
+ node.style.textOverflow = "clip";
649
+ node.style.whiteSpace = "nowrap";
650
+ if (node.classList.contains("truncate") || node.classList.contains("min-w-0") || node.classList.contains("w-full") || node.classList.contains("max-w-0") || node.classList.contains("flex-1")) {
651
+ node.style.width = "max-content";
652
+ node.style.minWidth = "max-content";
653
+ }
654
+ });
655
+ container.appendChild(clone);
656
+ const rect = clone.getBoundingClientRect();
657
+ container.removeChild(clone);
658
+ if (rect.width > maxW) {
659
+ maxW = rect.width;
660
+ }
661
+ } catch {
662
+ }
663
+ return maxW;
664
+ }
665
+ function autoFitColumn(colId, colIndex) {
666
+ const col = sheetState().document.columns.find((c) => c.id === colId);
667
+ if (!col) return;
668
+ let calculatedWidth = 0;
669
+ if ($7.get(gridContainer) && typeof document !== "undefined") {
670
+ const table = $7.get(gridContainer).querySelector("table");
671
+ if (table) {
672
+ const thElements = table.querySelectorAll("thead th");
673
+ const th = thElements[colIndex + 1];
674
+ if (th) {
675
+ const headerInner = th.firstElementChild || th;
676
+ const headerW = measureElementContentWidth(headerInner, $7.get(gridContainer));
677
+ calculatedWidth = Math.max(calculatedWidth, headerW + 28);
678
+ }
679
+ const rows = table.querySelectorAll("tbody tr");
680
+ const sampleLimit = Math.min(rows.length, 150);
681
+ for (let r = 0; r < sampleLimit; r++) {
682
+ const tr = rows[r];
683
+ const td = tr.children[colIndex + 1];
684
+ if (td) {
685
+ const cellW = measureElementContentWidth(td, $7.get(gridContainer));
686
+ calculatedWidth = Math.max(calculatedWidth, cellW + 20);
687
+ }
688
+ }
689
+ }
690
+ }
691
+ if (calculatedWidth > 0) {
692
+ const finalWidth = Math.min(600, Math.max(50, Math.ceil(calculatedWidth)));
693
+ sheetState().setColumnWidth(colId, finalWidth);
694
+ } else {
695
+ sheetState().autoFitColumnWidth(colId);
696
+ }
697
+ const updatedCol = sheetState().document.columns.find((c) => c.id === colId);
698
+ if (updatedCol && $$props.onColumnResize) {
699
+ $$props.onColumnResize(updatedCol.id, updatedCol.width || 130);
700
+ }
701
+ }
702
+ function handleResizeDblClick(colId, colIndex, e) {
703
+ e.preventDefault();
704
+ e.stopPropagation();
705
+ autoFitColumn(colId, colIndex);
706
+ }
707
+ function handleHeaderDblClick(colId, colIndex, e) {
708
+ const target = e.currentTarget;
709
+ if (target) {
710
+ const rect = target.getBoundingClientRect();
711
+ if (rect.right - e.clientX <= 12) {
712
+ e.preventDefault();
713
+ e.stopPropagation();
714
+ autoFitColumn(colId, colIndex);
715
+ }
716
+ }
717
+ }
601
718
  function isCellSelected(rIdx, cIdx) {
602
719
  if (!sheetState().selectedRange) return false;
603
720
  const minR = Math.min(sheetState().selectedRange.startRow, sheetState().selectedRange.endRow);
@@ -610,7 +727,7 @@ function SpreadsheetEditor($$anchor, $$props) {
610
727
  return sheetState().activeCell?.row === rIdx && sheetState().activeCell?.col === cIdx;
611
728
  }
612
729
  var div = root_7();
613
- var node = $7.child(div);
730
+ var node_1 = $7.child(div);
614
731
  {
615
732
  var consequent = ($$anchor2) => {
616
733
  FormulaBar($$anchor2, {
@@ -619,18 +736,18 @@ function SpreadsheetEditor($$anchor, $$props) {
619
736
  }
620
737
  });
621
738
  };
622
- $7.if(node, ($$render) => {
739
+ $7.if(node_1, ($$render) => {
623
740
  if (showFormulaBar()) $$render(consequent);
624
741
  });
625
742
  }
626
- var div_1 = $7.sibling(node, 2);
627
- var table = $7.child(div_1);
628
- var thead = $7.child(table);
629
- var tr = $7.child(thead);
630
- var node_1 = $7.sibling($7.child(tr));
631
- $7.each(node_1, 19, () => sheetState().document.columns, (col) => col.id, ($$anchor2, col) => {
632
- var th = root5();
633
- var div_2 = $7.child(th);
743
+ var div_1 = $7.sibling(node_1, 2);
744
+ var table_1 = $7.child(div_1);
745
+ var thead = $7.child(table_1);
746
+ var tr_1 = $7.child(thead);
747
+ var node_2 = $7.sibling($7.child(tr_1));
748
+ $7.each(node_2, 19, () => sheetState().document.columns, (col) => col.id, ($$anchor2, col, cIdx) => {
749
+ var th_1 = root5();
750
+ var div_2 = $7.child(th_1);
634
751
  var span = $7.child(div_2);
635
752
  var text = $7.only_child(span, true);
636
753
  var span_1 = $7.sibling(span, 2);
@@ -638,51 +755,53 @@ function SpreadsheetEditor($$anchor, $$props) {
638
755
  $7.reset(div_2);
639
756
  var div_3 = $7.sibling(div_2, 2);
640
757
  var div_4 = $7.only_child(div_3);
641
- $7.reset(th);
758
+ $7.reset(th_1);
642
759
  $7.template_effect(() => {
643
- $7.set_class(th, 1, `relative border-r border-border px-2 text-left font-medium text-muted-foreground hover:bg-muted/90 transition-colors group overflow-hidden max-w-0 ${$$props.onColumnHeaderClick ? "cursor-pointer" : "cursor-default"}`, "svelte-m799ch");
644
- $7.set_style(th, `width: ${($7.get(col).width || 130) ?? ""}px; min-width: ${($7.get(col).width || 130) ?? ""}px; max-width: ${($7.get(col).width || 130) ?? ""}px; overflow: hidden;`);
760
+ $7.set_class(th_1, 1, `relative border-r border-border px-2 text-left font-medium text-muted-foreground hover:bg-muted/90 transition-colors group overflow-hidden max-w-0 ${$$props.onColumnHeaderClick ? "cursor-pointer" : "cursor-default"}`, "svelte-m799ch");
761
+ $7.set_style(th_1, `width: ${($7.get(col).width || 130) ?? ""}px; min-width: ${($7.get(col).width || 130) ?? ""}px; max-width: ${($7.get(col).width || 130) ?? ""}px; overflow: hidden;`);
645
762
  $7.set_text(text, $7.get(col).title);
646
763
  $7.set_text(text_1, `(${$7.get(col).key ?? ""})`);
647
764
  $7.set_style(div_4, `width: 2px; height: 100%; pointer-events: none; transition: background-color 150ms ease; background-color: ${$7.get(resizingColId) === $7.get(col).id ? "var(--primary, #6366f1)" : $7.get(hoveredColId) === $7.get(col).id ? "color-mix(in srgb, var(--primary, #6366f1) 75%, transparent)" : "transparent"};`);
648
765
  });
649
- $7.delegated("click", th, () => $$props.onColumnHeaderClick?.($7.get(col)));
766
+ $7.delegated("click", th_1, () => $$props.onColumnHeaderClick?.($7.get(col)));
767
+ $7.delegated("dblclick", th_1, (e) => handleHeaderDblClick($7.get(col).id, $7.get(cIdx), e));
650
768
  $7.event("mouseenter", div_3, () => $7.set(hoveredColId, $7.get(col).id, true));
651
769
  $7.event("mouseleave", div_3, () => {
652
770
  if ($7.get(hoveredColId) === $7.get(col).id) $7.set(hoveredColId, null);
653
771
  });
654
772
  $7.delegated("mousedown", div_3, (e) => handleResizeStart($7.get(col).id, $7.get(col).width || 130, e));
655
- $7.append($$anchor2, th);
773
+ $7.delegated("dblclick", div_3, (e) => handleResizeDblClick($7.get(col).id, $7.get(cIdx), e));
774
+ $7.append($$anchor2, th_1);
656
775
  });
657
- var node_2 = $7.sibling(node_1);
776
+ var node_3 = $7.sibling(node_2);
658
777
  {
659
778
  var consequent_1 = ($$anchor2) => {
660
- var th_1 = root_13();
661
- $7.delegated("click", th_1, function(...$$args) {
779
+ var th_2 = root_13();
780
+ $7.delegated("click", th_2, function(...$$args) {
662
781
  $$props.onAddColumnClick?.apply(this, $$args);
663
782
  });
664
- $7.append($$anchor2, th_1);
783
+ $7.append($$anchor2, th_2);
665
784
  };
666
- $7.if(node_2, ($$render) => {
785
+ $7.if(node_3, ($$render) => {
667
786
  if ($$props.onAddColumnClick) $$render(consequent_1);
668
787
  });
669
788
  }
670
789
  $7.next();
671
- $7.reset(tr);
790
+ $7.reset(tr_1);
672
791
  $7.reset(thead);
673
792
  var tbody = $7.sibling(thead);
674
793
  $7.each(tbody, 23, () => sheetState().document.rows, (row) => row.id, ($$anchor2, row, rIdx) => {
675
- var tr_1 = root_6();
676
- var td = $7.child(tr_1);
677
- var text_2 = $7.only_child(td, true);
678
- var node_3 = $7.sibling(td);
679
- $7.each(node_3, 19, () => sheetState().document.columns, (col) => col.id, ($$anchor3, col, cIdx) => {
794
+ var tr_2 = root_6();
795
+ var td_1 = $7.child(tr_2);
796
+ var text_2 = $7.only_child(td_1, true);
797
+ var node_4 = $7.sibling(td_1);
798
+ $7.each(node_4, 19, () => sheetState().document.columns, (col) => col.id, ($$anchor3, col, cIdx) => {
680
799
  const cell = $7.derived(() => sheetState().getCell($7.get(row).id, $7.get(col).id));
681
800
  const selected = $7.derived(() => isCellSelected($7.get(rIdx), $7.get(cIdx)));
682
801
  const active = $7.derived(() => isActiveCell($7.get(rIdx), $7.get(cIdx)));
683
802
  const isEditing = $7.derived(() => sheetState().editingCell?.row === $7.get(rIdx) && sheetState().editingCell?.col === $7.get(cIdx));
684
- var td_1 = root_42();
685
- var node_4 = $7.child(td_1);
803
+ var td_2 = root_42();
804
+ var node_5 = $7.child(td_2);
686
805
  {
687
806
  var consequent_2 = ($$anchor4) => {
688
807
  var input = root_22();
@@ -694,8 +813,8 @@ function SpreadsheetEditor($$anchor, $$props) {
694
813
  var consequent_3 = ($$anchor4) => {
695
814
  const cellArg = $7.derived(() => Object.assign({ row: $7.get(row), col: $7.get(col), cell: $7.get(cell) }, $7.get(cell)));
696
815
  var fragment_1 = $7.comment();
697
- var node_5 = $7.first_child(fragment_1);
698
- $7.snippet(node_5, () => $$props.customCellRenderer, () => $7.get(cellArg), () => $7.get(col), () => $7.get(row));
816
+ var node_6 = $7.first_child(fragment_1);
817
+ $7.snippet(node_6, () => $$props.customCellRenderer, () => $7.get(cellArg), () => $7.get(col), () => $7.get(row));
699
818
  $7.append($$anchor4, fragment_1);
700
819
  };
701
820
  var alternate = ($$anchor4) => {
@@ -707,38 +826,38 @@ function SpreadsheetEditor($$anchor, $$props) {
707
826
  });
708
827
  $7.append($$anchor4, span_2);
709
828
  };
710
- $7.if(node_4, ($$render) => {
829
+ $7.if(node_5, ($$render) => {
711
830
  if ($7.get(isEditing)) $$render(consequent_2);
712
831
  else if ($$props.customCellRenderer) $$render(consequent_3, 1);
713
832
  else $$render(alternate, -1);
714
833
  });
715
834
  }
716
- $7.reset(td_1);
717
- $7.template_effect(() => $7.set_class(td_1, 1, `relative border-r border-border px-2 py-1 truncate max-w-0 text-foreground transition-colors ${$7.get(selected) ? "bg-primary/10" : ""} ${$7.get(active) ? "ring-2 ring-primary ring-inset z-10" : ""}`, "svelte-m799ch"));
718
- $7.delegated("click", td_1, (e) => handleCellClick($7.get(rIdx), $7.get(cIdx), e));
719
- $7.delegated("dblclick", td_1, () => handleCellDblClick($7.get(rIdx), $7.get(cIdx)));
720
- $7.append($$anchor3, td_1);
835
+ $7.reset(td_2);
836
+ $7.template_effect(() => $7.set_class(td_2, 1, `relative border-r border-border px-2 py-1 truncate max-w-0 text-foreground transition-colors ${$7.get(selected) ? "bg-primary/10" : ""} ${$7.get(active) ? "ring-2 ring-primary ring-inset z-10" : ""}`, "svelte-m799ch"));
837
+ $7.delegated("click", td_2, (e) => handleCellClick($7.get(rIdx), $7.get(cIdx), e));
838
+ $7.delegated("dblclick", td_2, () => handleCellDblClick($7.get(rIdx), $7.get(cIdx)));
839
+ $7.append($$anchor3, td_2);
721
840
  });
722
- var node_6 = $7.sibling(node_3);
841
+ var node_7 = $7.sibling(node_4);
723
842
  {
724
843
  var consequent_4 = ($$anchor3) => {
725
- var td_2 = root_5();
726
- $7.append($$anchor3, td_2);
844
+ var td_3 = root_5();
845
+ $7.append($$anchor3, td_3);
727
846
  };
728
- $7.if(node_6, ($$render) => {
847
+ $7.if(node_7, ($$render) => {
729
848
  if ($$props.onAddColumnClick) $$render(consequent_4);
730
849
  });
731
850
  }
732
851
  $7.next();
733
- $7.reset(tr_1);
852
+ $7.reset(tr_2);
734
853
  $7.template_effect(() => {
735
- $7.set_style(tr_1, `height: ${($7.get(row).height || 32) ?? ""}px;`);
854
+ $7.set_style(tr_2, `height: ${($7.get(row).height || 32) ?? ""}px;`);
736
855
  $7.set_text(text_2, $7.get(rIdx) + 1);
737
856
  });
738
- $7.append($$anchor2, tr_1);
857
+ $7.append($$anchor2, tr_2);
739
858
  });
740
859
  $7.reset(tbody);
741
- $7.reset(table);
860
+ $7.reset(table_1);
742
861
  $7.reset(div_1);
743
862
  $7.reset(div);
744
863
  $7.bind_this(div, ($$value) => $7.set(gridContainer, $$value), () => $7.get(gridContainer));
@@ -747,7 +866,7 @@ function SpreadsheetEditor($$anchor, $$props) {
747
866
  $7.append($$anchor, div);
748
867
  $7.pop();
749
868
  }
750
- $7.delegate(["keydown", "click", "mousedown", "dblclick"]);
869
+ $7.delegate(["keydown", "click", "dblclick", "mousedown"]);
751
870
 
752
871
  // src/index.ts
753
872
  var EditableTextNodeEditor2 = EditableTextNodeEditor;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/EditableTextNodeEditor.svelte","../src/editor.svelte.ts","../src/BubbleMenu.svelte","../src/TemplateRenderer.svelte","../src/spreadsheet/SpreadsheetEditor.svelte","../src/spreadsheet/FormulaBar.svelte","../src/spreadsheet/spreadsheet.svelte.ts","../src/index.ts"],"sourcesContent":["import 'EditableTextNodeEditor.svelte.css';import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { onDestroy, onMount } from \"svelte\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { initiateEditor } from \"./editor.svelte\";\n\nvar root = $.from_html(`<div class=\"flex items-center justify-center p-4 text-sm text-gray-500\">Loading editor...</div>`);\nvar root_1 = $.from_html(`<div draggable=\"false\"><!> <div class=\"pixerate-editor-content prose w-full max-w-none focus:outline-none\"></div></div>`);\n\nexport default function EditableTextNodeEditor($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet className = $.prop($$props, 'class', 3, \"\"),\n\t\tcontent = $.prop($$props, 'content', 3, undefined),\n\t\tshowMenu = $.prop($$props, 'showMenu', 3, true),\n\t\teditable = $.prop($$props, 'editable', 3, true),\n\t\teditor = $.prop($$props, 'editor', 15),\n\t\textensions = $.prop($$props, 'extensions', 19, () => []),\n\t\tplaceholder = $.prop($$props, 'placeholder', 3, \"\");\n\n\tlet element = $.state(void 0);\n\n\t$.user_effect(() => {\n\t\tif (editor() && editor().isEditable !== editable()) {\n\t\t\teditor().setEditable(editable());\n\t\t}\n\t});\n\n\tonMount(() => {\n\t\teditor(initiateEditor(\n\t\t\t$.get(element),\n\t\t\tcontent(),\n\t\t\t[\n\t\t\t\tPlaceholder.configure({ placeholder: placeholder() }),\n\t\t\t\t...extensions()\n\t\t\t],\n\t\t\t{\n\t\t\t\teditable: editable(),\n\t\t\t\tonCreate: $$props.onCreate,\n\t\t\t\tonUpdate: $$props.onUpdate,\n\t\t\t\tonFocus() {\n\t\t\t\t\tif ($$props.onFocus) $$props.onFocus();\n\t\t\t\t},\n\n\t\t\t\tonBlur() {\n\t\t\t\t\tif ($$props.onBlur) $$props.onBlur();\n\t\t\t\t}\n\t\t\t}\n\t\t));\n\t});\n\n\tonDestroy(() => {\n\t\tif (editor()) {\n\t\t\teditor().destroy();\n\t\t}\n\t});\n\n\tvar div = root_1();\n\tvar node = $.child(div);\n\n\t{\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar div_1 = root();\n\n\t\t\t$.append($$anchor, div_1);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif (!editor()) $$render(consequent);\n\t\t});\n\t}\n\n\tvar div_2 = $.sibling(node, 2);\n\n\t$.bind_this(div_2, ($$value) => $.set(element, $$value), () => $.get(element));\n\t$.reset(div);\n\t$.template_effect(() => $.set_class(div, 1, `pixerate-editor-container ${className()}`));\n\t$.append($$anchor, div);\n\t$.pop();\n}","import { Editor } from \"@tiptap/core\";\nimport { createRichTextPreset } from \"@pixerate/editor\";\nexport const initiateEditor = (element, content, extensions, options) => {\n const { richTextOptions, ...editorOptions } = options || {};\n const defaultPreset = createRichTextPreset(richTextOptions);\n const editor = new Editor({\n element,\n content,\n extensions: [\n ...defaultPreset,\n ...extensions ?? []\n ],\n autofocus: true,\n ...editorOptions\n });\n return editor;\n};\nexport function createReactiveEditor(initialContent = \"\", extensions = [], options = {}) {\n let editorInstance;\n return {\n get current() {\n return editorInstance;\n },\n mount(element) {\n editorInstance = initiateEditor(element, initialContent, extensions, options);\n return editorInstance;\n },\n destroy() {\n if (editorInstance) {\n editorInstance.destroy();\n editorInstance = void 0;\n }\n }\n };\n}\n","import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { BubbleMenuPlugin } from \"@tiptap/extension-bubble-menu\";\n\nvar root = $.from_html(`<div style=\"visibility: hidden;\"><!></div>`);\n\nexport default function BubbleMenu($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet className = $.prop($$props, 'class', 3, \"flex h-fit w-fit items-center gap-1 rounded-md border border-gray-200 bg-white p-1 shadow-md\"),\n\t\tpluginKey = $.prop($$props, 'pluginKey', 3, \"bubbleMenu\"),\n\t\tshouldShow = $.prop($$props, 'shouldShow', 3, null),\n\t\tupdateDelay = $.prop($$props, 'updateDelay', 3, 250),\n\t\ttippyOptions = $.prop($$props, 'tippyOptions', 19, () => ({}));\n\n\tlet menuElement = $.state(void 0);\n\n\t$.user_effect(() => {\n\t\tif ($$props.editor && $.get(menuElement)) {\n\t\t\tconst plugin = BubbleMenuPlugin({\n\t\t\t\tpluginKey: pluginKey(),\n\t\t\t\teditor: $$props.editor,\n\t\t\t\telement: $.get(menuElement),\n\t\t\t\ttippyOptions: {\n\t\t\t\t\tduration: 100,\n\t\t\t\t\tappendTo: () => document.body,\n\t\t\t\t\t...tippyOptions()\n\t\t\t\t},\n\t\t\t\tshouldShow: shouldShow(),\n\t\t\t\tupdateDelay: updateDelay()\n\t\t\t});\n\n\t\t\t$$props.editor.registerPlugin(plugin);\n\n\t\t\treturn () => {\n\t\t\t\t$$props.editor.unregisterPlugin(pluginKey());\n\t\t\t};\n\t\t}\n\t});\n\n\tvar div = root();\n\tvar node = $.child(div);\n\n\t{\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar fragment = $.comment();\n\t\t\tvar node_1 = $.first_child(fragment);\n\n\t\t\t$.snippet(node_1, () => $$props.children);\n\t\t\t$.append($$anchor, fragment);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif ($$props.children) $$render(consequent);\n\t\t});\n\t}\n\n\t$.reset(div);\n\t$.bind_this(div, ($$value) => $.set(menuElement, $$value), () => $.get(menuElement));\n\t$.template_effect(() => $.set_class(div, 1, $.clsx(className())));\n\t$.append($$anchor, div);\n\t$.pop();\n}","import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { tokenizePrompt, resolveTemplates } from \"@pixerate/editor\";\n\nvar root = $.from_html(`<span class=\"inline-flex items-center px-1.5 py-0.5 mx-0.5 text-xs font-semibold rounded-md border border-[var(--color-to)]/40 bg-gradient-to-r from-[var(--color-from)]/15 to-[var(--color-to)]/15 text-[var(--color-to)] hover:brightness-110 cursor-pointer transition-all\"> </span>`);\nvar root_1 = $.from_html(`<span class=\"inline-flex items-center px-1.5 py-0.5 mx-0.5 text-xs font-medium rounded-md border border-violet-400/40 bg-violet-400/15 text-violet-600 hover:brightness-110 cursor-pointer transition-all\"> </span>`);\nvar root_2 = $.from_html(`<span class=\"inline-flex items-center px-1.5 py-0.5 mx-0.5 text-xs italic font-medium rounded-md border border-rose-400/40 bg-rose-400/15 text-rose-600\"> </span>`);\nvar root_3 = $.from_html(`<span> </span>`);\nvar root_4 = $.from_html(`<div></div>`);\n\nexport default function TemplateRenderer($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet templates = $.prop($$props, 'templates', 19, () => []),\n\t\tresolve = $.prop($$props, 'resolve', 3, false),\n\t\tclassName = $.prop($$props, 'class', 3, \"font-mono text-sm leading-relaxed whitespace-pre-wrap break-words\");\n\n\tlet displayText = $.derived(() => resolve() && templates().length > 0\n\t\t? resolveTemplates($$props.content, templates())\n\t\t: $$props.content);\n\n\tlet tokens = $.derived(() => tokenizePrompt($.get(displayText)));\n\tvar div = root_4();\n\n\t$.each(div, 21, () => $.get(tokens), $.index, ($$anchor, token) => {\n\t\tvar fragment = $.comment();\n\t\tvar node = $.first_child(fragment);\n\n\t\t{\n\t\t\tvar consequent = ($$anchor) => {\n\t\t\t\tconst colors = $.derived(() => $$props.templateColorMap?.get($.get(token).value) || { from: \"#f43f5e\", to: \"#8b5cf6\" });\n\t\t\t\tvar span = root();\n\t\t\t\tvar text = $.only_child(span, true);\n\n\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t$.set_style(span, `--color-from: ${$.get(colors).from}; --color-to: ${$.get(colors).to};`);\n\t\t\t\t\t$.set_attribute(span, 'title', `Template: ${$.get(token).value}`);\n\t\t\t\t\t$.set_text(text, `{{${$.get(token).value}}}`);\n\t\t\t\t});\n\n\t\t\t\t$.delegated('click', span, () => $$props.onTemplateClick?.($.get(token).value));\n\t\t\t\t$.append($$anchor, span);\n\t\t\t};\n\n\t\t\tvar consequent_1 = ($$anchor) => {\n\t\t\t\tvar span_1 = root_1();\n\t\t\t\tvar text_1 = $.only_child(span_1, true);\n\n\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t$.set_attribute(span_1, 'title', `Variable: ${$.get(token).value}`);\n\t\t\t\t\t$.set_text(text_1, `{${$.get(token).value}}`);\n\t\t\t\t});\n\n\t\t\t\t$.delegated('click', span_1, () => $$props.onVariableClick?.($.get(token).value));\n\t\t\t\t$.append($$anchor, span_1);\n\t\t\t};\n\n\t\t\tvar consequent_2 = ($$anchor) => {\n\t\t\t\tvar span_2 = root_2();\n\t\t\t\tvar text_2 = $.only_child(span_2, true);\n\n\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t$.set_attribute(span_2, 'title', `Instruction: ${$.get(token).value}`);\n\t\t\t\t\t$.set_text(text_2, `__${$.get(token).value}__`);\n\t\t\t\t});\n\n\t\t\t\t$.append($$anchor, span_2);\n\t\t\t};\n\n\t\t\tvar alternate = ($$anchor) => {\n\t\t\t\tvar span_3 = root_3();\n\t\t\t\tvar text_3 = $.only_child(span_3, true);\n\n\t\t\t\t$.template_effect(() => $.set_text(text_3, $.get(token).value));\n\t\t\t\t$.append($$anchor, span_3);\n\t\t\t};\n\n\t\t\t$.if(node, ($$render) => {\n\t\t\t\tif ($.get(token).type === \"template\") $$render(consequent); else if ($.get(token).type === \"variable\") $$render(consequent_1, 1); else if ($.get(token).type === \"instruction\") $$render(consequent_2, 2); else $$render(alternate, -1);\n\t\t\t});\n\t\t}\n\n\t\t$.append($$anchor, fragment);\n\t});\n\n\t$.reset(div);\n\t$.template_effect(() => $.set_class(div, 1, $.clsx(className())));\n\t$.append($$anchor, div);\n\t$.pop();\n}\n\n$.delegate(['click']);","import 'SpreadsheetEditor.svelte.css';import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { indexToColName } from '@pixerate/editor';\nimport FormulaBar from './FormulaBar.svelte';\nimport { createReactiveSpreadsheet } from './spreadsheet.svelte';\n\nvar root = $.from_html(`<th><div class=\"flex items-center justify-between gap-1 min-w-0 overflow-hidden truncate\"><span class=\"truncate font-semibold text-foreground text-xs min-w-0\"> </span> <span class=\"text-[10px] text-muted-foreground/70 font-mono font-normal shrink-0\"> </span></div> <div class=\"col-resize-handle svelte-m799ch\" style=\"position: absolute; top: 0; bottom: 0; width: 12px; right: -6px; cursor: col-resize !important; z-index: 20; display: flex; justify-content: center; touch-action: none;\" role=\"separator\" aria-orientation=\"vertical\" tabindex=\"-1\"><div class=\"col-resize-handle-line svelte-m799ch\"></div></div></th>`);\nvar root_1 = $.from_html(`<th class=\"w-10 min-w-[2.5rem] px-1 text-center bg-muted/40 hover:bg-muted cursor-pointer transition-colors svelte-m799ch\" title=\"Add Column\"><span class=\"text-xs font-bold text-muted-foreground\">+</span></th>`);\nvar root_2 = $.from_html(`<input type=\"text\" class=\"absolute inset-0 w-full h-full px-2 py-1 bg-background text-foreground outline-none font-sans text-xs border-2 border-primary z-20\"/>`);\nvar root_3 = $.from_html(`<span> </span>`);\nvar root_4 = $.from_html(`<td style=\"max-width: 0; overflow: hidden;\"><!></td>`);\nvar root_5 = $.from_html(`<td class=\"w-10 min-w-[2.5rem] bg-muted/10 border-r border-border svelte-m799ch\"></td>`);\nvar root_6 = $.from_html(`<tr class=\"border-b border-border hover:bg-muted/10 transition-colors\"><td class=\"w-12 min-w-[3rem] sticky left-0 z-10 bg-muted/50 border-r border-border text-center text-[10px] text-muted-foreground font-mono select-none svelte-m799ch\"> </td><!><!><td class=\"border-b border-border bg-transparent p-0 svelte-m799ch\"></td></tr>`);\nvar root_7 = $.from_html(`<div tabindex=\"0\" role=\"grid\" aria-label=\"Spreadsheet\"><!> <div class=\"relative flex-1 overflow-auto\"><table class=\"border-collapse table-fixed w-max min-w-full svelte-m799ch\"><thead><tr class=\"h-7 bg-muted/60 sticky top-0 z-20 border-b border-border shadow-xs\"><th class=\"w-12 min-w-[3rem] sticky left-0 z-30 bg-muted/90 border-r border-border text-center text-[10px] text-muted-foreground font-medium svelte-m799ch\">#</th><!><!><th class=\"border-b border-border bg-transparent p-0 font-normal svelte-m799ch\"></th></tr></thead><tbody></tbody></table></div></div>`);\n\nexport default function SpreadsheetEditor($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet sheetState = $.prop($$props, 'sheetState', 23, createReactiveSpreadsheet),\n\t\treadOnly = $.prop($$props, 'readOnly', 3, false),\n\t\treadonly = $.prop($$props, 'readonly', 3, false),\n\t\tshowFormulaBar = $.prop($$props, 'showFormulaBar', 3, true),\n\t\tclassName = $.prop($$props, 'class', 3, '');\n\n\tlet isReadOnly = $.derived(() => readOnly() || readonly());\n\tlet gridContainer = $.state(null);\n\tlet resizingColId = $.state(null);\n\tlet hoveredColId = $.state(null);\n\tlet resizeStartX = $.state(0);\n\tlet resizeStartWidth = $.state(0);\n\n\tfunction handleCellClick(rIdx, cIdx, e) {\n\t\tif (sheetState().editingCell && (sheetState().editingCell.row !== rIdx || sheetState().editingCell.col !== cIdx)) {\n\t\t\tsheetState().commitEditing();\n\t\t}\n\n\t\tsheetState().selectCell(rIdx, cIdx, e.shiftKey);\n\t}\n\n\tfunction handleCellDblClick(rIdx, cIdx) {\n\t\tif ($.get(isReadOnly)) return;\n\n\t\tconst col = sheetState().document.columns[cIdx];\n\n\t\tif (col?.readOnly) return;\n\n\t\tsheetState().startEditing(rIdx, cIdx);\n\t}\n\n\tfunction handleKeyDown(e) {\n\t\tif (sheetState().editingCell) {\n\t\t\tif (e.key === 'Escape') {\n\t\t\t\tsheetState().cancelEditing();\n\t\t\t} else if (e.key === 'Enter') {\n\t\t\t\tsheetState().commitEditing();\n\t\t\t\tsheetState().moveCursor('down');\n\t\t\t} else if (e.key === 'Tab') {\n\t\t\t\te.preventDefault();\n\t\t\t\tsheetState().commitEditing();\n\t\t\t\tsheetState().moveCursor(e.shiftKey ? 'left' : 'right');\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!sheetState().activeCell) return;\n\n\t\tif (e.key === 'ArrowUp') {\n\t\t\te.preventDefault();\n\t\t\tsheetState().moveCursor('up', e.shiftKey);\n\t\t} else if (e.key === 'ArrowDown') {\n\t\t\te.preventDefault();\n\t\t\tsheetState().moveCursor('down', e.shiftKey);\n\t\t} else if (e.key === 'ArrowLeft') {\n\t\t\te.preventDefault();\n\t\t\tsheetState().moveCursor('left', e.shiftKey);\n\t\t} else if (e.key === 'ArrowRight') {\n\t\t\te.preventDefault();\n\t\t\tsheetState().moveCursor('right', e.shiftKey);\n\t\t} else if (e.key === 'Tab') {\n\t\t\te.preventDefault();\n\t\t\tsheetState().moveCursor(e.shiftKey ? 'left' : 'right');\n\t\t} else if (e.key === 'Enter') {\n\t\t\te.preventDefault();\n\n\t\t\tconst col = sheetState().document.columns[sheetState().activeCell.col];\n\n\t\t\tif (!$.get(isReadOnly) && !col?.readOnly) {\n\t\t\t\tsheetState().startEditing();\n\t\t\t}\n\t\t} else if (e.key === 'Backspace' || e.key === 'Delete') {\n\t\t\tif ($.get(isReadOnly)) return;\n\n\t\t\tconst row = sheetState().document.rows[sheetState().activeCell.row];\n\t\t\tconst col = sheetState().document.columns[sheetState().activeCell.col];\n\n\t\t\tif (row && col && !col.readOnly) {\n\t\t\t\te.preventDefault();\n\t\t\t\tsheetState().setCellValue(row.id, col.id, '');\n\t\t\t}\n\t\t} else if ((e.metaKey || e.ctrlKey) && e.key === 'z') {\n\t\t\te.preventDefault();\n\n\t\t\tif (e.shiftKey) {\n\t\t\t\tsheetState().redo();\n\t\t\t} else {\n\t\t\t\tsheetState().undo();\n\t\t\t}\n\t\t} else if ((e.metaKey || e.ctrlKey) && e.key === 'c') {\n\t\t\te.preventDefault();\n\n\t\t\tconst tsv = sheetState().exportToTsv();\n\n\t\t\tnavigator.clipboard?.writeText(tsv);\n\t\t} else if (!$.get(isReadOnly) && e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {\n\t\t\t// Direct typing into cell starts editing\n\t\t\tconst col = sheetState().document.columns[sheetState().activeCell.col];\n\n\t\t\tif (!col?.readOnly) {\n\t\t\t\tsheetState().startEditing(sheetState().activeCell.row, sheetState().activeCell.col, e.key);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleResizeStart(colId, width, e) {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\t$.set(resizingColId, colId, true);\n\t\t$.set(resizeStartX, e.clientX, true);\n\t\t$.set(resizeStartWidth, width, true);\n\n\t\tif (typeof document !== 'undefined') {\n\t\t\tdocument.body.style.cursor = 'col-resize';\n\t\t\tdocument.body.style.userSelect = 'none';\n\t\t}\n\n\t\tlet rafId = null;\n\t\tlet pendingWidth = width;\n\n\t\tconst handleMouseMove = (moveEvent) => {\n\t\t\tif (!$.get(resizingColId)) return;\n\n\t\t\tconst delta = moveEvent.clientX - $.get(resizeStartX);\n\n\t\t\tpendingWidth = Math.max(30, $.get(resizeStartWidth) + delta);\n\n\t\t\tif (rafId === null) {\n\t\t\t\trafId = requestAnimationFrame(() => {\n\t\t\t\t\trafId = null;\n\n\t\t\t\t\tif ($.get(resizingColId)) {\n\t\t\t\t\t\tsheetState().setColumnWidth($.get(resizingColId), pendingWidth);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst handleMouseUp = () => {\n\t\t\tif (rafId !== null) {\n\t\t\t\tcancelAnimationFrame(rafId);\n\t\t\t\trafId = null;\n\t\t\t}\n\n\t\t\tif ($.get(resizingColId)) {\n\t\t\t\tsheetState().setColumnWidth($.get(resizingColId), pendingWidth);\n\n\t\t\t\tconst col = sheetState().document.columns.find((c) => c.id === $.get(resizingColId));\n\n\t\t\t\tif (col && $$props.onColumnResize) {\n\t\t\t\t\t$$props.onColumnResize(col.id, col.width || pendingWidth);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$.set(resizingColId, null);\n\n\t\t\tif (typeof document !== 'undefined') {\n\t\t\t\tdocument.body.style.cursor = '';\n\t\t\t\tdocument.body.style.userSelect = '';\n\t\t\t}\n\n\t\t\twindow.removeEventListener('mousemove', handleMouseMove);\n\t\t\twindow.removeEventListener('mouseup', handleMouseUp);\n\t\t};\n\n\t\twindow.addEventListener('mousemove', handleMouseMove);\n\t\twindow.addEventListener('mouseup', handleMouseUp);\n\t}\n\n\tfunction isCellSelected(rIdx, cIdx) {\n\t\tif (!sheetState().selectedRange) return false;\n\n\t\tconst minR = Math.min(sheetState().selectedRange.startRow, sheetState().selectedRange.endRow);\n\t\tconst maxR = Math.max(sheetState().selectedRange.startRow, sheetState().selectedRange.endRow);\n\t\tconst minC = Math.min(sheetState().selectedRange.startCol, sheetState().selectedRange.endCol);\n\t\tconst maxC = Math.max(sheetState().selectedRange.startCol, sheetState().selectedRange.endCol);\n\n\t\treturn rIdx >= minR && rIdx <= maxR && cIdx >= minC && cIdx <= maxC;\n\t}\n\n\tfunction isActiveCell(rIdx, cIdx) {\n\t\treturn sheetState().activeCell?.row === rIdx && sheetState().activeCell?.col === cIdx;\n\t}\n\n\tvar div = root_7();\n\tvar node = $.child(div);\n\n\t{\n\t\tvar consequent = ($$anchor) => {\n\t\t\tFormulaBar($$anchor, {\n\t\t\t\tget sheetState() {\n\t\t\t\t\treturn sheetState();\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif (showFormulaBar()) $$render(consequent);\n\t\t});\n\t}\n\n\tvar div_1 = $.sibling(node, 2);\n\tvar table = $.child(div_1);\n\tvar thead = $.child(table);\n\tvar tr = $.child(thead);\n\tvar node_1 = $.sibling($.child(tr));\n\n\t$.each(node_1, 19, () => sheetState().document.columns, (col) => col.id, ($$anchor, col) => {\n\t\tvar th = root();\n\t\tvar div_2 = $.child(th);\n\t\tvar span = $.child(div_2);\n\t\tvar text = $.only_child(span, true);\n\t\tvar span_1 = $.sibling(span, 2);\n\t\tvar text_1 = $.only_child(span_1);\n\n\t\t$.reset(div_2);\n\n\t\tvar div_3 = $.sibling(div_2, 2);\n\t\tvar div_4 = $.only_child(div_3);\n\n\t\t$.reset(th);\n\n\t\t$.template_effect(() => {\n\t\t\t$.set_class(th, 1, `relative border-r border-border px-2 text-left font-medium text-muted-foreground hover:bg-muted/90 transition-colors group overflow-hidden max-w-0 ${$$props.onColumnHeaderClick ? 'cursor-pointer' : 'cursor-default'}`, 'svelte-m799ch');\n\t\t\t$.set_style(th, `width: ${($.get(col).width || 130) ?? ''}px; min-width: ${($.get(col).width || 130) ?? ''}px; max-width: ${($.get(col).width || 130) ?? ''}px; overflow: hidden;`);\n\t\t\t$.set_text(text, $.get(col).title);\n\t\t\t$.set_text(text_1, `(${$.get(col).key ?? ''})`);\n\n\t\t\t$.set_style(div_4, `width: 2px; height: 100%; pointer-events: none; transition: background-color 150ms ease; background-color: ${$.get(resizingColId) === $.get(col).id\n\t\t\t\t? 'var(--primary, #6366f1)'\n\t\t\t\t: $.get(hoveredColId) === $.get(col).id\n\t\t\t\t\t? 'color-mix(in srgb, var(--primary, #6366f1) 75%, transparent)'\n\t\t\t\t\t: 'transparent'};`);\n\t\t});\n\n\t\t$.delegated('click', th, () => $$props.onColumnHeaderClick?.($.get(col)));\n\t\t$.event('mouseenter', div_3, () => $.set(hoveredColId, $.get(col).id, true));\n\n\t\t$.event('mouseleave', div_3, () => {\n\t\t\tif ($.get(hoveredColId) === $.get(col).id) $.set(hoveredColId, null);\n\t\t});\n\n\t\t$.delegated('mousedown', div_3, (e) => handleResizeStart($.get(col).id, $.get(col).width || 130, e));\n\t\t$.append($$anchor, th);\n\t});\n\n\tvar node_2 = $.sibling(node_1);\n\n\t{\n\t\tvar consequent_1 = ($$anchor) => {\n\t\t\tvar th_1 = root_1();\n\n\t\t\t$.delegated('click', th_1, function (...$$args) {\n\t\t\t\t$$props.onAddColumnClick?.apply(this, $$args);\n\t\t\t});\n\n\t\t\t$.append($$anchor, th_1);\n\t\t};\n\n\t\t$.if(node_2, ($$render) => {\n\t\t\tif ($$props.onAddColumnClick) $$render(consequent_1);\n\t\t});\n\t}\n\n\t$.next();\n\t$.reset(tr);\n\t$.reset(thead);\n\n\tvar tbody = $.sibling(thead);\n\n\t$.each(tbody, 23, () => sheetState().document.rows, (row) => row.id, ($$anchor, row, rIdx) => {\n\t\tvar tr_1 = root_6();\n\t\tvar td = $.child(tr_1);\n\t\tvar text_2 = $.only_child(td, true);\n\t\tvar node_3 = $.sibling(td);\n\n\t\t$.each(node_3, 19, () => sheetState().document.columns, (col) => col.id, ($$anchor, col, cIdx) => {\n\t\t\tconst cell = $.derived(() => sheetState().getCell($.get(row).id, $.get(col).id));\n\t\t\tconst selected = $.derived(() => isCellSelected($.get(rIdx), $.get(cIdx)));\n\t\t\tconst active = $.derived(() => isActiveCell($.get(rIdx), $.get(cIdx)));\n\t\t\tconst isEditing = $.derived(() => sheetState().editingCell?.row === $.get(rIdx) && sheetState().editingCell?.col === $.get(cIdx));\n\t\t\tvar td_1 = root_4();\n\t\t\tvar node_4 = $.child(td_1);\n\n\t\t\t{\n\t\t\t\tvar consequent_2 = ($$anchor) => {\n\t\t\t\t\tvar input = root_2();\n\n\t\t\t\t\t$.remove_input_defaults(input);\n\t\t\t\t\t$.event('blur', input, () => sheetState().commitEditing());\n\t\t\t\t\t$.bind_value(input, () => sheetState().draftValue, ($$value) => sheetState().draftValue = $$value);\n\t\t\t\t\t$.append($$anchor, input);\n\t\t\t\t};\n\n\t\t\t\tvar consequent_3 = ($$anchor) => {\n\t\t\t\t\tconst cellArg = $.derived(() => Object.assign({ row: $.get(row), col: $.get(col), cell: $.get(cell) }, $.get(cell)));\n\t\t\t\t\tvar fragment_1 = $.comment();\n\t\t\t\t\tvar node_5 = $.first_child(fragment_1);\n\n\t\t\t\t\t$.snippet(node_5, () => $$props.customCellRenderer, () => $.get(cellArg), () => $.get(col), () => $.get(row));\n\t\t\t\t\t$.append($$anchor, fragment_1);\n\t\t\t\t};\n\n\t\t\t\tvar alternate = ($$anchor) => {\n\t\t\t\t\tvar span_2 = root_3();\n\t\t\t\t\tvar text_3 = $.only_child(span_2, true);\n\n\t\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t\t$.set_class(span_2, 1, `truncate block max-w-full ${$.get(cell).error ? 'text-destructive font-semibold' : ''}`);\n\t\t\t\t\t\t$.set_text(text_3, $.get(cell).error || ($.get(cell).value ?? ''));\n\t\t\t\t\t});\n\n\t\t\t\t\t$.append($$anchor, span_2);\n\t\t\t\t};\n\n\t\t\t\t$.if(node_4, ($$render) => {\n\t\t\t\t\tif ($.get(isEditing)) $$render(consequent_2); else if ($$props.customCellRenderer) $$render(consequent_3, 1); else $$render(alternate, -1);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$.reset(td_1);\n\t\t\t$.template_effect(() => $.set_class(td_1, 1, `relative border-r border-border px-2 py-1 truncate max-w-0 text-foreground transition-colors ${$.get(selected) ? 'bg-primary/10' : ''} ${$.get(active) ? 'ring-2 ring-primary ring-inset z-10' : ''}`, 'svelte-m799ch'));\n\t\t\t$.delegated('click', td_1, (e) => handleCellClick($.get(rIdx), $.get(cIdx), e));\n\t\t\t$.delegated('dblclick', td_1, () => handleCellDblClick($.get(rIdx), $.get(cIdx)));\n\t\t\t$.append($$anchor, td_1);\n\t\t});\n\n\t\tvar node_6 = $.sibling(node_3);\n\n\t\t{\n\t\t\tvar consequent_4 = ($$anchor) => {\n\t\t\t\tvar td_2 = root_5();\n\n\t\t\t\t$.append($$anchor, td_2);\n\t\t\t};\n\n\t\t\t$.if(node_6, ($$render) => {\n\t\t\t\tif ($$props.onAddColumnClick) $$render(consequent_4);\n\t\t\t});\n\t\t}\n\n\t\t$.next();\n\t\t$.reset(tr_1);\n\n\t\t$.template_effect(() => {\n\t\t\t$.set_style(tr_1, `height: ${($.get(row).height || 32) ?? ''}px;`);\n\t\t\t$.set_text(text_2, $.get(rIdx) + 1);\n\t\t});\n\n\t\t$.append($$anchor, tr_1);\n\t});\n\n\t$.reset(tbody);\n\t$.reset(table);\n\t$.reset(div_1);\n\t$.reset(div);\n\t$.bind_this(div, ($$value) => $.set(gridContainer, $$value), () => $.get(gridContainer));\n\t$.template_effect(() => $.set_class(div, 1, `flex flex-col h-full w-full overflow-hidden border border-border bg-background select-none outline-none text-foreground font-sans text-xs ${className() ?? ''}`, 'svelte-m799ch'));\n\t$.delegated('keydown', div, handleKeyDown);\n\t$.append($$anchor, div);\n\t$.pop();\n}\n\n$.delegate(['keydown', 'click', 'mousedown', 'dblclick']);","import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { indexToColName } from '@pixerate/editor';\n\nvar root = $.from_html(`<div><div class=\"flex h-6 min-w-[3rem] items-center justify-center rounded border border-border bg-background px-1.5 font-semibold text-foreground\"> </div> <div class=\"flex items-center text-muted-foreground select-none\"><span class=\"italic font-serif font-bold text-sm text-primary\">fx</span></div> <input type=\"text\" class=\"flex-1 bg-transparent px-2 py-0.5 outline-none font-sans text-xs text-foreground placeholder:text-muted-foreground/60 focus:bg-background focus:ring-1 focus:ring-primary rounded\" placeholder=\"Enter a value or formula (e.g. =SUM(A1:A5))\"/></div>`);\n\nexport default function FormulaBar($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet sheetState = $.prop($$props, 'sheetState', 7),\n\t\tactiveCoord = $.prop($$props, 'activeCoord', 3, null),\n\t\tvalue = $.prop($$props, 'value', 15, ''),\n\t\tclassName = $.prop($$props, 'class', 3, '');\n\n\tlet effectiveCoord = $.derived(() => {\n\t\tif (sheetState()) return sheetState().activeCell;\n\n\t\treturn activeCoord();\n\t});\n\n\tlet coordLabel = $.derived(() => {\n\t\tif (!$.get(effectiveCoord)) return '--';\n\n\t\tconst colName = indexToColName($.get(effectiveCoord).col);\n\n\t\treturn `${colName}${$.get(effectiveCoord).row + 1}`;\n\t});\n\n\tlet effectiveValue = $.derived(() => {\n\t\tif (sheetState()) {\n\t\t\tif (sheetState().editingCell) return sheetState().draftValue;\n\t\t\tif (!sheetState().activeCell) return '';\n\n\t\t\tconst row = sheetState().document.rows[sheetState().activeCell.row];\n\t\t\tconst col = sheetState().document.columns[sheetState().activeCell.col];\n\n\t\t\tif (!row || !col) return '';\n\n\t\t\treturn sheetState().getCell(row.id, col.id).raw || '';\n\t\t}\n\n\t\treturn value();\n\t});\n\n\tfunction handleKeyDown(e) {\n\t\tif (e.key === 'Enter') {\n\t\t\te.preventDefault();\n\n\t\t\tif (sheetState() && sheetState().activeCell) {\n\t\t\t\tconst row = sheetState().document.rows[sheetState().activeCell.row];\n\t\t\t\tconst col = sheetState().document.columns[sheetState().activeCell.col];\n\n\t\t\t\tif (row && col) {\n\t\t\t\t\tsheetState().setCellValue(row.id, col.id, $.get(effectiveValue));\n\t\t\t\t}\n\n\t\t\t\tsheetState().commitEditing();\n\t\t\t}\n\n\t\t\t$$props.onCommit?.($.get(effectiveValue));\n\t\t} else if (e.key === 'Escape') {\n\t\t\te.preventDefault();\n\n\t\t\tif (sheetState()) {\n\t\t\t\tsheetState().cancelEditing();\n\t\t\t}\n\n\t\t\t$$props.onCancel?.();\n\t\t}\n\t}\n\n\tfunction handleInput(e) {\n\t\tconst target = e.target;\n\n\t\tif (sheetState()) {\n\t\t\tsheetState().draftValue = target.value;\n\n\t\t\tif (sheetState().activeCell && !sheetState().editingCell) {\n\t\t\t\tsheetState().startEditing(sheetState().activeCell.row, sheetState().activeCell.col, target.value);\n\t\t\t}\n\t\t} else {\n\t\t\tvalue(target.value);\n\t\t}\n\n\t\t$$props.onChange?.(target.value);\n\t}\n\n\tvar div = root();\n\tvar div_1 = $.child(div);\n\tvar text = $.only_child(div_1, true);\n\tvar input = $.sibling(div_1, 4);\n\n\t$.remove_input_defaults(input);\n\t$.reset(div);\n\n\t$.template_effect(() => {\n\t\t$.set_class(div, 1, `flex items-center gap-2 border-b border-border bg-muted/20 px-3 py-1.5 text-xs font-mono ${className() ?? ''}`);\n\t\t$.set_text(text, $.get(coordLabel));\n\t\t$.set_value(input, $.get(effectiveValue));\n\t});\n\n\t$.delegated('input', input, handleInput);\n\t$.delegated('keydown', input, handleKeyDown);\n\t$.append($$anchor, div);\n\t$.pop();\n}\n\n$.delegate(['input', 'keydown']);","import {\n SpreadsheetController\n} from \"@pixerate/editor\";\nexport function createReactiveSpreadsheet(options = {}) {\n let doc = $state({\n id: options.document?.id || `sheet_${Date.now()}`,\n name: options.document?.name || \"Sheet 1\",\n columns: options.document?.columns || [],\n rows: options.document?.rows || [],\n cells: options.document?.cells || {},\n createdAt: options.document?.createdAt || Date.now(),\n updatedAt: options.document?.updatedAt || Date.now()\n });\n let activeCell = $state(null);\n let selectedRange = $state(null);\n let editingCell = $state(null);\n let draftValue = $state(\"\");\n const controller = new SpreadsheetController({\n ...options,\n document: options.document,\n onDocumentChange: (updated) => {\n doc = { ...updated };\n options.onDocumentChange?.(updated);\n },\n onSelectionChange: (active, range) => {\n activeCell = active;\n selectedRange = range;\n options.onSelectionChange?.(active, range);\n },\n onCellCommit: (rowId, colId, raw, value) => {\n options.onCellCommit?.(rowId, colId, raw, value);\n }\n });\n doc = { ...controller.document };\n activeCell = controller.activeCell;\n selectedRange = controller.selectedRange;\n return {\n get document() {\n return doc;\n },\n get activeCell() {\n return activeCell;\n },\n get selectedRange() {\n return selectedRange;\n },\n get editingCell() {\n return editingCell;\n },\n get draftValue() {\n return draftValue;\n },\n set draftValue(val) {\n draftValue = val;\n controller.draftValue = val;\n },\n controller,\n getCell(rowId, colId) {\n return controller.getCell(rowId, colId);\n },\n setCellValue(rowId, colId, raw) {\n controller.setCellValue(rowId, colId, raw);\n doc = { ...controller.document };\n },\n selectCell(row, col, extendSelection = false) {\n controller.selectCell(row, col, extendSelection);\n activeCell = controller.activeCell;\n selectedRange = controller.selectedRange;\n },\n selectRange(range) {\n controller.selectRange(range);\n selectedRange = controller.selectedRange;\n },\n startEditing(row, col, initialVal) {\n controller.startEditing(row, col, initialVal);\n activeCell = controller.activeCell;\n editingCell = controller.editingCell;\n draftValue = controller.draftValue;\n },\n commitEditing(val) {\n controller.commitEditing(val);\n editingCell = null;\n draftValue = \"\";\n doc = { ...controller.document };\n },\n cancelEditing() {\n controller.cancelEditing();\n editingCell = null;\n draftValue = \"\";\n },\n moveCursor(dir, extend = false) {\n controller.moveCursor(dir, extend);\n activeCell = controller.activeCell;\n selectedRange = controller.selectedRange;\n },\n insertColumn(index, config) {\n controller.insertColumn(index, config);\n doc = { ...controller.document };\n },\n deleteColumn(colId) {\n controller.deleteColumn(colId);\n doc = { ...controller.document };\n },\n insertRow(index, config) {\n controller.insertRow(index, config);\n doc = { ...controller.document };\n },\n deleteRow(rowId) {\n controller.deleteRow(rowId);\n doc = { ...controller.document };\n },\n setColumnWidth(colId, width) {\n controller.setColumnWidth(colId, width);\n doc = { ...controller.document };\n },\n loadDocument(document) {\n controller.loadDocument(document);\n doc = { ...controller.document };\n activeCell = controller.activeCell;\n selectedRange = controller.selectedRange;\n editingCell = controller.editingCell;\n draftValue = controller.draftValue;\n },\n syncWithDataSource() {\n controller.syncWithDataSource();\n controller.recalculateAll();\n doc = { ...controller.document };\n },\n registerDataSource(ds) {\n controller.registerDataSource(ds);\n doc = { ...controller.document };\n },\n setPrimaryDataSource(id) {\n controller.setPrimaryDataSource(id);\n doc = { ...controller.document };\n },\n recalculateAll() {\n controller.recalculateAll();\n doc = { ...controller.document };\n },\n exportToTsv() {\n return controller.exportToTsv();\n },\n importFromTsv(data) {\n controller.importFromTsv(data);\n doc = { ...controller.document };\n },\n undo() {\n controller.undo();\n doc = { ...controller.document };\n },\n redo() {\n controller.redo();\n doc = { ...controller.document };\n }\n };\n}\n","import type { Component } from \"svelte\";\nimport type { Editor, Content, Extensions } from \"@tiptap/core\";\nimport type { Template, ColorGradient } from \"@pixerate/editor\";\n\nimport EditableTextNodeEditorComponent from \"./EditableTextNodeEditor.svelte\";\nimport BubbleMenuComponent from \"./BubbleMenu.svelte\";\nimport TemplateRendererComponent from \"./TemplateRenderer.svelte\";\n\nexport * from \"./editor.svelte\";\n\nexport interface EditableTextNodeEditorProps {\n class?: string;\n content?: Content;\n showMenu?: boolean;\n editable?: boolean;\n editor?: Editor;\n extensions?: Extensions;\n onUpdate?: () => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onCreate?: () => void;\n placeholder?: string;\n}\n\nexport interface BubbleMenuProps {\n editor?: Editor;\n class?: string;\n children?: any;\n}\n\nexport interface TemplateRendererProps {\n content: string;\n templates?: Template[];\n templateColorMap?: Map<string, ColorGradient>;\n resolve?: boolean;\n class?: string;\n onTemplateClick?: (templateName: string) => void;\n onVariableClick?: (variableName: string) => void;\n}\n\nexport const EditableTextNodeEditor = EditableTextNodeEditorComponent as unknown as Component<EditableTextNodeEditorProps>;\nexport const BubbleMenu = BubbleMenuComponent as unknown as Component<BubbleMenuProps>;\nexport const TemplateRenderer = TemplateRendererComponent as unknown as Component<TemplateRendererProps>;\n\nexport type {\n Template,\n TemplateVersion,\n Token,\n TokenType,\n ColorGradient,\n RichTextPresetOptions,\n} from \"@pixerate/editor\";\n\nexport * from \"./spreadsheet\";\n"],"mappings":"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","names":["$","$$anchor","$","root","$$anchor","$","root","root_1","$$anchor","$","indexToColName","$","root","index","document","root","root_1","root_2","root_3","root_4","$$anchor","EditableTextNodeEditor","BubbleMenu","TemplateRenderer"]}
1
+ {"version":3,"sources":["../src/EditableTextNodeEditor.svelte","../src/editor.svelte.ts","../src/BubbleMenu.svelte","../src/TemplateRenderer.svelte","../src/spreadsheet/SpreadsheetEditor.svelte","../src/spreadsheet/FormulaBar.svelte","../src/spreadsheet/spreadsheet.svelte.ts","../src/index.ts"],"sourcesContent":["import 'EditableTextNodeEditor.svelte.css';import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { onDestroy, onMount } from \"svelte\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { initiateEditor } from \"./editor.svelte\";\n\nvar root = $.from_html(`<div class=\"flex items-center justify-center p-4 text-sm text-gray-500\">Loading editor...</div>`);\nvar root_1 = $.from_html(`<div draggable=\"false\"><!> <div></div></div>`);\n\nexport default function EditableTextNodeEditor($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet className = $.prop($$props, 'class', 3, \"\"),\n\t\teditorClass = $.prop($$props, 'editorClass', 3, \"\"),\n\t\tcontent = $.prop($$props, 'content', 3, undefined),\n\t\tshowMenu = $.prop($$props, 'showMenu', 3, true),\n\t\teditable = $.prop($$props, 'editable', 3, true),\n\t\teditor = $.prop($$props, 'editor', 15),\n\t\textensions = $.prop($$props, 'extensions', 19, () => []),\n\t\tplaceholder = $.prop($$props, 'placeholder', 3, \"\");\n\n\tlet element = $.state(void 0);\n\n\t$.user_effect(() => {\n\t\tif (editor() && editor().isEditable !== editable()) {\n\t\t\teditor().setEditable(editable());\n\t\t}\n\t});\n\n\tonMount(() => {\n\t\teditor(initiateEditor(\n\t\t\t$.get(element),\n\t\t\tcontent(),\n\t\t\t[\n\t\t\t\tPlaceholder.configure({ placeholder: placeholder() }),\n\t\t\t\t...extensions()\n\t\t\t],\n\t\t\t{\n\t\t\t\teditable: editable(),\n\t\t\t\tonCreate: $$props.onCreate,\n\t\t\t\tonUpdate: $$props.onUpdate,\n\t\t\t\tonFocus() {\n\t\t\t\t\tif ($$props.onFocus) $$props.onFocus();\n\t\t\t\t},\n\n\t\t\t\tonBlur() {\n\t\t\t\t\tif ($$props.onBlur) $$props.onBlur();\n\t\t\t\t}\n\t\t\t}\n\t\t));\n\t});\n\n\tonDestroy(() => {\n\t\tif (editor()) {\n\t\t\teditor().destroy();\n\t\t}\n\t});\n\n\tvar div = root_1();\n\tvar node = $.child(div);\n\n\t{\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar div_1 = root();\n\n\t\t\t$.append($$anchor, div_1);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif (!editor()) $$render(consequent);\n\t\t});\n\t}\n\n\tvar div_2 = $.sibling(node, 2);\n\n\t$.bind_this(div_2, ($$value) => $.set(element, $$value), () => $.get(element));\n\t$.reset(div);\n\n\t$.template_effect(\n\t\t($0) => {\n\t\t\t$.set_class(div, 1, `pixerate-editor-container ${className()}`);\n\t\t\t$.set_class(div_2, 1, $0);\n\t\t},\n\t\t[\n\t\t\t() => $.clsx(`pixerate-editor-content prose dark:prose-invert w-full max-w-none focus:outline-none ${editorClass()}`.trim())\n\t\t]\n\t);\n\n\t$.append($$anchor, div);\n\t$.pop();\n}","import { Editor } from \"@tiptap/core\";\nimport { createRichTextPreset } from \"@pixerate/editor\";\nexport const initiateEditor = (element, content, extensions, options) => {\n const { richTextOptions, ...editorOptions } = options || {};\n const defaultPreset = createRichTextPreset(richTextOptions);\n const editor = new Editor({\n element,\n content,\n extensions: [\n ...defaultPreset,\n ...extensions ?? []\n ],\n autofocus: true,\n ...editorOptions\n });\n return editor;\n};\nexport function createReactiveEditor(initialContent = \"\", extensions = [], options = {}) {\n let editorInstance;\n return {\n get current() {\n return editorInstance;\n },\n mount(element) {\n editorInstance = initiateEditor(element, initialContent, extensions, options);\n return editorInstance;\n },\n destroy() {\n if (editorInstance) {\n editorInstance.destroy();\n editorInstance = void 0;\n }\n }\n };\n}\n","import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { BubbleMenuPlugin } from \"@tiptap/extension-bubble-menu\";\n\nvar root = $.from_html(`<div style=\"visibility: hidden;\"><!></div>`);\n\nexport default function BubbleMenu($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet className = $.prop($$props, 'class', 3, \"flex h-fit w-fit items-center gap-1 rounded-md border border-gray-200 bg-white p-1 shadow-md\"),\n\t\tpluginKey = $.prop($$props, 'pluginKey', 3, \"bubbleMenu\"),\n\t\tshouldShow = $.prop($$props, 'shouldShow', 3, null),\n\t\tupdateDelay = $.prop($$props, 'updateDelay', 3, 250),\n\t\ttippyOptions = $.prop($$props, 'tippyOptions', 19, () => ({}));\n\n\tlet menuElement = $.state(void 0);\n\n\t$.user_effect(() => {\n\t\tif ($$props.editor && $.get(menuElement)) {\n\t\t\tconst plugin = BubbleMenuPlugin({\n\t\t\t\tpluginKey: pluginKey(),\n\t\t\t\teditor: $$props.editor,\n\t\t\t\telement: $.get(menuElement),\n\t\t\t\ttippyOptions: {\n\t\t\t\t\tduration: 100,\n\t\t\t\t\tappendTo: () => document.body,\n\t\t\t\t\t...tippyOptions()\n\t\t\t\t},\n\t\t\t\tshouldShow: shouldShow(),\n\t\t\t\tupdateDelay: updateDelay()\n\t\t\t});\n\n\t\t\t$$props.editor.registerPlugin(plugin);\n\n\t\t\treturn () => {\n\t\t\t\t$$props.editor.unregisterPlugin(pluginKey());\n\t\t\t};\n\t\t}\n\t});\n\n\tvar div = root();\n\tvar node = $.child(div);\n\n\t{\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar fragment = $.comment();\n\t\t\tvar node_1 = $.first_child(fragment);\n\n\t\t\t$.snippet(node_1, () => $$props.children);\n\t\t\t$.append($$anchor, fragment);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif ($$props.children) $$render(consequent);\n\t\t});\n\t}\n\n\t$.reset(div);\n\t$.bind_this(div, ($$value) => $.set(menuElement, $$value), () => $.get(menuElement));\n\t$.template_effect(() => $.set_class(div, 1, $.clsx(className())));\n\t$.append($$anchor, div);\n\t$.pop();\n}","import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { tokenizePrompt, resolveTemplates } from \"@pixerate/editor\";\n\nvar root = $.from_html(`<span class=\"inline-flex items-center px-1.5 py-0.5 mx-0.5 text-xs font-semibold rounded-md border border-[var(--color-to)]/40 bg-gradient-to-r from-[var(--color-from)]/15 to-[var(--color-to)]/15 text-[var(--color-to)] hover:brightness-110 cursor-pointer transition-all\"> </span>`);\nvar root_1 = $.from_html(`<span class=\"inline-flex items-center px-1.5 py-0.5 mx-0.5 text-xs font-medium rounded-md border border-violet-400/40 bg-violet-400/15 text-violet-600 hover:brightness-110 cursor-pointer transition-all\"> </span>`);\nvar root_2 = $.from_html(`<span class=\"inline-flex items-center px-1.5 py-0.5 mx-0.5 text-xs italic font-medium rounded-md border border-rose-400/40 bg-rose-400/15 text-rose-600\"> </span>`);\nvar root_3 = $.from_html(`<span> </span>`);\nvar root_4 = $.from_html(`<div></div>`);\n\nexport default function TemplateRenderer($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet templates = $.prop($$props, 'templates', 19, () => []),\n\t\tresolve = $.prop($$props, 'resolve', 3, false),\n\t\tclassName = $.prop($$props, 'class', 3, \"font-mono text-sm leading-relaxed whitespace-pre-wrap break-words\");\n\n\tlet displayText = $.derived(() => resolve() && templates().length > 0\n\t\t? resolveTemplates($$props.content, templates())\n\t\t: $$props.content);\n\n\tlet tokens = $.derived(() => tokenizePrompt($.get(displayText)));\n\tvar div = root_4();\n\n\t$.each(div, 21, () => $.get(tokens), $.index, ($$anchor, token) => {\n\t\tvar fragment = $.comment();\n\t\tvar node = $.first_child(fragment);\n\n\t\t{\n\t\t\tvar consequent = ($$anchor) => {\n\t\t\t\tconst colors = $.derived(() => $$props.templateColorMap?.get($.get(token).value) || { from: \"#f43f5e\", to: \"#8b5cf6\" });\n\t\t\t\tvar span = root();\n\t\t\t\tvar text = $.only_child(span, true);\n\n\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t$.set_style(span, `--color-from: ${$.get(colors).from}; --color-to: ${$.get(colors).to};`);\n\t\t\t\t\t$.set_attribute(span, 'title', `Template: ${$.get(token).value}`);\n\t\t\t\t\t$.set_text(text, `{{${$.get(token).value}}}`);\n\t\t\t\t});\n\n\t\t\t\t$.delegated('click', span, () => $$props.onTemplateClick?.($.get(token).value));\n\t\t\t\t$.append($$anchor, span);\n\t\t\t};\n\n\t\t\tvar consequent_1 = ($$anchor) => {\n\t\t\t\tvar span_1 = root_1();\n\t\t\t\tvar text_1 = $.only_child(span_1, true);\n\n\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t$.set_attribute(span_1, 'title', `Variable: ${$.get(token).value}`);\n\t\t\t\t\t$.set_text(text_1, `{${$.get(token).value}}`);\n\t\t\t\t});\n\n\t\t\t\t$.delegated('click', span_1, () => $$props.onVariableClick?.($.get(token).value));\n\t\t\t\t$.append($$anchor, span_1);\n\t\t\t};\n\n\t\t\tvar consequent_2 = ($$anchor) => {\n\t\t\t\tvar span_2 = root_2();\n\t\t\t\tvar text_2 = $.only_child(span_2, true);\n\n\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t$.set_attribute(span_2, 'title', `Instruction: ${$.get(token).value}`);\n\t\t\t\t\t$.set_text(text_2, `__${$.get(token).value}__`);\n\t\t\t\t});\n\n\t\t\t\t$.append($$anchor, span_2);\n\t\t\t};\n\n\t\t\tvar alternate = ($$anchor) => {\n\t\t\t\tvar span_3 = root_3();\n\t\t\t\tvar text_3 = $.only_child(span_3, true);\n\n\t\t\t\t$.template_effect(() => $.set_text(text_3, $.get(token).value));\n\t\t\t\t$.append($$anchor, span_3);\n\t\t\t};\n\n\t\t\t$.if(node, ($$render) => {\n\t\t\t\tif ($.get(token).type === \"template\") $$render(consequent); else if ($.get(token).type === \"variable\") $$render(consequent_1, 1); else if ($.get(token).type === \"instruction\") $$render(consequent_2, 2); else $$render(alternate, -1);\n\t\t\t});\n\t\t}\n\n\t\t$.append($$anchor, fragment);\n\t});\n\n\t$.reset(div);\n\t$.template_effect(() => $.set_class(div, 1, $.clsx(className())));\n\t$.append($$anchor, div);\n\t$.pop();\n}\n\n$.delegate(['click']);","import 'SpreadsheetEditor.svelte.css';import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { indexToColName } from '@pixerate/editor';\nimport FormulaBar from './FormulaBar.svelte';\nimport { createReactiveSpreadsheet } from './spreadsheet.svelte';\n\nvar root = $.from_html(`<th><div class=\"flex items-center justify-between gap-1 min-w-0 overflow-hidden truncate\"><span class=\"truncate font-semibold text-foreground text-xs min-w-0\"> </span> <span class=\"text-[10px] text-muted-foreground/70 font-mono font-normal shrink-0\"> </span></div> <div class=\"col-resize-handle svelte-m799ch\" style=\"position: absolute; top: 0; bottom: 0; width: 12px; right: -6px; cursor: col-resize !important; z-index: 20; display: flex; justify-content: center; touch-action: none;\" role=\"separator\" aria-orientation=\"vertical\" tabindex=\"-1\"><div class=\"col-resize-handle-line svelte-m799ch\"></div></div></th>`);\nvar root_1 = $.from_html(`<th class=\"w-10 min-w-[2.5rem] px-1 text-center bg-muted/40 hover:bg-muted cursor-pointer transition-colors svelte-m799ch\" title=\"Add Column\"><span class=\"text-xs font-bold text-muted-foreground\">+</span></th>`);\nvar root_2 = $.from_html(`<input type=\"text\" class=\"absolute inset-0 w-full h-full px-2 py-1 bg-background text-foreground outline-none font-sans text-xs border-2 border-primary z-20\"/>`);\nvar root_3 = $.from_html(`<span> </span>`);\nvar root_4 = $.from_html(`<td style=\"max-width: 0; overflow: hidden;\"><!></td>`);\nvar root_5 = $.from_html(`<td class=\"w-10 min-w-[2.5rem] bg-muted/10 border-r border-border svelte-m799ch\"></td>`);\nvar root_6 = $.from_html(`<tr class=\"border-b border-border hover:bg-muted/10 transition-colors\"><td class=\"w-12 min-w-[3rem] sticky left-0 z-10 bg-muted/50 border-r border-border text-center text-[10px] text-muted-foreground font-mono select-none svelte-m799ch\"> </td><!><!><td class=\"border-b border-border bg-transparent p-0 svelte-m799ch\"></td></tr>`);\nvar root_7 = $.from_html(`<div tabindex=\"0\" role=\"grid\" aria-label=\"Spreadsheet\"><!> <div class=\"relative flex-1 overflow-auto\"><table class=\"border-collapse table-fixed w-max min-w-full svelte-m799ch\"><thead><tr class=\"h-7 bg-muted/60 sticky top-0 z-20 border-b border-border shadow-xs\"><th class=\"w-12 min-w-[3rem] sticky left-0 z-30 bg-muted/90 border-r border-border text-center text-[10px] text-muted-foreground font-medium svelte-m799ch\">#</th><!><!><th class=\"border-b border-border bg-transparent p-0 font-normal svelte-m799ch\"></th></tr></thead><tbody></tbody></table></div></div>`);\n\nexport default function SpreadsheetEditor($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet sheetState = $.prop($$props, 'sheetState', 23, createReactiveSpreadsheet),\n\t\treadOnly = $.prop($$props, 'readOnly', 3, false),\n\t\treadonly = $.prop($$props, 'readonly', 3, false),\n\t\tshowFormulaBar = $.prop($$props, 'showFormulaBar', 3, true),\n\t\tclassName = $.prop($$props, 'class', 3, '');\n\n\tlet isReadOnly = $.derived(() => readOnly() || readonly());\n\tlet gridContainer = $.state(null);\n\tlet resizingColId = $.state(null);\n\tlet hoveredColId = $.state(null);\n\tlet resizeStartX = $.state(0);\n\tlet resizeStartWidth = $.state(0);\n\n\tfunction handleCellClick(rIdx, cIdx, e) {\n\t\tif (sheetState().editingCell && (sheetState().editingCell.row !== rIdx || sheetState().editingCell.col !== cIdx)) {\n\t\t\tsheetState().commitEditing();\n\t\t}\n\n\t\tsheetState().selectCell(rIdx, cIdx, e.shiftKey);\n\t}\n\n\tfunction handleCellDblClick(rIdx, cIdx) {\n\t\tif ($.get(isReadOnly)) return;\n\n\t\tconst col = sheetState().document.columns[cIdx];\n\n\t\tif (col?.readOnly) return;\n\n\t\tsheetState().startEditing(rIdx, cIdx);\n\t}\n\n\tfunction handleKeyDown(e) {\n\t\tif (sheetState().editingCell) {\n\t\t\tif (e.key === 'Escape') {\n\t\t\t\tsheetState().cancelEditing();\n\t\t\t} else if (e.key === 'Enter') {\n\t\t\t\tsheetState().commitEditing();\n\t\t\t\tsheetState().moveCursor('down');\n\t\t\t} else if (e.key === 'Tab') {\n\t\t\t\te.preventDefault();\n\t\t\t\tsheetState().commitEditing();\n\t\t\t\tsheetState().moveCursor(e.shiftKey ? 'left' : 'right');\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!sheetState().activeCell) return;\n\n\t\tif (e.key === 'ArrowUp') {\n\t\t\te.preventDefault();\n\t\t\tsheetState().moveCursor('up', e.shiftKey);\n\t\t} else if (e.key === 'ArrowDown') {\n\t\t\te.preventDefault();\n\t\t\tsheetState().moveCursor('down', e.shiftKey);\n\t\t} else if (e.key === 'ArrowLeft') {\n\t\t\te.preventDefault();\n\t\t\tsheetState().moveCursor('left', e.shiftKey);\n\t\t} else if (e.key === 'ArrowRight') {\n\t\t\te.preventDefault();\n\t\t\tsheetState().moveCursor('right', e.shiftKey);\n\t\t} else if (e.key === 'Tab') {\n\t\t\te.preventDefault();\n\t\t\tsheetState().moveCursor(e.shiftKey ? 'left' : 'right');\n\t\t} else if (e.key === 'Enter') {\n\t\t\te.preventDefault();\n\n\t\t\tconst col = sheetState().document.columns[sheetState().activeCell.col];\n\n\t\t\tif (!$.get(isReadOnly) && !col?.readOnly) {\n\t\t\t\tsheetState().startEditing();\n\t\t\t}\n\t\t} else if (e.key === 'Backspace' || e.key === 'Delete') {\n\t\t\tif ($.get(isReadOnly)) return;\n\n\t\t\tconst row = sheetState().document.rows[sheetState().activeCell.row];\n\t\t\tconst col = sheetState().document.columns[sheetState().activeCell.col];\n\n\t\t\tif (row && col && !col.readOnly) {\n\t\t\t\te.preventDefault();\n\t\t\t\tsheetState().setCellValue(row.id, col.id, '');\n\t\t\t}\n\t\t} else if ((e.metaKey || e.ctrlKey) && e.key === 'z') {\n\t\t\te.preventDefault();\n\n\t\t\tif (e.shiftKey) {\n\t\t\t\tsheetState().redo();\n\t\t\t} else {\n\t\t\t\tsheetState().undo();\n\t\t\t}\n\t\t} else if ((e.metaKey || e.ctrlKey) && e.key === 'c') {\n\t\t\te.preventDefault();\n\n\t\t\tconst tsv = sheetState().exportToTsv();\n\n\t\t\tnavigator.clipboard?.writeText(tsv);\n\t\t} else if (!$.get(isReadOnly) && e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {\n\t\t\t// Direct typing into cell starts editing\n\t\t\tconst col = sheetState().document.columns[sheetState().activeCell.col];\n\n\t\t\tif (!col?.readOnly) {\n\t\t\t\tsheetState().startEditing(sheetState().activeCell.row, sheetState().activeCell.col, e.key);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleResizeStart(colId, width, e) {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\t$.set(resizingColId, colId, true);\n\t\t$.set(resizeStartX, e.clientX, true);\n\t\t$.set(resizeStartWidth, width, true);\n\n\t\tif (typeof document !== 'undefined') {\n\t\t\tdocument.body.style.cursor = 'col-resize';\n\t\t\tdocument.body.style.userSelect = 'none';\n\t\t}\n\n\t\tlet rafId = null;\n\t\tlet pendingWidth = width;\n\t\tlet hasDragged = false;\n\n\t\tconst handleMouseMove = (moveEvent) => {\n\t\t\tif (!$.get(resizingColId)) return;\n\n\t\t\tconst delta = moveEvent.clientX - $.get(resizeStartX);\n\n\t\t\tif (Math.abs(delta) > 2) {\n\t\t\t\thasDragged = true;\n\t\t\t}\n\n\t\t\tpendingWidth = Math.max(30, $.get(resizeStartWidth) + delta);\n\n\t\t\tif (rafId === null) {\n\t\t\t\trafId = requestAnimationFrame(() => {\n\t\t\t\t\trafId = null;\n\n\t\t\t\t\tif ($.get(resizingColId)) {\n\t\t\t\t\t\tsheetState().setColumnWidth($.get(resizingColId), pendingWidth);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst handleMouseUp = () => {\n\t\t\tif (rafId !== null) {\n\t\t\t\tcancelAnimationFrame(rafId);\n\t\t\t\trafId = null;\n\t\t\t}\n\n\t\t\tif ($.get(resizingColId) && hasDragged) {\n\t\t\t\tsheetState().setColumnWidth($.get(resizingColId), pendingWidth);\n\n\t\t\t\tconst col = sheetState().document.columns.find((c) => c.id === $.get(resizingColId));\n\n\t\t\t\tif (col && $$props.onColumnResize) {\n\t\t\t\t\t$$props.onColumnResize(col.id, col.width || pendingWidth);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$.set(resizingColId, null);\n\n\t\t\tif (typeof document !== 'undefined') {\n\t\t\t\tdocument.body.style.cursor = '';\n\t\t\t\tdocument.body.style.userSelect = '';\n\t\t\t}\n\n\t\t\twindow.removeEventListener('mousemove', handleMouseMove);\n\t\t\twindow.removeEventListener('mouseup', handleMouseUp);\n\t\t};\n\n\t\twindow.addEventListener('mousemove', handleMouseMove);\n\t\twindow.addEventListener('mouseup', handleMouseUp);\n\t}\n\n\tfunction measureElementContentWidth(el, container) {\n\t\tif (typeof document === 'undefined') return 0;\n\n\t\tlet maxW = el.scrollWidth || 0;\n\t\tconst firstChild = el.firstElementChild;\n\n\t\tif (firstChild && firstChild.scrollWidth > maxW) {\n\t\t\tmaxW = firstChild.scrollWidth;\n\t\t}\n\n\t\tconst truncated = el.querySelectorAll('.truncate, [title], span, div');\n\n\t\ttruncated.forEach((node) => {\n\t\t\tif (node.scrollWidth > maxW) {\n\t\t\t\tmaxW = node.scrollWidth;\n\t\t\t}\n\t\t});\n\n\t\ttry {\n\t\t\tconst clone = firstChild ? firstChild.cloneNode(true) : el.cloneNode(true);\n\n\t\t\tclone.style.cssText = `\n position: absolute !important;\n visibility: hidden !important;\n width: max-content !important;\n min-width: max-content !important;\n max-width: none !important;\n overflow: visible !important;\n white-space: nowrap !important;\n pointer-events: none !important;\n top: -9999px !important;\n left: -9999px !important;\n `;\n\n\t\t\tconst allNodes = clone.querySelectorAll('*');\n\n\t\t\tallNodes.forEach((node) => {\n\t\t\t\tnode.style.maxWidth = 'none';\n\t\t\t\tnode.style.overflow = 'visible';\n\t\t\t\tnode.style.textOverflow = 'clip';\n\t\t\t\tnode.style.whiteSpace = 'nowrap';\n\n\t\t\t\tif (node.classList.contains('truncate') || node.classList.contains('min-w-0') || node.classList.contains('w-full') || node.classList.contains('max-w-0') || node.classList.contains('flex-1')) {\n\t\t\t\t\tnode.style.width = 'max-content';\n\t\t\t\t\tnode.style.minWidth = 'max-content';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontainer.appendChild(clone);\n\n\t\t\tconst rect = clone.getBoundingClientRect();\n\n\t\t\tcontainer.removeChild(clone);\n\n\t\t\tif (rect.width > maxW) {\n\t\t\t\tmaxW = rect.width;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore cloning/measuring errors\n\t\t}\n\n\t\treturn maxW;\n\t}\n\n\tfunction autoFitColumn(colId, colIndex) {\n\t\tconst col = sheetState().document.columns.find((c) => c.id === colId);\n\n\t\tif (!col) return;\n\n\t\tlet calculatedWidth = 0;\n\n\t\tif ($.get(gridContainer) && typeof document !== 'undefined') {\n\t\t\tconst table = $.get(gridContainer).querySelector('table');\n\n\t\t\tif (table) {\n\t\t\t\tconst thElements = table.querySelectorAll('thead th');\n\t\t\t\tconst th = thElements[colIndex + 1];\n\n\t\t\t\tif (th) {\n\t\t\t\t\tconst headerInner = th.firstElementChild || th;\n\t\t\t\t\tconst headerW = measureElementContentWidth(headerInner, $.get(gridContainer));\n\n\t\t\t\t\tcalculatedWidth = Math.max(calculatedWidth, headerW + 28);\n\t\t\t\t}\n\n\t\t\t\tconst rows = table.querySelectorAll('tbody tr');\n\t\t\t\tconst sampleLimit = Math.min(rows.length, 150);\n\n\t\t\t\tfor (let r = 0; r < sampleLimit; r++) {\n\t\t\t\t\tconst tr = rows[r];\n\t\t\t\t\tconst td = tr.children[colIndex + 1];\n\n\t\t\t\t\tif (td) {\n\t\t\t\t\t\tconst cellW = measureElementContentWidth(td, $.get(gridContainer));\n\n\t\t\t\t\t\tcalculatedWidth = Math.max(calculatedWidth, cellW + 20);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (calculatedWidth > 0) {\n\t\t\tconst finalWidth = Math.min(600, Math.max(50, Math.ceil(calculatedWidth)));\n\n\t\t\tsheetState().setColumnWidth(colId, finalWidth);\n\t\t} else {\n\t\t\tsheetState().autoFitColumnWidth(colId);\n\t\t}\n\n\t\tconst updatedCol = sheetState().document.columns.find((c) => c.id === colId);\n\n\t\tif (updatedCol && $$props.onColumnResize) {\n\t\t\t$$props.onColumnResize(updatedCol.id, updatedCol.width || 130);\n\t\t}\n\t}\n\n\tfunction handleResizeDblClick(colId, colIndex, e) {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tautoFitColumn(colId, colIndex);\n\t}\n\n\tfunction handleHeaderDblClick(colId, colIndex, e) {\n\t\tconst target = e.currentTarget;\n\n\t\tif (target) {\n\t\t\tconst rect = target.getBoundingClientRect();\n\n\t\t\tif (rect.right - e.clientX <= 12) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\tautoFitColumn(colId, colIndex);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction isCellSelected(rIdx, cIdx) {\n\t\tif (!sheetState().selectedRange) return false;\n\n\t\tconst minR = Math.min(sheetState().selectedRange.startRow, sheetState().selectedRange.endRow);\n\t\tconst maxR = Math.max(sheetState().selectedRange.startRow, sheetState().selectedRange.endRow);\n\t\tconst minC = Math.min(sheetState().selectedRange.startCol, sheetState().selectedRange.endCol);\n\t\tconst maxC = Math.max(sheetState().selectedRange.startCol, sheetState().selectedRange.endCol);\n\n\t\treturn rIdx >= minR && rIdx <= maxR && cIdx >= minC && cIdx <= maxC;\n\t}\n\n\tfunction isActiveCell(rIdx, cIdx) {\n\t\treturn sheetState().activeCell?.row === rIdx && sheetState().activeCell?.col === cIdx;\n\t}\n\n\tvar div = root_7();\n\tvar node_1 = $.child(div);\n\n\t{\n\t\tvar consequent = ($$anchor) => {\n\t\t\tFormulaBar($$anchor, {\n\t\t\t\tget sheetState() {\n\t\t\t\t\treturn sheetState();\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t$.if(node_1, ($$render) => {\n\t\t\tif (showFormulaBar()) $$render(consequent);\n\t\t});\n\t}\n\n\tvar div_1 = $.sibling(node_1, 2);\n\tvar table_1 = $.child(div_1);\n\tvar thead = $.child(table_1);\n\tvar tr_1 = $.child(thead);\n\tvar node_2 = $.sibling($.child(tr_1));\n\n\t$.each(node_2, 19, () => sheetState().document.columns, (col) => col.id, ($$anchor, col, cIdx) => {\n\t\tvar th_1 = root();\n\t\tvar div_2 = $.child(th_1);\n\t\tvar span = $.child(div_2);\n\t\tvar text = $.only_child(span, true);\n\t\tvar span_1 = $.sibling(span, 2);\n\t\tvar text_1 = $.only_child(span_1);\n\n\t\t$.reset(div_2);\n\n\t\tvar div_3 = $.sibling(div_2, 2);\n\t\tvar div_4 = $.only_child(div_3);\n\n\t\t$.reset(th_1);\n\n\t\t$.template_effect(() => {\n\t\t\t$.set_class(th_1, 1, `relative border-r border-border px-2 text-left font-medium text-muted-foreground hover:bg-muted/90 transition-colors group overflow-hidden max-w-0 ${$$props.onColumnHeaderClick ? 'cursor-pointer' : 'cursor-default'}`, 'svelte-m799ch');\n\t\t\t$.set_style(th_1, `width: ${($.get(col).width || 130) ?? ''}px; min-width: ${($.get(col).width || 130) ?? ''}px; max-width: ${($.get(col).width || 130) ?? ''}px; overflow: hidden;`);\n\t\t\t$.set_text(text, $.get(col).title);\n\t\t\t$.set_text(text_1, `(${$.get(col).key ?? ''})`);\n\n\t\t\t$.set_style(div_4, `width: 2px; height: 100%; pointer-events: none; transition: background-color 150ms ease; background-color: ${$.get(resizingColId) === $.get(col).id\n\t\t\t\t? 'var(--primary, #6366f1)'\n\t\t\t\t: $.get(hoveredColId) === $.get(col).id\n\t\t\t\t\t? 'color-mix(in srgb, var(--primary, #6366f1) 75%, transparent)'\n\t\t\t\t\t: 'transparent'};`);\n\t\t});\n\n\t\t$.delegated('click', th_1, () => $$props.onColumnHeaderClick?.($.get(col)));\n\t\t$.delegated('dblclick', th_1, (e) => handleHeaderDblClick($.get(col).id, $.get(cIdx), e));\n\t\t$.event('mouseenter', div_3, () => $.set(hoveredColId, $.get(col).id, true));\n\n\t\t$.event('mouseleave', div_3, () => {\n\t\t\tif ($.get(hoveredColId) === $.get(col).id) $.set(hoveredColId, null);\n\t\t});\n\n\t\t$.delegated('mousedown', div_3, (e) => handleResizeStart($.get(col).id, $.get(col).width || 130, e));\n\t\t$.delegated('dblclick', div_3, (e) => handleResizeDblClick($.get(col).id, $.get(cIdx), e));\n\t\t$.append($$anchor, th_1);\n\t});\n\n\tvar node_3 = $.sibling(node_2);\n\n\t{\n\t\tvar consequent_1 = ($$anchor) => {\n\t\t\tvar th_2 = root_1();\n\n\t\t\t$.delegated('click', th_2, function (...$$args) {\n\t\t\t\t$$props.onAddColumnClick?.apply(this, $$args);\n\t\t\t});\n\n\t\t\t$.append($$anchor, th_2);\n\t\t};\n\n\t\t$.if(node_3, ($$render) => {\n\t\t\tif ($$props.onAddColumnClick) $$render(consequent_1);\n\t\t});\n\t}\n\n\t$.next();\n\t$.reset(tr_1);\n\t$.reset(thead);\n\n\tvar tbody = $.sibling(thead);\n\n\t$.each(tbody, 23, () => sheetState().document.rows, (row) => row.id, ($$anchor, row, rIdx) => {\n\t\tvar tr_2 = root_6();\n\t\tvar td_1 = $.child(tr_2);\n\t\tvar text_2 = $.only_child(td_1, true);\n\t\tvar node_4 = $.sibling(td_1);\n\n\t\t$.each(node_4, 19, () => sheetState().document.columns, (col) => col.id, ($$anchor, col, cIdx) => {\n\t\t\tconst cell = $.derived(() => sheetState().getCell($.get(row).id, $.get(col).id));\n\t\t\tconst selected = $.derived(() => isCellSelected($.get(rIdx), $.get(cIdx)));\n\t\t\tconst active = $.derived(() => isActiveCell($.get(rIdx), $.get(cIdx)));\n\t\t\tconst isEditing = $.derived(() => sheetState().editingCell?.row === $.get(rIdx) && sheetState().editingCell?.col === $.get(cIdx));\n\t\t\tvar td_2 = root_4();\n\t\t\tvar node_5 = $.child(td_2);\n\n\t\t\t{\n\t\t\t\tvar consequent_2 = ($$anchor) => {\n\t\t\t\t\tvar input = root_2();\n\n\t\t\t\t\t$.remove_input_defaults(input);\n\t\t\t\t\t$.event('blur', input, () => sheetState().commitEditing());\n\t\t\t\t\t$.bind_value(input, () => sheetState().draftValue, ($$value) => sheetState().draftValue = $$value);\n\t\t\t\t\t$.append($$anchor, input);\n\t\t\t\t};\n\n\t\t\t\tvar consequent_3 = ($$anchor) => {\n\t\t\t\t\tconst cellArg = $.derived(() => Object.assign({ row: $.get(row), col: $.get(col), cell: $.get(cell) }, $.get(cell)));\n\t\t\t\t\tvar fragment_1 = $.comment();\n\t\t\t\t\tvar node_6 = $.first_child(fragment_1);\n\n\t\t\t\t\t$.snippet(node_6, () => $$props.customCellRenderer, () => $.get(cellArg), () => $.get(col), () => $.get(row));\n\t\t\t\t\t$.append($$anchor, fragment_1);\n\t\t\t\t};\n\n\t\t\t\tvar alternate = ($$anchor) => {\n\t\t\t\t\tvar span_2 = root_3();\n\t\t\t\t\tvar text_3 = $.only_child(span_2, true);\n\n\t\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t\t$.set_class(span_2, 1, `truncate block max-w-full ${$.get(cell).error ? 'text-destructive font-semibold' : ''}`);\n\t\t\t\t\t\t$.set_text(text_3, $.get(cell).error || ($.get(cell).value ?? ''));\n\t\t\t\t\t});\n\n\t\t\t\t\t$.append($$anchor, span_2);\n\t\t\t\t};\n\n\t\t\t\t$.if(node_5, ($$render) => {\n\t\t\t\t\tif ($.get(isEditing)) $$render(consequent_2); else if ($$props.customCellRenderer) $$render(consequent_3, 1); else $$render(alternate, -1);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$.reset(td_2);\n\t\t\t$.template_effect(() => $.set_class(td_2, 1, `relative border-r border-border px-2 py-1 truncate max-w-0 text-foreground transition-colors ${$.get(selected) ? 'bg-primary/10' : ''} ${$.get(active) ? 'ring-2 ring-primary ring-inset z-10' : ''}`, 'svelte-m799ch'));\n\t\t\t$.delegated('click', td_2, (e) => handleCellClick($.get(rIdx), $.get(cIdx), e));\n\t\t\t$.delegated('dblclick', td_2, () => handleCellDblClick($.get(rIdx), $.get(cIdx)));\n\t\t\t$.append($$anchor, td_2);\n\t\t});\n\n\t\tvar node_7 = $.sibling(node_4);\n\n\t\t{\n\t\t\tvar consequent_4 = ($$anchor) => {\n\t\t\t\tvar td_3 = root_5();\n\n\t\t\t\t$.append($$anchor, td_3);\n\t\t\t};\n\n\t\t\t$.if(node_7, ($$render) => {\n\t\t\t\tif ($$props.onAddColumnClick) $$render(consequent_4);\n\t\t\t});\n\t\t}\n\n\t\t$.next();\n\t\t$.reset(tr_2);\n\n\t\t$.template_effect(() => {\n\t\t\t$.set_style(tr_2, `height: ${($.get(row).height || 32) ?? ''}px;`);\n\t\t\t$.set_text(text_2, $.get(rIdx) + 1);\n\t\t});\n\n\t\t$.append($$anchor, tr_2);\n\t});\n\n\t$.reset(tbody);\n\t$.reset(table_1);\n\t$.reset(div_1);\n\t$.reset(div);\n\t$.bind_this(div, ($$value) => $.set(gridContainer, $$value), () => $.get(gridContainer));\n\t$.template_effect(() => $.set_class(div, 1, `flex flex-col h-full w-full overflow-hidden border border-border bg-background select-none outline-none text-foreground font-sans text-xs ${className() ?? ''}`, 'svelte-m799ch'));\n\t$.delegated('keydown', div, handleKeyDown);\n\t$.append($$anchor, div);\n\t$.pop();\n}\n\n$.delegate(['keydown', 'click', 'dblclick', 'mousedown']);","import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { indexToColName } from '@pixerate/editor';\n\nvar root = $.from_html(`<div><div class=\"flex h-6 min-w-[3rem] items-center justify-center rounded border border-border bg-background px-1.5 font-semibold text-foreground\"> </div> <div class=\"flex items-center text-muted-foreground select-none\"><span class=\"italic font-serif font-bold text-sm text-primary\">fx</span></div> <input type=\"text\" class=\"flex-1 bg-transparent px-2 py-0.5 outline-none font-sans text-xs text-foreground placeholder:text-muted-foreground/60 focus:bg-background focus:ring-1 focus:ring-primary rounded\" placeholder=\"Enter a value or formula (e.g. =SUM(A1:A5))\"/></div>`);\n\nexport default function FormulaBar($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet sheetState = $.prop($$props, 'sheetState', 7),\n\t\tactiveCoord = $.prop($$props, 'activeCoord', 3, null),\n\t\tvalue = $.prop($$props, 'value', 15, ''),\n\t\tclassName = $.prop($$props, 'class', 3, '');\n\n\tlet effectiveCoord = $.derived(() => {\n\t\tif (sheetState()) return sheetState().activeCell;\n\n\t\treturn activeCoord();\n\t});\n\n\tlet coordLabel = $.derived(() => {\n\t\tif (!$.get(effectiveCoord)) return '--';\n\n\t\tconst colName = indexToColName($.get(effectiveCoord).col);\n\n\t\treturn `${colName}${$.get(effectiveCoord).row + 1}`;\n\t});\n\n\tlet effectiveValue = $.derived(() => {\n\t\tif (sheetState()) {\n\t\t\tif (sheetState().editingCell) return sheetState().draftValue;\n\t\t\tif (!sheetState().activeCell) return '';\n\n\t\t\tconst row = sheetState().document.rows[sheetState().activeCell.row];\n\t\t\tconst col = sheetState().document.columns[sheetState().activeCell.col];\n\n\t\t\tif (!row || !col) return '';\n\n\t\t\treturn sheetState().getCell(row.id, col.id).raw || '';\n\t\t}\n\n\t\treturn value();\n\t});\n\n\tfunction handleKeyDown(e) {\n\t\tif (e.key === 'Enter') {\n\t\t\te.preventDefault();\n\n\t\t\tif (sheetState() && sheetState().activeCell) {\n\t\t\t\tconst row = sheetState().document.rows[sheetState().activeCell.row];\n\t\t\t\tconst col = sheetState().document.columns[sheetState().activeCell.col];\n\n\t\t\t\tif (row && col) {\n\t\t\t\t\tsheetState().setCellValue(row.id, col.id, $.get(effectiveValue));\n\t\t\t\t}\n\n\t\t\t\tsheetState().commitEditing();\n\t\t\t}\n\n\t\t\t$$props.onCommit?.($.get(effectiveValue));\n\t\t} else if (e.key === 'Escape') {\n\t\t\te.preventDefault();\n\n\t\t\tif (sheetState()) {\n\t\t\t\tsheetState().cancelEditing();\n\t\t\t}\n\n\t\t\t$$props.onCancel?.();\n\t\t}\n\t}\n\n\tfunction handleInput(e) {\n\t\tconst target = e.target;\n\n\t\tif (sheetState()) {\n\t\t\tsheetState().draftValue = target.value;\n\n\t\t\tif (sheetState().activeCell && !sheetState().editingCell) {\n\t\t\t\tsheetState().startEditing(sheetState().activeCell.row, sheetState().activeCell.col, target.value);\n\t\t\t}\n\t\t} else {\n\t\t\tvalue(target.value);\n\t\t}\n\n\t\t$$props.onChange?.(target.value);\n\t}\n\n\tvar div = root();\n\tvar div_1 = $.child(div);\n\tvar text = $.only_child(div_1, true);\n\tvar input = $.sibling(div_1, 4);\n\n\t$.remove_input_defaults(input);\n\t$.reset(div);\n\n\t$.template_effect(() => {\n\t\t$.set_class(div, 1, `flex items-center gap-2 border-b border-border bg-muted/20 px-3 py-1.5 text-xs font-mono ${className() ?? ''}`);\n\t\t$.set_text(text, $.get(coordLabel));\n\t\t$.set_value(input, $.get(effectiveValue));\n\t});\n\n\t$.delegated('input', input, handleInput);\n\t$.delegated('keydown', input, handleKeyDown);\n\t$.append($$anchor, div);\n\t$.pop();\n}\n\n$.delegate(['input', 'keydown']);","import {\n SpreadsheetController\n} from \"@pixerate/editor\";\nexport function createReactiveSpreadsheet(options = {}) {\n let doc = $state({\n id: options.document?.id || `sheet_${Date.now()}`,\n name: options.document?.name || \"Sheet 1\",\n columns: options.document?.columns || [],\n rows: options.document?.rows || [],\n cells: options.document?.cells || {},\n createdAt: options.document?.createdAt || Date.now(),\n updatedAt: options.document?.updatedAt || Date.now()\n });\n let activeCell = $state(null);\n let selectedRange = $state(null);\n let editingCell = $state(null);\n let draftValue = $state(\"\");\n const controller = new SpreadsheetController({\n ...options,\n document: options.document,\n onDocumentChange: (updated) => {\n doc = { ...updated };\n options.onDocumentChange?.(updated);\n },\n onSelectionChange: (active, range) => {\n activeCell = active;\n selectedRange = range;\n options.onSelectionChange?.(active, range);\n },\n onCellCommit: (rowId, colId, raw, value) => {\n options.onCellCommit?.(rowId, colId, raw, value);\n }\n });\n doc = { ...controller.document };\n activeCell = controller.activeCell;\n selectedRange = controller.selectedRange;\n return {\n get document() {\n return doc;\n },\n get activeCell() {\n return activeCell;\n },\n get selectedRange() {\n return selectedRange;\n },\n get editingCell() {\n return editingCell;\n },\n get draftValue() {\n return draftValue;\n },\n set draftValue(val) {\n draftValue = val;\n controller.draftValue = val;\n },\n controller,\n getCell(rowId, colId) {\n return controller.getCell(rowId, colId);\n },\n setCellValue(rowId, colId, raw) {\n controller.setCellValue(rowId, colId, raw);\n doc = { ...controller.document };\n },\n selectCell(row, col, extendSelection = false) {\n controller.selectCell(row, col, extendSelection);\n activeCell = controller.activeCell;\n selectedRange = controller.selectedRange;\n },\n selectRange(range) {\n controller.selectRange(range);\n selectedRange = controller.selectedRange;\n },\n startEditing(row, col, initialVal) {\n controller.startEditing(row, col, initialVal);\n activeCell = controller.activeCell;\n editingCell = controller.editingCell;\n draftValue = controller.draftValue;\n },\n commitEditing(val) {\n controller.commitEditing(val);\n editingCell = null;\n draftValue = \"\";\n doc = { ...controller.document };\n },\n cancelEditing() {\n controller.cancelEditing();\n editingCell = null;\n draftValue = \"\";\n },\n moveCursor(dir, extend = false) {\n controller.moveCursor(dir, extend);\n activeCell = controller.activeCell;\n selectedRange = controller.selectedRange;\n },\n insertColumn(index, config) {\n controller.insertColumn(index, config);\n doc = { ...controller.document };\n },\n deleteColumn(colId) {\n controller.deleteColumn(colId);\n doc = { ...controller.document };\n },\n insertRow(index, config) {\n controller.insertRow(index, config);\n doc = { ...controller.document };\n },\n deleteRow(rowId) {\n controller.deleteRow(rowId);\n doc = { ...controller.document };\n },\n setColumnWidth(colId, width) {\n controller.setColumnWidth(colId, width);\n doc = { ...controller.document };\n },\n autoFitColumnWidth(colId, customWidth) {\n controller.autoFitColumnWidth(colId, customWidth);\n doc = { ...controller.document };\n },\n loadDocument(document) {\n controller.loadDocument(document);\n doc = { ...controller.document };\n activeCell = controller.activeCell;\n selectedRange = controller.selectedRange;\n editingCell = controller.editingCell;\n draftValue = controller.draftValue;\n },\n syncWithDataSource() {\n controller.syncWithDataSource();\n controller.recalculateAll();\n doc = { ...controller.document };\n },\n registerDataSource(ds) {\n controller.registerDataSource(ds);\n doc = { ...controller.document };\n },\n setPrimaryDataSource(id) {\n controller.setPrimaryDataSource(id);\n doc = { ...controller.document };\n },\n recalculateAll() {\n controller.recalculateAll();\n doc = { ...controller.document };\n },\n exportToTsv() {\n return controller.exportToTsv();\n },\n importFromTsv(data) {\n controller.importFromTsv(data);\n doc = { ...controller.document };\n },\n undo() {\n controller.undo();\n doc = { ...controller.document };\n },\n redo() {\n controller.redo();\n doc = { ...controller.document };\n }\n };\n}\n","import type { Component } from \"svelte\";\nimport type { Editor, Content, Extensions } from \"@tiptap/core\";\nimport type { Template, ColorGradient } from \"@pixerate/editor\";\n\nimport EditableTextNodeEditorComponent from \"./EditableTextNodeEditor.svelte\";\nimport BubbleMenuComponent from \"./BubbleMenu.svelte\";\nimport TemplateRendererComponent from \"./TemplateRenderer.svelte\";\n\nexport * from \"./editor.svelte\";\n\nexport interface EditableTextNodeEditorProps {\n class?: string;\n editorClass?: string;\n content?: Content;\n showMenu?: boolean;\n editable?: boolean;\n editor?: Editor;\n extensions?: Extensions;\n onUpdate?: () => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onCreate?: () => void;\n placeholder?: string;\n}\n\nexport interface BubbleMenuProps {\n editor?: Editor;\n class?: string;\n children?: any;\n}\n\nexport interface TemplateRendererProps {\n content: string;\n templates?: Template[];\n templateColorMap?: Map<string, ColorGradient>;\n resolve?: boolean;\n class?: string;\n onTemplateClick?: (templateName: string) => void;\n onVariableClick?: (variableName: string) => void;\n}\n\nexport const EditableTextNodeEditor = EditableTextNodeEditorComponent as unknown as Component<EditableTextNodeEditorProps>;\nexport const BubbleMenu = BubbleMenuComponent as unknown as Component<BubbleMenuProps>;\nexport const TemplateRenderer = TemplateRendererComponent as unknown as Component<TemplateRendererProps>;\n\nexport type {\n Template,\n TemplateVersion,\n Token,\n TokenType,\n ColorGradient,\n RichTextPresetOptions,\n} from \"@pixerate/editor\";\n\nexport * from \"./spreadsheet\";\n"],"mappings":"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","names":["$","$$anchor","$","root","$$anchor","$","root","root_1","$$anchor","$","indexToColName","$","root","index","document","root","root_1","root_2","root_3","root_4","$$anchor","EditableTextNodeEditor","BubbleMenu","TemplateRenderer"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixerate/editor-svelte",
3
- "version": "0.3.9",
3
+ "version": "0.3.11",
4
4
  "description": "Svelte bindings and prompt/rich-text components for @pixerate/editor",
5
5
  "author": "Pixerate",
6
6
  "license": "MIT",
@@ -32,7 +32,7 @@
32
32
  "@tiptap/extension-placeholder": "^2.11.5",
33
33
  "@tiptap/pm": "^2.11.5",
34
34
  "@tiptap/starter-kit": "^2.11.5",
35
- "@pixerate/editor": "0.4.4"
35
+ "@pixerate/editor": "0.4.5"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "svelte": "^4.0.0 || ^5.0.0"
@@ -6,6 +6,7 @@
6
6
 
7
7
  interface EditorProps {
8
8
  class?: string;
9
+ editorClass?: string;
9
10
  content?: Content;
10
11
  showMenu?: boolean;
11
12
  editable?: boolean;
@@ -20,6 +21,7 @@
20
21
 
21
22
  let {
22
23
  class: className = "",
24
+ editorClass = "",
23
25
  content = undefined,
24
26
  showMenu = true,
25
27
  editable = true,
@@ -79,7 +81,7 @@
79
81
  {/if}
80
82
  <div
81
83
  bind:this={element}
82
- class="pixerate-editor-content prose w-full max-w-none focus:outline-none"
84
+ class={`pixerate-editor-content prose dark:prose-invert w-full max-w-none focus:outline-none ${editorClass}`.trim()}
83
85
  ></div>
84
86
  </div>
85
87
 
@@ -91,4 +93,9 @@
91
93
  pointer-events: none;
92
94
  height: 0;
93
95
  }
96
+
97
+ :global(.dark .pixerate-editor-content .is-empty::before),
98
+ :global(html.dark .pixerate-editor-content .is-empty::before) {
99
+ color: #6b7280;
100
+ }
94
101
  </style>
package/src/index.ts CHANGED
@@ -10,6 +10,7 @@ export * from "./editor.svelte";
10
10
 
11
11
  export interface EditableTextNodeEditorProps {
12
12
  class?: string;
13
+ editorClass?: string;
13
14
  content?: Content;
14
15
  showMenu?: boolean;
15
16
  editable?: boolean;
@@ -134,10 +134,14 @@
134
134
 
135
135
  let rafId: number | null = null;
136
136
  let pendingWidth = width;
137
+ let hasDragged = false;
137
138
 
138
139
  const handleMouseMove = (moveEvent: MouseEvent) => {
139
140
  if (!resizingColId) return;
140
141
  const delta = moveEvent.clientX - resizeStartX;
142
+ if (Math.abs(delta) > 2) {
143
+ hasDragged = true;
144
+ }
141
145
  pendingWidth = Math.max(30, resizeStartWidth + delta);
142
146
 
143
147
  if (rafId === null) {
@@ -155,7 +159,7 @@
155
159
  cancelAnimationFrame(rafId);
156
160
  rafId = null;
157
161
  }
158
- if (resizingColId) {
162
+ if (resizingColId && hasDragged) {
159
163
  sheetState.setColumnWidth(resizingColId, pendingWidth);
160
164
  const col = sheetState.document.columns.find((c) => c.id === resizingColId);
161
165
  if (col && onColumnResize) {
@@ -175,6 +179,130 @@
175
179
  window.addEventListener('mouseup', handleMouseUp);
176
180
  }
177
181
 
182
+ function measureElementContentWidth(el: HTMLElement, container: HTMLElement): number {
183
+ if (typeof document === 'undefined') return 0;
184
+
185
+ let maxW = el.scrollWidth || 0;
186
+ const firstChild = el.firstElementChild as HTMLElement | null;
187
+ if (firstChild && firstChild.scrollWidth > maxW) {
188
+ maxW = firstChild.scrollWidth;
189
+ }
190
+
191
+ const truncated = el.querySelectorAll<HTMLElement>('.truncate, [title], span, div');
192
+ truncated.forEach((node) => {
193
+ if (node.scrollWidth > maxW) {
194
+ maxW = node.scrollWidth;
195
+ }
196
+ });
197
+
198
+ try {
199
+ const clone = (firstChild ? firstChild.cloneNode(true) : el.cloneNode(true)) as HTMLElement;
200
+ clone.style.cssText = `
201
+ position: absolute !important;
202
+ visibility: hidden !important;
203
+ width: max-content !important;
204
+ min-width: max-content !important;
205
+ max-width: none !important;
206
+ overflow: visible !important;
207
+ white-space: nowrap !important;
208
+ pointer-events: none !important;
209
+ top: -9999px !important;
210
+ left: -9999px !important;
211
+ `;
212
+
213
+ const allNodes = clone.querySelectorAll<HTMLElement>('*');
214
+ allNodes.forEach((node) => {
215
+ node.style.maxWidth = 'none';
216
+ node.style.overflow = 'visible';
217
+ node.style.textOverflow = 'clip';
218
+ node.style.whiteSpace = 'nowrap';
219
+ if (
220
+ node.classList.contains('truncate') ||
221
+ node.classList.contains('min-w-0') ||
222
+ node.classList.contains('w-full') ||
223
+ node.classList.contains('max-w-0') ||
224
+ node.classList.contains('flex-1')
225
+ ) {
226
+ node.style.width = 'max-content';
227
+ node.style.minWidth = 'max-content';
228
+ }
229
+ });
230
+
231
+ container.appendChild(clone);
232
+ const rect = clone.getBoundingClientRect();
233
+ container.removeChild(clone);
234
+
235
+ if (rect.width > maxW) {
236
+ maxW = rect.width;
237
+ }
238
+ } catch {
239
+ // Ignore cloning/measuring errors
240
+ }
241
+
242
+ return maxW;
243
+ }
244
+
245
+ function autoFitColumn(colId: string, colIndex: number) {
246
+ const col = sheetState.document.columns.find((c) => c.id === colId);
247
+ if (!col) return;
248
+
249
+ let calculatedWidth = 0;
250
+
251
+ if (gridContainer && typeof document !== 'undefined') {
252
+ const table = gridContainer.querySelector('table');
253
+ if (table) {
254
+ const thElements = table.querySelectorAll('thead th');
255
+ const th = thElements[colIndex + 1] as HTMLElement | undefined;
256
+ if (th) {
257
+ const headerInner = (th.firstElementChild as HTMLElement) || th;
258
+ const headerW = measureElementContentWidth(headerInner, gridContainer);
259
+ calculatedWidth = Math.max(calculatedWidth, headerW + 28);
260
+ }
261
+
262
+ const rows = table.querySelectorAll('tbody tr');
263
+ const sampleLimit = Math.min(rows.length, 150);
264
+ for (let r = 0; r < sampleLimit; r++) {
265
+ const tr = rows[r];
266
+ const td = tr.children[colIndex + 1] as HTMLElement | undefined;
267
+ if (td) {
268
+ const cellW = measureElementContentWidth(td, gridContainer);
269
+ calculatedWidth = Math.max(calculatedWidth, cellW + 20);
270
+ }
271
+ }
272
+ }
273
+ }
274
+
275
+ if (calculatedWidth > 0) {
276
+ const finalWidth = Math.min(600, Math.max(50, Math.ceil(calculatedWidth)));
277
+ sheetState.setColumnWidth(colId, finalWidth);
278
+ } else {
279
+ sheetState.autoFitColumnWidth(colId);
280
+ }
281
+
282
+ const updatedCol = sheetState.document.columns.find((c) => c.id === colId);
283
+ if (updatedCol && onColumnResize) {
284
+ onColumnResize(updatedCol.id, updatedCol.width || 130);
285
+ }
286
+ }
287
+
288
+ function handleResizeDblClick(colId: string, colIndex: number, e: MouseEvent) {
289
+ e.preventDefault();
290
+ e.stopPropagation();
291
+ autoFitColumn(colId, colIndex);
292
+ }
293
+
294
+ function handleHeaderDblClick(colId: string, colIndex: number, e: MouseEvent) {
295
+ const target = e.currentTarget as HTMLElement | null;
296
+ if (target) {
297
+ const rect = target.getBoundingClientRect();
298
+ if (rect.right - e.clientX <= 12) {
299
+ e.preventDefault();
300
+ e.stopPropagation();
301
+ autoFitColumn(colId, colIndex);
302
+ }
303
+ }
304
+ }
305
+
178
306
  function isCellSelected(rIdx: number, cIdx: number): boolean {
179
307
  if (!sheetState.selectedRange) return false;
180
308
  const minR = Math.min(sheetState.selectedRange.startRow, sheetState.selectedRange.endRow);
@@ -217,6 +345,7 @@
217
345
  class="relative border-r border-border px-2 text-left font-medium text-muted-foreground hover:bg-muted/90 transition-colors group overflow-hidden max-w-0 {onColumnHeaderClick ? 'cursor-pointer' : 'cursor-default'}"
218
346
  style="width: {col.width || 130}px; min-width: {col.width || 130}px; max-width: {col.width || 130}px; overflow: hidden;"
219
347
  onclick={() => onColumnHeaderClick?.(col)}
348
+ ondblclick={(e) => handleHeaderDblClick(col.id, cIdx, e)}
220
349
  >
221
350
  <div class="flex items-center justify-between gap-1 min-w-0 overflow-hidden truncate">
222
351
  <span class="truncate font-semibold text-foreground text-xs min-w-0">{col.title}</span>
@@ -230,6 +359,7 @@
230
359
  onmouseenter={() => hoveredColId = col.id}
231
360
  onmouseleave={() => { if (hoveredColId === col.id) hoveredColId = null; }}
232
361
  onmousedown={(e) => handleResizeStart(col.id, col.width || 130, e)}
362
+ ondblclick={(e) => handleResizeDblClick(col.id, cIdx, e)}
233
363
  role="separator"
234
364
  aria-orientation="vertical"
235
365
  tabindex="-1"
@@ -128,6 +128,10 @@ export function createReactiveSpreadsheet(options: SpreadsheetControllerOptions
128
128
  controller.setColumnWidth(colId, width);
129
129
  doc = { ...controller.document };
130
130
  },
131
+ autoFitColumnWidth(colId: string, customWidth?: number) {
132
+ controller.autoFitColumnWidth(colId, customWidth);
133
+ doc = { ...controller.document };
134
+ },
131
135
  loadDocument(document: SpreadsheetDocument) {
132
136
  controller.loadDocument(document);
133
137
  doc = { ...controller.document };