react-native-nitro-xlsx 0.1.1

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 (45) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +73 -0
  3. package/NitroXlsx.podspec +110 -0
  4. package/README.md +340 -0
  5. package/android/CMakeLists.txt +52 -0
  6. package/android/build.gradle +49 -0
  7. package/android/cpp-adapter.cpp +9 -0
  8. package/android/src/main/AndroidManifest.xml +2 -0
  9. package/android/src/main/java/com/margelo/nitro/xlsx/NitroXlsxPackage.kt +22 -0
  10. package/cpp/HybridNitroXlsx.cpp +29 -0
  11. package/cpp/HybridNitroXlsx.hpp +19 -0
  12. package/cpp/HybridXlsxCellFormat.cpp +263 -0
  13. package/cpp/HybridXlsxCellFormat.hpp +111 -0
  14. package/cpp/HybridXlsxWorkbook.cpp +184 -0
  15. package/cpp/HybridXlsxWorkbook.hpp +41 -0
  16. package/cpp/HybridXlsxWorksheet.cpp +316 -0
  17. package/cpp/HybridXlsxWorksheet.hpp +86 -0
  18. package/nitro.json +19 -0
  19. package/nitrogen/generated/.gitattributes +1 -0
  20. package/nitrogen/generated/android/NitroXlsx+autolinking.cmake +84 -0
  21. package/nitrogen/generated/android/NitroXlsx+autolinking.gradle +27 -0
  22. package/nitrogen/generated/android/NitroXlsxOnLoad.cpp +49 -0
  23. package/nitrogen/generated/android/NitroXlsxOnLoad.hpp +34 -0
  24. package/nitrogen/generated/android/kotlin/com/margelo/nitro/xlsx/NitroXlsxOnLoad.kt +35 -0
  25. package/nitrogen/generated/ios/NitroXlsx+autolinking.rb +62 -0
  26. package/nitrogen/generated/ios/NitroXlsx-Swift-Cxx-Bridge.cpp +17 -0
  27. package/nitrogen/generated/ios/NitroXlsx-Swift-Cxx-Bridge.hpp +27 -0
  28. package/nitrogen/generated/ios/NitroXlsx-Swift-Cxx-Umbrella.hpp +38 -0
  29. package/nitrogen/generated/ios/NitroXlsxAutolinking.mm +35 -0
  30. package/nitrogen/generated/ios/NitroXlsxAutolinking.swift +16 -0
  31. package/nitrogen/generated/shared/c++/CellType.hpp +100 -0
  32. package/nitrogen/generated/shared/c++/HybridNitroXlsxSpec.cpp +23 -0
  33. package/nitrogen/generated/shared/c++/HybridNitroXlsxSpec.hpp +68 -0
  34. package/nitrogen/generated/shared/c++/HybridXlsxCellFormatSpec.cpp +62 -0
  35. package/nitrogen/generated/shared/c++/HybridXlsxCellFormatSpec.hpp +104 -0
  36. package/nitrogen/generated/shared/c++/HybridXlsxWorkbookSpec.cpp +27 -0
  37. package/nitrogen/generated/shared/c++/HybridXlsxWorkbookSpec.hpp +77 -0
  38. package/nitrogen/generated/shared/c++/HybridXlsxWorksheetSpec.cpp +69 -0
  39. package/nitrogen/generated/shared/c++/HybridXlsxWorksheetSpec.hpp +120 -0
  40. package/package.json +47 -0
  41. package/src/__mocks__/react-native-nitro-modules.ts +28 -0
  42. package/src/__mocks__/react-native.ts +1 -0
  43. package/src/__tests__/index.test.ts +141 -0
  44. package/src/index.ts +195 -0
  45. package/src/specs/NitroXlsx.nitro.ts +154 -0
