@w100n/documents 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/{SheetView-3XTEV2VT.css → SheetView-43MPR64N.css} +5 -4
  2. package/dist/{SheetView-3XTEV2VT.css.map → SheetView-43MPR64N.css.map} +1 -1
  3. package/dist/{SheetView-3UAFXGZS.js → SheetView-4TPL7DES.js} +51 -10
  4. package/dist/SheetView-4TPL7DES.js.map +1 -0
  5. package/dist/{TextEditor-OLBLWC6F.js → TextEditor-VBHWUOZR.js} +636 -225
  6. package/dist/TextEditor-VBHWUOZR.js.map +1 -0
  7. package/dist/{chunk-L765DZPO.js → chunk-2CA3HQTI.js} +3 -3
  8. package/dist/{chunk-L765DZPO.js.map → chunk-2CA3HQTI.js.map} +1 -1
  9. package/dist/{chunk-MRP3EURG.js → chunk-5MH4WDW4.js} +133 -20
  10. package/dist/chunk-5MH4WDW4.js.map +1 -0
  11. package/dist/{chunk-WR3MT7KP.js → chunk-DR3TTJWZ.js} +374 -29
  12. package/dist/chunk-DR3TTJWZ.js.map +1 -0
  13. package/dist/{chunk-T7XCGDE5.js → chunk-RCQODE2Z.js} +2 -2
  14. package/dist/collab.cjs +487 -46
  15. package/dist/collab.cjs.map +1 -1
  16. package/dist/collab.d.cts +2 -2
  17. package/dist/collab.d.ts +2 -2
  18. package/dist/collab.js +2 -2
  19. package/dist/{grid-EI5JNZAA.js → grid-Q4XBPQFY.js} +3 -3
  20. package/dist/grid-Q4XBPQFY.js.map +1 -0
  21. package/dist/index.cjs +1449 -314
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.css +888 -171
  24. package/dist/index.css.map +1 -1
  25. package/dist/index.d.cts +9 -4
  26. package/dist/index.d.ts +9 -4
  27. package/dist/index.js +282 -32
  28. package/dist/index.js.map +1 -1
  29. package/dist/kinds.cjs +2 -2
  30. package/dist/kinds.cjs.map +1 -1
  31. package/dist/kinds.d.cts +2 -2
  32. package/dist/kinds.d.ts +2 -2
  33. package/dist/kinds.js +1 -1
  34. package/dist/memory.cjs +3 -0
  35. package/dist/memory.cjs.map +1 -1
  36. package/dist/memory.d.cts +1 -1
  37. package/dist/memory.d.ts +1 -1
  38. package/dist/memory.js +4 -1
  39. package/dist/memory.js.map +1 -1
  40. package/dist/{types-Er60M5kL.d.ts → types-BTsVooZw.d.cts} +2 -1
  41. package/dist/{types-Er60M5kL.d.cts → types-BTsVooZw.d.ts} +2 -1
  42. package/dist/write-BCI8yool.d.cts +16 -0
  43. package/dist/write-BCI8yool.d.ts +16 -0
  44. package/package.json +1 -1
  45. package/dist/SheetView-3UAFXGZS.js.map +0 -1
  46. package/dist/TextEditor-OLBLWC6F.js.map +0 -1
  47. package/dist/chunk-MRP3EURG.js.map +0 -1
  48. package/dist/chunk-WR3MT7KP.js.map +0 -1
  49. package/dist/grid-EI5JNZAA.js.map +0 -1
  50. package/dist/write-DaVtTJCS.d.cts +0 -6
  51. package/dist/write-DaVtTJCS.d.ts +0 -6
  52. /package/dist/{chunk-T7XCGDE5.js.map → chunk-RCQODE2Z.js.map} +0 -0
@@ -265,8 +265,9 @@
265
265
  overflow: hidden;
266
266
  border: 1px solid var(--docs-border);
267
267
  border-radius: 13px;
268
- background: var(--docs-card);
268
+ background: #fff;
269
269
  box-shadow: var(--docs-shadow);
270
+ color-scheme: light;
270
271
  }
271
272
  .w100n-sheet-grid,
272
273
  .w100n-sheet-host {
@@ -286,8 +287,8 @@
286
287
  z-index: 5;
287
288
  display: grid;
288
289
  place-items: center;
289
- background: var(--docs-card);
290
- color: var(--docs-muted);
290
+ background: #fff;
291
+ color: #64748b;
291
292
  font-weight: 600;
292
293
  }
293
294
  .w100n-sheet-cover span {
@@ -316,4 +317,4 @@
316
317
  display: none;
317
318
  }
318
319
  }
