ooxml-excel-editor 1.1.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 (96) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/LICENSE +21 -0
  3. package/README.md +516 -0
  4. package/dist/chunks/plugin-overlay-Cfnn9EOi.js +7144 -0
  5. package/dist/chunks/worker-client.stub-BQVZfaLd.js +7 -0
  6. package/dist/components/ActionToolbar.vue.d.ts +9 -0
  7. package/dist/components/ExcelViewer.vue.d.ts +283 -0
  8. package/dist/components/ExportDialog.vue.d.ts +14 -0
  9. package/dist/components/FilterPopup.vue.d.ts +21 -0
  10. package/dist/components/FindBar.vue.d.ts +27 -0
  11. package/dist/components/SheetTabs.vue.d.ts +11 -0
  12. package/dist/components/ToolbarMenu.vue.d.ts +10 -0
  13. package/dist/components/ViewerToolbar.vue.d.ts +21 -0
  14. package/dist/components/export-types.d.ts +14 -0
  15. package/dist/components/toolbar-icons.d.ts +7 -0
  16. package/dist/components/toolbar-types.d.ts +18 -0
  17. package/dist/composables/useExcelDocument.d.ts +17 -0
  18. package/dist/composables/worker-client.d.ts +3 -0
  19. package/dist/composables/worker-client.stub.d.ts +3 -0
  20. package/dist/core/edit/commands.d.ts +94 -0
  21. package/dist/core/edit/default-editor.d.ts +2 -0
  22. package/dist/core/edit/edit-controller.d.ts +137 -0
  23. package/dist/core/edit/editor-context.d.ts +40 -0
  24. package/dist/core/edit/editor-host.d.ts +22 -0
  25. package/dist/core/edit/permissions.d.ts +3 -0
  26. package/dist/core/edit/types.d.ts +23 -0
  27. package/dist/core/export/composite.d.ts +18 -0
  28. package/dist/core/export/data-export.d.ts +9 -0
  29. package/dist/core/export/exporter.d.ts +64 -0
  30. package/dist/core/export/index.d.ts +9 -0
  31. package/dist/core/export/paginate.d.ts +36 -0
  32. package/dist/core/export/pdf.d.ts +28 -0
  33. package/dist/core/export/print.d.ts +3 -0
  34. package/dist/core/export/raster.d.ts +13 -0
  35. package/dist/core/export/types.d.ts +92 -0
  36. package/dist/core/export/vector-pdf.d.ts +42 -0
  37. package/dist/core/export/xlsx-writer.d.ts +15 -0
  38. package/dist/core/finalize.d.ts +10 -0
  39. package/dist/core/format/builtin-formats.d.ts +7 -0
  40. package/dist/core/format/color.d.ts +11 -0
  41. package/dist/core/format/date-serial.d.ts +16 -0
  42. package/dist/core/format/number-format.d.ts +5 -0
  43. package/dist/core/formula/engine.d.ts +27 -0
  44. package/dist/core/formula/hyperformula-adapter.d.ts +3 -0
  45. package/dist/core/formula/recalc.d.ts +9 -0
  46. package/dist/core/formula/refs.d.ts +21 -0
  47. package/dist/core/index.d.ts +52 -0
  48. package/dist/core/layout/autofit.d.ts +2 -0
  49. package/dist/core/layout/freeze.d.ts +11 -0
  50. package/dist/core/layout/grid-metrics.d.ts +37 -0
  51. package/dist/core/layout/merges.d.ts +14 -0
  52. package/dist/core/layout/units.d.ts +20 -0
  53. package/dist/core/layout/viewport.d.ts +29 -0
  54. package/dist/core/loader.d.ts +5 -0
  55. package/dist/core/model/clone.d.ts +9 -0
  56. package/dist/core/model/data-access.d.ts +30 -0
  57. package/dist/core/model/mutations.d.ts +46 -0
  58. package/dist/core/model/snapshot.d.ts +14 -0
  59. package/dist/core/model/structure.d.ts +26 -0
  60. package/dist/core/model/types.d.ts +289 -0
  61. package/dist/core/overlay/anchor.d.ts +9 -0
  62. package/dist/core/overlay/chart-mapper.d.ts +3 -0
  63. package/dist/core/overlay/echarts-loader.d.ts +3 -0
  64. package/dist/core/parse.worker.d.ts +14 -0
  65. package/dist/core/parser/chart-parser.d.ts +3 -0
  66. package/dist/core/parser/drawing-parser.d.ts +3 -0
  67. package/dist/core/parser/exceljs-adapter.d.ts +8 -0
  68. package/dist/core/parser/index.d.ts +3 -0
  69. package/dist/core/parser/page-break-parser.d.ts +3 -0
  70. package/dist/core/parser/raw-xml.d.ts +15 -0
  71. package/dist/core/parser/sparkline-parser.d.ts +3 -0
  72. package/dist/core/parser/theme.d.ts +3 -0
  73. package/dist/core/plugin.d.ts +180 -0
  74. package/dist/core/progress.d.ts +7 -0
  75. package/dist/core/render/autofilter.d.ts +14 -0
  76. package/dist/core/render/borders.d.ts +13 -0
  77. package/dist/core/render/canvas-renderer.d.ts +225 -0
  78. package/dist/core/render/conditional.d.ts +25 -0
  79. package/dist/core/render/fills.d.ts +2 -0
  80. package/dist/core/render/text.d.ts +20 -0
  81. package/dist/core/render/theme.d.ts +19 -0
  82. package/dist/core/viewer/controller.d.ts +339 -0
  83. package/dist/core/viewer/overlay-manager.d.ts +27 -0
  84. package/dist/core/viewer/plugin-overlay.d.ts +8 -0
  85. package/dist/core.d.ts +2 -0
  86. package/dist/core.js +74 -0
  87. package/dist/demo-shared/demo-editor.d.ts +2 -0
  88. package/dist/index.d.ts +19 -0
  89. package/dist/index.js +1493 -0
  90. package/dist/react/ExcelViewer.d.ts +153 -0
  91. package/dist/react/index.d.ts +11 -0
  92. package/dist/react/use-excel-document.d.ts +17 -0
  93. package/dist/react.d.ts +2 -0
  94. package/dist/react.js +838 -0
  95. package/dist/style.css +1 -0
  96. package/package.json +117 -0
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ .rxl{display:flex;flex-direction:column;height:100%;width:100%;background:#fff;overflow:hidden}.rxl-toolbar{display:flex;align-items:center;gap:4px;flex:0 0 auto;height:34px;padding:0 8px;border-bottom:1px solid #e2e4e7;background:#fafafa}.rxl-toolbar button{height:24px;padding:0 10px;border:1px solid transparent;border-radius:4px;background:transparent;color:#333;font-size:13px;cursor:pointer}.rxl-toolbar button:hover:not(:disabled){background:#eceef0}.rxl-toolbar button.active{background:#d6e9d9;border-color:#21a366;color:#1b7a4d}.rxl-toolbar button:disabled{color:#bbb;cursor:default}.rxl-formula-bar{display:flex;align-items:center;height:28px;flex:0 0 auto;border-bottom:1px solid #e2e4e7;background:#fff;font-size:13px}.rxl-formula-bar .addr{width:72px;text-align:center;border-right:1px solid #e2e4e7;color:#444;font-weight:600;flex:0 0 auto}.rxl-formula-bar .fx{width:34px;text-align:center;color:#999;font-style:italic;flex:0 0 auto}.rxl-formula-bar .content{flex:1;padding:0 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#222;font-family:Consolas,Courier New,monospace}.rxl-render-area{position:relative;flex:1 1 auto;overflow:hidden;min-height:0}.rxl-canvas{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}.rxl-ov{position:absolute;z-index:2;overflow:hidden;pointer-events:none}.rxl-scroller{position:absolute;top:0;right:0;bottom:0;left:0;z-index:3;overflow:auto;cursor:cell;outline:none}.rxl-spacer{pointer-events:none}.rxl-ov-slot{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;overflow:hidden;pointer-events:none}.rxl-ov-slot>div>*{pointer-events:auto}.rxl-editor-slot{position:absolute;top:0;right:0;bottom:0;left:0;z-index:6;overflow:hidden;pointer-events:none}.rxl-editor-slot>*{pointer-events:auto}.rxl-tooltip{position:absolute;z-index:6;max-width:380px;padding:5px 9px;background:#2b2f33;color:#fff;font-size:12px;line-height:1.4;border-radius:4px;box-shadow:0 2px 8px #00000040;pointer-events:none;white-space:pre-wrap;word-break:break-all}.rxl-tooltip.comment{background:#fdfcdc;color:#333;border:1px solid #d9d27e;max-width:300px}.rxl-findbar{position:absolute;top:8px;right:16px;z-index:7;display:flex;align-items:center;gap:6px;padding:6px 8px;background:#fff;border:1px solid #d0d3d6;border-radius:6px;box-shadow:0 2px 10px #00000026}.rxl-findbar input{height:24px;border:1px solid #d0d3d6;border-radius:4px;padding:0 6px;font-size:13px}.rxl-findbar .count{font-size:12px;color:#888;min-width:46px;text-align:center}.rxl-filterpop{position:absolute;z-index:8;width:220px;max-height:300px;display:flex;flex-direction:column;background:#fff;border:1px solid #c8ccd0;border-radius:6px;box-shadow:0 4px 16px #0000002e;font-size:13px}.rxl-filterpop .sort{display:flex;gap:6px;padding:8px 8px 0}.rxl-filterpop .sort button{flex:1;height:26px;border:1px solid #d0d3d6;border-radius:4px;background:#fff;cursor:pointer;font-size:12px}.rxl-filterpop .sort button.on{background:#d6e9d9;border-color:#21a366;color:#1b7a4d;font-weight:600}.rxl-filterpop .list{overflow:auto;padding:6px 8px}.rxl-filterpop label{display:flex;align-items:center;gap:6px;padding:2px 0}.rxl-filterpop .foot{display:flex;gap:8px;justify-content:flex-end;padding:6px 8px;border-top:1px solid #eceef0}.rxl-status-bar{display:flex;align-items:center;gap:16px;height:24px;flex:0 0 auto;padding:0 12px;border-top:1px solid #e2e4e7;background:#fbfbfb;font-size:12px;color:#555}.rxl-status-bar .grow{flex:1}.rxl-tabs{display:flex;align-items:center;gap:2px;height:30px;flex:0 0 auto;padding:0 8px;border-top:1px solid #e2e4e7;background:#f3f4f6;overflow-x:auto}.rxl-tabs button{height:24px;padding:0 12px;border:1px solid transparent;border-bottom:none;border-radius:4px 4px 0 0;background:transparent;font-size:13px;cursor:pointer;white-space:nowrap}.rxl-tabs button.active{background:#fff;border-color:#d6d8da;font-weight:600}.rxl-state{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;z-index:5;background:#fff;color:#888;font-size:14px}.rxl-state.error{color:#c0392b}.toolbar[data-v-0495df21]{display:flex;align-items:center;gap:12px;height:36px;padding:0 12px;background:#fbfbfb;border-bottom:1px solid #e2e4e7;font-size:13px;color:#444;flex:0 0 auto}.file[data-v-0495df21]{font-weight:600;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.meta[data-v-0495df21]{color:#888}.spacer[data-v-0495df21]{flex:1}.export-wrap[data-v-0495df21]{position:relative}.export-btn[data-v-0495df21]{height:24px;padding:0 10px;border:1px solid #d0d3d6;background:#fff;border-radius:4px;cursor:pointer;font-size:13px;color:#444;display:flex;align-items:center;gap:4px}.export-btn[data-v-0495df21]:hover{background:#f0f2f4}.export-btn .caret[data-v-0495df21]{font-size:10px;color:#888}.menu[data-v-0495df21]{position:absolute;right:0;top:28px;z-index:20;min-width:160px;background:#fff;border:1px solid #d8dbde;border-radius:6px;box-shadow:0 4px 16px #00000024;padding:4px;display:flex;flex-direction:column}.menu button[data-v-0495df21]{text-align:left;padding:7px 10px;border:none;background:none;border-radius:4px;cursor:pointer;font-size:13px;color:#333;white-space:nowrap}.menu button[data-v-0495df21]:hover{background:#f0f4ff}.menu .sep[data-v-0495df21]{height:1px;background:#eef0f2;margin:4px 2px}.zoom[data-v-0495df21]{display:flex;align-items:center;gap:4px}.zoom button[data-v-0495df21]{width:24px;height:24px;border:1px solid #d0d3d6;background:#fff;border-radius:4px;cursor:pointer;font-size:15px;line-height:1}.zoom button[data-v-0495df21]:hover{background:#f0f2f4}.zoom select[data-v-0495df21]{height:24px;border:1px solid #d0d3d6;border-radius:4px;background:#fff}.sheet-tabs[data-v-431b6f9c]{display:flex;align-items:stretch;height:30px;background:#f3f4f6;border-top:1px solid #d8dadd;overflow-x:auto;flex:0 0 auto}.tab[data-v-431b6f9c]{border:none;background:transparent;border-right:1px solid #e0e2e5;padding:0 16px;font-size:12.5px;color:#555;cursor:pointer;white-space:nowrap;max-width:200px;overflow:hidden;text-overflow:ellipsis}.tab[data-v-431b6f9c]:hover{background:#e9ebee}.tab.active[data-v-431b6f9c]{background:#fff;color:#166534;font-weight:600;box-shadow:inset 0 2px #21a366}.dlg-mask[data-v-544df24f]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:30;background:#00000052;display:flex;align-items:center;justify-content:center}.dlg[data-v-544df24f]{width:420px;max-width:92%;background:#fff;border-radius:10px;box-shadow:0 12px 40px #00000040;font-size:13px;color:#333;overflow:hidden}.dlg-head[data-v-544df24f]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;font-weight:600;border-bottom:1px solid #eef0f2}.dlg-head .x[data-v-544df24f]{border:none;background:none;font-size:20px;line-height:1;cursor:pointer;color:#999}.dlg-head .x[data-v-544df24f]:hover{color:#444}.dlg-body[data-v-544df24f]{padding:8px 16px 4px}.field[data-v-544df24f]{display:flex;align-items:flex-start;gap:12px;padding:9px 0;border-bottom:1px solid #f4f5f6}.field[data-v-544df24f]:last-child{border-bottom:none}.lbl[data-v-544df24f]{width:72px;flex:0 0 auto;color:#666;padding-top:3px}.opts[data-v-544df24f]{display:flex;flex-direction:column;gap:6px}.opts.inline[data-v-544df24f]{flex-direction:row;flex-wrap:wrap;align-items:center;gap:10px}.opts label[data-v-544df24f]{display:inline-flex;align-items:center;gap:5px;cursor:pointer}.opts label.disabled[data-v-544df24f]{color:#bbb;cursor:not-allowed}.hint[data-v-544df24f]{color:#99a;font-size:12px}select[data-v-544df24f]{height:26px;border:1px solid #d0d3d6;border-radius:4px;background:#fff;padding:0 6px}.dlg-foot[data-v-544df24f]{display:flex;align-items:center;gap:8px;padding:12px 16px;border-top:1px solid #eef0f2;background:#fafbfc}.dlg-foot .grow[data-v-544df24f]{flex:1}.dlg-foot button[data-v-544df24f]{height:30px;padding:0 14px;border:1px solid #d0d3d6;border-radius:5px;background:#fff;cursor:pointer;font-size:13px;color:#333}.dlg-foot button[data-v-544df24f]:hover{background:#f0f2f4}.dlg-foot button.ghost[data-v-544df24f]{border-color:transparent;color:#888}.dlg-foot button.primary[data-v-544df24f]{background:#21a366;border-color:#21a366;color:#fff}.dlg-foot button.primary[data-v-544df24f]:hover{background:#1c8f59}.find-bar[data-v-36abc020]{position:absolute;top:8px;right:16px;z-index:12;display:flex;align-items:center;gap:4px;padding:5px 7px;background:#fff;border:1px solid #d4d7da;border-radius:7px;box-shadow:0 3px 12px #00000029;font-size:13px}.q[data-v-36abc020]{width:160px;height:26px;border:1px solid #d0d3d6;border-radius:4px;padding:0 8px;outline:none}.q[data-v-36abc020]:focus{border-color:#1a73e8}.count[data-v-36abc020]{min-width:46px;text-align:center;color:#888;font-variant-numeric:tabular-nums}.count.none[data-v-36abc020]{color:#d23}.opt[data-v-36abc020],.nav[data-v-36abc020],.close[data-v-36abc020]{height:24px;min-width:24px;border:1px solid transparent;background:none;border-radius:4px;cursor:pointer;color:#555;font-size:13px;line-height:1}.opt.on[data-v-36abc020]{background:#e8f0fe;color:#1a73e8;border-color:#c5d9fb}.opt[data-v-36abc020]:hover,.nav[data-v-36abc020]:hover:not(:disabled),.close[data-v-36abc020]:hover{background:#f0f2f4}.nav[data-v-36abc020]:disabled{color:#ccc;cursor:default}.close[data-v-36abc020]{font-size:18px;color:#999}.filter-pop[data-v-4b0bc283]{position:absolute;z-index:14;width:220px;background:#fff;border:1px solid #cfd3d7;border-radius:7px;box-shadow:0 6px 22px #0003;padding:8px;font-size:13px;display:flex;flex-direction:column;gap:6px}.sort[data-v-4b0bc283]{display:flex;gap:6px}.sort button[data-v-4b0bc283]{flex:1;height:26px;border:1px solid #d0d3d6;border-radius:4px;background:#fff;cursor:pointer;font-size:12px;color:#444}.sort button[data-v-4b0bc283]:hover{background:#f0f2f4}.sort button.on[data-v-4b0bc283]{background:#d6e9d9;border-color:#21a366;color:#1b7a4d;font-weight:600}.search[data-v-4b0bc283]{height:26px;border:1px solid #d0d3d6;border-radius:4px;padding:0 8px;outline:none}.search[data-v-4b0bc283]:focus{border-color:#1a73e8}.all[data-v-4b0bc283]{display:flex;align-items:center;gap:6px;padding:2px;color:#444;font-weight:600;cursor:pointer}.list[data-v-4b0bc283]{max-height:220px;overflow:auto;border:1px solid #eceef0;border-radius:4px;padding:2px}.row[data-v-4b0bc283]{display:flex;align-items:center;gap:6px;padding:3px 4px;border-radius:3px;cursor:pointer}.row[data-v-4b0bc283]:hover{background:#f3f6fb}.val[data-v-4b0bc283]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty[data-v-4b0bc283]{color:#aaa;text-align:center;padding:10px}.foot[data-v-4b0bc283]{display:flex;align-items:center;gap:6px}.foot .grow[data-v-4b0bc283]{flex:1}.foot button[data-v-4b0bc283]{height:27px;padding:0 12px;border:1px solid #d0d3d6;border-radius:5px;background:#fff;cursor:pointer;font-size:13px}.foot button[data-v-4b0bc283]:hover{background:#f0f2f4}.foot button.primary[data-v-4b0bc283]{background:#21a366;border-color:#21a366;color:#fff}.foot button.primary[data-v-4b0bc283]:hover{background:#1c8f59}.foot button.link[data-v-4b0bc283]{border-color:transparent;color:#1a73e8;padding:0 4px}.tb-menu[data-v-322e2c67]{position:absolute;top:30px;left:0;z-index:20;min-width:160px;background:#fff;border:1px solid #d8dbde;border-radius:6px;box-shadow:0 4px 16px #00000024;padding:4px;display:flex;flex-direction:column}.mi[data-v-322e2c67]{display:flex;align-items:center;gap:8px;text-align:left;padding:7px 10px;border:none;background:none;border-radius:4px;cursor:pointer;font-size:13px;color:#333;white-space:nowrap}.mi[data-v-322e2c67]:hover:not(:disabled){background:#f0f4ff}.mi[data-v-322e2c67]:disabled{color:#bbb;cursor:default}.mi.active[data-v-322e2c67]{color:#1a73e8}.mi .ic[data-v-322e2c67]{display:inline-flex;width:16px}.mi .ic-e[data-v-322e2c67]{width:16px;text-align:center}.sep[data-v-322e2c67]{height:1px;background:#eef0f2;margin:4px 2px}.action-toolbar[data-v-0a4aa655]{position:relative;display:flex;align-items:center;gap:4px;height:34px;flex:0 0 auto;padding:0 10px;background:#fff;border-bottom:1px solid #e2e4e7;overflow:visible}.measure[data-v-0a4aa655]{position:absolute;left:0;top:0;visibility:hidden;pointer-events:none;height:0;overflow:hidden;display:flex;gap:4px}.dd[data-v-0a4aa655]{position:relative;display:inline-flex}.tool[data-v-0a4aa655]{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 9px;border:1px solid transparent;border-radius:5px;background:none;cursor:pointer;font-size:13px;color:#444;white-space:nowrap}.tool[data-v-0a4aa655]:hover:not(:disabled){background:#f0f2f4}.tool[data-v-0a4aa655]:disabled{color:#bbb;cursor:default}.tool.active[data-v-0a4aa655]{background:#e8f0fe;color:#1a73e8;border-color:#c5d9fb}.tool.open[data-v-0a4aa655]{background:#eef0f2}.tool .ic[data-v-0a4aa655]{display:inline-flex}.tool .ic-e[data-v-0a4aa655]{font-size:13px;line-height:1}.tool .caret[data-v-0a4aa655]{display:inline-flex;opacity:.6;margin-left:-2px}.tool .caret[data-v-0a4aa655] svg{width:12px;height:12px}.divider[data-v-0a4aa655]{width:1px;align-self:stretch;margin:6px 4px;background:#e2e4e7}.excel-viewer[data-v-3a1333cc]{display:flex;flex-direction:column;height:100%;width:100%;background:#fff;overflow:hidden}.render-area[data-v-3a1333cc]{position:relative;flex:1 1 auto;overflow:hidden;min-height:0}.grid-canvas[data-v-3a1333cc]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}.ov[data-v-3a1333cc]{position:absolute;z-index:2;overflow:hidden;pointer-events:none}.ov-slot[data-v-3a1333cc]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;overflow:hidden;pointer-events:none}.ov-slot[data-v-3a1333cc] *{pointer-events:auto}.editor-slot[data-v-3a1333cc]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:6;overflow:hidden;pointer-events:none}.editor-slot[data-v-3a1333cc] *{pointer-events:auto}.scroller[data-v-3a1333cc]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:3;overflow:auto;cursor:cell;outline:none}.spacer[data-v-3a1333cc]{pointer-events:none}.formula-bar[data-v-3a1333cc]{display:flex;align-items:center;height:28px;flex:0 0 auto;border-bottom:1px solid #e2e4e7;background:#fff;font-size:13px}.formula-bar .addr[data-v-3a1333cc]{width:72px;text-align:center;border-right:1px solid #e2e4e7;color:#444;font-weight:600;flex:0 0 auto}.formula-bar .fx[data-v-3a1333cc]{width:34px;text-align:center;color:#999;font-style:italic;flex:0 0 auto}.formula-bar .content[data-v-3a1333cc]{flex:1;padding:0 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#222;font-family:Consolas,Courier New,monospace}.status-bar[data-v-3a1333cc]{display:flex;align-items:center;gap:16px;height:24px;flex:0 0 auto;padding:0 12px;border-top:1px solid #e2e4e7;background:#fbfbfb;font-size:12px;color:#555}.status-bar .grow[data-v-3a1333cc]{flex:1}.status-bar .sel[data-v-3a1333cc]{color:#888}.cell-tooltip[data-v-3a1333cc]{position:absolute;z-index:6;max-width:380px;padding:5px 9px;background:#2b2f33;color:#fff;font-size:12px;line-height:1.4;border-radius:4px;box-shadow:0 2px 8px #00000040;pointer-events:none;white-space:pre-wrap;word-break:break-all}.cell-tooltip.comment[data-v-3a1333cc]{background:#fdfcdc;color:#333;border:1px solid #d9d27e;box-shadow:0 2px 10px #0000002e;max-width:300px}.state[data-v-3a1333cc]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;z-index:5;background:#fff;color:#888;font-size:14px}.state.error[data-v-3a1333cc]{color:#c0392b}.state.hint[data-v-3a1333cc]{color:#aaa}.loader[data-v-3a1333cc]{width:260px;max-width:60%}.loader-label[data-v-3a1333cc]{font-size:13px;color:#555;margin-bottom:8px;text-align:center}.loader-track[data-v-3a1333cc]{height:6px;border-radius:3px;background:#eceef0;overflow:hidden}.loader-fill[data-v-3a1333cc]{height:100%;background:#21a366;border-radius:3px;transition:width .15s ease}.loader-fill.indeterminate[data-v-3a1333cc]{width:40%;transition:none;animation:loader-pulse-3a1333cc 1.1s ease-in-out infinite}@keyframes loader-pulse-3a1333cc{0%{margin-left:-40%}to{margin-left:100%}}
package/package.json ADDED
@@ -0,0 +1,117 @@
1
+ {
2
+ "name": "ooxml-excel-editor",
3
+ "version": "1.1.0",
4
+ "description": "High-fidelity OOXML (.xlsx) preview & editor — canvas renderer, framework-agnostic core with Vue 3 and React shells. Read-only by default; opt-in editing with undo/redo, formula recalc, and export back to .xlsx/JSON/CSV.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "keywords": [
8
+ "vue",
9
+ "vue3",
10
+ "react",
11
+ "excel",
12
+ "xlsx",
13
+ "ooxml",
14
+ "spreadsheet",
15
+ "preview",
16
+ "viewer",
17
+ "editor",
18
+ "edit",
19
+ "canvas",
20
+ "exceljs"
21
+ ],
22
+ "engines": {
23
+ "node": ">=18"
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "CHANGELOG.md"
28
+ ],
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "main": "./dist/index.js",
33
+ "module": "./dist/index.js",
34
+ "types": "./dist/index.d.ts",
35
+ "exports": {
36
+ ".": {
37
+ "types": "./dist/index.d.ts",
38
+ "import": "./dist/index.js"
39
+ },
40
+ "./react": {
41
+ "types": "./dist/react.d.ts",
42
+ "import": "./dist/react.js"
43
+ },
44
+ "./core": {
45
+ "types": "./dist/core.d.ts",
46
+ "import": "./dist/core.js"
47
+ },
48
+ "./style.css": "./dist/style.css"
49
+ },
50
+ "sideEffects": [
51
+ "**/*.css"
52
+ ],
53
+ "scripts": {
54
+ "dev": "vite",
55
+ "build": "vue-tsc --noEmit && vite build",
56
+ "build:demo": "vite build --mode demo",
57
+ "preview": "vite preview",
58
+ "test": "vitest run",
59
+ "test:watch": "vitest",
60
+ "test:e2e": "playwright test",
61
+ "typecheck": "vue-tsc --noEmit",
62
+ "prepublishOnly": "npm run build"
63
+ },
64
+ "peerDependencies": {
65
+ "echarts": "^5.5.0",
66
+ "exceljs": "^4.4.0",
67
+ "hyperformula": "^3.0.0",
68
+ "jspdf": "^2.5.0 || ^3.0.0 || ^4.0.0",
69
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
70
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
71
+ "vue": "^3.4.0"
72
+ },
73
+ "peerDependenciesMeta": {
74
+ "echarts": {
75
+ "optional": true
76
+ },
77
+ "hyperformula": {
78
+ "optional": true
79
+ },
80
+ "jspdf": {
81
+ "optional": true
82
+ },
83
+ "vue": {
84
+ "optional": true
85
+ },
86
+ "react": {
87
+ "optional": true
88
+ },
89
+ "react-dom": {
90
+ "optional": true
91
+ }
92
+ },
93
+ "dependencies": {
94
+ "fast-xml-parser": "^4.5.0",
95
+ "fflate": "^0.8.2"
96
+ },
97
+ "devDependencies": {
98
+ "@playwright/test": "1.58.0",
99
+ "@types/node": "^22.19.19",
100
+ "@types/react": "^18.3.30",
101
+ "@types/react-dom": "^18.3.7",
102
+ "@vitejs/plugin-react": "^4.7.0",
103
+ "@vitejs/plugin-vue": "^5.2.1",
104
+ "echarts": "^5.5.1",
105
+ "exceljs": "^4.4.0",
106
+ "hyperformula": "^3.3.0",
107
+ "jspdf": "^4.2.1",
108
+ "react": "^18.3.1",
109
+ "react-dom": "^18.3.1",
110
+ "typescript": "^5.7.2",
111
+ "vite": "^6.0.5",
112
+ "vite-plugin-dts": "^4.5.4",
113
+ "vitest": "^2.1.8",
114
+ "vue": "^3.5.13",
115
+ "vue-tsc": "^2.2.0"
116
+ }
117
+ }