@@ -0,0 +1,69 @@
1
+ ///
2
+ /// HybridXlsxWorksheetSpec.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "HybridXlsxWorksheetSpec.hpp"
9
+
10
+ namespace margelo::nitro::xlsx {
11
+
12
+ void HybridXlsxWorksheetSpec::loadHybridMethods() {
13
+ // load base methods/properties
14
+ HybridObject::loadHybridMethods();
15
+ // load custom methods/properties
16
+ registerHybrids(this, [](Prototype& prototype) {
17
+ prototype.registerHybridMethod("writeString", &HybridXlsxWorksheetSpec::writeString);
18
+ prototype.registerHybridMethod("writeNumber", &HybridXlsxWorksheetSpec::writeNumber);
19
+ prototype.registerHybridMethod("writeBoolean", &HybridXlsxWorksheetSpec::writeBoolean);
20
+ prototype.registerHybridMethod("writeBlank", &HybridXlsxWorksheetSpec::writeBlank);
21
+ prototype.registerHybridMethod("writeFormula", &HybridXlsxWorksheetSpec::writeFormula);
22
+ prototype.registerHybridMethod("writeFormulaNum", &HybridXlsxWorksheetSpec::writeFormulaNum);
23
+ prototype.registerHybridMethod("writeFormulaString", &HybridXlsxWorksheetSpec::writeFormulaString);
24
+ prototype.registerHybridMethod("writeFormulaBoolean", &HybridXlsxWorksheetSpec::writeFormulaBoolean);
25
+ prototype.registerHybridMethod("writeArrayFormula", &HybridXlsxWorksheetSpec::writeArrayFormula);
26
+ prototype.registerHybridMethod("writeDatetime", &HybridXlsxWorksheetSpec::writeDatetime);
27
+ prototype.registerHybridMethod("writeURL", &HybridXlsxWorksheetSpec::writeURL);
28
+ prototype.registerHybridMethod("setColumn", &HybridXlsxWorksheetSpec::setColumn);
29
+ prototype.registerHybridMethod("setRow", &HybridXlsxWorksheetSpec::setRow);
30
+ prototype.registerHybridMethod("mergeRange", &HybridXlsxWorksheetSpec::mergeRange);
31
+ prototype.registerHybridMethod("mergeRangeNum", &HybridXlsxWorksheetSpec::mergeRangeNum);
32
+ prototype.registerHybridMethod("insertImage", &HybridXlsxWorksheetSpec::insertImage);
33
+ prototype.registerHybridMethod("insertImageBuffer", &HybridXlsxWorksheetSpec::insertImageBuffer);
34
+ prototype.registerHybridMethod("autofilter", &HybridXlsxWorksheetSpec::autofilter);
35
+ prototype.registerHybridMethod("freezePanes", &HybridXlsxWorksheetSpec::freezePanes);
36
+ prototype.registerHybridMethod("splitPanes", &HybridXlsxWorksheetSpec::splitPanes);
37
+ prototype.registerHybridMethod("setTabColor", &HybridXlsxWorksheetSpec::setTabColor);
38
+ prototype.registerHybridMethod("hide", &HybridXlsxWorksheetSpec::hide);
39
+ prototype.registerHybridMethod("activate", &HybridXlsxWorksheetSpec::activate);
40
+ prototype.registerHybridMethod("setFirstSheet", &HybridXlsxWorksheetSpec::setFirstSheet);
41
+ prototype.registerHybridMethod("protect", &HybridXlsxWorksheetSpec::protect);
42
+ prototype.registerHybridMethod("setPortrait", &HybridXlsxWorksheetSpec::setPortrait);
43
+ prototype.registerHybridMethod("setLandscape", &HybridXlsxWorksheetSpec::setLandscape);
44
+ prototype.registerHybridMethod("setPaper", &HybridXlsxWorksheetSpec::setPaper);
45
+ prototype.registerHybridMethod("setHeader", &HybridXlsxWorksheetSpec::setHeader);
46
+ prototype.registerHybridMethod("setFooter", &HybridXlsxWorksheetSpec::setFooter);
47
+ prototype.registerHybridMethod("setPrintArea", &HybridXlsxWorksheetSpec::setPrintArea);
48
+ prototype.registerHybridMethod("fitToPages", &HybridXlsxWorksheetSpec::fitToPages);
49
+ prototype.registerHybridMethod("setZoom", &HybridXlsxWorksheetSpec::setZoom);
50
+ prototype.registerHybridMethod("setGridlines", &HybridXlsxWorksheetSpec::setGridlines);
51
+ prototype.registerHybridMethod("centerHorizontally", &HybridXlsxWorksheetSpec::centerHorizontally);
52
+ prototype.registerHybridMethod("centerVertically", &HybridXlsxWorksheetSpec::centerVertically);
53
+ prototype.registerHybridMethod("setOutline", &HybridXlsxWorksheetSpec::setOutline);
54
+ prototype.registerHybridMethod("setColumnHidden", &HybridXlsxWorksheetSpec::setColumnHidden);
55
+ prototype.registerHybridMethod("setRowHidden", &HybridXlsxWorksheetSpec::setRowHidden);
56
+ prototype.registerHybridMethod("getCellValue", &HybridXlsxWorksheetSpec::getCellValue);
57
+ prototype.registerHybridMethod("getCellString", &HybridXlsxWorksheetSpec::getCellString);
58
+ prototype.registerHybridMethod("getCellRawValue", &HybridXlsxWorksheetSpec::getCellRawValue);
59
+ prototype.registerHybridMethod("getCellType", &HybridXlsxWorksheetSpec::getCellType);
60
+ prototype.registerHybridMethod("getCellFormat", &HybridXlsxWorksheetSpec::getCellFormat);
61
+ prototype.registerHybridMethod("getRowCount", &HybridXlsxWorksheetSpec::getRowCount);
62
+ prototype.registerHybridMethod("getColumnCount", &HybridXlsxWorksheetSpec::getColumnCount);
63
+ prototype.registerHybridMethod("getLastRow", &HybridXlsxWorksheetSpec::getLastRow);
64
+ prototype.registerHybridMethod("getLastColumn", &HybridXlsxWorksheetSpec::getLastColumn);
65
+ prototype.registerHybridMethod("getName", &HybridXlsxWorksheetSpec::getName);
66
+ });
67
+ }
68
+
69
+ } // namespace margelo::nitro::xlsx
@@ -0,0 +1,120 @@
1
+ ///
2
+ /// HybridXlsxWorksheetSpec.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #if __has_include(<NitroModules/HybridObject.hpp>)
11
+ #include <NitroModules/HybridObject.hpp>
12
+ #else
13
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
14
+ #endif
15
+
16
+ // Forward declaration of `HybridXlsxCellFormatSpec` to properly resolve imports.
17
+ namespace margelo::nitro::xlsx { class HybridXlsxCellFormatSpec; }
18
+ // Forward declaration of `CellType` to properly resolve imports.
19
+ namespace margelo::nitro::xlsx { enum class CellType; }
20
+
21
+ #include <string>
22
+ #include <memory>
23
+ #include "HybridXlsxCellFormatSpec.hpp"
24
+ #include <optional>
25
+ #include <NitroModules/ArrayBuffer.hpp>
26
+ #include <NitroModules/Null.hpp>
27
+ #include <variant>
28
+ #include "CellType.hpp"
29
+
30
+ namespace margelo::nitro::xlsx {
31
+
32
+ using namespace margelo::nitro;
33
+
34
+ /**
35
+ * An abstract base class for `XlsxWorksheet`
36
+ * Inherit this class to create instances of `HybridXlsxWorksheetSpec` in C++.
37
+ * You must explicitly call `HybridObject`'s constructor yourself, because it is virtual.
38
+ * @example
39
+ * ```cpp
40
+ * class HybridXlsxWorksheet: public HybridXlsxWorksheetSpec {
41
+ * public:
42
+ * HybridXlsxWorksheet(...): HybridObject(TAG) { ... }
43
+ * // ...
44
+ * };
45
+ * ```
46
+ */
47
+ class HybridXlsxWorksheetSpec: public virtual HybridObject {
48
+ public:
49
+ // Constructor
50
+ explicit HybridXlsxWorksheetSpec(): HybridObject(TAG) { }
51
+
52
+ // Destructor
53
+ ~HybridXlsxWorksheetSpec() override = default;
54
+
55
+ public:
56
+ // Properties
57
+
58
+
59
+ public:
60
+ // Methods
61
+ virtual void writeString(double row, double col, const std::string& value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
62
+ virtual void writeNumber(double row, double col, double value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
63
+ virtual void writeBoolean(double row, double col, bool value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
64
+ virtual void writeBlank(double row, double col, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
65
+ virtual void writeFormula(double row, double col, const std::string& formula, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
66
+ virtual void writeFormulaNum(double row, double col, const std::string& formula, double number, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
67
+ virtual void writeFormulaString(double row, double col, const std::string& formula, const std::string& str, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
68
+ virtual void writeFormulaBoolean(double row, double col, const std::string& formula, bool boolVal, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
69
+ virtual void writeArrayFormula(double firstRow, double firstCol, double lastRow, double lastCol, const std::string& formula, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
70
+ virtual void writeDatetime(double row, double col, double datetime, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
71
+ virtual void writeURL(double row, double col, const std::string& url, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
72
+ virtual void setColumn(double firstCol, double lastCol, double width, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
73
+ virtual void setRow(double row, double height, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
74
+ virtual void mergeRange(double firstRow, double firstCol, double lastRow, double lastCol, const std::string& value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
75
+ virtual void mergeRangeNum(double firstRow, double firstCol, double lastRow, double lastCol, double value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) = 0;
76
+ virtual void insertImage(double row, double col, const std::string& path, std::optional<double> xOffset, std::optional<double> yOffset, std::optional<double> xScale, std::optional<double> yScale) = 0;
77
+ virtual void insertImageBuffer(double row, double col, const std::shared_ptr<ArrayBuffer>& buffer, const std::string& extension, std::optional<double> xOffset, std::optional<double> yOffset, std::optional<double> xScale, std::optional<double> yScale) = 0;
78
+ virtual void autofilter(double firstRow, double firstCol, double lastRow, double lastCol) = 0;
79
+ virtual void freezePanes(double row, double col) = 0;
80
+ virtual void splitPanes(double row, double col) = 0;
81
+ virtual void setTabColor(double color) = 0;
82
+ virtual void hide() = 0;
83
+ virtual void activate() = 0;
84
+ virtual void setFirstSheet() = 0;
85
+ virtual void protect(const std::optional<std::string>& password) = 0;
86
+ virtual void setPortrait() = 0;
87
+ virtual void setLandscape() = 0;
88
+ virtual void setPaper(double paperType) = 0;
89
+ virtual void setHeader(const std::string& header) = 0;
90
+ virtual void setFooter(const std::string& footer) = 0;
91
+ virtual void setPrintArea(double firstRow, double firstCol, double lastRow, double lastCol) = 0;
92
+ virtual void fitToPages(double width, double height) = 0;
93
+ virtual void setZoom(double scale) = 0;
94
+ virtual void setGridlines(double option) = 0;
95
+ virtual void centerHorizontally() = 0;
96
+ virtual void centerVertically() = 0;
97
+ virtual void setOutline(double level) = 0;
98
+ virtual void setColumnHidden(double firstCol, double lastCol, bool hidden) = 0;
99
+ virtual void setRowHidden(double row, bool hidden) = 0;
100
+ virtual std::variant<bool, nitro::NullType, std::string, double> getCellValue(double row, double col) = 0;
101
+ virtual std::string getCellString(double row, double col) = 0;
102
+ virtual std::string getCellRawValue(double row, double col) = 0;
103
+ virtual CellType getCellType(double row, double col) = 0;
104
+ virtual std::shared_ptr<HybridXlsxCellFormatSpec> getCellFormat(double row, double col) = 0;
105
+ virtual double getRowCount() = 0;
106
+ virtual double getColumnCount() = 0;
107
+ virtual double getLastRow() = 0;
108
+ virtual double getLastColumn() = 0;
109
+ virtual std::string getName() = 0;
110
+
111
+ protected:
112
+ // Hybrid Setup
113
+ void loadHybridMethods() override;
114
+
115
+ protected:
116
+ // Tag for logging
117
+ static constexpr auto TAG = "XlsxWorksheet";
118
+ };
119
+
120
+ } // namespace margelo::nitro::xlsx
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "react-native-nitro-xlsx",
3
+ "version": "0.1.1",
4
+ "description": "Fast XLSX file reading and writing for React Native using OpenXLSX and Nitro Modules",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/zydbkqf/react-native-nitro-xlsx",
7
+ "author": "Denis Cheung (https://github.com/zydbkqf)",
8
+ "type": "module",
9
+ "main": "src/index.ts",
10
+ "types": "src/index.ts",
11
+ "source": "src/index.ts",
12
+ "scripts": {
13
+ "specs": "nitrogen",
14
+ "test": "jest",
15
+ "test:cpp": "cd cpp/tests && [ -n \"$OPENXLSX_PATH\" ] || OPENXLSX_PATH=$HOME/OpenXLSX; cmake -B build -DOPENXLSX_PATH=$OPENXLSX_PATH && cmake --build build && cd build && ctest --output-on-failure",
16
+ "test:cpp:clean": "rm -rf cpp/tests/build"
17
+ },
18
+ "peerDependencies": {
19
+ "react": "*",
20
+ "react-native": ">=0.78.0",
21
+ "react-native-nitro-modules": ">=0.35.8"
22
+ },
23
+ "devDependencies": {
24
+ "@types/jest": "^30.0.0",
25
+ "jest": "^30.4.2",
26
+ "nitrogen": "*",
27
+ "react": "*",
28
+ "react-native": "*",
29
+ "react-native-nitro-modules": ">=0.35.8",
30
+ "ts-jest": "^29.4.11",
31
+ "typescript": "5.4.5"
32
+ },
33
+ "files": [
34
+ "src",
35
+ "cpp",
36
+ "!cpp/tests",
37
+ "android",
38
+ "ios",
39
+ "nitro.json",
40
+ "nitrogen",
41
+ "NitroXlsx.podspec",
42
+ "LICENSE",
43
+ "NOTICE",
44
+ "README.md"
45
+ ],
46
+ "packageManager": "yarn@4.17.1"
47
+ }
@@ -0,0 +1,28 @@
1
+ export type HybridObject<T> = object;
2
+
3
+ export interface ArrayBuffer {
4
+ data(): Uint8Array;
5
+ size(): number;
6
+ }
7
+
8
+ export interface Promise<T> {
9
+ then<R>(onFulfilled: (value: T) => R): Promise<R>;
10
+ catch<R>(onRejected: (reason: any) => R): Promise<R>;
11
+ resolve(value: T): Promise<T>;
12
+ reject(reason: any): Promise<T>;
13
+ create(): Promise<T>;
14
+ }
15
+
16
+ export namespace margelo {
17
+ export namespace nitro {
18
+ export class HybridObject<T> {}
19
+ }
20
+ }
21
+
22
+ export const NitroModules = {
23
+ createHybridObject: <T>(name: string) => ({
24
+ createWorkbook: jest.fn(),
25
+ openWorkbook: jest.fn(),
26
+ openWorkbookFromBuffer: jest.fn(),
27
+ }),
28
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,141 @@
1
+ import {
2
+ NitroXlsx,
3
+ Align,
4
+ VAlign,
5
+ Border,
6
+ Underline,
7
+ Script,
8
+ Pattern,
9
+ Paper,
10
+ Gridlines,
11
+ Colors,
12
+ NumFormat,
13
+ ImagePosition,
14
+ } from '../index';
15
+
16
+ describe('NitroXlsx', () => {
17
+ it('should export NitroXlsx object', () => {
18
+ expect(NitroXlsx).toBeDefined();
19
+ expect(typeof NitroXlsx).toBe('object');
20
+ });
21
+
22
+ it('should have createWorkbook method', () => {
23
+ expect(NitroXlsx.createWorkbook).toBeDefined();
24
+ expect(typeof NitroXlsx.createWorkbook).toBe('function');
25
+ });
26
+
27
+ it('should have openWorkbook method', () => {
28
+ expect(NitroXlsx.openWorkbook).toBeDefined();
29
+ expect(typeof NitroXlsx.openWorkbook).toBe('function');
30
+ });
31
+
32
+ it('should have openWorkbookFromBuffer method', () => {
33
+ expect(NitroXlsx.openWorkbookFromBuffer).toBeDefined();
34
+ expect(typeof NitroXlsx.openWorkbookFromBuffer).toBe('function');
35
+ });
36
+ });
37
+
38
+ describe('Constants', () => {
39
+ describe('Align', () => {
40
+ it('should export Align constants', () => {
41
+ expect(Align).toBeDefined();
42
+ expect(Align.GENERAL).toBe(0);
43
+ expect(Align.LEFT).toBe(1);
44
+ expect(Align.RIGHT).toBe(2);
45
+ expect(Align.CENTER).toBe(3);
46
+ });
47
+ });
48
+
49
+ describe('VAlign', () => {
50
+ it('should export VAlign constants', () => {
51
+ expect(VAlign).toBeDefined();
52
+ expect(VAlign.TOP).toBe(4);
53
+ expect(VAlign.CENTER).toBe(3);
54
+ expect(VAlign.BOTTOM).toBe(5);
55
+ });
56
+ });
57
+
58
+ describe('Border', () => {
59
+ it('should export Border constants', () => {
60
+ expect(Border).toBeDefined();
61
+ expect(Border.NONE).toBe(0);
62
+ expect(Border.THIN).toBe(1);
63
+ expect(Border.MEDIUM).toBe(2);
64
+ expect(Border.THICK).toBe(5);
65
+ });
66
+ });
67
+
68
+ describe('Underline', () => {
69
+ it('should export Underline constants', () => {
70
+ expect(Underline).toBeDefined();
71
+ expect(Underline.NONE).toBe(0);
72
+ expect(Underline.SINGLE).toBe(1);
73
+ expect(Underline.DOUBLE).toBe(2);
74
+ });
75
+ });
76
+
77
+ describe('Script', () => {
78
+ it('should export Script constants', () => {
79
+ expect(Script).toBeDefined();
80
+ expect(Script.BASELINE).toBe(0);
81
+ expect(Script.SUBSCRIPT).toBe(1);
82
+ expect(Script.SUPERSCRIPT).toBe(2);
83
+ });
84
+ });
85
+
86
+ describe('Pattern', () => {
87
+ it('should export Pattern constants', () => {
88
+ expect(Pattern).toBeDefined();
89
+ expect(Pattern.NONE).toBe(0);
90
+ expect(Pattern.SOLID).toBe(1);
91
+ });
92
+ });
93
+
94
+ describe('Paper', () => {
95
+ it('should export Paper constants', () => {
96
+ expect(Paper).toBeDefined();
97
+ expect(Paper.LETTER).toBe(1);
98
+ expect(Paper.A4).toBe(9);
99
+ });
100
+ });
101
+
102
+ describe('Gridlines', () => {
103
+ it('should export Gridlines constants', () => {
104
+ expect(Gridlines).toBeDefined();
105
+ expect(Gridlines.HIDE_ALL).toBe(0);
106
+ expect(Gridlines.SHOW_ALL).toBe(1);
107
+ });
108
+ });
109
+
110
+ describe('Colors', () => {
111
+ it('should export Colors constants', () => {
112
+ expect(Colors).toBeDefined();
113
+ expect(Colors.BLACK).toBe(0x000000);
114
+ expect(Colors.WHITE).toBe(0xFFFFFF);
115
+ expect(Colors.RED).toBe(0xFF0000);
116
+ expect(Colors.GREEN).toBe(0x00FF00);
117
+ expect(Colors.BLUE).toBe(0x0000FF);
118
+ });
119
+ });
120
+
121
+ describe('NumFormat', () => {
122
+ it('should export NumFormat constants', () => {
123
+ expect(NumFormat).toBeDefined();
124
+ expect(NumFormat.GENERAL).toBe(0);
125
+ expect(NumFormat.NUMBER).toBe(1);
126
+ expect(NumFormat.CURRENCY).toBe(5);
127
+ expect(NumFormat.PERCENT).toBe(9);
128
+ expect(NumFormat.DATE_1).toBe(15);
129
+ expect(NumFormat.TEXT).toBe(49);
130
+ });
131
+ });
132
+
133
+ describe('ImagePosition', () => {
134
+ it('should export ImagePosition constants', () => {
135
+ expect(ImagePosition).toBeDefined();
136
+ expect(ImagePosition.MOVE_AND_SIZE).toBe(1);
137
+ expect(ImagePosition.MOVE_DONT_SIZE).toBe(2);
138
+ expect(ImagePosition.DONT_MOVE_DONT_SIZE).toBe(3);
139
+ });
140
+ });
141
+ });
package/src/index.ts ADDED
@@ -0,0 +1,195 @@
1
+ import { NitroModules } from 'react-native-nitro-modules'
2
+ import type { NitroXlsx as NitroXlsxSpec } from './specs/NitroXlsx.nitro'
3
+
4
+ export const NitroXlsx = NitroModules.createHybridObject<NitroXlsxSpec>('NitroXlsx')
5
+
6
+ export type { XlsxWorkbook, XlsxWorksheet, XlsxCellFormat } from './specs/NitroXlsx.nitro'
7
+
8
+ // Cell alignment (based on OpenXLSX XLAlignmentStyle)
9
+ export const Align = {
10
+ GENERAL: 0,
11
+ LEFT: 1,
12
+ RIGHT: 2,
13
+ CENTER: 3,
14
+ FILL: 6,
15
+ JUSTIFY: 7,
16
+ CENTER_CONTINUOUS: 8,
17
+ DISTRIBUTED: 9,
18
+ } as const
19
+
20
+ export const VAlign = {
21
+ TOP: 4,
22
+ CENTER: 3,
23
+ BOTTOM: 5,
24
+ JUSTIFY: 7,
25
+ DISTRIBUTED: 9,
26
+ } as const
27
+
28
+ // Border styles (based on OpenXLSX XLLineStyle)
29
+ export const Border = {
30
+ NONE: 0,
31
+ THIN: 1,
32
+ MEDIUM: 2,
33
+ DASHED: 3,
34
+ DOTTED: 4,
35
+ THICK: 5,
36
+ DOUBLE: 6,
37
+ HAIR: 7,
38
+ MEDIUM_DASHED: 8,
39
+ DASH_DOT: 9,
40
+ MEDIUM_DASH_DOT: 10,
41
+ DASH_DOT_DOT: 11,
42
+ MEDIUM_DASH_DOT_DOT: 12,
43
+ SLANT_DASH_DOT: 13,
44
+ } as const
45
+
46
+ // Underline styles (based on OpenXLSX XLUnderlineStyle)
47
+ export const Underline = {
48
+ NONE: 0,
49
+ SINGLE: 1,
50
+ DOUBLE: 2,
51
+ } as const
52
+
53
+ // Script styles (based on OpenXLSX XLVerticalAlignRunStyle)
54
+ export const Script = {
55
+ BASELINE: 0,
56
+ SUBSCRIPT: 1,
57
+ SUPERSCRIPT: 2,
58
+ } as const
59
+
60
+ // Pattern fill styles (based on OpenXLSX XLPatternType)
61
+ export const Pattern = {
62
+ NONE: 0,
63
+ SOLID: 1,
64
+ MEDIUM_GRAY: 2,
65
+ DARK_GRAY: 3,
66
+ LIGHT_GRAY: 4,
67
+ DARK_HORIZONTAL: 5,
68
+ DARK_VERTICAL: 6,
69
+ DARK_DOWN: 7,
70
+ DARK_UP: 8,
71
+ DARK_GRID: 9,
72
+ DARK_TRELLIS: 10,
73
+ LIGHT_HORIZONTAL: 11,
74
+ LIGHT_VERTICAL: 12,
75
+ LIGHT_DOWN: 13,
76
+ LIGHT_UP: 14,
77
+ LIGHT_GRID: 15,
78
+ LIGHT_TRELLIS: 16,
79
+ GRAY_125: 17,
80
+ GRAY_0625: 18,
81
+ } as const
82
+
83
+ // Paper types
84
+ export const Paper = {
85
+ DEFAULT: 0,
86
+ LETTER: 1,
87
+ LETTER_SMALL: 2,
88
+ TABLOID: 3,
89
+ LEDGER: 4,
90
+ LEGAL: 5,
91
+ STATEMENT: 6,
92
+ EXECUTIVE: 7,
93
+ A3: 8,
94
+ A4: 9,
95
+ A4_SMALL: 10,
96
+ A5: 11,
97
+ B4: 12,
98
+ B5: 13,
99
+ FOLIO: 14,
100
+ QUARTO: 15,
101
+ SIZE10x14: 16,
102
+ SIZE11x17: 17,
103
+ NOTE: 18,
104
+ ENV_9: 19,
105
+ ENV_10: 20,
106
+ ENV_11: 21,
107
+ ENV_12: 22,
108
+ ENV_14: 23,
109
+ ENV_DL: 27,
110
+ ENV_C5: 28,
111
+ ENV_C3: 29,
112
+ ENV_C4: 30,
113
+ ENV_C6: 31,
114
+ ENV_C65: 32,
115
+ ENV_B4: 33,
116
+ ENV_B5: 34,
117
+ ENV_B6: 35,
118
+ ENV_ITALY: 36,
119
+ ENV_MONARCH: 37,
120
+ ENV_PERSONAL: 38,
121
+ ENV_US9: 39,
122
+ ENV_US10: 40,
123
+ ENV_US11: 41,
124
+ ENV_US12: 42,
125
+ } as const
126
+
127
+ // Gridline options
128
+ export const Gridlines = {
129
+ HIDE_ALL: 0,
130
+ SHOW_ALL: 1,
131
+ SHOW_PRINT: 2,
132
+ } as const
133
+
134
+ // Common colors
135
+ export const Colors = {
136
+ BLACK: 0x000000,
137
+ WHITE: 0xFFFFFF,
138
+ RED: 0xFF0000,
139
+ GREEN: 0x00FF00,
140
+ BLUE: 0x0000FF,
141
+ YELLOW: 0xFFFF00,
142
+ CYAN: 0x00FFFF,
143
+ MAGENTA: 0xFF00FF,
144
+ GRAY: 0x808080,
145
+ GREY: 0x808080,
146
+ ORANGE: 0xFFA500,
147
+ PURPLE: 0x800080,
148
+ PINK: 0xFFC0CB,
149
+ BROWN: 0xA52A2A,
150
+ LIME: 0x00FF00,
151
+ NAVY: 0x000080,
152
+ TEAL: 0x008080,
153
+ MAROON: 0x800000,
154
+ OLIVE: 0x808000,
155
+ SILVER: 0xC0C0C0,
156
+ AQUA: 0x00FFFF,
157
+ FUCHSIA: 0xFF00FF,
158
+ } as const
159
+
160
+ // Built-in number format indices
161
+ export const NumFormat = {
162
+ GENERAL: 0,
163
+ NUMBER: 1,
164
+ NUMBER_2: 2,
165
+ NUMBER_SEP: 3,
166
+ NUMBER_SEP_2: 4,
167
+ CURRENCY: 5,
168
+ CURRENCY_2: 6,
169
+ CURRENCY_SYMBOL: 7,
170
+ CURRENCY_SYMBOL_2: 8,
171
+ PERCENT: 9,
172
+ PERCENT_2: 10,
173
+ SCIENTIFIC: 11,
174
+ SCIENTIFIC_2: 12,
175
+ FRACTION_1: 13,
176
+ FRACTION_2: 14,
177
+ DATE_1: 15,
178
+ DATE_2: 16,
179
+ DATE_3: 17,
180
+ DATE_4: 18,
181
+ DATE_5: 19,
182
+ TIME_1: 20,
183
+ TIME_2: 21,
184
+ TIME_3: 22,
185
+ TIME_4: 23,
186
+ DATETIME: 22,
187
+ TEXT: 49,
188
+ } as const
189
+
190
+ // Image object position
191
+ export const ImagePosition = {
192
+ MOVE_AND_SIZE: 1,
193
+ MOVE_DONT_SIZE: 2,
194
+ DONT_MOVE_DONT_SIZE: 3,
195
+ } as const