319
- /*# sourceMappingURL=SheetView-3XTEV2VT.css.map */
320
+ /*# sourceMappingURL=SheetView-43MPR64N.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sheets/sheets.css"],"sourcesContent":["@font-face { font-family: 'Calibri'; font-weight: 400; font-style: normal; src: local('Calibri'), local('Carlito'), local('Arial'), local('ArialMT'), local('Liberation Sans'); }\n@font-face { font-family: 'Calibri'; font-weight: 400; font-style: italic; src: local('Calibri Italic'), local('Carlito Italic'), local('Arial Italic'), local('Arial-ItalicMT'), local('Liberation Sans Italic'); }\n@font-face { font-family: 'Calibri'; font-weight: 700; font-style: normal; src: local('Calibri Bold'), local('Carlito Bold'), local('Arial Bold'), local('Arial-BoldMT'), local('Liberation Sans Bold'); }\n@font-face { font-family: 'Calibri'; font-weight: 700; font-style: italic; src: local('Calibri Bold Italic'), local('Carlito Bold Italic'), local('Arial Bold Italic'), local('Arial-BoldItalicMT'), local('Liberation Sans Bold Italic'); }\n@font-face { font-family: 'Aptos'; font-weight: 400; font-style: normal; src: local('Aptos'), local('Arial'), local('ArialMT'), local('Liberation Sans'); }\n@font-face { font-family: 'Aptos'; font-weight: 400; font-style: italic; src: local('Aptos Italic'), local('Arial Italic'), local('Arial-ItalicMT'), local('Liberation Sans Italic'); }\n@font-face { font-family: 'Aptos'; font-weight: 700; font-style: normal; src: local('Aptos Bold'), local('Arial Bold'), local('Arial-BoldMT'), local('Liberation Sans Bold'); }\n@font-face { font-family: 'Aptos'; font-weight: 700; font-style: italic; src: local('Aptos Bold Italic'), local('Arial Bold Italic'), local('Arial-BoldItalicMT'), local('Liberation Sans Bold Italic'); }\n\n.w100n-sheet { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 8px; }\n.w100n-sheet-ribbon { align-self: center; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: 6px; width: min(100%, 1240px); padding: 4px;\n border: 1px solid var(--docs-border); border-radius: 12px; background: var(--docs-card); box-shadow: var(--docs-shadow); }\n.w100n-sheet-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; min-width: 0; min-height: 32px; }\n.w100n-sheet-ribbon button:not(.w100n-docs-action) { position: relative; display: grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; color: var(--docs-muted); }\n.w100n-sheet-ribbon button:not(.w100n-docs-action):hover:not(:disabled) { background: var(--docs-hover); color: var(--docs-text); }\n.w100n-docs .w100n-sheet-ribbon button[aria-pressed='true'], .w100n-docs .w100n-sheet-ribbon button[aria-expanded='true'] { color: #fff; background: linear-gradient(145deg, #8b5cf6, #6d28d9); box-shadow: 0 6px 14px -6px #7c3aed99; }\n.w100n-sheet-gap { width: 1px; height: 20px; margin: 0 5px; background: var(--docs-border); }\n.w100n-sheet-end { display: flex; align-items: center; gap: 8px; min-height: 32px; }\n.w100n-sheet-muted { max-width: 380px; color: var(--docs-muted); font-size: 12px; line-height: 1.35; }\n.w100n-sheet-anchor { position: relative; display: inline-flex; }\n.w100n-sheet-bar { position: absolute; left: 8px; right: 8px; bottom: 4px; height: 3px; border-radius: 2px; }\n.w100n-sheet-ribbon .w100n-sheet-anchor > button.w100n-sheet-picker { display: flex; justify-content: space-between; gap: 6px; width: 132px; padding: 0 8px 0 10px; border: 1px solid var(--docs-border);\n color: var(--docs-text); font-size: 12.5px; font-weight: 600; white-space: nowrap; }\n.w100n-sheet-picker span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n.w100n-sheet-picker svg { width: 14px; height: 14px; color: var(--docs-dim); }\n.w100n-sheet-pop { position: absolute; z-index: 30; top: calc(100% + 8px); left: 0; padding: 6px; border: 1px solid var(--docs-border); border-radius: 12px; background: var(--docs-card); box-shadow: var(--docs-shadow); }\n.w100n-sheet-list { display: grid; gap: 2px; min-width: 200px; }\n.w100n-sheet-ribbon .w100n-sheet-list button:not(.w100n-docs-action) { display: flex; justify-content: flex-start; gap: 9px; width: 100%; height: 32px; padding: 0 10px; color: var(--docs-text); font-size: 12.5px; font-weight: 550; text-align: left; white-space: nowrap; }\n.w100n-sheet-list button small { margin-left: auto; padding-left: 12px; color: var(--docs-dim); font-size: 11px; font-variant-numeric: tabular-nums; }\n.w100n-docs .w100n-sheet-ribbon .w100n-sheet-list button[aria-selected='true'] { background: var(--docs-active); color: var(--docs-accent); box-shadow: none; }\n.w100n-sheet-swatches { display: grid; grid-template-columns: repeat(5, 28px); gap: 4px; }\n.w100n-sheet-ribbon .w100n-sheet-swatches button:not(.w100n-docs-action) { width: 28px; height: 28px; }\n.w100n-docs .w100n-sheet-ribbon .w100n-sheet-swatches button[aria-pressed='true'] { background: var(--docs-active); box-shadow: inset 0 0 0 1px #8b5cf659; }\n.w100n-sheet-swatches i { display: block; width: 16px; height: 16px; border-radius: 50%; box-shadow: inset 0 0 0 1px #0f172a2e; }\n.w100n-sheet-ribbon .w100n-sheet-swatches .w100n-sheet-none { grid-column: 1 / -1; width: auto; height: 28px; padding: 0 8px; place-items: center start; color: var(--docs-muted); font-size: 12px; font-weight: 600; }\n\n.w100n-sheet-stage { position: relative; flex: 1; min-height: 0; overflow: hidden; border: 1px solid var(--docs-border); border-radius: 13px; background: var(--docs-card); box-shadow: var(--docs-shadow); }\n.w100n-sheet-grid, .w100n-sheet-host { position: absolute; inset: 0; }\n:root [class*='univer-']:not(canvas) { font-family: Inter, ui-sans-serif, system-ui, sans-serif; }\n.w100n-sheet-cover { position: absolute; inset: 0; z-index: 5; display: grid; place-items: center; background: var(--docs-card); color: var(--docs-muted); font-weight: 600; }\n.w100n-sheet-cover span { display: flex; align-items: center; gap: 12px; }\n\n@container (max-width: 900px) {\n .w100n-sheet-tools { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; padding-block: 2px; }\n .w100n-sheet-tools > * { flex-shrink: 0; }\n .w100n-sheet-pop { position: fixed; top: auto; left: 12px; right: 12px; bottom: 12px; }\n .w100n-sheet-muted { display: none; }\n}\n"],"mappings":";AAAA;AAAa,eAAa;AAAW,eAAa;AAAK,cAAY;AAAQ;AAAA,IAAK,MAAM,UAAU;AAAA,IAAE,MAAM,UAAU;AAAA,IAAE,MAAM,QAAQ;AAAA,IAAE,MAAM,UAAU;AAAA,IAAE,MAAM;AAAoB;AAChL;AAAa,eAAa;AAAW,eAAa;AAAK,cAAY;AAAQ;AAAA,IAAK,MAAM,iBAAiB;AAAA,IAAE,MAAM,iBAAiB;AAAA,IAAE,MAAM,eAAe;AAAA,IAAE,MAAM,iBAAiB;AAAA,IAAE,MAAM;AAA2B;AACnN;AAAa,eAAa;AAAW,eAAa;AAAK,cAAY;AAAQ;AAAA,IAAK,MAAM,eAAe;AAAA,IAAE,MAAM,eAAe;AAAA,IAAE,MAAM,aAAa;AAAA,IAAE,MAAM,eAAe;AAAA,IAAE,MAAM;AAAyB;AACzM;AAAa,eAAa;AAAW,eAAa;AAAK,cAAY;AAAQ;AAAA,IAAK,MAAM,sBAAsB;AAAA,IAAE,MAAM,sBAAsB;AAAA,IAAE,MAAM,oBAAoB;AAAA,IAAE,MAAM,qBAAqB;AAAA,IAAE,MAAM;AAAgC;AAC3O;AAAa,eAAa;AAAS,eAAa;AAAK,cAAY;AAAQ;AAAA,IAAK,MAAM,QAAQ;AAAA,IAAE,MAAM,QAAQ;AAAA,IAAE,MAAM,UAAU;AAAA,IAAE,MAAM;AAAoB;AAC1J;AAAa,eAAa;AAAS,eAAa;AAAK,cAAY;AAAQ;AAAA,IAAK,MAAM,eAAe;AAAA,IAAE,MAAM,eAAe;AAAA,IAAE,MAAM,iBAAiB;AAAA,IAAE,MAAM;AAA2B;AACtL;AAAa,eAAa;AAAS,eAAa;AAAK,cAAY;AAAQ;AAAA,IAAK,MAAM,aAAa;AAAA,IAAE,MAAM,aAAa;AAAA,IAAE,MAAM,eAAe;AAAA,IAAE,MAAM;AAAyB;AAC9K;AAAa,eAAa;AAAS,eAAa;AAAK,cAAY;AAAQ;AAAA,IAAK,MAAM,oBAAoB;AAAA,IAAE,MAAM,oBAAoB;AAAA,IAAE,MAAM,qBAAqB;AAAA,IAAE,MAAM;AAAgC;AAEzM,CAAC;AAAc,YAAU;AAAU,QAAM;AAAG,cAAY;AAAG,WAAS;AAAM,kBAAgB;AAAQ,OAAK;AAAK;AAC5G,CAAC;AAAqB,cAAY;AAAQ,WAAS;AAAM,yBAAuB,OAAO,CAAC,EAAE,KAAK;AAAM,eAAa;AAAO,OAAK;AAAK,SAAO,IAAI,IAAI,EAAE;AAAS,WAAS;AACpK,UAAQ,IAAI,MAAM,IAAI;AAAgB,iBAAe;AAAM,cAAY,IAAI;AAAc,cAAY,IAAI;AAAgB;AAC3H,CAAC;AAAoB,WAAS;AAAM,aAAW;AAAM,eAAa;AAAQ,OAAK;AAAK,aAAW;AAAG,cAAY;AAAM;AACpH,CAHC,mBAGmB,MAAM,KAAK,CAAC;AAAqB,YAAU;AAAU,WAAS;AAAM,eAAa;AAAQ,SAAO;AAAM,UAAQ;AAAM,iBAAe;AAAK,SAAO,IAAI;AAAe;AACtL,CAJC,mBAImB,MAAM,KAAK,CADC,kBACkB,MAAM,KAAK;AAAa,cAAY,IAAI;AAAe,SAAO,IAAI;AAAc;AAClI,CAAC,WAAW,CALX,mBAK+B,MAAM,CAAC;AAAsB,CAA5D,WAAwE,CALxE,mBAK4F,MAAM,CAAC;AAAwB,SAAO;AAAM;AAAA,IAAY;AAAA,MAAgB,MAAhB;AAAA,MAAwB,OAAxB;AAAA,MAAiC;AAAU,cAAY,EAAE,IAAI,KAAK,KAAK;AAAW;AACvO,CAAC;AAAkB,SAAO;AAAK,UAAQ;AAAM,UAAQ,EAAE;AAAK,cAAY,IAAI;AAAgB;AAC5F,CAAC;AAAkB,WAAS;AAAM,eAAa;AAAQ,OAAK;AAAK,cAAY;AAAM;AACnF,CAAC;AAAoB,aAAW;AAAO,SAAO,IAAI;AAAe,aAAW;AAAM,eAAa;AAAM;AACrG,CAAC;AAAqB,YAAU;AAAU,WAAS;AAAa;AAChE,CAAC;AAAkB,YAAU;AAAU,QAAM;AAAK,SAAO;AAAK,UAAQ;AAAK,UAAQ;AAAK,iBAAe;AAAK;AAC5G,CAXC,mBAWmB,CAFnB,mBAEuC,EAAE,MAAM,CAAC;AAAqB,WAAS;AAAM,mBAAiB;AAAe,OAAK;AAAK,SAAO;AAAO,WAAS,EAAE,IAAI,EAAE;AAAM,UAAQ,IAAI,MAAM,IAAI;AACxL,SAAO,IAAI;AAAc,aAAW;AAAQ,eAAa;AAAK,eAAa;AAAQ;AACrF,CAFiD,mBAE7B;AAAO,aAAW;AAAG,YAAU;AAAQ,iBAAe;AAAU;AACpF,CAHiD,mBAG7B;AAAM,SAAO;AAAM,UAAQ;AAAM,SAAO,IAAI;AAAa;AAC7E,CAAC;AAAkB,YAAU;AAAU,WAAS;AAAI,OAAK,KAAK,KAAK,EAAE;AAAM,QAAM;AAAG,WAAS;AAAK,UAAQ,IAAI,MAAM,IAAI;AAAgB,iBAAe;AAAM,cAAY,IAAI;AAAc,cAAY,IAAI;AAAgB;AAC3N,CAAC;AAAmB,WAAS;AAAM,OAAK;AAAK,aAAW;AAAO;AAC/D,CAjBC,mBAiBmB,CADnB,iBACqC,MAAM,KAAK,CAdjB;AAcuC,WAAS;AAAM,mBAAiB;AAAY,OAAK;AAAK,SAAO;AAAM,UAAQ;AAAM,WAAS,EAAE;AAAM,SAAO,IAAI;AAAc,aAAW;AAAQ,eAAa;AAAK,cAAY;AAAM,eAAa;AAAQ;AAC9Q,CAFC,iBAEiB,OAAO;AAAQ,eAAa;AAAM,gBAAc;AAAM,SAAO,IAAI;AAAa,aAAW;AAAM,wBAAsB;AAAc;AACrJ,CAdC,WAcW,CAnBX,mBAmB+B,CAH/B,iBAGiD,MAAM,CAAC;AAAwB,cAAY,IAAI;AAAgB,SAAO,IAAI;AAAgB,cAAY;AAAM;AAC9J,CAAC;AAAuB,WAAS;AAAM,yBAAuB,OAAO,CAAC,EAAE;AAAO,OAAK;AAAK;AACzF,CArBC,mBAqBmB,CADnB,qBACyC,MAAM,KAAK,CAlBrB;AAkB2C,SAAO;AAAM,UAAQ;AAAM;AACtG,CAjBC,WAiBW,CAtBX,mBAsB+B,CAF/B,qBAEqD,MAAM,CAAC;AAAuB,cAAY,IAAI;AAAgB,cAAY,MAAM,EAAE,EAAE,EAAE,IAAI;AAAW;AAC3J,CAHC,qBAGqB;AAAI,WAAS;AAAO,SAAO;AAAM,UAAQ;AAAM,iBAAe;AAAK,cAAY,MAAM,EAAE,EAAE,EAAE,IAAI;AAAW;AAChI,CAxBC,mBAwBmB,CAJnB,qBAIyC,CAAC;AAAmB,eAAa,EAAE,EAAE;AAAI,SAAO;AAAM,UAAQ;AAAM,WAAS,EAAE;AAAK,eAAa,OAAO;AAAO,SAAO,IAAI;AAAe,aAAW;AAAM,eAAa;AAAK;AAEtN,CAAC;AAAoB,YAAU;AAAU,QAAM;AAAG,cAAY;AAAG,YAAU;AAAQ,UAAQ,IAAI,MAAM,IAAI;AAAgB,iBAAe;AAAM,cAAY,IAAI;AAAc,cAAY,IAAI;AAAgB;AAC5M,CAAC;AAAkB,CAAC;AAAmB,YAAU;AAAU,SAAO;AAAG;AACrE,MAAM,CAAC,eAAiB,KAAK;AAAU;AAAA,IAAa,KAAK;AAAA,IAAE,aAAa;AAAA,IAAE,SAAS;AAAA,IAAE;AAAY;AACjG,CAAC;AAAoB,YAAU;AAAU,SAAO;AAAG,WAAS;AAAG,WAAS;AAAM,eAAa;AAAQ,cAAY,IAAI;AAAc,SAAO,IAAI;AAAe,eAAa;AAAK;AAC7K,CADC,kBACkB;AAAO,WAAS;AAAM,eAAa;AAAQ,OAAK;AAAM;AAEzE,WAAW,CAAC,SAAS,EAAE;AACrB,GA/BD;AA+BsB,eAAW;AAAQ,gBAAY;AAAM,qBAAiB;AAAM,mBAAe;AAAK;AACrG,GAhCD,kBAgCoB,EAAE;AAAI,iBAAa;AAAG;AACzC,GApBD;AAoBoB,cAAU;AAAO,SAAK;AAAM,UAAM;AAAM,WAAO;AAAM,YAAQ;AAAM;AACtF,GA5BD;AA4BsB,aAAS;AAAM;AACtC;","names":[]}
1
+ {"version":3,"sources":["../src/sheets/sheets.css"],"sourcesContent":["@font-face { font-family: 'Calibri'; font-weight: 400; font-style: normal; src: local('Calibri'), local('Carlito'), local('Arial'), local('ArialMT'), local('Liberation Sans'); }\n@font-face { font-family: 'Calibri'; font-weight: 400; font-style: italic; src: local('Calibri Italic'), local('Carlito Italic'), local('Arial Italic'), local('Arial-ItalicMT'), local('Liberation Sans Italic'); }\n@font-face { font-family: 'Calibri'; font-weight: 700; font-style: normal; src: local('Calibri Bold'), local('Carlito Bold'), local('Arial Bold'), local('Arial-BoldMT'), local('Liberation Sans Bold'); }\n@font-face { font-family: 'Calibri'; font-weight: 700; font-style: italic; src: local('Calibri Bold Italic'), local('Carlito Bold Italic'), local('Arial Bold Italic'), local('Arial-BoldItalicMT'), local('Liberation Sans Bold Italic'); }\n@font-face { font-family: 'Aptos'; font-weight: 400; font-style: normal; src: local('Aptos'), local('Arial'), local('ArialMT'), local('Liberation Sans'); }\n@font-face { font-family: 'Aptos'; font-weight: 400; font-style: italic; src: local('Aptos Italic'), local('Arial Italic'), local('Arial-ItalicMT'), local('Liberation Sans Italic'); }\n@font-face { font-family: 'Aptos'; font-weight: 700; font-style: normal; src: local('Aptos Bold'), local('Arial Bold'), local('Arial-BoldMT'), local('Liberation Sans Bold'); }\n@font-face { font-family: 'Aptos'; font-weight: 700; font-style: italic; src: local('Aptos Bold Italic'), local('Arial Bold Italic'), local('Arial-BoldItalicMT'), local('Liberation Sans Bold Italic'); }\n\n.w100n-sheet { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 8px; }\n.w100n-sheet-ribbon { align-self: center; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: 6px; width: min(100%, 1240px); padding: 4px;\n border: 1px solid var(--docs-border); border-radius: 12px; background: var(--docs-card); box-shadow: var(--docs-shadow); }\n.w100n-sheet-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; min-width: 0; min-height: 32px; }\n.w100n-sheet-ribbon button:not(.w100n-docs-action) { position: relative; display: grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; color: var(--docs-muted); }\n.w100n-sheet-ribbon button:not(.w100n-docs-action):hover:not(:disabled) { background: var(--docs-hover); color: var(--docs-text); }\n.w100n-docs .w100n-sheet-ribbon button[aria-pressed='true'], .w100n-docs .w100n-sheet-ribbon button[aria-expanded='true'] { color: #fff; background: linear-gradient(145deg, #8b5cf6, #6d28d9); box-shadow: 0 6px 14px -6px #7c3aed99; }\n.w100n-sheet-gap { width: 1px; height: 20px; margin: 0 5px; background: var(--docs-border); }\n.w100n-sheet-end { display: flex; align-items: center; gap: 8px; min-height: 32px; }\n.w100n-sheet-muted { max-width: 380px; color: var(--docs-muted); font-size: 12px; line-height: 1.35; }\n.w100n-sheet-anchor { position: relative; display: inline-flex; }\n.w100n-sheet-bar { position: absolute; left: 8px; right: 8px; bottom: 4px; height: 3px; border-radius: 2px; }\n.w100n-sheet-ribbon .w100n-sheet-anchor > button.w100n-sheet-picker { display: flex; justify-content: space-between; gap: 6px; width: 132px; padding: 0 8px 0 10px; border: 1px solid var(--docs-border);\n color: var(--docs-text); font-size: 12.5px; font-weight: 600; white-space: nowrap; }\n.w100n-sheet-picker span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n.w100n-sheet-picker svg { width: 14px; height: 14px; color: var(--docs-dim); }\n.w100n-sheet-pop { position: absolute; z-index: 30; top: calc(100% + 8px); left: 0; padding: 6px; border: 1px solid var(--docs-border); border-radius: 12px; background: var(--docs-card); box-shadow: var(--docs-shadow); }\n.w100n-sheet-list { display: grid; gap: 2px; min-width: 200px; }\n.w100n-sheet-ribbon .w100n-sheet-list button:not(.w100n-docs-action) { display: flex; justify-content: flex-start; gap: 9px; width: 100%; height: 32px; padding: 0 10px; color: var(--docs-text); font-size: 12.5px; font-weight: 550; text-align: left; white-space: nowrap; }\n.w100n-sheet-list button small { margin-left: auto; padding-left: 12px; color: var(--docs-dim); font-size: 11px; font-variant-numeric: tabular-nums; }\n.w100n-docs .w100n-sheet-ribbon .w100n-sheet-list button[aria-selected='true'] { background: var(--docs-active); color: var(--docs-accent); box-shadow: none; }\n.w100n-sheet-swatches { display: grid; grid-template-columns: repeat(5, 28px); gap: 4px; }\n.w100n-sheet-ribbon .w100n-sheet-swatches button:not(.w100n-docs-action) { width: 28px; height: 28px; }\n.w100n-docs .w100n-sheet-ribbon .w100n-sheet-swatches button[aria-pressed='true'] { background: var(--docs-active); box-shadow: inset 0 0 0 1px #8b5cf659; }\n.w100n-sheet-swatches i { display: block; width: 16px; height: 16px; border-radius: 50%; box-shadow: inset 0 0 0 1px #0f172a2e; }\n.w100n-sheet-ribbon .w100n-sheet-swatches .w100n-sheet-none { grid-column: 1 / -1; width: auto; height: 28px; padding: 0 8px; place-items: center start; color: var(--docs-muted); font-size: 12px; font-weight: 600; }\n\n.w100n-sheet-stage { position: relative; flex: 1; min-height: 0; overflow: hidden; border: 1px solid var(--docs-border); border-radius: 13px; background: #fff; box-shadow: var(--docs-shadow); color-scheme: light; }\n.w100n-sheet-grid, .w100n-sheet-host { position: absolute; inset: 0; }\n:root [class*='univer-']:not(canvas) { font-family: Inter, ui-sans-serif, system-ui, sans-serif; }\n.w100n-sheet-cover { position: absolute; inset: 0; z-index: 5; display: grid; place-items: center; background: #fff; color: #64748b; font-weight: 600; }\n.w100n-sheet-cover span { display: flex; align-items: center; gap: 12px; }\n\n@container (max-width: 900px) {\n .w100n-sheet-tools { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; padding-block: 2px; }\n .w100n-sheet-tools > * { flex-shrink: 0; }\n .w100n-sheet-pop { position: fixed; top: auto; left: 12px; right: 12px; bottom: 12px; }\n .w100n-sheet-muted { display: none; }\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import {
3
3
  useLive
4
- } from "./chunk-T7XCGDE5.js";
4
+ } from "./chunk-RCQODE2Z.js";
5
5
  import {
6
6
  SheetRefusal,
7
7
  build,
@@ -25,12 +25,12 @@ import {
25
25
  strip,
26
26
  worksheets,
27
27
  writeSheet
28
- } from "./chunk-MRP3EURG.js";
28
+ } from "./chunk-5MH4WDW4.js";
29
29
  import {
30
30
  rove,
31
31
  useRestore
32
32
  } from "./chunk-TDP6OJET.js";
33
- import "./chunk-WR3MT7KP.js";
33
+ import "./chunk-DR3TTJWZ.js";
34
34
  import {
35
35
  span
36
36
  } from "./chunk-ISOOUYLI.js";
@@ -41,6 +41,11 @@ import {
41
41
  ArrowDownAZ,
42
42
  ArrowDownZA,
43
43
  Baseline,
44
+ DecimalsArrowLeft,
45
+ DecimalsArrowRight,
46
+ Euro,
47
+ Percent,
48
+ Sigma,
44
49
  BetweenHorizontalEnd,
45
50
  BetweenHorizontalStart,
46
51
  BetweenVerticalEnd,
@@ -72,6 +77,7 @@ import {
72
77
  Undo2,
73
78
  WifiOff
74
79
  } from "lucide-react";
80
+ import { CellValueType } from "@univerjs/core";
75
81
 
76
82
  // src/sheets/bind.ts
77
83
  import { ICommandService, IUndoRedoService, IUniverInstanceService, mergeWorksheetSnapshotWithDefault } from "@univerjs/core";
@@ -551,6 +557,30 @@ function bind(api, injector, doc, model, edit) {
551
557
 
552
558
  // src/sheets/SheetView.tsx
553
559
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
560
+ var decimals = (pattern, step) => {
561
+ const p = pattern === "General" ? "0" : pattern;
562
+ const next = Math.max(0, (/0(?:\.(0+))?/.exec(p)?.[1]?.length ?? 0) + step);
563
+ return p.replace(/0(?:\.0+)?/, `0${next ? `.${"0".repeat(next)}` : ""}`);
564
+ };
565
+ var letters = (c) => {
566
+ let s = "";
567
+ for (let n = c + 1; n > 0; n = Math.floor((n - 1) / 26)) s = String.fromCharCode(65 + (n - 1) % 26) + s;
568
+ return s;
569
+ };
570
+ function autoSum(r, numeric) {
571
+ if (r.startRow !== r.endRow || r.startColumn !== r.endColumn) {
572
+ return Array.from({ length: r.endColumn - r.startColumn + 1 }, (_, i) => {
573
+ const col = r.startColumn + i;
574
+ return { row: r.endRow + 1, col, f: `=SUM(${letters(col)}${r.startRow + 1}:${letters(col)}${r.endRow + 1})` };
575
+ });
576
+ }
577
+ let top = r.startRow;
578
+ while (top > 0 && numeric(top - 1, r.startColumn)) top--;
579
+ if (top < r.startRow) return [{ row: r.startRow, col: r.startColumn, f: `=SUM(${letters(r.startColumn)}${top + 1}:${letters(r.startColumn)}${r.startRow})` }];
580
+ let left = r.startColumn;
581
+ while (left > 0 && numeric(r.startRow, left - 1)) left--;
582
+ return left < r.startColumn ? [{ row: r.startRow, col: r.startColumn, f: `=SUM(${letters(left)}${r.startRow + 1}:${letters(r.startColumn - 1)}${r.startRow + 1})` }] : [];
583
+ }
554
584
  function SheetView({ bytes, name, kind, rights, language, theme, onChange, onSaveRequest, guard, host, together, documentId = "", onSaved }) {
555
585
  const t = sheetTexts[language];
556
586
  const box = useRef(null);
@@ -588,14 +618,14 @@ function SheetView({ bytes, name, kind, rights, language, theme, onChange, onSav
588
618
  setDirty(false);
589
619
  const families = new Set([model.book.defaultStyle, ...Object.values(model.book.styles)].map((s) => typeof s === "object" ? s?.ff : null).filter(Boolean));
590
620
  const fonts = Promise.race([Promise.all([...families].flatMap((f) => ["", "bold ", "italic "].map((w) => document.fonts.load(`${w}11pt "${f}"`).catch(() => [])))), new Promise((r) => setTimeout(r, 800))]);
591
- Promise.all([import("./grid-EI5JNZAA.js"), fonts]).then(([{ grid, marks }]) => {
621
+ Promise.all([import("./grid-Q4XBPQFY.js"), fonts]).then(([{ grid, marks }]) => {
592
622
  if (gone) return;
593
623
  shared?.doc.off("update", change);
594
624
  if (shared && moved) model = extras(shared.doc, build(shared.doc));
595
625
  if (kind === "csv") model.book.sheets.s1.name = name.replace(/\.[^.]+$/, "") || "Sheet1";
596
626
  const host2 = box.current.appendChild(document.createElement("div"));
597
627
  host2.className = "w100n-sheet-host";
598
- const view = grid(host2, language, theme === "dark", edit);
628
+ const view = grid(host2, language, edit);
599
629
  const { univer, univerAPI: api2 } = view;
600
630
  const wb = api2.createWorkbook(model.book);
601
631
  if (model.active) wb.setActiveSheet(model.active);
@@ -662,9 +692,6 @@ function SheetView({ bytes, name, kind, rights, language, theme, onChange, onSav
662
692
  useEffect(() => {
663
693
  live.current?.marks?.show((room?.people ?? []).flatMap((p) => !p.me && p.selection ? [{ ...p.selection, color: p.color }] : []));
664
694
  }, [room?.people, phase]);
665
- useEffect(() => {
666
- live.current?.api.toggleDarkMode(theme === "dark");
667
- }, [theme]);
668
695
  useEffect(() => {
669
696
  live.current?.api.setLocale(language === "pl" ? "plPL" : "enUS");
670
697
  }, [language]);
@@ -759,6 +786,13 @@ function SheetView({ bytes, name, kind, rights, language, theme, onChange, onSav
759
786
  [t.time, "hh:mm"],
760
787
  [t.text, "@"]
761
788
  ];
789
+ const places = (step) => range()?.setNumberFormat(decimals(look?.n ?? "General", step));
790
+ const sum = () => {
791
+ const r = range()?.getRange();
792
+ const ws = sheet();
793
+ const numeric = (row, c) => ws?.getRange(row, c).getCellData()?.t === CellValueType.NUMBER;
794
+ if (r && ws) for (const x of autoSum(r, numeric)) ws.getRange(x.row, x.col).setValue({ f: x.f });
795
+ };
762
796
  const shown = formats.find(([, p]) => p === look?.n)?.[0] ?? (look && look.n !== "General" ? look.n : t.general);
763
797
  const border = (type) => {
764
798
  range()?.setBorder(type, type === "none" ? 0 : 1, "#000000");
@@ -819,6 +853,10 @@ function SheetView({ bytes, name, kind, rights, language, theme, onChange, onSav
819
853
  i
820
854
  )) })
821
855
  ),
856
+ tool(Euro, t.asCurrency, () => range()?.setNumberFormat('#,##0.00 "\u20AC"'), look?.n === '#,##0.00 "\u20AC"'),
857
+ tool(Percent, t.asPercent, () => range()?.setNumberFormat("0.00%"), look?.n === "0.00%"),
858
+ tool(DecimalsArrowLeft, t.fewerDecimals, () => places(-1)),
859
+ tool(DecimalsArrowRight, t.moreDecimals, () => places(1)),
822
860
  gap,
823
861
  tool(Bold, t.bold, () => run("sheet.command.set-range-bold"), look?.bl),
824
862
  tool(Italic, t.italic, () => run("sheet.command.set-range-italic"), look?.it),
@@ -887,6 +925,7 @@ function SheetView({ bytes, name, kind, rights, language, theme, onChange, onSav
887
925
  ] })
888
926
  ),
889
927
  gap,
928
+ tool(Sigma, t.sum, sum),
890
929
  tool(ArrowDownAZ, t.sortUp, () => run("sheet.command.sort-range-asc")),
891
930
  tool(ArrowDownZA, t.sortDown, () => run("sheet.command.sort-range-desc")),
892
931
  !room && tool(Funnel, t.filter, () => run("sheet.command.smart-toggle-filter")),
@@ -900,7 +939,7 @@ function SheetView({ bytes, name, kind, rights, language, theme, onChange, onSav
900
939
  /* @__PURE__ */ jsx(WifiOff, { "aria-hidden": true }),
