@gridsheet/react-core 1.4.0 → 2.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/components/Cell.d.ts +3 -3
- package/dist/components/Cell.d.ts.map +1 -1
- package/dist/components/ContextMenu.d.ts +19 -2
- package/dist/components/ContextMenu.d.ts.map +1 -1
- package/dist/components/Editor.d.ts +4 -4
- package/dist/components/Editor.d.ts.map +1 -1
- package/dist/components/Emitter.d.ts +2 -2
- package/dist/components/Emitter.d.ts.map +1 -1
- package/dist/components/Fixed.d.ts +3 -3
- package/dist/components/Fixed.d.ts.map +1 -1
- package/dist/components/FormulaBar.d.ts +1 -2
- package/dist/components/FormulaBar.d.ts.map +1 -1
- package/dist/components/GridSheet.d.ts +1 -2
- package/dist/components/GridSheet.d.ts.map +1 -1
- package/dist/components/HeaderCellLeft.d.ts +2 -2
- package/dist/components/HeaderCellLeft.d.ts.map +1 -1
- package/dist/components/HeaderCellTop.d.ts +2 -2
- package/dist/components/HeaderCellTop.d.ts.map +1 -1
- package/dist/components/PluginBase.d.ts +4 -4
- package/dist/components/PluginBase.d.ts.map +1 -1
- package/dist/components/Resizer.d.ts +1 -2
- package/dist/components/Resizer.d.ts.map +1 -1
- package/dist/components/ScrollHandle.d.ts +9 -0
- package/dist/components/ScrollHandle.d.ts.map +1 -0
- package/dist/components/SearchBar.d.ts +1 -2
- package/dist/components/SearchBar.d.ts.map +1 -1
- package/dist/components/StoreObserver.d.ts +11 -0
- package/dist/components/StoreObserver.d.ts.map +1 -0
- package/dist/components/Tabular.d.ts +3 -3
- package/dist/components/Tabular.d.ts.map +1 -1
- package/dist/components/hooks.d.ts +2 -0
- package/dist/components/hooks.d.ts.map +1 -1
- package/dist/components/svg/AddIcon.d.ts +1 -2
- package/dist/components/svg/AddIcon.d.ts.map +1 -1
- package/dist/components/svg/Base.d.ts +4 -4
- package/dist/components/svg/Base.d.ts.map +1 -1
- package/dist/components/svg/CloseIcon.d.ts +1 -2
- package/dist/components/svg/CloseIcon.d.ts.map +1 -1
- package/dist/components/svg/SearchIcon.d.ts +1 -2
- package/dist/components/svg/SearchIcon.d.ts.map +1 -1
- package/dist/constants.d.ts +3 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/formula/evaluator.d.ts +42 -18
- package/dist/formula/evaluator.d.ts.map +1 -1
- package/dist/formula/functions/__base.d.ts.map +1 -1
- package/dist/formula/functions/__utils.d.ts +5 -2
- package/dist/formula/functions/__utils.d.ts.map +1 -1
- package/dist/formula/functions/abs.d.ts.map +1 -1
- package/dist/formula/functions/acos.d.ts.map +1 -1
- package/dist/formula/functions/add.d.ts +1 -1
- package/dist/formula/functions/add.d.ts.map +1 -1
- package/dist/formula/functions/and.d.ts.map +1 -1
- package/dist/formula/functions/asin.d.ts.map +1 -1
- package/dist/formula/functions/atan.d.ts.map +1 -1
- package/dist/formula/functions/atan2.d.ts.map +1 -1
- package/dist/formula/functions/average.d.ts.map +1 -1
- package/dist/formula/functions/col.d.ts.map +1 -1
- package/dist/formula/functions/concat.d.ts.map +1 -1
- package/dist/formula/functions/concatenate.d.ts.map +1 -1
- package/dist/formula/functions/cos.d.ts.map +1 -1
- package/dist/formula/functions/count.d.ts.map +1 -1
- package/dist/formula/functions/counta.d.ts.map +1 -1
- package/dist/formula/functions/countif.d.ts.map +1 -1
- package/dist/formula/functions/divide.d.ts.map +1 -1
- package/dist/formula/functions/eq.d.ts.map +1 -1
- package/dist/formula/functions/exp.d.ts.map +1 -1
- package/dist/formula/functions/gt.d.ts.map +1 -1
- package/dist/formula/functions/gte.d.ts.map +1 -1
- package/dist/formula/functions/hlookup.d.ts.map +1 -1
- package/dist/formula/functions/if.d.ts.map +1 -1
- package/dist/formula/functions/iferror.d.ts.map +1 -1
- package/dist/formula/functions/index.d.ts +18 -0
- package/dist/formula/functions/index.d.ts.map +1 -0
- package/dist/formula/functions/len.d.ts.map +1 -1
- package/dist/formula/functions/lenb.d.ts.map +1 -1
- package/dist/formula/functions/ln.d.ts.map +1 -1
- package/dist/formula/functions/log.d.ts.map +1 -1
- package/dist/formula/functions/log10.d.ts.map +1 -1
- package/dist/formula/functions/lt.d.ts.map +1 -1
- package/dist/formula/functions/lte.d.ts.map +1 -1
- package/dist/formula/functions/match.d.ts +18 -0
- package/dist/formula/functions/match.d.ts.map +1 -0
- package/dist/formula/functions/match.test.d.ts +2 -0
- package/dist/formula/functions/match.test.d.ts.map +1 -0
- package/dist/formula/functions/max.d.ts.map +1 -1
- package/dist/formula/functions/min.d.ts.map +1 -1
- package/dist/formula/functions/minus.d.ts.map +1 -1
- package/dist/formula/functions/mod.d.ts.map +1 -1
- package/dist/formula/functions/multiply.d.ts.map +1 -1
- package/dist/formula/functions/ne.d.ts.map +1 -1
- package/dist/formula/functions/not.d.ts.map +1 -1
- package/dist/formula/functions/now.d.ts.map +1 -1
- package/dist/formula/functions/or.d.ts.map +1 -1
- package/dist/formula/functions/pi.d.ts.map +1 -1
- package/dist/formula/functions/power.d.ts.map +1 -1
- package/dist/formula/functions/product.d.ts.map +1 -1
- package/dist/formula/functions/radians.d.ts.map +1 -1
- package/dist/formula/functions/rand.d.ts.map +1 -1
- package/dist/formula/functions/round.d.ts.map +1 -1
- package/dist/formula/functions/rounddown.d.ts.map +1 -1
- package/dist/formula/functions/roundup.d.ts.map +1 -1
- package/dist/formula/functions/row.d.ts.map +1 -1
- package/dist/formula/functions/sin.d.ts.map +1 -1
- package/dist/formula/functions/sqrt.d.ts.map +1 -1
- package/dist/formula/functions/sum.d.ts.map +1 -1
- package/dist/formula/functions/sumif.d.ts.map +1 -1
- package/dist/formula/functions/tan.d.ts.map +1 -1
- package/dist/formula/functions/uminus.d.ts.map +1 -1
- package/dist/formula/functions/vlookup.d.ts.map +1 -1
- package/dist/formula/mapping.d.ts.map +1 -1
- package/dist/formula/solver.d.ts +10 -7
- package/dist/formula/solver.d.ts.map +1 -1
- package/dist/index.d.ts +15 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10330 -20
- package/dist/index.js.map +1 -1
- package/dist/lib/autofill.d.ts +2 -2
- package/dist/lib/autofill.d.ts.map +1 -1
- package/dist/lib/clipboard.d.ts.map +1 -1
- package/dist/lib/converters.d.ts +3 -4
- package/dist/lib/converters.d.ts.map +1 -1
- package/dist/lib/events.d.ts +6 -0
- package/dist/lib/events.d.ts.map +1 -0
- package/dist/lib/hub.d.ts +72 -0
- package/dist/lib/hub.d.ts.map +1 -0
- package/dist/lib/input.d.ts +12 -2
- package/dist/lib/input.d.ts.map +1 -1
- package/dist/lib/operation.d.ts +27 -0
- package/dist/lib/operation.d.ts.map +1 -0
- package/dist/lib/palette.d.ts +1 -1
- package/dist/lib/palette.d.ts.map +1 -1
- package/dist/lib/paste.d.ts +4 -0
- package/dist/lib/paste.d.ts.map +1 -0
- package/dist/lib/reference.d.ts +13 -0
- package/dist/lib/reference.d.ts.map +1 -0
- package/dist/lib/sheet.d.ts +3 -0
- package/dist/lib/sheet.d.ts.map +1 -0
- package/dist/lib/structs.d.ts +12 -3
- package/dist/lib/structs.d.ts.map +1 -1
- package/dist/lib/table.d.ts +152 -91
- package/dist/lib/table.d.ts.map +1 -1
- package/dist/lib/time.d.ts +1 -0
- package/dist/lib/time.d.ts.map +1 -1
- package/dist/lib/virtualization.d.ts +3 -2
- package/dist/lib/virtualization.d.ts.map +1 -1
- package/dist/parsers/core.d.ts +2 -0
- package/dist/parsers/core.d.ts.map +1 -1
- package/dist/policy/core.d.ts +47 -0
- package/dist/policy/core.d.ts.map +1 -0
- package/dist/renderers/checkbox.d.ts +2 -2
- package/dist/renderers/checkbox.d.ts.map +1 -1
- package/dist/renderers/core.d.ts +39 -25
- package/dist/renderers/core.d.ts.map +1 -1
- package/dist/renderers/thousand_separator.d.ts +2 -3
- package/dist/renderers/thousand_separator.d.ts.map +1 -1
- package/dist/store/actions.d.ts +141 -49
- package/dist/store/actions.d.ts.map +1 -1
- package/dist/store/dispatchers.d.ts +13 -0
- package/dist/store/dispatchers.d.ts.map +1 -0
- package/dist/store/helpers.d.ts +1 -0
- package/dist/store/helpers.d.ts.map +1 -1
- package/dist/store/index.d.ts +1 -2
- package/dist/store/index.d.ts.map +1 -1
- package/dist/styles/embedder.d.ts.map +1 -1
- package/dist/styles/minified.d.ts +2 -2
- package/dist/styles/minified.d.ts.map +1 -1
- package/dist/styles/utils.d.ts +52 -0
- package/dist/styles/utils.d.ts.map +1 -0
- package/dist/types.d.ts +112 -55
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/package.json +7 -10
- package/dist/_virtual/_commonjsHelpers.js +0 -7
- package/dist/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/_virtual/dayjs.min.js +0 -8
- package/dist/_virtual/dayjs.min.js.map +0 -1
- package/dist/_virtual/dayjs.min2.js +0 -5
- package/dist/_virtual/dayjs.min2.js.map +0 -1
- package/dist/_virtual/timezone.js +0 -8
- package/dist/_virtual/timezone.js.map +0 -1
- package/dist/_virtual/timezone2.js +0 -5
- package/dist/_virtual/timezone2.js.map +0 -1
- package/dist/_virtual/utc.js +0 -8
- package/dist/_virtual/utc.js.map +0 -1
- package/dist/_virtual/utc2.js +0 -5
- package/dist/_virtual/utc2.js.map +0 -1
- package/dist/components/Cell.js +0 -234
- package/dist/components/Cell.js.map +0 -1
- package/dist/components/ContextMenu.js +0 -297
- package/dist/components/ContextMenu.js.map +0 -1
- package/dist/components/Editor.js +0 -464
- package/dist/components/Editor.js.map +0 -1
- package/dist/components/Emitter.js +0 -26
- package/dist/components/Emitter.js.map +0 -1
- package/dist/components/Fixed.js +0 -17
- package/dist/components/Fixed.js.map +0 -1
- package/dist/components/FormulaBar.js +0 -150
- package/dist/components/FormulaBar.js.map +0 -1
- package/dist/components/GridSheet.js +0 -247
- package/dist/components/GridSheet.js.map +0 -1
- package/dist/components/HeaderCellLeft.js +0 -131
- package/dist/components/HeaderCellLeft.js.map +0 -1
- package/dist/components/HeaderCellTop.js +0 -132
- package/dist/components/HeaderCellTop.js.map +0 -1
- package/dist/components/PluginBase.js +0 -35
- package/dist/components/PluginBase.js.map +0 -1
- package/dist/components/Resizer.js +0 -98
- package/dist/components/Resizer.js.map +0 -1
- package/dist/components/SearchBar.js +0 -108
- package/dist/components/SearchBar.js.map +0 -1
- package/dist/components/SheetProvider.d.ts +0 -30
- package/dist/components/SheetProvider.d.ts.map +0 -1
- package/dist/components/SheetProvider.js +0 -59
- package/dist/components/SheetProvider.js.map +0 -1
- package/dist/components/StoreInitializer.d.ts +0 -4
- package/dist/components/StoreInitializer.d.ts.map +0 -1
- package/dist/components/StoreInitializer.js +0 -84
- package/dist/components/StoreInitializer.js.map +0 -1
- package/dist/components/Tabular.js +0 -317
- package/dist/components/Tabular.js.map +0 -1
- package/dist/components/Toggle.d.ts +0 -12
- package/dist/components/Toggle.d.ts.map +0 -1
- package/dist/components/hooks.js +0 -15
- package/dist/components/hooks.js.map +0 -1
- package/dist/components/svg/Base.js +0 -24
- package/dist/components/svg/Base.js.map +0 -1
- package/dist/components/svg/CloseIcon.js +0 -13
- package/dist/components/svg/CloseIcon.js.map +0 -1
- package/dist/components/svg/SearchIcon.js +0 -13
- package/dist/components/svg/SearchIcon.js.map +0 -1
- package/dist/constants.js +0 -43
- package/dist/constants.js.map +0 -1
- package/dist/formula/evaluator.js +0 -679
- package/dist/formula/evaluator.js.map +0 -1
- package/dist/formula/functions/__base.js +0 -20
- package/dist/formula/functions/__base.js.map +0 -1
- package/dist/formula/functions/__utils.js +0 -145
- package/dist/formula/functions/__utils.js.map +0 -1
- package/dist/formula/functions/abs.js +0 -24
- package/dist/formula/functions/abs.js.map +0 -1
- package/dist/formula/functions/abs.spec.d.ts +0 -2
- package/dist/formula/functions/abs.spec.d.ts.map +0 -1
- package/dist/formula/functions/acos.js +0 -32
- package/dist/formula/functions/acos.js.map +0 -1
- package/dist/formula/functions/add.js +0 -57
- package/dist/formula/functions/add.js.map +0 -1
- package/dist/formula/functions/and.js +0 -28
- package/dist/formula/functions/and.js.map +0 -1
- package/dist/formula/functions/asin.js +0 -32
- package/dist/formula/functions/asin.js.map +0 -1
- package/dist/formula/functions/atan.js +0 -29
- package/dist/formula/functions/atan.js.map +0 -1
- package/dist/formula/functions/atan2.js +0 -35
- package/dist/formula/functions/atan2.js.map +0 -1
- package/dist/formula/functions/average.js +0 -44
- package/dist/formula/functions/average.js.map +0 -1
- package/dist/formula/functions/col.js +0 -34
- package/dist/formula/functions/col.js.map +0 -1
- package/dist/formula/functions/col.spec.d.ts +0 -2
- package/dist/formula/functions/col.spec.d.ts.map +0 -1
- package/dist/formula/functions/concat.js +0 -27
- package/dist/formula/functions/concat.js.map +0 -1
- package/dist/formula/functions/concatenate.js +0 -28
- package/dist/formula/functions/concatenate.js.map +0 -1
- package/dist/formula/functions/cos.js +0 -29
- package/dist/formula/functions/cos.js.map +0 -1
- package/dist/formula/functions/count.js +0 -38
- package/dist/formula/functions/count.js.map +0 -1
- package/dist/formula/functions/counta.js +0 -38
- package/dist/formula/functions/counta.js.map +0 -1
- package/dist/formula/functions/countif.js +0 -32
- package/dist/formula/functions/countif.js.map +0 -1
- package/dist/formula/functions/countif.spec.d.ts +0 -2
- package/dist/formula/functions/countif.spec.d.ts.map +0 -1
- package/dist/formula/functions/divide.js +0 -33
- package/dist/formula/functions/divide.js.map +0 -1
- package/dist/formula/functions/eq.js +0 -29
- package/dist/formula/functions/eq.js.map +0 -1
- package/dist/formula/functions/eq.spec.d.ts +0 -2
- package/dist/formula/functions/eq.spec.d.ts.map +0 -1
- package/dist/formula/functions/exp.js +0 -29
- package/dist/formula/functions/exp.js.map +0 -1
- package/dist/formula/functions/gt.js +0 -29
- package/dist/formula/functions/gt.js.map +0 -1
- package/dist/formula/functions/gte.js +0 -29
- package/dist/formula/functions/gte.js.map +0 -1
- package/dist/formula/functions/hlookup.js +0 -75
- package/dist/formula/functions/hlookup.js.map +0 -1
- package/dist/formula/functions/if.js +0 -39
- package/dist/formula/functions/if.js.map +0 -1
- package/dist/formula/functions/iferror.js +0 -45
- package/dist/formula/functions/iferror.js.map +0 -1
- package/dist/formula/functions/iferror.spec.d.ts +0 -2
- package/dist/formula/functions/iferror.spec.d.ts.map +0 -1
- package/dist/formula/functions/len.js +0 -29
- package/dist/formula/functions/len.js.map +0 -1
- package/dist/formula/functions/lenb.js +0 -29
- package/dist/formula/functions/lenb.js.map +0 -1
- package/dist/formula/functions/ln.js +0 -32
- package/dist/formula/functions/ln.js.map +0 -1
- package/dist/formula/functions/log.js +0 -36
- package/dist/formula/functions/log.js.map +0 -1
- package/dist/formula/functions/log10.js +0 -32
- package/dist/formula/functions/log10.js.map +0 -1
- package/dist/formula/functions/lt.js +0 -29
- package/dist/formula/functions/lt.js.map +0 -1
- package/dist/formula/functions/lte.js +0 -29
- package/dist/formula/functions/lte.js.map +0 -1
- package/dist/formula/functions/max.js +0 -47
- package/dist/formula/functions/max.js.map +0 -1
- package/dist/formula/functions/min.js +0 -47
- package/dist/formula/functions/min.js.map +0 -1
- package/dist/formula/functions/minus.js +0 -57
- package/dist/formula/functions/minus.js.map +0 -1
- package/dist/formula/functions/mod.js +0 -33
- package/dist/formula/functions/mod.js.map +0 -1
- package/dist/formula/functions/mod.spec.d.ts +0 -2
- package/dist/formula/functions/mod.spec.d.ts.map +0 -1
- package/dist/formula/functions/multiply.js +0 -27
- package/dist/formula/functions/multiply.js.map +0 -1
- package/dist/formula/functions/ne.js +0 -29
- package/dist/formula/functions/ne.js.map +0 -1
- package/dist/formula/functions/not.js +0 -30
- package/dist/formula/functions/not.js.map +0 -1
- package/dist/formula/functions/now.js +0 -22
- package/dist/formula/functions/now.js.map +0 -1
- package/dist/formula/functions/or.js +0 -28
- package/dist/formula/functions/or.js.map +0 -1
- package/dist/formula/functions/pi.js +0 -22
- package/dist/formula/functions/pi.js.map +0 -1
- package/dist/formula/functions/power.js +0 -27
- package/dist/formula/functions/power.js.map +0 -1
- package/dist/formula/functions/product.js +0 -40
- package/dist/formula/functions/product.js.map +0 -1
- package/dist/formula/functions/radians.js +0 -29
- package/dist/formula/functions/radians.js.map +0 -1
- package/dist/formula/functions/rand.js +0 -22
- package/dist/formula/functions/rand.js.map +0 -1
- package/dist/formula/functions/round.js +0 -35
- package/dist/formula/functions/round.js.map +0 -1
- package/dist/formula/functions/rounddown.js +0 -35
- package/dist/formula/functions/rounddown.js.map +0 -1
- package/dist/formula/functions/roundup.js +0 -35
- package/dist/formula/functions/roundup.js.map +0 -1
- package/dist/formula/functions/row.js +0 -34
- package/dist/formula/functions/row.js.map +0 -1
- package/dist/formula/functions/row.spec.d.ts +0 -2
- package/dist/formula/functions/row.spec.d.ts.map +0 -1
- package/dist/formula/functions/sin.js +0 -29
- package/dist/formula/functions/sin.js.map +0 -1
- package/dist/formula/functions/sqrt.js +0 -32
- package/dist/formula/functions/sqrt.js.map +0 -1
- package/dist/formula/functions/sum.js +0 -47
- package/dist/formula/functions/sum.js.map +0 -1
- package/dist/formula/functions/sum.spec.d.ts +0 -2
- package/dist/formula/functions/sum.spec.d.ts.map +0 -1
- package/dist/formula/functions/sumif.js +0 -65
- package/dist/formula/functions/sumif.js.map +0 -1
- package/dist/formula/functions/tan.js +0 -29
- package/dist/formula/functions/tan.js.map +0 -1
- package/dist/formula/functions/uminus.js +0 -24
- package/dist/formula/functions/uminus.js.map +0 -1
- package/dist/formula/functions/vlookup.js +0 -75
- package/dist/formula/functions/vlookup.js.map +0 -1
- package/dist/formula/mapping.js +0 -119
- package/dist/formula/mapping.js.map +0 -1
- package/dist/formula/solver.js +0 -70
- package/dist/formula/solver.js.map +0 -1
- package/dist/lib/autofill.js +0 -391
- package/dist/lib/autofill.js.map +0 -1
- package/dist/lib/clipboard.js +0 -72
- package/dist/lib/clipboard.js.map +0 -1
- package/dist/lib/converters.js +0 -141
- package/dist/lib/converters.js.map +0 -1
- package/dist/lib/input.js +0 -52
- package/dist/lib/input.js.map +0 -1
- package/dist/lib/palette.js +0 -24
- package/dist/lib/palette.js.map +0 -1
- package/dist/lib/prevention.d.ts +0 -24
- package/dist/lib/prevention.d.ts.map +0 -1
- package/dist/lib/prevention.js +0 -82
- package/dist/lib/prevention.js.map +0 -1
- package/dist/lib/structs.js +0 -276
- package/dist/lib/structs.js.map +0 -1
- package/dist/lib/table.js +0 -1259
- package/dist/lib/table.js.map +0 -1
- package/dist/lib/time.js +0 -170
- package/dist/lib/time.js.map +0 -1
- package/dist/lib/virtualization.js +0 -129
- package/dist/lib/virtualization.js.map +0 -1
- package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js +0 -287
- package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js.map +0 -1
- package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/timezone.js +0 -72
- package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/timezone.js.map +0 -1
- package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/utc.js +0 -85
- package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/utc.js.map +0 -1
- package/dist/parsers/core.js +0 -111
- package/dist/parsers/core.js.map +0 -1
- package/dist/renderers/checkbox.js +0 -20
- package/dist/renderers/checkbox.js.map +0 -1
- package/dist/renderers/core.js +0 -135
- package/dist/renderers/core.js.map +0 -1
- package/dist/renderers/thousand_separator.js +0 -17
- package/dist/renderers/thousand_separator.js.map +0 -1
- package/dist/store/actions.js +0 -762
- package/dist/store/actions.js.map +0 -1
- package/dist/store/helpers.js +0 -88
- package/dist/store/helpers.js.map +0 -1
- package/dist/store/index.js +0 -8
- package/dist/store/index.js.map +0 -1
- package/dist/styles/embedder.js +0 -19
- package/dist/styles/embedder.js.map +0 -1
- package/dist/styles/minified.js +0 -7
- package/dist/styles/minified.js.map +0 -1
package/dist/lib/autofill.js
DELETED
|
@@ -1,391 +0,0 @@
|
|
|
1
|
-
import dayjs from "../_virtual/dayjs.min.js";
|
|
2
|
-
import { complementSelectingArea, zoneToArea, areaShape, areaToZone, concatAreas } from "./structs.js";
|
|
3
|
-
import { p2a } from "./converters.js";
|
|
4
|
-
import { absolutizeFormula } from "../formula/evaluator.js";
|
|
5
|
-
import { TimeDelta } from "./time.js";
|
|
6
|
-
const BORDER_AUTOFILL_DRAGGING = "dashed 1px #888888";
|
|
7
|
-
const DirectionMapping = {
|
|
8
|
-
left: ["horizontal", -1],
|
|
9
|
-
right: ["horizontal", 1],
|
|
10
|
-
up: ["vertical", -1],
|
|
11
|
-
down: ["vertical", 1]
|
|
12
|
-
};
|
|
13
|
-
class Autofill {
|
|
14
|
-
constructor(store, draggingTo) {
|
|
15
|
-
const { table, choosing, selectingZone } = store;
|
|
16
|
-
this.src = complementSelectingArea(zoneToArea(selectingZone), choosing);
|
|
17
|
-
this.direction = this.suggestDirection(draggingTo);
|
|
18
|
-
this.dst = this.getDestinationArea(draggingTo);
|
|
19
|
-
this.table = table;
|
|
20
|
-
}
|
|
21
|
-
get applied() {
|
|
22
|
-
var _a, _b;
|
|
23
|
-
const [orientation, sign] = DirectionMapping[this.direction];
|
|
24
|
-
const matrix = this.table.getMatrix({ area: this.src, evaluates: null });
|
|
25
|
-
const srcShape = areaShape({ ...this.src, base: 1 });
|
|
26
|
-
const dstShape = areaShape({ ...this.dst, base: 1 });
|
|
27
|
-
const diff = {};
|
|
28
|
-
if (orientation === "horizontal") {
|
|
29
|
-
for (let i = 0; i < dstShape.height; i++) {
|
|
30
|
-
const patterns = this.getChangePatterns(matrix[i]);
|
|
31
|
-
for (let j = 0; j < dstShape.width; j++) {
|
|
32
|
-
const baseCell = (_a = matrix[i % srcShape.height]) == null ? void 0 : _a[j % srcShape.width];
|
|
33
|
-
const x = sign > 0 ? this.dst.left + j : this.dst.right - j;
|
|
34
|
-
const px = sign > 0 ? j % srcShape.width : (srcShape.width - 1 - j % srcShape.width) % srcShape.width;
|
|
35
|
-
diff[p2a({ y: this.dst.top + i, x })] = {
|
|
36
|
-
...baseCell,
|
|
37
|
-
value: patterns[px].next().value
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
} else {
|
|
42
|
-
for (let i = 0; i < dstShape.width; i++) {
|
|
43
|
-
const patterns = this.getChangePatterns(matrix.map((row) => row[i]));
|
|
44
|
-
for (let j = 0; j < dstShape.height; j++) {
|
|
45
|
-
const baseCell = (_b = matrix[j % srcShape.height]) == null ? void 0 : _b[i % srcShape.width];
|
|
46
|
-
const y = sign > 0 ? this.dst.top + j : this.dst.bottom - j;
|
|
47
|
-
const py = sign > 0 ? j % srcShape.height : (srcShape.height - 1 - j % srcShape.height) % srcShape.height;
|
|
48
|
-
const value = patterns[py].next().value;
|
|
49
|
-
diff[p2a({ y, x: this.dst.left + i })] = { ...baseCell, value };
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
const table = this.table.update({
|
|
54
|
-
diff,
|
|
55
|
-
operator: "USER",
|
|
56
|
-
reflection: {
|
|
57
|
-
selectingZone: areaToZone(this.src)
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
return table;
|
|
61
|
-
}
|
|
62
|
-
get wholeArea() {
|
|
63
|
-
return concatAreas(this.src, this.dst);
|
|
64
|
-
}
|
|
65
|
-
getCellStyle(target) {
|
|
66
|
-
const { x, y } = target;
|
|
67
|
-
const style = {};
|
|
68
|
-
const { top, left, bottom, right } = this.src;
|
|
69
|
-
switch (this.direction) {
|
|
70
|
-
case "left": {
|
|
71
|
-
if (this.dst.left <= x && x <= this.dst.right) {
|
|
72
|
-
if (top === y) {
|
|
73
|
-
style.borderTop = BORDER_AUTOFILL_DRAGGING;
|
|
74
|
-
}
|
|
75
|
-
if (bottom === y - 1) {
|
|
76
|
-
style.borderTop = BORDER_AUTOFILL_DRAGGING;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (this.dst.left === x && top <= y && y <= bottom) {
|
|
80
|
-
style.borderLeft = BORDER_AUTOFILL_DRAGGING;
|
|
81
|
-
}
|
|
82
|
-
break;
|
|
83
|
-
}
|
|
84
|
-
case "right": {
|
|
85
|
-
if (this.dst.left <= x && x <= this.dst.right) {
|
|
86
|
-
if (top === y) {
|
|
87
|
-
style.borderTop = BORDER_AUTOFILL_DRAGGING;
|
|
88
|
-
}
|
|
89
|
-
if (bottom === y - 1) {
|
|
90
|
-
style.borderTop = BORDER_AUTOFILL_DRAGGING;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
if (this.dst.right === x - 1 && top <= y && y <= bottom) {
|
|
94
|
-
style.borderLeft = BORDER_AUTOFILL_DRAGGING;
|
|
95
|
-
}
|
|
96
|
-
break;
|
|
97
|
-
}
|
|
98
|
-
case "up": {
|
|
99
|
-
if (this.dst.top <= y && y <= this.dst.bottom) {
|
|
100
|
-
if (left === x) {
|
|
101
|
-
style.borderLeft = BORDER_AUTOFILL_DRAGGING;
|
|
102
|
-
}
|
|
103
|
-
if (right === x - 1) {
|
|
104
|
-
style.borderLeft = BORDER_AUTOFILL_DRAGGING;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
if (this.dst.top === y && left <= x && x <= right) {
|
|
108
|
-
style.borderTop = BORDER_AUTOFILL_DRAGGING;
|
|
109
|
-
}
|
|
110
|
-
break;
|
|
111
|
-
}
|
|
112
|
-
case "down": {
|
|
113
|
-
if (this.dst.top <= y && y <= this.dst.bottom) {
|
|
114
|
-
if (left === x) {
|
|
115
|
-
style.borderLeft = BORDER_AUTOFILL_DRAGGING;
|
|
116
|
-
}
|
|
117
|
-
if (right === x - 1) {
|
|
118
|
-
style.borderLeft = BORDER_AUTOFILL_DRAGGING;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
if (this.dst.bottom === y - 1 && left <= x && x <= right) {
|
|
122
|
-
style.borderTop = BORDER_AUTOFILL_DRAGGING;
|
|
123
|
-
}
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return style;
|
|
128
|
-
}
|
|
129
|
-
getDestinationArea(autofillDraggingTo) {
|
|
130
|
-
const { x, y } = autofillDraggingTo;
|
|
131
|
-
const { top, left, bottom, right } = this.src;
|
|
132
|
-
switch (this.direction) {
|
|
133
|
-
case "left":
|
|
134
|
-
return { top, bottom, left: x, right: left - 1 };
|
|
135
|
-
case "right":
|
|
136
|
-
return { top, bottom, left: right + 1, right: x };
|
|
137
|
-
case "up":
|
|
138
|
-
return { left, right, top: y, bottom: top - 1 };
|
|
139
|
-
case "down":
|
|
140
|
-
return { left, right, top: bottom + 1, bottom: y };
|
|
141
|
-
}
|
|
142
|
-
return this.src;
|
|
143
|
-
}
|
|
144
|
-
suggestDirection(draggingTo) {
|
|
145
|
-
const { top, left, bottom, right } = this.src;
|
|
146
|
-
let horizontal = 0, vertical = 0;
|
|
147
|
-
if (draggingTo.x < left) {
|
|
148
|
-
horizontal = draggingTo.x - left;
|
|
149
|
-
} else if (draggingTo.x > right) {
|
|
150
|
-
horizontal = draggingTo.x - right;
|
|
151
|
-
}
|
|
152
|
-
if (draggingTo.y < top) {
|
|
153
|
-
vertical = draggingTo.y - top;
|
|
154
|
-
} else if (draggingTo.y > bottom) {
|
|
155
|
-
vertical = draggingTo.y - bottom;
|
|
156
|
-
}
|
|
157
|
-
if (Math.abs(horizontal) > 0 && Math.abs(vertical) > 0) {
|
|
158
|
-
if (Math.abs(horizontal) > Math.abs(vertical)) {
|
|
159
|
-
return horizontal < 0 ? "left" : "right";
|
|
160
|
-
}
|
|
161
|
-
return vertical < 0 ? "up" : "down";
|
|
162
|
-
}
|
|
163
|
-
if (horizontal !== 0) {
|
|
164
|
-
return horizontal < 0 ? "left" : "right";
|
|
165
|
-
}
|
|
166
|
-
if (vertical !== 0) {
|
|
167
|
-
return vertical < 0 ? "up" : "down";
|
|
168
|
-
}
|
|
169
|
-
return "down";
|
|
170
|
-
}
|
|
171
|
-
getChangePatterns(cells) {
|
|
172
|
-
const result = [];
|
|
173
|
-
const groups = groupByType(cells);
|
|
174
|
-
const [orientation, sign] = DirectionMapping[this.direction];
|
|
175
|
-
groups.forEach((group) => {
|
|
176
|
-
const lastValue = sign > 0 ? group.last : group.first;
|
|
177
|
-
switch (group.kind) {
|
|
178
|
-
case "other": {
|
|
179
|
-
result.push(pass(group.first));
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
case "formula": {
|
|
183
|
-
const value = group.first;
|
|
184
|
-
const table = this.table;
|
|
185
|
-
function* generateFormula() {
|
|
186
|
-
let slide = 0;
|
|
187
|
-
const skip = cells.length * sign;
|
|
188
|
-
while (true) {
|
|
189
|
-
slide += skip;
|
|
190
|
-
yield absolutizeFormula({
|
|
191
|
-
value,
|
|
192
|
-
table,
|
|
193
|
-
slideY: orientation === "vertical" ? slide : 0,
|
|
194
|
-
slideX: orientation === "horizontal" ? slide : 0
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
result.push(generateFormula());
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
case "number": {
|
|
202
|
-
if (!group.equidistant) {
|
|
203
|
-
result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
function* generateNumber() {
|
|
207
|
-
let value = lastValue;
|
|
208
|
-
const skip = group.numericDelta * sign;
|
|
209
|
-
while (true) {
|
|
210
|
-
value += skip;
|
|
211
|
-
yield value;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
const g = generateNumber();
|
|
215
|
-
result.push(g, ...group.nexts.map(() => g));
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
case "date": {
|
|
219
|
-
const next = (d) => {
|
|
220
|
-
return sign > 0 ? group.timeDelta.add(d) : group.timeDelta.sub(d);
|
|
221
|
-
};
|
|
222
|
-
if (!group.equidistant) {
|
|
223
|
-
result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
function* generateDate() {
|
|
227
|
-
let value = lastValue;
|
|
228
|
-
while (true) {
|
|
229
|
-
value = next(value);
|
|
230
|
-
yield new Date(value);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
const g = generateDate();
|
|
234
|
-
result.push(g, ...group.nexts.map(() => g));
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
case "string+number": {
|
|
238
|
-
if (!group.equidistant) {
|
|
239
|
-
result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
function* generateStringNumber() {
|
|
243
|
-
const { prefix } = extractStringNumber(group.first);
|
|
244
|
-
const { number: lastNumber } = extractStringNumber(lastValue);
|
|
245
|
-
let value = lastNumber;
|
|
246
|
-
const skip = group.numericDelta * sign;
|
|
247
|
-
while (true) {
|
|
248
|
-
value += skip;
|
|
249
|
-
yield `${prefix}${Math.abs(value)}`;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
const g = generateStringNumber();
|
|
253
|
-
result.push(g, ...group.nexts.map(() => g));
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
});
|
|
258
|
-
return result;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
function* pass(value) {
|
|
262
|
-
while (true) {
|
|
263
|
-
yield value;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
const StringNumberPattern = new RegExp("(.+?)(\\d+)$");
|
|
267
|
-
const extractStringNumber = (value) => {
|
|
268
|
-
const match = value.match(StringNumberPattern);
|
|
269
|
-
if (match) {
|
|
270
|
-
const [, prefix, n] = match;
|
|
271
|
-
return { prefix, number: Number(n) };
|
|
272
|
-
}
|
|
273
|
-
return { prefix: "", number: 0 };
|
|
274
|
-
};
|
|
275
|
-
class TypedGroup {
|
|
276
|
-
constructor(value) {
|
|
277
|
-
this.timeDelta = TimeDelta.create();
|
|
278
|
-
this.numericDelta = 0;
|
|
279
|
-
this.equidistant = true;
|
|
280
|
-
this.first = value;
|
|
281
|
-
this.nexts = [];
|
|
282
|
-
this.kind = this.discriminate(value);
|
|
283
|
-
}
|
|
284
|
-
discriminate(value) {
|
|
285
|
-
const kind = value instanceof Date ? "date" : typeof value;
|
|
286
|
-
if (kind === "number" || kind === "date") {
|
|
287
|
-
return kind;
|
|
288
|
-
}
|
|
289
|
-
if (kind === "string" && value[0] === "=") {
|
|
290
|
-
return "formula";
|
|
291
|
-
} else if (kind === "string" && value.match(StringNumberPattern)) {
|
|
292
|
-
return "string+number";
|
|
293
|
-
}
|
|
294
|
-
return "other";
|
|
295
|
-
}
|
|
296
|
-
get last() {
|
|
297
|
-
if (this.nexts.length === 0) {
|
|
298
|
-
return this.first;
|
|
299
|
-
}
|
|
300
|
-
return this.nexts[this.nexts.length - 1];
|
|
301
|
-
}
|
|
302
|
-
add(value) {
|
|
303
|
-
const kind = this.discriminate(value);
|
|
304
|
-
if (this.kind !== kind || kind === "other" || kind === "formula") {
|
|
305
|
-
return new TypedGroup(value);
|
|
306
|
-
}
|
|
307
|
-
if (this.nexts.length === 0) {
|
|
308
|
-
switch (kind) {
|
|
309
|
-
case "date": {
|
|
310
|
-
this.timeDelta = new TimeDelta(value, this.first);
|
|
311
|
-
break;
|
|
312
|
-
}
|
|
313
|
-
case "number": {
|
|
314
|
-
this.numericDelta = value - this.first;
|
|
315
|
-
break;
|
|
316
|
-
}
|
|
317
|
-
case "string+number": {
|
|
318
|
-
const { prefix: prefix1, number: number1 } = extractStringNumber(this.first);
|
|
319
|
-
const { prefix: prefix2, number: number2 } = extractStringNumber(value);
|
|
320
|
-
if (prefix1 === prefix2) {
|
|
321
|
-
this.numericDelta = number2 - number1;
|
|
322
|
-
}
|
|
323
|
-
break;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
this.nexts.push(value);
|
|
328
|
-
}
|
|
329
|
-
subdivide() {
|
|
330
|
-
if (this.nexts.length === 0) {
|
|
331
|
-
return [];
|
|
332
|
-
}
|
|
333
|
-
const news = [];
|
|
334
|
-
let lastGroup = this;
|
|
335
|
-
switch (this.kind) {
|
|
336
|
-
case "date": {
|
|
337
|
-
const eq = this.nexts.every((v, i) => i === 0 || dayjs(v).isSame(this.timeDelta.add(this.nexts[i - 1])));
|
|
338
|
-
this.equidistant = eq;
|
|
339
|
-
return [];
|
|
340
|
-
}
|
|
341
|
-
case "number": {
|
|
342
|
-
const eq = this.nexts.every((v, i) => i === 0 || v === this.first + this.numericDelta * (i + 1));
|
|
343
|
-
this.equidistant = eq;
|
|
344
|
-
return [];
|
|
345
|
-
}
|
|
346
|
-
case "string+number": {
|
|
347
|
-
const { prefix: basePrefix } = extractStringNumber(this.first);
|
|
348
|
-
for (let i = 0; i < lastGroup.nexts.length; i++) {
|
|
349
|
-
const next = lastGroup.nexts[i];
|
|
350
|
-
const { prefix, number } = extractStringNumber(next);
|
|
351
|
-
if (basePrefix !== prefix) {
|
|
352
|
-
const nexts = this.nexts.splice(i, this.nexts.length);
|
|
353
|
-
lastGroup = new TypedGroup(nexts.splice(0, 1)[0]);
|
|
354
|
-
nexts.forEach(lastGroup.add.bind(lastGroup));
|
|
355
|
-
news.push(lastGroup, ...lastGroup.subdivide());
|
|
356
|
-
break;
|
|
357
|
-
} else {
|
|
358
|
-
const { number: firstNumber } = extractStringNumber(lastGroup.first);
|
|
359
|
-
if (number !== firstNumber + (i + 1) * lastGroup.numericDelta) {
|
|
360
|
-
lastGroup.equidistant = false;
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
break;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
return news;
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
function groupByType(cells) {
|
|
371
|
-
var _a, _b;
|
|
372
|
-
let group = new TypedGroup((_a = cells[0]) == null ? void 0 : _a.value);
|
|
373
|
-
const groups = [group];
|
|
374
|
-
for (let i = 1; i < cells.length; i++) {
|
|
375
|
-
const value = (_b = cells[i]) == null ? void 0 : _b.value;
|
|
376
|
-
const nextGroup = group.add(value);
|
|
377
|
-
if (nextGroup) {
|
|
378
|
-
groups.push(nextGroup);
|
|
379
|
-
group = nextGroup;
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
for (let i = groups.length - 1; i >= 0; i--) {
|
|
383
|
-
const group2 = groups[i];
|
|
384
|
-
groups.splice(i + 1, 0, ...group2.subdivide());
|
|
385
|
-
}
|
|
386
|
-
return groups;
|
|
387
|
-
}
|
|
388
|
-
export {
|
|
389
|
-
Autofill
|
|
390
|
-
};
|
|
391
|
-
//# sourceMappingURL=autofill.js.map
|
package/dist/lib/autofill.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autofill.js","sources":["../../lib/autofill.ts"],"sourcesContent":["import React from 'react';\nimport dayjs from 'dayjs';\nimport type { AreaType, CellsByAddressType, CellType, PointType, StoreType } from '../types';\nimport { Table } from './table';\nimport { areaShape, areaToZone, complementSelectingArea, concatAreas, zoneToArea } from './structs';\nimport { p2a } from './converters';\nimport { absolutizeFormula } from '../formula/evaluator';\nimport { TimeDelta } from './time';\n\nconst BORDER_AUTOFILL_DRAGGING = 'dashed 1px #888888';\n\ntype Direction = 'left' | 'right' | 'up' | 'down';\ntype Orientation = 'horizontal' | 'vertical';\nconst DirectionMapping: {\n [key: string]: [Orientation, number];\n} = {\n left: ['horizontal', -1],\n right: ['horizontal', 1],\n up: ['vertical', -1],\n down: ['vertical', 1],\n};\n\nexport class Autofill {\n private readonly src: AreaType;\n private readonly dst: AreaType;\n private readonly direction: Direction;\n private readonly table: Table;\n constructor(store: StoreType, draggingTo: PointType) {\n const { table, choosing, selectingZone } = store;\n this.src = complementSelectingArea(zoneToArea(selectingZone), choosing);\n this.direction = this.suggestDirection(draggingTo);\n this.dst = this.getDestinationArea(draggingTo);\n this.table = table;\n }\n\n public get applied(): Table {\n const [orientation, sign] = DirectionMapping[this.direction];\n const matrix = this.table.getMatrix({ area: this.src, evaluates: null });\n const srcShape = areaShape({ ...this.src, base: 1 });\n const dstShape = areaShape({ ...this.dst, base: 1 });\n\n const diff: CellsByAddressType = {};\n if (orientation === 'horizontal') {\n for (let i = 0; i < dstShape.height; i++) {\n const patterns = this.getChangePatterns(matrix[i]);\n for (let j = 0; j < dstShape.width; j++) {\n const baseCell = matrix[i % srcShape.height]?.[j % srcShape.width];\n const x = sign > 0 ? this.dst.left + j : this.dst.right - j;\n const px = sign > 0 ? j % srcShape.width : (srcShape.width - 1 - (j % srcShape.width)) % srcShape.width;\n diff[p2a({ y: this.dst.top + i, x })] = {\n ...baseCell,\n value: patterns[px].next().value,\n };\n }\n }\n } else {\n for (let i = 0; i < dstShape.width; i++) {\n const patterns = this.getChangePatterns(matrix.map((row) => row[i]));\n for (let j = 0; j < dstShape.height; j++) {\n const baseCell = matrix[j % srcShape.height]?.[i % srcShape.width];\n const y = sign > 0 ? this.dst.top + j : this.dst.bottom - j;\n const py = sign > 0 ? j % srcShape.height : (srcShape.height - 1 - (j % srcShape.height)) % srcShape.height;\n const value = patterns[py].next().value;\n diff[p2a({ y, x: this.dst.left + i })] = { ...baseCell, value };\n }\n }\n }\n const table = this.table.update({\n diff,\n operator: 'USER',\n reflection: {\n selectingZone: areaToZone(this.src),\n },\n });\n return table;\n }\n\n public get wholeArea() {\n return concatAreas(this.src, this.dst);\n }\n\n public getCellStyle(target: PointType) {\n const { x, y } = target;\n const style: React.CSSProperties = {};\n const { top, left, bottom, right } = this.src;\n\n switch (this.direction) {\n case 'left': {\n if (this.dst.left <= x && x <= this.dst.right) {\n if (top === y) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n if (bottom === y - 1) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.left === x && top <= y && y <= bottom) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n case 'right': {\n if (this.dst.left <= x && x <= this.dst.right) {\n if (top === y) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n if (bottom === y - 1) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.right === x - 1 && top <= y && y <= bottom) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n\n case 'up': {\n if (this.dst.top <= y && y <= this.dst.bottom) {\n if (left === x) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n if (right === x - 1) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.top === y && left <= x && x <= right) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n case 'down': {\n if (this.dst.top <= y && y <= this.dst.bottom) {\n if (left === x) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n if (right === x - 1) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.bottom === y - 1 && left <= x && x <= right) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n }\n return style;\n }\n\n private getDestinationArea(autofillDraggingTo: PointType): AreaType {\n const { x, y } = autofillDraggingTo;\n const { top, left, bottom, right } = this.src;\n switch (this.direction) {\n case 'left':\n return { top, bottom, left: x, right: left - 1 };\n case 'right':\n return { top, bottom, left: right + 1, right: x };\n case 'up':\n return { left, right, top: y, bottom: top - 1 };\n case 'down':\n return { left, right, top: bottom + 1, bottom: y };\n }\n return this.src;\n }\n\n private suggestDirection(draggingTo: PointType): Direction {\n const { top, left, bottom, right } = this.src;\n let horizontal = 0,\n vertical = 0;\n if (draggingTo.x < left) {\n horizontal = draggingTo.x - left;\n } else if (draggingTo.x > right) {\n horizontal = draggingTo.x - right;\n }\n if (draggingTo.y < top) {\n vertical = draggingTo.y - top;\n } else if (draggingTo.y > bottom) {\n vertical = draggingTo.y - bottom;\n }\n // diagonal\n if (Math.abs(horizontal) > 0 && Math.abs(vertical) > 0) {\n if (Math.abs(horizontal) > Math.abs(vertical)) {\n return horizontal < 0 ? 'left' : 'right';\n }\n return vertical < 0 ? 'up' : 'down';\n }\n if (horizontal !== 0) {\n return horizontal < 0 ? 'left' : 'right';\n }\n if (vertical !== 0) {\n return vertical < 0 ? 'up' : 'down';\n }\n return 'down';\n }\n\n private getChangePatterns(cells: (CellType | null)[]): Generator[] {\n const result: Generator[] = [];\n const groups = groupByType(cells);\n const [orientation, sign] = DirectionMapping[this.direction];\n groups.forEach((group) => {\n const lastValue = sign > 0 ? group.last : group.first;\n switch (group.kind) {\n case 'other': {\n result.push(pass(group.first));\n return;\n }\n case 'formula': {\n const value = group.first;\n const table = this.table;\n\n function* generateFormula() {\n let slide = 0;\n const skip = cells.length * sign;\n while (true) {\n slide += skip;\n yield absolutizeFormula({\n value,\n table,\n slideY: orientation === 'vertical' ? slide : 0,\n slideX: orientation === 'horizontal' ? slide : 0,\n });\n }\n }\n result.push(generateFormula());\n return;\n }\n case 'number': {\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateNumber() {\n let value = lastValue;\n const skip = group.numericDelta * sign;\n while (true) {\n value += skip;\n yield value;\n }\n }\n const g = generateNumber();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n case 'date': {\n const next = (d: Date) => {\n return sign > 0 ? group.timeDelta.add(d) : group.timeDelta.sub(d);\n };\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateDate() {\n let value = lastValue as Date;\n while (true) {\n value = next(value);\n yield new Date(value);\n }\n }\n const g = generateDate();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n case 'string+number': {\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateStringNumber() {\n const { prefix } = extractStringNumber(group.first as string);\n const { number: lastNumber } = extractStringNumber(lastValue as string);\n let value = lastNumber;\n const skip = group.numericDelta * sign;\n while (true) {\n value += skip;\n yield `${prefix}${Math.abs(value)}`;\n }\n }\n const g = generateStringNumber();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n }\n });\n return result;\n }\n}\n\nfunction* pass(value: any) {\n while (true) {\n yield value;\n }\n}\n\ntype GroupKind = 'number' | 'date' | 'string+number' | 'formula' | 'other';\n\nconst StringNumberPattern = new RegExp('(.+?)(\\\\d+)$');\n\nconst extractStringNumber = (value: string) => {\n const match = value.match(StringNumberPattern);\n if (match) {\n const [, prefix, n] = match;\n return { prefix, number: Number(n) };\n }\n return { prefix: '', number: 0 };\n};\n\nclass TypedGroup {\n public timeDelta: TimeDelta = TimeDelta.create();\n public numericDelta: number = 0;\n public kind: GroupKind;\n public nexts: any[];\n public first: any;\n public equidistant = true;\n\n constructor(value: any) {\n this.first = value;\n this.nexts = [];\n this.kind = this.discriminate(value);\n }\n private discriminate(value: any): GroupKind {\n const kind = value instanceof Date ? 'date' : typeof value;\n if (kind === 'number' || kind === 'date') {\n return kind;\n }\n if (kind === 'string' && value[0] === '=') {\n return 'formula';\n } else if (kind === 'string' && value.match(StringNumberPattern)) {\n return 'string+number';\n }\n return 'other';\n }\n\n public get last() {\n if (this.nexts.length === 0) {\n return this.first;\n }\n return this.nexts[this.nexts.length - 1];\n }\n\n public add(value: any): TypedGroup | undefined {\n const kind = this.discriminate(value);\n if (this.kind !== kind || kind === 'other' || kind === 'formula') {\n return new TypedGroup(value);\n }\n if (this.nexts.length === 0) {\n switch (kind) {\n case 'date': {\n this.timeDelta = new TimeDelta(value as Date, this.first as Date);\n break;\n }\n case 'number': {\n this.numericDelta = (value as number) - this.first;\n break;\n }\n case 'string+number': {\n const { prefix: prefix1, number: number1 } = extractStringNumber(this.first as string);\n const { prefix: prefix2, number: number2 } = extractStringNumber(value as string);\n if (prefix1 === prefix2) {\n this.numericDelta = number2 - number1;\n }\n break;\n }\n }\n }\n this.nexts.push(value);\n }\n\n public subdivide() {\n if (this.nexts.length === 0) {\n return [];\n }\n\n const news: TypedGroup[] = [];\n\n let lastGroup: TypedGroup = this;\n switch (this.kind) {\n case 'date': {\n const eq = this.nexts.every((v, i) => i === 0 || dayjs(v).isSame(this.timeDelta.add(this.nexts[i - 1])));\n this.equidistant = eq;\n return [];\n }\n case 'number': {\n const eq = this.nexts.every((v, i) => i === 0 || v === this.first + this.numericDelta * (i + 1));\n this.equidistant = eq;\n return [];\n }\n case 'string+number': {\n const { prefix: basePrefix } = extractStringNumber(this.first as string);\n for (let i = 0; i < lastGroup.nexts.length; i++) {\n const next = lastGroup.nexts[i];\n const { prefix, number } = extractStringNumber(next as string);\n if (basePrefix !== prefix) {\n const nexts = this.nexts.splice(i, this.nexts.length);\n lastGroup = new TypedGroup(nexts.splice(0, 1)[0]);\n nexts.forEach(lastGroup.add.bind(lastGroup));\n news.push(lastGroup, ...lastGroup.subdivide());\n break;\n } else {\n const { number: firstNumber } = extractStringNumber(lastGroup.first as string);\n if (number !== firstNumber + (i + 1) * lastGroup.numericDelta) {\n lastGroup.equidistant = false;\n }\n }\n }\n break;\n }\n }\n\n return news;\n }\n}\n\nfunction groupByType(cells: (CellType | null)[]): TypedGroup[] {\n let group = new TypedGroup(cells[0]?.value);\n const groups: TypedGroup[] = [group];\n\n for (let i = 1; i < cells.length; i++) {\n const value = cells[i]?.value;\n const nextGroup = group.add(value);\n if (nextGroup) {\n groups.push(nextGroup);\n group = nextGroup;\n }\n }\n for (let i = groups.length - 1; i >= 0; i--) {\n const group = groups[i];\n groups.splice(i + 1, 0, ...group.subdivide());\n }\n return groups;\n}\n"],"names":["group"],"mappings":"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"}
|
package/dist/lib/clipboard.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { zoneToArea } from "./structs.js";
|
|
2
|
-
import { solveTable } from "../formula/solver.js";
|
|
3
|
-
const clip = (store) => {
|
|
4
|
-
const { selectingZone, choosing, editorRef, table } = store;
|
|
5
|
-
const { y, x } = choosing;
|
|
6
|
-
const selectingArea = zoneToArea(selectingZone);
|
|
7
|
-
let area = selectingArea;
|
|
8
|
-
if (area.left === -1) {
|
|
9
|
-
area = { top: y, left: x, bottom: y, right: x };
|
|
10
|
-
}
|
|
11
|
-
const input = editorRef.current;
|
|
12
|
-
const trimmed = table.trim(area);
|
|
13
|
-
const tsv = table2tsv(trimmed);
|
|
14
|
-
const html = table2html(trimmed);
|
|
15
|
-
if (navigator.clipboard) {
|
|
16
|
-
const tsvBlob = new Blob([tsv], { type: "text/plain" });
|
|
17
|
-
const htmlBlob = new Blob([html], { type: "text/html" });
|
|
18
|
-
navigator.clipboard.write([
|
|
19
|
-
new ClipboardItem({
|
|
20
|
-
"text/plain": tsvBlob,
|
|
21
|
-
"text/html": htmlBlob
|
|
22
|
-
})
|
|
23
|
-
]);
|
|
24
|
-
} else if (input != null) {
|
|
25
|
-
input.value = tsv;
|
|
26
|
-
input.focus();
|
|
27
|
-
input.select();
|
|
28
|
-
document.execCommand("copy");
|
|
29
|
-
input.value = "";
|
|
30
|
-
input.blur();
|
|
31
|
-
}
|
|
32
|
-
return area;
|
|
33
|
-
};
|
|
34
|
-
const table2tsv = (table) => {
|
|
35
|
-
const lines = [];
|
|
36
|
-
const matrix = solveTable({ table, raise: false });
|
|
37
|
-
matrix.forEach((row, i) => {
|
|
38
|
-
const y = table.top + i;
|
|
39
|
-
const cols = [];
|
|
40
|
-
row.forEach((col, j) => {
|
|
41
|
-
const x = table.left + j;
|
|
42
|
-
const value = table.stringify({ y, x }, col);
|
|
43
|
-
if (value.indexOf("\n") !== -1) {
|
|
44
|
-
cols.push(`"${value.replace(/"/g, '""')}"`);
|
|
45
|
-
} else {
|
|
46
|
-
cols.push(value);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
lines.push(cols.join(" "));
|
|
50
|
-
});
|
|
51
|
-
return lines.join("\n");
|
|
52
|
-
};
|
|
53
|
-
const table2html = (table) => {
|
|
54
|
-
const lines = [];
|
|
55
|
-
const matrix = solveTable({ table, raise: false });
|
|
56
|
-
matrix.forEach((row, i) => {
|
|
57
|
-
const y = table.top + i;
|
|
58
|
-
const cols = [];
|
|
59
|
-
row.forEach((col, j) => {
|
|
60
|
-
const x = table.left + j;
|
|
61
|
-
const value = table.stringify({ y, x }, col);
|
|
62
|
-
const valueEscaped = value.replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">");
|
|
63
|
-
cols.push(`<td>${valueEscaped}</td>`);
|
|
64
|
-
});
|
|
65
|
-
lines.push(`<tr>${cols.join("")}</tr>`);
|
|
66
|
-
});
|
|
67
|
-
return `<table>${lines.join("")}</table>`;
|
|
68
|
-
};
|
|
69
|
-
export {
|
|
70
|
-
clip
|
|
71
|
-
};
|
|
72
|
-
//# sourceMappingURL=clipboard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard.js","sources":["../../lib/clipboard.ts"],"sourcesContent":["import type { StoreType, AreaType } from '../types';\n\nimport { zoneToArea } from './structs';\nimport { solveTable } from '../formula/solver';\nimport { Table } from './table';\n\nexport const clip = (store: StoreType): AreaType => {\n const { selectingZone, choosing, editorRef, table } = store;\n const { y, x } = choosing;\n const selectingArea = zoneToArea(selectingZone);\n let area = selectingArea;\n if (area.left === -1) {\n area = { top: y, left: x, bottom: y, right: x };\n }\n const input = editorRef.current;\n const trimmed = table.trim(area);\n const tsv = table2tsv(trimmed);\n const html = table2html(trimmed);\n\n if (navigator.clipboard) {\n const tsvBlob = new Blob([tsv], { type: 'text/plain' });\n const htmlBlob = new Blob([html], { type: 'text/html' });\n\n navigator.clipboard.write([\n new ClipboardItem({\n 'text/plain': tsvBlob,\n 'text/html': htmlBlob,\n }),\n ]);\n } else if (input != null) {\n input.value = tsv;\n input.focus();\n input.select();\n document.execCommand('copy');\n input.value = '';\n input.blur();\n }\n return area;\n};\n\nconst table2tsv = (table: Table): string => {\n const lines: string[] = [];\n const matrix = solveTable({ table, raise: false });\n matrix.forEach((row, i) => {\n const y = table.top + i;\n const cols: string[] = [];\n row.forEach((col, j) => {\n const x = table.left + j;\n const value = table.stringify({ y, x }, col);\n if (value.indexOf('\\n') !== -1) {\n cols.push(`\"${value.replace(/\"/g, '\"\"')}\"`);\n } else {\n cols.push(value);\n }\n });\n lines.push(cols.join('\\t'));\n });\n return lines.join('\\n');\n};\n\nconst table2html = (table: Table): string => {\n const lines: string[] = [];\n const matrix = solveTable({ table, raise: false });\n matrix.forEach((row, i) => {\n const y = table.top + i;\n const cols: string[] = [];\n row.forEach((col, j) => {\n const x = table.left + j;\n const value = table.stringify({ y, x }, col);\n const valueEscaped = value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n cols.push(`<td>${valueEscaped}</td>`);\n });\n lines.push(`<tr>${cols.join('')}</tr>`);\n });\n return `<table>${lines.join('')}</table>`;\n};\n"],"names":[],"mappings":";;AAMa,MAAA,OAAO,CAAC,UAA+B;AAClD,QAAM,EAAE,eAAe,UAAU,WAAW,MAAU,IAAA;AAChD,QAAA,EAAE,GAAG,EAAA,IAAM;AACX,QAAA,gBAAgB,WAAW,aAAa;AAC9C,MAAI,OAAO;AACP,MAAA,KAAK,SAAS,IAAI;AACb,WAAA,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,EAAE;AAAA,EAAA;AAEhD,QAAM,QAAQ,UAAU;AAClB,QAAA,UAAU,MAAM,KAAK,IAAI;AACzB,QAAA,MAAM,UAAU,OAAO;AACvB,QAAA,OAAO,WAAW,OAAO;AAE/B,MAAI,UAAU,WAAW;AACjB,UAAA,UAAU,IAAI,KAAK,CAAC,GAAG,GAAG,EAAE,MAAM,cAAc;AAChD,UAAA,WAAW,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,aAAa;AAEvD,cAAU,UAAU,MAAM;AAAA,MACxB,IAAI,cAAc;AAAA,QAChB,cAAc;AAAA,QACd,aAAa;AAAA,MACd,CAAA;AAAA,IAAA,CACF;AAAA,EAAA,WACQ,SAAS,MAAM;AACxB,UAAM,QAAQ;AACd,UAAM,MAAM;AACZ,UAAM,OAAO;AACb,aAAS,YAAY,MAAM;AAC3B,UAAM,QAAQ;AACd,UAAM,KAAK;AAAA,EAAA;AAEN,SAAA;AACT;AAEA,MAAM,YAAY,CAAC,UAAyB;AAC1C,QAAM,QAAkB,CAAC;AACzB,QAAM,SAAS,WAAW,EAAE,OAAO,OAAO,OAAO;AAC1C,SAAA,QAAQ,CAAC,KAAK,MAAM;AACnB,UAAA,IAAI,MAAM,MAAM;AACtB,UAAM,OAAiB,CAAC;AACpB,QAAA,QAAQ,CAAC,KAAK,MAAM;AAChB,YAAA,IAAI,MAAM,OAAO;AACvB,YAAM,QAAQ,MAAM,UAAU,EAAE,GAAG,KAAK,GAAG;AAC3C,UAAI,MAAM,QAAQ,IAAI,MAAM,IAAI;AAC9B,aAAK,KAAK,IAAI,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG;AAAA,MAAA,OACrC;AACL,aAAK,KAAK,KAAK;AAAA,MAAA;AAAA,IACjB,CACD;AACD,UAAM,KAAK,KAAK,KAAK,GAAI,CAAC;AAAA,EAAA,CAC3B;AACM,SAAA,MAAM,KAAK,IAAI;AACxB;AAEA,MAAM,aAAa,CAAC,UAAyB;AAC3C,QAAM,QAAkB,CAAC;AACzB,QAAM,SAAS,WAAW,EAAE,OAAO,OAAO,OAAO;AAC1C,SAAA,QAAQ,CAAC,KAAK,MAAM;AACnB,UAAA,IAAI,MAAM,MAAM;AACtB,UAAM,OAAiB,CAAC;AACpB,QAAA,QAAQ,CAAC,KAAK,MAAM;AAChB,YAAA,IAAI,MAAM,OAAO;AACvB,YAAM,QAAQ,MAAM,UAAU,EAAE,GAAG,KAAK,GAAG;AACrC,YAAA,eAAe,MAClB,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM;AAClB,WAAA,KAAK,OAAO,YAAY,OAAO;AAAA,IAAA,CACrC;AACD,UAAM,KAAK,OAAO,KAAK,KAAK,EAAE,CAAC,OAAO;AAAA,EAAA,CACvC;AACD,SAAO,UAAU,MAAM,KAAK,EAAE,CAAC;AACjC;"}
|
package/dist/lib/converters.js
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { DEFAULT_ALPHABET_CACHE_SIZE } from "../constants.js";
|
|
2
|
-
const ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
3
|
-
const N2C_CACHE = /* @__PURE__ */ new Map();
|
|
4
|
-
const C2N_CACHE = /* @__PURE__ */ new Map();
|
|
5
|
-
const getColumnLetterFromNumber = (key, cacheSize = DEFAULT_ALPHABET_CACHE_SIZE) => {
|
|
6
|
-
const cached = N2C_CACHE.get(--key);
|
|
7
|
-
if (cached != null) {
|
|
8
|
-
return cached;
|
|
9
|
-
}
|
|
10
|
-
if (key === 0) {
|
|
11
|
-
return "";
|
|
12
|
-
}
|
|
13
|
-
let num = key;
|
|
14
|
-
let result = "";
|
|
15
|
-
do {
|
|
16
|
-
result = ALPHABET[--num % 26] + result;
|
|
17
|
-
num = Math.floor(num / 26);
|
|
18
|
-
} while (num > 0);
|
|
19
|
-
N2C_CACHE.set(key, result);
|
|
20
|
-
const it = N2C_CACHE.keys();
|
|
21
|
-
for (let st = it.next(); N2C_CACHE.size > cacheSize; st = it.next()) {
|
|
22
|
-
N2C_CACHE.delete(st.value);
|
|
23
|
-
}
|
|
24
|
-
return result;
|
|
25
|
-
};
|
|
26
|
-
const getNumberFromColumnLetter = (key, cacheSize = DEFAULT_ALPHABET_CACHE_SIZE) => {
|
|
27
|
-
const cached = C2N_CACHE.get(key);
|
|
28
|
-
if (cached != null) {
|
|
29
|
-
return cached;
|
|
30
|
-
}
|
|
31
|
-
if (key === "") {
|
|
32
|
-
return 0;
|
|
33
|
-
}
|
|
34
|
-
const alpha = key;
|
|
35
|
-
let result = 0;
|
|
36
|
-
for (let digit = 0; digit < alpha.length; digit++) {
|
|
37
|
-
const a = alpha[alpha.length - digit - 1];
|
|
38
|
-
const num = ALPHABET.indexOf(a) + 1;
|
|
39
|
-
result += ALPHABET.length ** digit * num;
|
|
40
|
-
}
|
|
41
|
-
C2N_CACHE.set(key, result);
|
|
42
|
-
const it = C2N_CACHE.keys();
|
|
43
|
-
for (let st = it.next(); C2N_CACHE.size > cacheSize; st = it.next()) {
|
|
44
|
-
C2N_CACHE.delete(st.value);
|
|
45
|
-
}
|
|
46
|
-
return result;
|
|
47
|
-
};
|
|
48
|
-
const x2c = (x) => {
|
|
49
|
-
if (x === 0) {
|
|
50
|
-
return "";
|
|
51
|
-
}
|
|
52
|
-
const c = getColumnLetterFromNumber(x + 1);
|
|
53
|
-
return x < 0 ? `$${c}` : c;
|
|
54
|
-
};
|
|
55
|
-
const c2x = (col, absolute = false) => {
|
|
56
|
-
const n = getNumberFromColumnLetter(col);
|
|
57
|
-
return absolute ? -n : n;
|
|
58
|
-
};
|
|
59
|
-
const y2r = (y) => {
|
|
60
|
-
if (y === 0) {
|
|
61
|
-
return "";
|
|
62
|
-
}
|
|
63
|
-
return y < 0 ? `$${y}` : String(y);
|
|
64
|
-
};
|
|
65
|
-
const r2y = (row, absolute = false) => {
|
|
66
|
-
if (typeof row === "string") {
|
|
67
|
-
row = parseInt(row, 10);
|
|
68
|
-
}
|
|
69
|
-
return absolute ? -row : row;
|
|
70
|
-
};
|
|
71
|
-
const p2a = ({ y, x }) => {
|
|
72
|
-
return `${x2c(x)}${y2r(y)}`;
|
|
73
|
-
};
|
|
74
|
-
const restoreDoubleQuote = (text) => text.replace(/\x00/g, '"');
|
|
75
|
-
const tsv2matrix = (tsv) => {
|
|
76
|
-
tsv = tsv.replace(/""/g, "\0");
|
|
77
|
-
const rows = [[]];
|
|
78
|
-
let row = rows[0];
|
|
79
|
-
let entering = false;
|
|
80
|
-
let word = "";
|
|
81
|
-
for (let i = 0; i < tsv.length; i++) {
|
|
82
|
-
const s = tsv[i];
|
|
83
|
-
if (s === "\n" && !entering) {
|
|
84
|
-
row.push(restoreDoubleQuote(word));
|
|
85
|
-
word = "";
|
|
86
|
-
row = [];
|
|
87
|
-
rows.push(row);
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
if (s === " ") {
|
|
91
|
-
row.push(restoreDoubleQuote(word));
|
|
92
|
-
word = "";
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
if (s === '"' && !entering && word === "") {
|
|
96
|
-
entering = true;
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
if (s === '"' && entering) {
|
|
100
|
-
entering = false;
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
word += s;
|
|
104
|
-
}
|
|
105
|
-
if (word) {
|
|
106
|
-
row.push(restoreDoubleQuote(word));
|
|
107
|
-
}
|
|
108
|
-
return rows;
|
|
109
|
-
};
|
|
110
|
-
const a2p = (address) => {
|
|
111
|
-
const m = address.match(/(\$)?([A-Z]*)(\$)?([0-9]*)/);
|
|
112
|
-
if (m == null) {
|
|
113
|
-
console.error("invalid address", address);
|
|
114
|
-
return { y: 1, x: 1 };
|
|
115
|
-
}
|
|
116
|
-
const [, absoluteCol, col, absoluteRow, row] = m.slice();
|
|
117
|
-
return { y: r2y(row, !!absoluteRow) || 0, x: c2x(col, !!absoluteCol) || 0 };
|
|
118
|
-
};
|
|
119
|
-
const grantAddressAbsolute = (address, absCol, absRow) => {
|
|
120
|
-
const m = address.match(/([A-Z]*)([0-9]*)/);
|
|
121
|
-
if (m == null) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
const [, col, row] = m.slice();
|
|
125
|
-
return `${absCol ? "$" : ""}${col}${absRow ? "$" : ""}${row}`;
|
|
126
|
-
};
|
|
127
|
-
const stripAddressAbsolute = (address) => {
|
|
128
|
-
return address.replace(/\$/g, "");
|
|
129
|
-
};
|
|
130
|
-
export {
|
|
131
|
-
a2p,
|
|
132
|
-
c2x,
|
|
133
|
-
grantAddressAbsolute,
|
|
134
|
-
p2a,
|
|
135
|
-
r2y,
|
|
136
|
-
stripAddressAbsolute,
|
|
137
|
-
tsv2matrix,
|
|
138
|
-
x2c,
|
|
139
|
-
y2r
|
|
140
|
-
};
|
|
141
|
-
//# sourceMappingURL=converters.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"converters.js","sources":["../../lib/converters.ts"],"sourcesContent":["import type { Address, PointType } from '../types';\nimport { DEFAULT_ALPHABET_CACHE_SIZE } from '../constants';\n\nconst ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\nconst N2C_CACHE = new Map<number, string>();\nconst C2N_CACHE = new Map<string, number>();\n\nconst getColumnLetterFromNumber = (key: number, cacheSize = DEFAULT_ALPHABET_CACHE_SIZE): string => {\n const cached = N2C_CACHE.get(--key);\n if (cached != null) {\n return cached;\n }\n if (key === 0) {\n return '';\n }\n let num = key;\n let result = '';\n do {\n result = ALPHABET[--num % 26] + result;\n num = Math.floor(num / 26);\n } while (num > 0);\n\n N2C_CACHE.set(key, result);\n const it = N2C_CACHE.keys();\n for (let st = it.next(); N2C_CACHE.size > cacheSize; st = it.next()) {\n // @ts-ignore\n N2C_CACHE.delete(st.value);\n }\n return result;\n};\n\nconst getNumberFromColumnLetter = (key: string, cacheSize = DEFAULT_ALPHABET_CACHE_SIZE): number => {\n const cached = C2N_CACHE.get(key);\n if (cached != null) {\n return cached;\n }\n if (key === '') {\n return 0;\n }\n const alpha = key;\n let result = 0;\n for (let digit = 0; digit < alpha.length; digit++) {\n const a = alpha[alpha.length - digit - 1];\n const num = ALPHABET.indexOf(a) + 1;\n result += ALPHABET.length ** digit * num;\n }\n C2N_CACHE.set(key, result);\n const it = C2N_CACHE.keys();\n for (let st = it.next(); C2N_CACHE.size > cacheSize; st = it.next()) {\n // @ts-ignore\n C2N_CACHE.delete(st.value);\n }\n return result;\n};\n\nexport const x2c = (x: number): string => {\n if (x === 0) {\n return '';\n }\n const c = getColumnLetterFromNumber(x + 1);\n return x < 0 ? `$${c}` : c;\n};\n\nexport const c2x = (col: string, absolute = false): number => {\n const n = getNumberFromColumnLetter(col);\n return absolute ? -n : n;\n};\n\nexport const y2r = (y: number) => {\n if (y === 0) {\n return '';\n }\n return y < 0 ? `$${y}` : String(y);\n};\n\nexport const r2y = (row: number | string, absolute = false) => {\n if (typeof row === 'string') {\n row = parseInt(row, 10);\n }\n return absolute ? -row : row;\n};\n\nexport const p2a = ({ y, x }: PointType) => {\n return `${x2c(x)}${y2r(y)}`;\n};\n\nconst restoreDoubleQuote = (text: string) => text.replace(/\\x00/g, '\"');\n\nexport const tsv2matrix = (tsv: string): string[][] => {\n tsv = tsv.replace(/\"\"/g, '\\x00');\n const rows: string[][] = [[]];\n let row = rows[0];\n let entering = false;\n let word = '';\n for (let i = 0; i < tsv.length; i++) {\n const s = tsv[i];\n if (s === '\\n' && !entering) {\n row.push(restoreDoubleQuote(word));\n word = '';\n row = [];\n rows.push(row);\n continue;\n }\n if (s === '\\t') {\n row.push(restoreDoubleQuote(word));\n word = '';\n continue;\n }\n if (s === '\"' && !entering && word === '') {\n entering = true;\n continue;\n }\n if (s === '\"' && entering) {\n entering = false;\n continue;\n }\n word += s;\n }\n if (word) {\n row.push(restoreDoubleQuote(word));\n }\n return rows;\n};\n\nexport const a2p = (address: Address): PointType => {\n const m = address.match(/(\\$)?([A-Z]*)(\\$)?([0-9]*)/);\n if (m == null) {\n console.error('invalid address', address);\n return { y: 1, x: 1 };\n }\n const [, absoluteCol, col, absoluteRow, row] = m.slice();\n return { y: r2y(row, !!absoluteRow) || 0, x: c2x(col, !!absoluteCol) || 0 };\n};\n\nexport const grantAddressAbsolute = (address: Address, absCol: boolean, absRow: boolean) => {\n const m = address.match(/([A-Z]*)([0-9]*)/);\n if (m == null) {\n return;\n }\n const [, col, row] = m.slice();\n return `${absCol ? '$' : ''}${col}${absRow ? '$' : ''}${row}`;\n};\n\nexport const stripAddressAbsolute = (address: Address) => {\n return address.replace(/\\$/g, '');\n};\n"],"names":[],"mappings":"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"}
|