901
940
  room.denied ? t.liveOff : t.offline
902
941
  ] }),
903
- room && room.people.length > 0 && /* @__PURE__ */ jsx("span", { className: "w100n-text-people", role: "group", "aria-label": t.people, children: room.people.map((p) => /* @__PURE__ */ jsx("span", { className: "w100n-text-face", title: p.me ? `${p.name} (${t.you})` : p.name, style: { "--face": p.color }, children: p.avatarUrl ? /* @__PURE__ */ jsx("img", { src: p.avatarUrl, alt: "" }) : p.name.slice(0, 1).toUpperCase() }, p.id)) }),
942
+ room && room.people.length > 0 && /* @__PURE__ */ jsx("span", { className: "w100n-text-people", role: "group", "aria-label": t.people, children: room.people.map((p) => /* @__PURE__ */ jsx("span", { className: "w100n-text-face", title: p.me ? `${p.name} (${t.you})` : p.name, style: { "--face": p.color }, children: p.avatarUrl ? /* @__PURE__ */ jsx("img", { src: p.avatarUrl, alt: "" }) : p.name.split(/\s+/).map((w) => w[0]).join("").slice(0, 2).toUpperCase() }, p.id)) }),
904
943
  !edit && /* @__PURE__ */ jsx("span", { className: "w100n-docs-badge", children: notes ? t.notesOnly : t.viewOnly }),
905
944
  saving === "failed" && /* @__PURE__ */ jsx("span", { className: "w100n-sheet-muted", role: "alert", children: refusal ? t.refused[refusal.code].replace("{sheet}", refusal.sheet) : t.saveFailed }),
906
945
  (edit || notes) && /* @__PURE__ */ jsxs("button", { type: "button", className: "w100n-docs-action", disabled: !pending || saving === "busy" || phase !== "ready" || !!room && !room.online, onClick: () => void save(), children: [
@@ -921,8 +960,10 @@ function SheetView({ bytes, name, kind, rights, language, theme, onChange, onSav
921
960
  var SheetView_default = SheetView;
922
961
  export {
923
962
  SheetView,
963
+ autoSum,
964
+ decimals,
924
965
  SheetView_default as default,
925
966
  readSheet,
926
967
  writeSheet
927
968
  };
928
- //# sourceMappingURL=SheetView-3UAFXGZS.js.map
969
+ //# sourceMappingURL=SheetView-4TPL7DES.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sheets/SheetView.tsx","../src/sheets/bind.ts","../src/sheets/engine.ts"],"sourcesContent":["import { useEffect, useRef, useState, type CSSProperties, type KeyboardEvent, type ReactNode } from 'react';\nimport {\n ArrowDownAZ, ArrowDownZA, Baseline, DecimalsArrowLeft, DecimalsArrowRight, Euro, Percent, Sigma, BetweenHorizontalEnd, BetweenHorizontalStart, BetweenVerticalEnd, BetweenVerticalStart, Bold, ChevronDown, Funnel, Grid2x2,\n Italic, PaintBucket, PanelBottom, Redo2, Save, Search, Snowflake, Square, SquareDashed, StickyNote, Strikethrough, TableCellsMerge, TableCellsSplit, TableColumnsSplit,\n TableRowsSplit, TextAlignCenter, TextAlignEnd, TextAlignStart, TextWrap, Underline, Undo2, WifiOff, type LucideIcon,\n} from 'lucide-react';\nimport { CellValueType, type BorderStyleTypes, type BorderType } from '@univerjs/core';\nimport type { FUniver } from '@univerjs/core/facade';\nimport { useLive } from '../editor/live';\nimport { rove, useRestore } from '../focus';\nimport type { DocumentsHost, Language, Rights } from '../types';\nimport type { Guard } from '../Unsaved';\nimport { bind } from './bind';\nimport { readSheet, writeSheet } from './book';\nimport { snapshot, track } from './engine';\nimport type { Mark } from './grid';\nimport { rebase, SheetRefusal, type SheetModel } from './model';\nimport { span } from './refs';\nimport { build, extras } from './shared';\nimport { sheetTexts } from './text';\nimport { worksheets } from './xlsx';\nimport './sheets.css';\n\nexport { readSheet, writeSheet };\n\nexport const decimals = (pattern: string, step: number) => {\n const p = pattern === 'General' ? '0' : pattern;\n const next = Math.max(0, (/0(?:\\.(0+))?/.exec(p)?.[1]?.length ?? 0) + step);\n return p.replace(/0(?:\\.0+)?/, `0${next ? `.${'0'.repeat(next)}` : ''}`);\n};\n\nconst letters = (c: number) => {\n let s = '';\n for (let n = c + 1; n > 0; n = Math.floor((n - 1) / 26)) s = String.fromCharCode(65 + (n - 1) % 26) + s;\n return s;\n};\n\nexport function autoSum(r: { startRow: number; endRow: number; startColumn: number; endColumn: number }, numeric: (row: number, col: number) => boolean) {\n if (r.startRow !== r.endRow || r.startColumn !== r.endColumn) {\n return Array.from({ length: r.endColumn - r.startColumn + 1 }, (_, i) => {\n const col = r.startColumn + i;\n return { row: r.endRow + 1, col, f: `=SUM(${letters(col)}${r.startRow + 1}:${letters(col)}${r.endRow + 1})` };\n });\n }\n let top = r.startRow;\n while (top > 0 && numeric(top - 1, r.startColumn)) top--;\n if (top < r.startRow) return [{ row: r.startRow, col: r.startColumn, f: `=SUM(${letters(r.startColumn)}${top + 1}:${letters(r.startColumn)}${r.startRow})` }];\n let left = r.startColumn;\n while (left > 0 && numeric(r.startRow, left - 1)) left--;\n return left < r.startColumn ? [{ row: r.startRow, col: r.startColumn, f: `=SUM(${letters(left)}${r.startRow + 1}:${letters(r.startColumn - 1)}${r.startRow + 1})` }] : [];\n}\n\ntype Look = { bl: boolean; it: boolean; ul: boolean; st: boolean; ht: number; tb: boolean; merged: boolean; n: string; cl: string; bg: string };\ntype Live = { api: FUniver; model: SheetModel; original: ArrayBuffer; changes: number; marks?: { show: (list: Mark[]) => void; dispose: () => void } };\n\nexport function SheetView({ bytes, name, kind, rights, language, theme, onChange, onSaveRequest, guard, host, together, documentId = '', onSaved }: {\n bytes: ArrayBuffer; name: string; kind: 'xlsx' | 'csv'; rights: Rights; language: Language; theme: 'light' | 'dark';\n onChange?: (dirty: boolean) => void; onSaveRequest?: (bytes: ArrayBuffer, note: string) => Promise<unknown>; guard?: Guard;\n host?: DocumentsHost; together?: boolean; documentId?: string; onSaved?: () => void;\n}) {\n const t = sheetTexts[language];\n const box = useRef<HTMLDivElement>(null);\n const live = useRef<Live | null>(null);\n const room = useLive(together ? host : undefined, documentId, kind, bytes, undefined, language, rights.edit && !!onSaveRequest, onSaved);\n const shared = room?.ready ? room.wire : null;\n const waiting = !!room && !shared && !room.late && !room.denied;\n const [phase, setPhase] = useState<'loading' | 'ready' | 'failed'>('loading');\n const [attempt, setAttempt] = useState(0);\n const [dirty, setDirty] = useState(false);\n const [saving, setSaving] = useState<'idle' | 'busy' | 'done' | 'failed'>('idle');\n const [refusal, setRefusal] = useState<SheetRefusal | null>(null);\n const [pop, setPop] = useState<'text' | 'fill' | 'border' | 'format' | 'freeze' | null>(null);\n const [look, setLook] = useState<Look | null>(null);\n const edit = rights.edit && !!onSaveRequest && (!room || (!!shared && !room.readonly));\n const notes = !edit && rights.comment && !!onSaveRequest && !room;\n\n useEffect(() => {\n if (waiting) return;\n let gone = false;\n let stop = () => {};\n let model: SheetModel;\n let moved = false;\n const change = () => { moved = true; };\n try {\n model = shared ? extras(shared.doc, build(shared.doc)) : readSheet(bytes, kind);\n } catch {\n setPhase('failed');\n return;\n }\n shared?.doc.on('update', change);\n setPhase('loading');\n setDirty(false);\n const families = new Set([model.book.defaultStyle, ...Object.values(model.book.styles)].map(s => typeof s === 'object' ? s?.ff : null).filter(Boolean));\n const fonts = Promise.race([Promise.all([...families].flatMap(f => ['', 'bold ', 'italic '].map(w => document.fonts.load(`${w}11pt \"${f}\"`).catch(() => [])))), new Promise(r => setTimeout(r, 800))]);\n Promise.all([import('./grid'), fonts]).then(([{ grid, marks }]) => {\n if (gone) return;\n shared?.doc.off('update', change);\n if (shared && moved) model = extras(shared.doc, build(shared.doc));\n if (kind === 'csv') model.book.sheets.s1.name = name.replace(/\\.[^.]+$/, '') || 'Sheet1';\n const host = box.current!.appendChild(document.createElement('div'));\n host.className = 'w100n-sheet-host';\n const view = grid(host, language, edit);\n const { univer, univerAPI: api } = view;\n const wb = api.createWorkbook(model.book);\n if (model.active) wb.setActiveSheet(model.active);\n if (!edit) wb.setEditable(false);\n const state: Live = { api, model, original: bytes, changes: 0 };\n const untrack = track(api, model, { view: true, comment: notes, edit }, () => {\n state.changes++;\n if (state.changes === 1 && !shared) {\n setDirty(true);\n onChange?.(true);\n }\n });\n const unbind = shared ? bind(api, univer.__getInjector(), shared.doc, model, edit) : () => {};\n const people = shared?.link.awareness;\n if (shared) {\n people?.setLocalStateField('user', shared.user);\n state.marks = marks(view);\n }\n let frame = 0;\n let last = '';\n const refresh = () => {\n frame = 0;\n const range = api.getActiveWorkbook()?.getActiveRange();\n if (!range) return;\n const s = range.getCellStyleData() ?? {};\n const here = { sheet: range.getSheetId(), range: span(range.getRange()) };\n if (people && JSON.stringify(here) !== last) {\n last = JSON.stringify(here);\n people.setLocalStateField('selection', here);\n }\n setLook({ bl: s.bl === 1, it: s.it === 1, ul: !!s.ul?.s, st: !!s.st?.s, ht: s.ht ?? 0, tb: s.tb === 3, merged: range.isMerged() || range.isPartOfMerge(), n: s.n?.pattern ?? 'General', cl: s.cl?.rgb ?? '', bg: s.bg?.rgb ?? '' });\n };\n const later = () => { if (!frame) frame = requestAnimationFrame(refresh); };\n const selection = wb.onSelectionChange(later);\n const commands = api.addEvent(api.Event.CommandExecuted, later);\n live.current = state;\n stop = () => {\n unbind();\n state.marks?.dispose();\n untrack();\n selection.dispose();\n commands.dispose();\n cancelAnimationFrame(frame);\n host.hidden = true;\n setTimeout(() => { univer.dispose(); host.remove(); });\n };\n setPhase('ready');\n }).catch(() => { if (!gone) setPhase('failed'); });\n return () => { gone = true; shared?.doc.off('update', change); stop(); live.current = null; };\n }, [bytes, kind, attempt, shared, waiting]);\n\n useEffect(() => {\n live.current?.marks?.show((room?.people ?? []).flatMap(p => !p.me && p.selection ? [{ ...p.selection, color: p.color }] : []));\n }, [room?.people, phase]);\n\n useEffect(() => { live.current?.api.setLocale(language === 'pl' ? 'plPL' : 'enUS'); }, [language]);\n const pending = room ? room.pending : dirty;\n const unsent = room ? room.unsynced && edit : dirty;\n useEffect(() => {\n if (!unsent) return;\n const stop = (e: BeforeUnloadEvent) => e.preventDefault();\n window.addEventListener('beforeunload', stop);\n return () => window.removeEventListener('beforeunload', stop);\n }, [unsent]);\n\n const save = async () => {\n const l = live.current;\n if (room) {\n if (!l || !edit || !room.online || !room.pending || saving === 'busy') return false;\n setSaving('busy');\n setRefusal(null);\n await l.api.getFormula().onCalculationResultApplied(5000).catch(() => {});\n const ok = await room.save();\n setSaving(ok ? 'done' : 'failed');\n return ok;\n }\n if (!l || !onSaveRequest || saving === 'busy') return false;\n setSaving('busy');\n setRefusal(null);\n const seen = l.changes;\n try {\n const model = snapshot(l.api, l.model);\n const out = writeSheet(l.original, model, kind);\n await onSaveRequest(out, t.editedNote);\n const ids = kind === 'csv' ? [] : worksheets(out);\n rebase(l.model, model.lines, Object.fromEntries(model.book.sheetOrder.map((sid, i) => [sid, ids[i] ?? i + 1])));\n l.original = out;\n if (l.changes === seen) {\n l.changes = 0;\n setDirty(false);\n onChange?.(false);\n }\n setSaving('done');\n return true;\n } catch (e) {\n setRefusal(e instanceof SheetRefusal ? e : null);\n setSaving('failed');\n return false;\n }\n };\n\n useEffect(() => {\n if (!guard || room || !dirty) return;\n guard.current = save;\n return () => { guard.current = null; };\n });\n\n useRestore(pop !== null);\n\n const api = () => live.current?.api;\n const run = (id: string, params?: object) => { void api()?.executeCommand(id, params); setPop(null); };\n const range = () => api()?.getActiveWorkbook()?.getActiveRange();\n const sheet = () => api()?.getActiveWorkbook()?.getActiveSheet();\n const keys = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 's') {\n e.preventDefault();\n e.stopPropagation();\n if (edit || notes) void save();\n }\n if (e.key === 'Escape' && pop) {\n e.stopPropagation();\n setPop(null);\n }\n };\n const tool = (Icon: LucideIcon, label: string, onClick: () => void, pressed?: boolean) =>\n <button type=\"button\" aria-label={label} title={label} aria-pressed={pressed} disabled={phase !== 'ready'} onClick={onClick}><Icon aria-hidden /></button>;\n const gap = <span className=\"w100n-sheet-gap\" />;\n const anchor = (key: NonNullable<typeof pop>, trigger: ReactNode, body: ReactNode) => <span className=\"w100n-sheet-anchor\">\n {trigger}\n {pop === key && <span className=\"w100n-sheet-pop\" role=\"dialog\">{body}</span>}\n </span>;\n const opener = (key: NonNullable<typeof pop>, Icon: LucideIcon, label: string, bar?: string) =>\n <button type=\"button\" aria-label={label} title={label} aria-expanded={pop === key} disabled={phase !== 'ready'} onClick={() => setPop(pop === key ? null : key)}>\n <Icon aria-hidden />{bar !== undefined && <i className=\"w100n-sheet-bar\" style={{ background: bar || 'currentColor' }} />}\n </button>;\n const currency = language === 'pl' ? '#,##0.00 \"zł\"' : language === 'uk' ? '#,##0.00 \"₴\"' : '\"$\"#,##0.00';\n const formats: [string, string][] = [[t.general, 'General'], [t.number, '#,##0.00'], [t.percent, '0.00%'], [t.currency, currency], [`${t.currency} €`, '#,##0.00 \"€\"'],\n [t.date, language === 'en' ? 'mm/dd/yyyy' : 'dd.mm.yyyy'], [t.time, 'hh:mm'], [t.text, '@']];\n const places = (step: number) => range()?.setNumberFormat(decimals(look?.n ?? 'General', step));\n const sum = () => {\n const r = range()?.getRange();\n const ws = sheet();\n const numeric = (row: number, c: number) => ws?.getRange(row, c).getCellData()?.t === CellValueType.NUMBER;\n if (r && ws) for (const x of autoSum(r, numeric)) ws.getRange(x.row, x.col).setValue({ f: x.f });\n };\n const shown = formats.find(([, p]) => p === look?.n)?.[0] ?? (look && look.n !== 'General' ? look.n : t.general);\n const border = (type: string) => {\n range()?.setBorder(type as BorderType, (type === 'none' ? 0 : 1) as BorderStyleTypes, '#000000');\n setPop(null);\n };\n const lines = (rows: boolean) => {\n const r = range()?.getRange();\n const ws = sheet();\n if (!r || !ws) return;\n if (rows) ws.deleteRows(r.startRow, r.endRow - r.startRow + 1);\n else ws.deleteColumns(r.startColumn, r.endColumn - r.startColumn + 1);\n };\n const swatches = (list: string[], pick: (c: string) => void, none: string, reset: () => void, current: string) => <span className=\"w100n-sheet-swatches\">\n {list.map((c, i) => <button key={i} type=\"button\" aria-label={c} aria-pressed={current.toLowerCase() === c} onClick={() => pick(c)}><i style={{ background: c }} /></button>)}\n <button type=\"button\" className=\"w100n-sheet-none\" onClick={reset}>{none}</button>\n </span>;\n\n return <div className=\"w100n-sheet\" data-theme={theme} onKeyDownCapture={keys}>\n <div className=\"w100n-sheet-ribbon\" role=\"toolbar\" aria-label={t.tools} onKeyDown={rove} onPointerDown={e => { if ((e.target as HTMLElement).closest('button')) e.preventDefault(); }}>\n <div className=\"w100n-sheet-tools\">\n {edit && <>\n {tool(Undo2, t.undo, () => void api()?.undo())}\n {tool(Redo2, t.redo, () => void api()?.redo())}\n {gap}\n {anchor('format', <button type=\"button\" className=\"w100n-sheet-picker\" aria-label={t.format} title={t.format} aria-expanded={pop === 'format'} disabled={phase !== 'ready'}\n onClick={() => setPop(pop === 'format' ? null : 'format')}><span>{shown}</span><ChevronDown aria-hidden /></button>,\n <span className=\"w100n-sheet-list\">{formats.map(([label, pattern], i) => <button key={i} type=\"button\" aria-selected={look?.n === pattern}\n onClick={() => { range()?.setNumberFormat(pattern); setPop(null); }}>{label}<small>{pattern === 'General' ? '' : pattern}</small></button>)}</span>)}\n {tool(Euro, t.asCurrency, () => range()?.setNumberFormat('#,##0.00 \"€\"'), look?.n === '#,##0.00 \"€\"')}\n {tool(Percent, t.asPercent, () => range()?.setNumberFormat('0.00%'), look?.n === '0.00%')}\n {tool(DecimalsArrowLeft, t.fewerDecimals, () => places(-1))}\n {tool(DecimalsArrowRight, t.moreDecimals, () => places(1))}\n {gap}\n {tool(Bold, t.bold, () => run('sheet.command.set-range-bold'), look?.bl)}\n {tool(Italic, t.italic, () => run('sheet.command.set-range-italic'), look?.it)}\n {tool(Underline, t.underline, () => run('sheet.command.set-range-underline'), look?.ul)}\n {tool(Strikethrough, t.strike, () => run('sheet.command.set-range-stroke'), look?.st)}\n {anchor('text', opener('text', Baseline, t.textColour, look?.cl ?? ''),\n swatches(['#0f172a', '#475569', '#dc2626', '#ea580c', '#ca8a04', '#16a34a', '#0891b2', '#2563eb', '#7c3aed', '#db2777'],\n c => run('sheet.command.set-range-text-color', { value: c }), t.automatic, () => run('sheet.command.reset-range-text-color'), look?.cl ?? ''))}\n {anchor('fill', opener('fill', PaintBucket, t.fill, look?.bg ?? ''),\n swatches(['#fee2e2', '#ffedd5', '#fef9c3', '#dcfce7', '#cffafe', '#dbeafe', '#ede9fe', '#fce7f3', '#f1f5f9', '#cbd5e1'],\n c => run('sheet.command.set-background-color', { value: c }), t.noFill, () => run('sheet.command.reset-background-color'), look?.bg ?? ''))}\n {anchor('border', opener('border', Grid2x2, t.borders),\n <span className=\"w100n-sheet-list\">{([[Grid2x2, t.borderAll, 'all'], [Square, t.borderOuter, 'outside'], [PanelBottom, t.borderBottom, 'bottom'], [SquareDashed, t.borderNone, 'none']] as const)\n .map(([Icon, label, type]) => <button key={type} type=\"button\" onClick={() => border(type)}><Icon aria-hidden />{label}</button>)}</span>)}\n {gap}\n {tool(TextAlignStart, t.alignLeft, () => run('sheet.command.set-horizontal-text-align', { value: 1 }), look?.ht === 1)}\n {tool(TextAlignCenter, t.alignCenter, () => run('sheet.command.set-horizontal-text-align', { value: 2 }), look?.ht === 2)}\n {tool(TextAlignEnd, t.alignRight, () => run('sheet.command.set-horizontal-text-align', { value: 3 }), look?.ht === 3)}\n {tool(TextWrap, t.wrap, () => run('sheet.command.set-text-wrap', { value: look?.tb ? 1 : 3 }), look?.tb)}\n {look?.merged ? tool(TableCellsSplit, t.unmerge, () => run('sheet.command.remove-worksheet-merge'), true) : tool(TableCellsMerge, t.merge, () => run('sheet.command.add-worksheet-merge-all'))}\n {gap}\n {tool(BetweenHorizontalStart, t.rowAbove, () => run('sheet.command.insert-row-before'))}\n {tool(BetweenHorizontalEnd, t.rowBelow, () => run('sheet.command.insert-row-after'))}\n {tool(BetweenVerticalStart, t.columnLeft, () => run('sheet.command.insert-col-before'))}\n {tool(BetweenVerticalEnd, t.columnRight, () => run('sheet.command.insert-col-after'))}\n {tool(TableRowsSplit, t.deleteRows, () => lines(true))}\n {tool(TableColumnsSplit, t.deleteColumns, () => lines(false))}\n {anchor('freeze', opener('freeze', Snowflake, t.freeze),\n <span className=\"w100n-sheet-list\">\n <button type=\"button\" onClick={() => { sheet()?.setFrozenRows(1); setPop(null); }}>{t.freezeRow}</button>\n <button type=\"button\" onClick={() => { sheet()?.setFrozenColumns(1); setPop(null); }}>{t.freezeColumn}</button>\n <button type=\"button\" onClick={() => run('sheet.command.set-selection-frozen')}>{t.freezeHere}</button>\n <button type=\"button\" onClick={() => { sheet()?.cancelFreeze(); setPop(null); }}>{t.freezeNone}</button>\n </span>)}\n {gap}\n {tool(Sigma, t.sum, sum)}\n {tool(ArrowDownAZ, t.sortUp, () => run('sheet.command.sort-range-asc'))}\n {tool(ArrowDownZA, t.sortDown, () => run('sheet.command.sort-range-desc'))}\n {!room && tool(Funnel, t.filter, () => run('sheet.command.smart-toggle-filter'))}\n {gap}\n </>}\n {(edit || notes) && tool(StickyNote, t.note, () => run('sheet.operation.add-note-popup'))}\n {tool(Search, t.find, () => run('ui.operation.open-find-dialog'))}\n </div>\n <span className=\"w100n-sheet-end\">\n {room && (room.ready ? !room.online : room.late || room.denied) && <span className=\"w100n-text-live\" title={room.denied ? undefined : t.offlineHint}><WifiOff aria-hidden />{room.denied ? t.liveOff : t.offline}</span>}\n {room && room.people.length > 0 && <span className=\"w100n-text-people\" role=\"group\" aria-label={t.people}>\n {room.people.map(p => <span key={p.id} className=\"w100n-text-face\" title={p.me ? `${p.name} (${t.you})` : p.name} style={{ '--face': p.color } as CSSProperties}>\n {p.avatarUrl ? <img src={p.avatarUrl} alt=\"\" /> : p.name.split(/\\s+/).map(w => w[0]).join('').slice(0, 2).toUpperCase()}\n </span>)}\n </span>}\n {!edit && <span className=\"w100n-docs-badge\">{notes ? t.notesOnly : t.viewOnly}</span>}\n {saving === 'failed' && <span className=\"w100n-sheet-muted\" role=\"alert\">{refusal ? t.refused[refusal.code].replace('{sheet}', refusal.sheet) : t.saveFailed}</span>}\n {(edit || notes) && <button type=\"button\" className=\"w100n-docs-action\" disabled={!pending || saving === 'busy' || phase !== 'ready' || (!!room && !room.online)} onClick={() => void save()}>\n <Save aria-hidden />{saving === 'busy' ? t.saving : !pending && saving === 'done' ? t.saved : t.save}\n </button>}\n </span>\n </div>\n <div className=\"w100n-sheet-stage\" onPointerDown={() => setPop(null)}>\n <div ref={box} className=\"w100n-sheet-grid\" />\n {phase !== 'ready' && <div className=\"w100n-sheet-cover\">\n {phase === 'loading' ? <span>{t.loading}</span> : <span>{t.failed}<button type=\"button\" className=\"w100n-docs-action\" onClick={() => setAttempt(n => n + 1)}>{t.retry}</button></span>}\n </div>}\n </div>\n </div>;\n}\n\nexport default SheetView;\n","import { ICommandService, IUndoRedoService, IUniverInstanceService, mergeWorksheetSnapshotWithDefault, type ICellData, type Injector, type IRange, type IStyleData, type Workbook } from '@univerjs/core';\nimport type { FUniver } from '@univerjs/core/facade';\nimport { SheetLazyExecuteScheduleService } from '@univerjs/sheets';\nimport * as Y from 'yjs';\nimport { quiet } from './engine';\nimport type { SheetModel } from './model';\nimport { canon, fnv, made, notesOf, parts, pieces, props, sheetOf, spot, strip, type Cell, type Col, type Row } from './shared';\n\ntype Matrix<T> = Record<number, Record<number, T>>;\ntype Params = {\n unitId?: string; subUnitId?: string; sheetId?: string; index?: number; toOrder?: number; sheet?: { id: string };\n range?: IRange; sourceRange?: IRange; targetRange?: IRange; ranges?: IRange[]; cellValue?: Matrix<unknown>;\n rowData?: Record<number, unknown>; columnData?: Record<number, unknown>; from?: { subUnitId: string; value: Matrix<unknown> }; to?: { subUnitId: string; value: Matrix<unknown> };\n};\ntype Touch = { rows: Y.YArrayEvent<string>['changes']['delta'] | null; cols: Y.YArrayEvent<string>['changes']['delta'] | null; cells: Set<string>; rowData: Set<string>; colData: Set<string>; marks: boolean; props: Set<string> };\n\nconst setters = [\n ['name', 'sheet.mutation.set-worksheet-name', 'name', ''], ['hidden', 'sheet.mutation.set-worksheet-hidden', 'hidden', 0], ['tabColor', 'sheet.mutation.set-tab-color', 'color', ''],\n ['showGridlines', 'sheet.mutation.toggle-gridlines', 'showGridlines', 1], ['rightToLeft', 'sheet.mutation.set-worksheet-right-to-left', 'rightToLeft', 0],\n ['freeze', 'sheet.mutation.set-frozen', '', { startRow: -1, startColumn: -1, xSplit: 0, ySplit: 0 }],\n] as const;\n\nconst closed = /\\.command\\.(.*filter-(range|criteria)|.*toggle-filter|.*sheet-filter|.*data-?validation.*|.*defined-name|.*protection)$/i;\n\nexport function bind(api: FUniver, injector: Injector, doc: Y.Doc, model: SheetModel, edit: boolean) {\n const unit = model.book.id;\n const wb = injector.get(IUniverInstanceService).getUnit<Workbook>(unit)!;\n const { order, sheets, styles, values } = parts(doc);\n const lines = model.lines;\n const me = {};\n let open = true;\n const looks = wb.getStyles();\n const commands = injector.get(ICommandService);\n const run = (id: string, params: object) => commands.hasCommand(id) && commands.syncExecuteCommand(id, { unitId: unit, ...params }, { fromCollab: true });\n const ws = (sid: string) => wb.getSheetBySheetId(sid)!;\n const at = new Map<string, { rows: Map<string, number>; cols: Map<string, number> }>();\n const index = (sid: string) => at.get(sid) ?? at.set(sid, { rows: new Map(lines[sid].rows.map((id, i) => [id, i])), cols: new Map(lines[sid].cols.map((id, i) => [id, i])) }).get(sid)!;\n const live = (sid: string | undefined): sid is string => !!sid && !!lines[sid] && sheets.has(sid) && !!wb.getSheetBySheetId(sid);\n\n const look = (s: ICellData['s']) => {\n const style = typeof s === 'string' ? looks.get(s) : s;\n if (!style || !Object.keys(style).length) return undefined;\n const text = canon(style);\n if (typeof s === 'string' && styles.has(s) && canon(styles.get(s)) === text) return s;\n const id = `y${fnv(new TextEncoder().encode(text)).toString(36)}`;\n if (!styles.has(id)) styles.set(id, style as IStyleData);\n return id;\n };\n\n const cellOf = (sid: string, r: number, c: number): Cell | null => {\n const raw = ws(sid).getCellRaw(r, c);\n if (!raw) return null;\n const f = raw.f || (raw.si ? api.getWorkbook(unit)!.getSheetBySheetId(sid)!.getRange(r, c).getFormula() : '');\n const out: Cell = f ? { f } : strip({ v: raw.v, t: raw.t });\n if (raw.p) out.p = raw.p;\n const s = look(raw.s);\n if (s) out.s = s;\n return Object.keys(out).length ? out : null;\n };\n\n const put = (sid: string, r: number, c: number) => {\n const row = lines[sid].rows[r], col = lines[sid].cols[c];\n if (row === undefined || col === undefined) return;\n const { cells } = pieces(sheets.get(sid)!);\n const key = spot(row, col);\n const next = cellOf(sid, r, c), was = cells.get(key);\n if (canon(next) === canon(was)) return;\n if (next) cells.set(key, next);\n else cells.delete(key);\n if (next?.f !== was?.f) values.delete(`${sid}:${key}`);\n };\n\n const each = (m: Matrix<unknown> | undefined, fn: (r: number, c: number) => void) => {\n for (const [r, line] of Object.entries(m ?? {})) for (const c of Object.keys(line ?? {})) fn(+r, +c);\n };\n\n const putRow = (sid: string, r: number) => {\n const id = lines[sid].rows[r];\n const raw = ws(sid).getRowManager().getRow(r);\n const { rowData } = pieces(sheets.get(sid)!);\n const next = raw ? strip<Row>({ h: raw.h, hd: raw.hd || undefined, ia: raw.ia, s: look(raw.s) }) : {};\n if (id === undefined || canon(next) === canon(rowData.get(id) ?? {})) return;\n if (Object.keys(next).length) rowData.set(id, next);\n else rowData.delete(id);\n };\n\n const putCol = (sid: string, c: number) => {\n const id = lines[sid].cols[c];\n const raw = ws(sid).getColumnManager().getColumn(c);\n const { colData } = pieces(sheets.get(sid)!);\n const next = raw ? strip<Col>({ w: raw.w, hd: raw.hd || undefined, s: look(raw.s) }) : {};\n if (id === undefined || canon(next) === canon(colData.get(id) ?? {})) return;\n if (Object.keys(next).length) colData.set(id, next);\n else colData.delete(id);\n };\n\n const merges = (sid: string) => {\n const l = lines[sid];\n const { merges: kept } = pieces(sheets.get(sid)!);\n const want = new Set(ws(sid).getMergeData().map(b => [l.rows[b.startRow], l.cols[b.startColumn], l.rows[b.endRow], l.cols[b.endColumn]].join(':')));\n for (const k of [...kept.keys()]) if (!want.has(k)) kept.delete(k);\n for (const k of want) if (!kept.has(k)) kept.set(k, 1);\n };\n\n const notes = (sid: string) => {\n const l = lines[sid];\n const { notes: kept } = pieces(sheets.get(sid)!);\n const want = new Map(api.getWorkbook(unit)!.getSheetBySheetId(sid)!.getNotes().map(n => [spot(l.rows[n.row], l.cols[n.col]), { note: n.note, width: n.width, height: n.height }]));\n for (const k of [...kept.keys()]) if (!want.has(k)) kept.delete(k);\n for (const [k, n] of want) if (canon(kept.get(k)) !== canon(n)) kept.set(k, n);\n };\n\n const prop = (sid: string, name: typeof props[number]) => {\n const m = sheets.get(sid)!;\n const empty = setters.find(x => x[0] === name)![3];\n const now = ws(sid).getConfig()[name] ?? empty;\n if (canon(m.get(name) ?? empty) === canon(now)) return;\n if (canon(now) === canon(empty)) m.delete(name);\n else m.set(name, now);\n };\n\n const fit = (list: Y.Array<string>, now: string[]) => {\n if (list.length > now.length) list.delete(now.length, list.length - now.length);\n else if (list.length < now.length) list.push(now.slice(list.length));\n };\n\n const resync = (sid: string) => {\n const l = lines[sid];\n const { cells } = pieces(sheets.get(sid)!);\n const seen = new Set<string>();\n ws(sid).getCellMatrix().forValue((r, c) => {\n put(sid, r, c);\n seen.add(spot(l.rows[r], l.cols[c]));\n });\n const { rows, cols } = index(sid);\n for (const k of [...cells.keys()]) if (!seen.has(k) && rows.has(k.split(':')[0]) && cols.has(k.split(':')[1])) cells.delete(k);\n l.rows.forEach((_, r) => putRow(sid, r));\n l.cols.forEach((_, c) => putCol(sid, c));\n merges(sid);\n notes(sid);\n props.forEach(name => prop(sid, name));\n };\n\n const write = (id: string, p: Params) => {\n const sid = p.subUnitId ?? p.sheetId;\n if (id === 'sheet.mutation.insert-sheet' && p.sheet && lines[p.sheet.id]) {\n const added = p.sheet.id;\n sheets.set(added, made(ws(added).getConfig(), lines[added]));\n order.insert(Math.min(p.index ?? order.length, order.length), [added]);\n return resync(added);\n }\n if (id === 'sheet.mutation.remove-sheet' && sid) {\n at.delete(sid);\n sheets.delete(sid);\n const i = order.toArray().indexOf(sid);\n if (i >= 0) order.delete(i, 1);\n return;\n }\n if (id === 'sheet.mutation.set-worksheet-order' && sid) {\n const i = order.toArray().indexOf(sid);\n if (i >= 0) order.delete(i, 1);\n return order.insert(Math.min(p.toOrder ?? 0, order.length), [sid]);\n }\n if (id === 'sheet.mutation.move-range' && p.from && p.to) {\n if (live(p.from.subUnitId)) each(p.from.value, (r, c) => put(p.from!.subUnitId, r, c));\n if (live(p.to.subUnitId)) each(p.to.value, (r, c) => put(p.to!.subUnitId, r, c));\n return;\n }\n if (!live(sid)) return;\n const { rows, cols } = pieces(sheets.get(sid)!);\n const l = lines[sid];\n const count = (r: IRange, row: boolean) => row ? r.endRow - r.startRow + 1 : r.endColumn - r.startColumn + 1;\n const shift = (list: Y.Array<string>, from: number, n: number, to: number) => {\n const ids = list.slice(from, from + n);\n list.delete(from, n);\n list.insert(to > from ? to - n : to, ids);\n at.delete(sid);\n };\n switch (id) {\n case 'sheet.mutation.set-range-values': return each(p.cellValue, (r, c) => put(sid, r, c));\n case 'sheet.mutation.reorder-range':\n for (let r = p.range!.startRow; r <= p.range!.endRow; r++) for (let c = p.range!.startColumn; c <= p.range!.endColumn; c++) put(sid, r, c);\n return;\n case 'sheet.mutation.insert-row':\n rows.insert(p.range!.startRow, l.rows.slice(p.range!.startRow, p.range!.endRow + 1));\n at.delete(sid);\n for (let r = p.range!.startRow; r <= p.range!.endRow; r++) putRow(sid, r);\n return;\n case 'sheet.mutation.insert-col':\n cols.insert(p.range!.startColumn, l.cols.slice(p.range!.startColumn, p.range!.endColumn + 1));\n at.delete(sid);\n for (let c = p.range!.startColumn; c <= p.range!.endColumn; c++) putCol(sid, c);\n return;\n case 'sheet.mutation.remove-rows':\n at.delete(sid);\n return rows.delete(p.range!.startRow, count(p.range!, true));\n case 'sheet.mutation.remove-col':\n at.delete(sid);\n return cols.delete(p.range!.startColumn, count(p.range!, false));\n case 'sheet.mutation.move-rows': return shift(rows, p.sourceRange!.startRow, count(p.sourceRange!, true), p.targetRange!.startRow);\n case 'sheet.mutation.move-columns': return shift(cols, p.sourceRange!.startColumn, count(p.sourceRange!, false), p.targetRange!.startColumn);\n case 'sheet.mutation.set-worksheet-row-count':\n at.delete(sid);\n return fit(rows, l.rows);\n case 'sheet.mutation.set-worksheet-column-count':\n at.delete(sid);\n return fit(cols, l.cols);\n case 'sheet.mutation.set-worksheet-row-height':\n case 'sheet.mutation.set-worksheet-row-is-auto-height':\n case 'sheet.mutation.set-row-hidden':\n case 'sheet.mutation.set-row-visible':\n for (const r of p.ranges ?? []) for (let i = r.startRow; i <= r.endRow; i++) putRow(sid, i);\n return;\n case 'sheet.mutation.set-worksheet-col-width':\n case 'sheet.mutation.set-col-hidden':\n case 'sheet.mutation.set-col-visible':\n for (const r of p.ranges ?? []) for (let i = r.startColumn; i <= r.endColumn; i++) putCol(sid, i);\n return;\n case 'sheet.mutation.set-row-data': return Object.keys(p.rowData ?? {}).forEach(r => putRow(sid, +r));\n case 'sheet.mutation.set-col-data': return Object.keys(p.columnData ?? {}).forEach(c => putCol(sid, +c));\n case 'sheet.mutation.add-worksheet-merge':\n case 'sheet.mutation.remove-worksheet-merge': return merges(sid);\n case 'sheet.mutation.update-note':\n case 'sheet.mutation.remove-note':\n case 'sheet.mutation.update-note-position': return notes(sid);\n default: {\n const setter = setters.find(x => x[1] === id);\n if (setter) prop(sid, setter[0]);\n else if (!quiet.has(id)) resync(sid);\n }\n }\n };\n\n const computed = (p: Params) => {\n const sid = p.subUnitId;\n if (!live(sid)) return;\n each(p.cellValue, (r, c) => {\n const raw = ws(sid).getCellRaw(r, c);\n const row = lines[sid].rows[r], col = lines[sid].cols[c];\n if ((!raw?.f && !raw?.si) || row === undefined || col === undefined) return;\n const key = `${sid}:${spot(row, col)}`, next = { v: raw.v ?? null, t: raw.t ?? null };\n if (canon(values.get(key)) !== canon(next)) values.set(key, next);\n });\n };\n\n const refuse = api.addEvent(api.Event.BeforeCommandExecute, e => {\n if (edit && e.type === 0 && closed.test(e.id)) e.cancel = true;\n });\n\n const local = api.addEvent(api.Event.CommandExecuted, e => {\n const p = (e.params ?? {}) as Params;\n if (e.type !== 2 || p.unitId !== unit || e.options?.fromCollab || !edit) return;\n if (e.options?.onlyLocal) {\n if (e.options.applyFormulaCalculationResult) doc.transact(() => computed(p), me);\n return;\n }\n doc.transact(() => write(e.id, p), me);\n });\n\n const lazy = commands.onMutationExecutedForCollab((e, options) => {\n if (!edit || !options?.syncOnly || e.id !== 'sheet.mutation.copy-worksheet-end') return;\n const sid = (e.params as Params).subUnitId!;\n const wait = () => open && (injector.get(SheetLazyExecuteScheduleService).hasPendingTasks() ? setTimeout(wait, 100) : live(sid) && doc.transact(() => resync(sid), me));\n wait();\n });\n\n const full = (sid: string, key: string, x: Cell | undefined): ICellData | null => {\n if (!x) return null;\n const kept = x.f ? values.get(`${sid}:${key}`) : undefined;\n return { v: (x.f ? kept?.v : x.v) ?? null, t: (x.f ? kept?.t : x.t) ?? undefined, f: x.f ?? null, si: null, p: x.p ?? null, s: x.s ? styles.get(x.s) ?? null : null };\n };\n\n const cellsTo = (sid: string, keys: Iterable<string>) => {\n const { cells } = pieces(sheets.get(sid)!);\n const { rows, cols } = index(sid);\n const cellValue: Matrix<ICellData | null> = {};\n for (const key of keys) {\n const [row, col] = key.split(':');\n const r = rows.get(row), c = cols.get(col);\n if (r !== undefined && c !== undefined) (cellValue[r] ??= {})[c] = full(sid, key, cells.get(key));\n }\n if (Object.keys(cellValue).length) run('sheet.mutation.set-range-values', { subUnitId: sid, cellValue, isOverrideStyle: true });\n };\n\n const linesTo = (sid: string, ids: Iterable<string>, row: boolean) => {\n const { rowData, colData } = pieces(sheets.get(sid)!);\n const map = row ? index(sid).rows : index(sid).cols;\n const info: Record<number, object | null> = {}, sizes: Record<number, number> = {};\n const ranges: IRange[] = [];\n for (const id of ids) {\n const i = map.get(id);\n if (i === undefined) continue;\n const x = (row ? rowData : colData).get(id) as (Row & Col) | undefined;\n const s = x?.s ? styles.get(x.s) : undefined;\n info[i] = x ? row ? { h: x.h, hd: x.hd, ia: x.ia, s } : { w: x.w, hd: x.hd, s } : null;\n const size = row ? x?.h : x?.w;\n if (size !== undefined) sizes[i] = size;\n ranges.push({ startRow: row ? i : 0, endRow: row ? i : 0, startColumn: row ? 0 : i, endColumn: row ? 0 : i });\n }\n if (!ranges.length) return;\n if (row) {\n run('sheet.mutation.set-row-data', { subUnitId: sid, rowData: info });\n run('sheet.mutation.set-worksheet-row-height', { subUnitId: sid, ranges, rowHeight: sizes });\n } else {\n run('sheet.mutation.set-col-data', { subUnitId: sid, columnData: info });\n run('sheet.mutation.set-worksheet-col-width', { subUnitId: sid, ranges, colWidth: sizes });\n }\n };\n\n const mergesTo = (sid: string) => {\n const { merges: kept } = pieces(sheets.get(sid)!);\n const { rows, cols } = index(sid);\n const want = [...kept.keys()].map(k => k.split(':')).map(([r0, c0, r1, c1]) => ({ startRow: rows.get(r0)!, startColumn: cols.get(c0)!, endRow: rows.get(r1)!, endColumn: cols.get(c1)! }))\n .filter(b => [b.startRow, b.startColumn, b.endRow, b.endColumn].every(n => n !== undefined));\n const has = ws(sid).getMergeData().map(b => ({ startRow: b.startRow, startColumn: b.startColumn, endRow: b.endRow, endColumn: b.endColumn }));\n const gone = has.filter(b => !want.some(w => canon(w) === canon(b))), added = want.filter(w => !has.some(b => canon(w) === canon(b)));\n if (gone.length) run('sheet.mutation.remove-worksheet-merge', { subUnitId: sid, ranges: gone });\n if (added.length) run('sheet.mutation.add-worksheet-merge', { subUnitId: sid, ranges: added });\n };\n\n const notesTo = (sid: string) => {\n const want = notesOf(sheets.get(sid)!, lines[sid]);\n const shown = api.getWorkbook(unit)!.getSheetBySheetId(sid)!.getNotes();\n for (const n of shown) if (!want.some(w => w.row === n.row && w.col === n.col)) run('sheet.mutation.remove-note', { sheetId: sid, noteId: n.id, row: n.row, col: n.col });\n for (const w of want) {\n const n = shown.find(x => x.row === w.row && x.col === w.col);\n if (!n || n.note !== w.note || n.width !== w.width || n.height !== w.height) run('sheet.mutation.update-note', { sheetId: sid, row: w.row, col: w.col, note: { note: w.note, width: w.width, height: w.height } });\n }\n };\n\n const shape = () => {\n const want = [...new Set(order.toArray())].filter(sid => sheets.has(sid));\n for (const sheet of wb.getSheets()) {\n const sid = sheet.getSheetId();\n if (want.includes(sid)) continue;\n if (wb.getActiveSheet().getSheetId() === sid) {\n const other = want.find(x => wb.getSheetBySheetId(x));\n if (other) api.syncExecuteCommand('sheet.operation.set-worksheet-active', { unitId: unit, subUnitId: other });\n }\n run('sheet.mutation.remove-sheet', { subUnitId: sid });\n delete lines[sid];\n at.delete(sid);\n }\n want.forEach((sid, i) => {\n if (wb.getSheetBySheetId(sid)) return;\n const { rows, cols } = pieces(sheets.get(sid)!);\n lines[sid] = { rows: rows.toArray(), cols: cols.toArray() };\n run('sheet.mutation.insert-sheet', { index: Math.min(i, wb.getSheets().length), sheet: mergeWorksheetSnapshotWithDefault(sheetOf(doc, sid, lines[sid])), styles: styles.toJSON() });\n notesTo(sid);\n });\n want.forEach((sid, i) => {\n const now = wb.getSheetOrders().indexOf(sid);\n if (now >= 0 && now !== i) run('sheet.mutation.set-worksheet-order', { subUnitId: sid, fromOrder: now, toOrder: i });\n });\n };\n\n const move = (sid: string, delta: Touch['rows'], row: boolean) => {\n const added = new Set<string>();\n if (!delta) return added;\n const list = row ? lines[sid].rows : lines[sid].cols;\n let i = 0;\n for (const d of delta) {\n if (d.retain) i += d.retain;\n if (d.delete) {\n const end = i + d.delete - 1;\n if (row) run('sheet.mutation.remove-rows', { subUnitId: sid, range: { startRow: i, endRow: end, startColumn: 0, endColumn: lines[sid].cols.length - 1, rangeType: 1 } });\n else run('sheet.mutation.remove-col', { subUnitId: sid, range: { startRow: 0, endRow: lines[sid].rows.length - 1, startColumn: i, endColumn: end, rangeType: 2 } });\n list.splice(i, d.delete);\n }\n if (d.insert) {\n const ids = d.insert as string[];\n const end = i + ids.length - 1;\n if (row) run('sheet.mutation.insert-row', { subUnitId: sid, range: { startRow: i, endRow: end, startColumn: 0, endColumn: lines[sid].cols.length - 1 } });\n else run('sheet.mutation.insert-col', { subUnitId: sid, range: { startRow: 0, endRow: lines[sid].rows.length - 1, startColumn: i, endColumn: end } });\n list.splice(i, 0, ...ids);\n ids.forEach(id => added.add(id));\n i += ids.length;\n }\n }\n at.delete(sid);\n return added;\n };\n\n const remote = (events: Y.YEvent<Y.AbstractType<unknown>>[], tr: Y.Transaction) => {\n if (tr.origin === me) return;\n const touched = new Map<string, Touch>();\n let reshaped = false;\n for (const e of events) {\n const t = e.target;\n if (t === sheets || t === order) {\n reshaped = true;\n continue;\n }\n const owner = t.parent === sheets ? t : t.parent?.parent === sheets ? t.parent : null;\n const sid = owner && [...sheets.entries()].find(([, m]) => m === owner)?.[0];\n if (!owner || !sid) continue;\n if (!touched.has(sid)) touched.set(sid, { rows: null, cols: null, cells: new Set(), rowData: new Set(), colData: new Set(), marks: false, props: new Set() });\n const s = touched.get(sid)!;\n const m = owner as Y.Map<unknown>;\n const keys = [...e.changes.keys.keys()];\n if (t === owner) keys.forEach(k => s.props.add(k));\n else if (t === m.get('rows')) s.rows = e.changes.delta;\n else if (t === m.get('cols')) s.cols = e.changes.delta;\n else if (t === m.get('cells')) keys.forEach(k => s.cells.add(k));\n else if (t === m.get('rowData')) keys.forEach(k => s.rowData.add(k));\n else if (t === m.get('colData')) keys.forEach(k => s.colData.add(k));\n else s.marks = true;\n }\n let structural = false;\n if (reshaped) {\n const before = wb.getSheets().length;\n shape();\n structural = before !== wb.getSheets().length;\n }\n for (const [sid, s] of touched) {\n if (!live(sid)) continue;\n const rows = move(sid, s.rows, true), cols = move(sid, s.cols, false);\n if (s.rows || s.cols) structural = true;\n for (const [name, id, key, empty] of setters) if (s.props.has(name)) {\n const v = sheets.get(sid)!.get(name) ?? empty;\n run(id, { subUnitId: sid, ...(key ? { [key]: v } : v as object) });\n }\n const keys = new Set(s.cells);\n if (rows.size || cols.size) for (const k of pieces(sheets.get(sid)!).cells.keys()) if (rows.has(k.split(':')[0]) || cols.has(k.split(':')[1])) keys.add(k);\n linesTo(sid, new Set([...s.rowData, ...rows]), true);\n linesTo(sid, new Set([...s.colData, ...cols]), false);\n cellsTo(sid, keys);\n if (s.marks || s.rows || s.cols) {\n mergesTo(sid);\n notesTo(sid);\n }\n }\n if (structural) injector.get(IUndoRedoService).clearUndoRedo(unit);\n };\n\n parts(doc).book.observeDeep(remote);\n return () => {\n open = false;\n refuse.dispose();\n local.dispose();\n lazy.dispose();\n parts(doc).book.unobserveDeep(remote);\n };\n}\n","import type { IRange, IWorksheetData } from '@univerjs/core';\nimport type { FUniver } from '@univerjs/core/facade';\nimport type { FWorkbook } from '@univerjs/sheets/facade';\nimport type { Rights } from '../types';\nimport { fresh, insert, move, resize, type SheetModel } from './model';\n\nexport const quiet = new Set(['sheet.mutation.set-worksheet-row-auto-height', 'sheet.mutation.mark-dirty-filter-change', 'sheet.mutation.re-calc-filter',\n 'sheet.mutation.toggle-note-popup', 'sheet.mutation.update-note-position', 'sheet.mutation.empty', 'sheet.mutation.set-zoom-ratio']);\n\nconst mutation = 2;\n\ntype Params = { unitId?: string; subUnitId?: string; range?: IRange; sourceRange?: IRange; targetRange?: IRange; rowCount?: number; columnCount?: number; sheet?: IWorksheetData };\n\nexport const allowed = (rights: Rights, id: string) => rights.edit || quiet.has(id) || (rights.comment && /\\.(update|remove|delete)-note$|note-popup$/.test(id));\n\nexport function track(api: FUniver, model: SheetModel, rights: Rights, onDirty: () => void) {\n const lines = model.lines;\n const ours = (p: unknown) => (p as Params | undefined)?.unitId === model.book.id;\n const before = api.addEvent(api.Event.BeforeCommandExecute, e => {\n if (e.type !== mutation || e.options?.onlyLocal || e.options?.fromCollab || !ours(e.params)) return;\n if (!allowed(rights, e.id)) e.cancel = true;\n });\n const after = api.addEvent(api.Event.CommandExecuted, e => {\n if (e.type !== mutation || e.options?.onlyLocal || e.options?.fromCollab || !ours(e.params)) return;\n const p = (e.params ?? {}) as Params;\n const l = p.subUnitId ? lines[p.subUnitId] : undefined;\n const span = (r: IRange | undefined, rows: boolean) => r ? rows ? r.endRow - r.startRow + 1 : r.endColumn - r.startColumn + 1 : 0;\n if (e.id === 'sheet.mutation.insert-sheet' && p.sheet) {\n lines[p.sheet.id] = { rows: Array.from({ length: p.sheet.rowCount ?? 1000 }, () => fresh('n')), cols: Array.from({ length: p.sheet.columnCount ?? 26 }, () => fresh('n')) };\n } else if (e.id === 'sheet.mutation.remove-sheet' && p.subUnitId) delete lines[p.subUnitId];\n else if (l) {\n if (e.id === 'sheet.mutation.insert-row') insert(l.rows, p.range!.startRow, span(p.range, true), 'n');\n else if (e.id === 'sheet.mutation.remove-rows') l.rows.splice(p.range!.startRow, span(p.range, true));\n else if (e.id === 'sheet.mutation.move-rows') move(l.rows, p.sourceRange!.startRow, span(p.sourceRange, true), p.targetRange!.startRow);\n else if (e.id === 'sheet.mutation.insert-col') insert(l.cols, p.range!.startColumn, span(p.range, false), 'n');\n else if (e.id === 'sheet.mutation.remove-col') l.cols.splice(p.range!.startColumn, span(p.range, false));\n else if (e.id === 'sheet.mutation.move-columns') move(l.cols, p.sourceRange!.startColumn, span(p.sourceRange, false), p.targetRange!.startColumn);\n else if (e.id === 'sheet.mutation.set-worksheet-row-count' && p.rowCount) resize(l.rows, p.rowCount, 'n');\n else if (e.id === 'sheet.mutation.set-worksheet-column-count' && p.columnCount) resize(l.cols, p.columnCount, 'n');\n }\n if (!quiet.has(e.id)) onDirty();\n });\n return () => { before.dispose(); after.dispose(); };\n}\n\nexport function snapshot(api: FUniver, model: SheetModel): SheetModel {\n const wb: FWorkbook = api.getActiveWorkbook()!;\n const book = wb.save();\n const lines = Object.fromEntries(book.sheetOrder.map(sid => {\n const l = model.lines[sid] ?? { rows: [], cols: [] };\n const sheet = book.sheets[sid];\n const rows = [...l.rows], cols = [...l.cols];\n resize(rows, sheet.rowCount ?? rows.length, 'n');\n resize(cols, sheet.columnCount ?? cols.length, 'n');\n return [sid, { rows, cols }];\n }));\n return { ...model, book, lines, active: wb.getActiveSheet().getSheetId() };\n}\n"],"mappings":"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","names":["span","move","m","host","api","range"]}