@overmap-ai/core 1.0.51 → 1.0.53-add-agent-slice.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 (53) hide show
  1. package/README.md +4 -4
  2. package/dist/forms/builder/constants.d.ts +1 -0
  3. package/dist/forms/builder/utils.d.ts +1 -1
  4. package/dist/forms/fields/QrField/QrField.d.ts +21 -0
  5. package/dist/forms/fields/QrField/QrInput.d.ts +10 -0
  6. package/dist/forms/fields/QrField/index.d.ts +2 -0
  7. package/dist/forms/fields/constants.d.ts +8 -0
  8. package/dist/forms/fields/index.d.ts +1 -0
  9. package/dist/forms/renderer/FormSubmissionBrowser/FormSubmissionBrowser.d.ts +5 -5
  10. package/dist/forms/renderer/FormSubmissionViewer/FormSubmissionViewer.d.ts +3 -3
  11. package/dist/forms/typings.d.ts +5 -2
  12. package/dist/overmap-core.js +1472 -485
  13. package/dist/overmap-core.js.map +1 -1
  14. package/dist/overmap-core.umd.cjs +1472 -486
  15. package/dist/overmap-core.umd.cjs.map +1 -1
  16. package/dist/sdk/sdk.d.ts +3 -1
  17. package/dist/sdk/services/AttachmentService.d.ts +2 -2
  18. package/dist/sdk/services/DocumentService.d.ts +5 -5
  19. package/dist/sdk/services/IssueService.d.ts +2 -2
  20. package/dist/sdk/services/IssueTypeService.d.ts +9 -0
  21. package/dist/sdk/services/TeamService.d.ts +12 -0
  22. package/dist/sdk/services/UserFormService.d.ts +10 -2
  23. package/dist/sdk/services/UserFormSubmissionService.d.ts +9 -2
  24. package/dist/sdk/services/index.d.ts +2 -0
  25. package/dist/store/slices/agentSlice.d.ts +14 -0
  26. package/dist/store/slices/categorySlice.d.ts +7 -1
  27. package/dist/store/slices/documentSlice.d.ts +326 -13
  28. package/dist/store/slices/formRevisionSlice.d.ts +68 -0
  29. package/dist/store/slices/formSlice.d.ts +117 -0
  30. package/dist/store/slices/formSubmissionSlice.d.ts +49 -0
  31. package/dist/store/slices/index.d.ts +6 -1
  32. package/dist/store/slices/issueSlice.d.ts +11 -2
  33. package/dist/store/slices/issueTypeSlice.d.ts +20 -0
  34. package/dist/store/slices/projectFileSlice.d.ts +6 -1
  35. package/dist/store/slices/teamSlice.d.ts +19 -0
  36. package/dist/store/slices/utils.d.ts +1 -0
  37. package/dist/store/slices/workspaceSlice.d.ts +6 -1
  38. package/dist/store/store.d.ts +20 -4
  39. package/dist/style.css +5 -0
  40. package/dist/typings/files.d.ts +11 -1
  41. package/dist/typings/models/attachments.d.ts +11 -15
  42. package/dist/typings/models/base.d.ts +14 -0
  43. package/dist/typings/models/documents.d.ts +18 -7
  44. package/dist/typings/models/forms.d.ts +9 -13
  45. package/dist/typings/models/index.d.ts +2 -0
  46. package/dist/typings/models/issueTypes.d.ts +8 -0
  47. package/dist/typings/models/issues.d.ts +7 -7
  48. package/dist/typings/models/organizations.d.ts +2 -3
  49. package/dist/typings/models/teams.d.ts +10 -0
  50. package/dist/utils/file.d.ts +2 -0
  51. package/dist/utils/forms.d.ts +2 -0
  52. package/package.json +153 -152
  53. package/dist/store/slices/userFormSlice.d.ts +0 -145
@@ -1,9 +1,17 @@
1
1
  import { CSSColor } from "../colors";
2
+ import { User } from "./users";
2
3
  export interface Model {
3
4
  }
4
5
  export interface OfflineModel extends Model {
5
6
  offline_id: string;
6
7
  }
8
+ export interface SubmittedAtModel extends Model {
9
+ submitted_at: string;
10
+ }
11
+ export interface TimestampedModel extends Model {
12
+ created_at: string;
13
+ updated_at: string;
14
+ }
7
15
  export type Offline<T> = T & {
8
16
  offline_id: string;
9
17
  };
@@ -26,7 +34,13 @@ export interface OwnedByUserOrOrganization {
26
34
  user_owner: number;
27
35
  organization_owner: number;
28
36
  }
37
+ export interface SubmittedAtModel {
38
+ submitted_at: string;
39
+ }
29
40
  export interface IconModel {
30
41
  icon: string;
31
42
  icon_color: CSSColor;
32
43
  }
44
+ export interface CreatedByModel {
45
+ created_by: User["id"];
46
+ }
@@ -1,11 +1,22 @@
1
- import { OfflineModel } from "./base";
2
- import { User } from "./users";
3
- export interface ProjectDocument extends OfflineModel {
1
+ import { CreatedByModel, OfflineModel, Payload } from "./base";
2
+ export type SubmittedDocument = OfflineModel & CreatedByModel & {
4
3
  title: string | null;
5
4
  description: string | null;
6
5
  content: string | null;
7
- created_by: User["id"];
8
- parent_document: ProjectDocument["offline_id"] | null;
9
- children_documents: ProjectDocument["offline_id"][];
10
- }
6
+ parent_document: string | null;
7
+ } & ({
8
+ project: number;
9
+ organization: null;
10
+ } | {
11
+ organization: number;
12
+ project: null;
13
+ });
14
+ export type Document = SubmittedDocument & {
15
+ children_documents: string[];
16
+ };
17
+ export type CreatedDocument = Document & CreatedByModel & {
18
+ created_at: string;
19
+ updated_at: string;
20
+ };
21
+ export type DocumentPayload = Payload<Omit<SubmittedDocument, "project" | "organization" | "created_by">>;
11
22
  export type MovePosition = "left" | "right" | "left-child" | "right-child";
@@ -1,10 +1,11 @@
1
- import { OfflineModel, Payload } from "./base";
1
+ import { CreatedByModel, OfflineModel, Payload, SubmittedAtModel } from "./base";
2
2
  import { BaseSerializedObject, FieldValue, ISerializedField } from "../../forms";
3
- import { UploadedFileModel } from '../files';
3
+ import { FileWithNameModel } from '../files';
4
4
  import { WorkspaceIndexedModel } from "./workspace";
5
5
  export type UserForm = Pick<WorkspaceIndexedModel, "index_workspace"> & {
6
6
  favorite: boolean;
7
7
  component_type?: string;
8
+ issue_type?: string;
8
9
  } & ({
9
10
  owner_organization: number;
10
11
  owner_user: undefined;
@@ -28,28 +29,23 @@ export interface UserFormRevision<TFields extends BaseSerializedObject = ISerial
28
29
  description?: string;
29
30
  fields: TFields[];
30
31
  created_by: number;
32
+ submitted_at: string;
31
33
  revision: number | "Pending";
32
34
  }
33
- export type UserFormRevisionPayload = Omit<Payload<UserFormRevision>, "created_by" | "revision" | "form">;
34
- export interface UserFormSubmission extends OfflineModel {
35
+ export type UserFormRevisionPayload = Omit<Payload<UserFormRevision>, "created_by" | "revision" | "form" | "submitted_at">;
36
+ export interface UserFormSubmission extends OfflineModel, SubmittedAtModel, CreatedByModel {
35
37
  form_revision: string;
36
38
  values: Record<string, FieldValue>;
37
- created_by: number;
38
- created_at: string;
39
- submitted_at: string;
40
- updated_at: string;
41
39
  issue?: string;
42
40
  component?: string;
43
41
  component_stage?: string;
44
42
  }
45
- export interface UserFormSubmissionAttachment extends OfflineModel, UploadedFileModel {
43
+ export interface UserFormSubmissionAttachment extends OfflineModel, FileWithNameModel {
46
44
  submission: string;
47
- file_name: string;
48
45
  field_identifier: string;
49
46
  }
50
- export interface UserFormRevisionAttachment extends OfflineModel, UploadedFileModel {
47
+ export interface UserFormRevisionAttachment extends OfflineModel, FileWithNameModel {
51
48
  revision: string;
52
- file_name: string;
53
49
  field_identifier: string;
54
50
  }
55
- export type UserFormSubmissionPayload = Omit<Payload<UserFormSubmission>, "created_by">;
51
+ export type UserFormSubmissionPayload = Omit<Payload<UserFormSubmission>, "created_by" | "submitted_at">;
@@ -6,6 +6,7 @@ export * from "./components";
6
6
  export * from "./forms";
7
7
  export * from "./geo";
8
8
  export * from "./issues";
9
+ export * from "./issueTypes";
9
10
  export * from "./organizations";
10
11
  export * from "./projects";
11
12
  export * from "./users";
@@ -15,3 +16,4 @@ export * from "./store";
15
16
  export * from "./emailDomain";
16
17
  export * from "./license";
17
18
  export * from "./documents";
19
+ export * from "./teams";
@@ -0,0 +1,8 @@
1
+ import { CreatedByModel, IconModel, OfflineModel, Payload, SubmittedAtModel } from "./base";
2
+ import { Organization } from "./organizations";
3
+ export interface IssueType extends OfflineModel, SubmittedAtModel, IconModel, CreatedByModel {
4
+ name?: string;
5
+ description?: string;
6
+ organization: Organization["id"];
7
+ }
8
+ export type IssueTypePayload = Payload<Omit<IssueType, "created_by" | "submitted_at" | "organization">>;
@@ -1,21 +1,22 @@
1
- import { Offline, OfflineModel } from "./base";
1
+ import { CreatedByModel, Offline, OfflineModel } from "./base";
2
2
  import { IssuePriority, IssueStatus } from "../../enums";
3
3
  import { WorkspaceIndexedModel } from "./workspace";
4
4
  import { Marker } from "./geo";
5
5
  import { CreatedUserForm, SubmittedUserForm, UserForm } from "./forms";
6
6
  import { User } from "./users";
7
7
  import { CSSColor } from "../colors";
8
+ import { CreatedDocument, SubmittedDocument } from "./documents";
8
9
  /**
9
10
  * Represents a model instance that has been submitted to the backend. Some properties (depending on which model, but in
10
11
  * all cases, the `offline_id`) are guaranteed to be set.
11
12
  */
12
- export type Submitted<TModel> = Offline<TModel> & (TModel extends Issue ? SubmittedIssue : TModel extends UserForm ? SubmittedUserForm : Omit<TModel, "created_at" | "created_by" | "id">);
13
+ export type Submitted<TModel> = Offline<TModel> & (TModel extends Issue ? SubmittedIssue : TModel extends UserForm ? SubmittedUserForm : TModel extends Document ? SubmittedDocument : Omit<TModel, "created_at" | "created_by" | "id">);
13
14
  /**
14
15
  * Represents a model instance that has been submitted to the backend, accepted, then downloaded. Created models
15
16
  * typically have additional properties that are only known once it has been processed and accepted by the API, such as
16
17
  * the `created_at` timestamp, which is the time at which the data was written to the database.
17
18
  */
18
- export type Created<TModel> = Submitted<TModel> & (TModel extends Issue ? CreatedIssue : TModel extends IssueComment ? CreatedIssueComment : TModel extends UserForm ? CreatedUserForm : TModel);
19
+ export type Created<TModel> = Submitted<TModel> & (TModel extends Issue ? CreatedIssue : TModel extends IssueComment ? CreatedIssueComment : TModel extends UserForm ? CreatedUserForm : TModel extends Document ? CreatedDocument : TModel);
19
20
  /**
20
21
  * Model instances that are stored in the Redux store can be already-created (and will likely be gotten with the initial
21
22
  * data load), or to-be-created. In the former case, you will get a `Created<TModel>`. In the latter case, you will get
@@ -36,13 +37,13 @@ export interface Issue extends Pick<WorkspaceIndexedModel, "index_workspace"> {
36
37
  category?: string | null;
37
38
  visible_in_workspaces: string[];
38
39
  marker?: Marker | null;
40
+ issue_type?: string | null;
39
41
  }
40
42
  /**
41
43
  * These details need to be provided by the frontend code before submitting to the backend.
42
44
  */
43
- export interface SubmittedIssue extends OfflineModel {
45
+ export interface SubmittedIssue extends OfflineModel, CreatedByModel {
44
46
  submitted_at: string;
45
- created_by: number;
46
47
  status: Exclude<Issue["status"], undefined>;
47
48
  priority: Exclude<Issue["priority"], undefined>;
48
49
  }
@@ -99,9 +100,8 @@ export interface IssueUpdateChangeTypes {
99
100
  } | null;
100
101
  due_date: string;
101
102
  }
102
- export interface IssueUpdate extends OfflineModel {
103
+ export interface IssueUpdate extends OfflineModel, CreatedByModel {
103
104
  submitted_at: string;
104
- created_by: User["id"];
105
105
  issue: OfflineModel["offline_id"];
106
106
  changes: Partial<Record<IssueUpdateChange, IssueUpdateChangeTypes[IssueUpdateChange]>>;
107
107
  }
@@ -1,12 +1,11 @@
1
- import { Model } from "./base";
1
+ import { CreatedByModel, Model } from "./base";
2
2
  import { OrganizationAccess } from "./access";
3
3
  import { EmailDomain } from "./emailDomain";
4
4
  import { User } from "./users";
5
5
  import { License } from "./license";
6
- export interface Organization extends Model {
6
+ export interface Organization extends Model, CreatedByModel {
7
7
  id: number;
8
8
  name: string;
9
- created_by: number;
10
9
  has_access: boolean;
11
10
  }
12
11
  export interface InitialOrganizationData {
@@ -0,0 +1,10 @@
1
+ import { IconModel, OfflineModel, Payload, SubmittedAtModel } from "./base";
2
+ import { Organization } from "./organizations";
3
+ import { User } from "./users";
4
+ export interface Team extends OfflineModel, SubmittedAtModel, IconModel {
5
+ name: string;
6
+ parent: OfflineModel["offline_id"] | null;
7
+ organization: Organization["id"];
8
+ members: User["id"][];
9
+ }
10
+ export type TeamPayload = Omit<Payload<Team>, "organization" | "submitted_at">;
@@ -1,3 +1,4 @@
1
+ import { FileUploadPayload } from "../typings";
1
2
  export declare const getFileS3Key: (file: File, hash?: string) => Promise<string>;
2
3
  export declare function hashFile(file: Blob): Promise<string>;
3
4
  export declare function getFileIdentifier(file: File): string;
@@ -5,6 +6,7 @@ export declare function getRenamedFile(file: File, newName: string): File & {
5
6
  name: string;
6
7
  };
7
8
  export declare function downloadInMemoryFile(filename: string, text: string): void;
9
+ export declare const constructUploadedFilePayloads: (files: File[]) => Promise<FileUploadPayload[]>;
8
10
  export declare const fileToBlob: (dataUrl: string) => Promise<Blob>;
9
11
  export declare const blobToBase64: (blob: Blob) => Promise<string>;
10
12
  export interface useFileSrcProps {
@@ -0,0 +1,2 @@
1
+ import { Stored, UserFormRevision } from "../typings";
2
+ export declare const formRevisionSortFn: (formRevisionA: Stored<UserFormRevision>, formRevisionB: Stored<UserFormRevision>) => 1 | -1;
package/package.json CHANGED
@@ -1,152 +1,153 @@
1
- {
2
- "name": "@overmap-ai/core",
3
- "description": "Core functionality for Overmap",
4
- "author": "Wôrdn Inc.",
5
- "license": "UNLICENSED",
6
- "version": "1.0.51",
7
- "type": "module",
8
- "main": "dist/overmap-core.umd.cjs",
9
- "module": "dist/overmap-core.js",
10
- "types": "dist/index.d.ts",
11
- "scripts": {
12
- "dev": "vite",
13
- "build": "tsc --noEmit && vite build",
14
- "lint": "tsc --noEmit && eslint . --ext ts,tsx,js,jsx --report-unused-disable-directives --max-warnings 0",
15
- "lint:fix": "eslint . --ext ts,tsx,js,jsx --report-unused-disable-directives --max-warnings 0 --fix",
16
- "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md,html,sass,yaml}\"",
17
- "preview": "vite preview",
18
- "prepare": "husky install",
19
- "storybook": "storybook dev -p 6006",
20
- "build-storybook": "storybook build",
21
- "test": "npx vitest"
22
- },
23
- "dependencies": {
24
- "@hello-pangea/dnd": "^16.5.0",
25
- "@redux-offline/redux-offline": "^2.6.0",
26
- "@reduxjs/toolkit": "^1.9.5",
27
- "color": "^4.2.3",
28
- "dependency-graph": "^1.0.0",
29
- "eslint-plugin-vitest": "^0.3.20",
30
- "file-saver": "^2.0.5",
31
- "formik": "^2.4.5",
32
- "idb": "^7.1.1",
33
- "jwt-decode": "^3.1.2",
34
- "leaflet-draw": "^1.0.4",
35
- "leaflet.markercluster": "^1.5.3",
36
- "linkify-react": "^4.1.3",
37
- "linkifyjs": "^4.1.3",
38
- "localforage": "^1.10.0",
39
- "lodash.clonedeep": "^4.5.0",
40
- "lodash.get": "^4.4.2",
41
- "lodash.set": "^4.3.2",
42
- "react-leaflet": "^4.2.1",
43
- "react-pdf": "^8.0.2",
44
- "react-sketch-canvas": "^6.2.0",
45
- "react-spreadsheet": "^0.9.4",
46
- "redux-persist-migrate": "^5.0.0",
47
- "superagent": "^8.1.2",
48
- "uuid": "^9.0.0",
49
- "xlsx": "^0.18.5"
50
- },
51
- "devDependencies": {
52
- "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
53
- "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
54
- "@overmap-ai/blocks": "^1.0.29-alpha.1",
55
- "@rollup/plugin-commonjs": "^25.0.4",
56
- "@storybook/addon-essentials": "7.3.2",
57
- "@storybook/addon-interactions": "7.3.2",
58
- "@storybook/addon-links": "7.3.2",
59
- "@storybook/addon-onboarding": "1.0.8",
60
- "@storybook/blocks": "7.3.2",
61
- "@storybook/react": "7.3.2",
62
- "@storybook/react-vite": "7.3.2",
63
- "@storybook/testing-library": "0.2.0",
64
- "@testing-library/dom": "^9.3.4",
65
- "@testing-library/react": "^14.1.2",
66
- "@testing-library/user-event": "^14.5.2",
67
- "@tiptap/core": "^2.4.0",
68
- "@types/color": "^3.0.4",
69
- "@types/file-saver": "^2.0.7",
70
- "@types/jwt-decode": "^3.1.0",
71
- "@types/leaflet": "^1.9.3",
72
- "@types/lodash.clonedeep": "^4.5.9",
73
- "@types/lodash.get": "^4.4.9",
74
- "@types/lodash.set": "^4.3.9",
75
- "@types/node": "^20.12.11",
76
- "@types/react": "^18.3.1",
77
- "@types/react-dom": "^18.2.7",
78
- "@types/react-redux": "^7.1.26",
79
- "@types/superagent": "^4.1.18",
80
- "@types/uuid": "^9.0.3",
81
- "@types/xlsx": "^0.0.36",
82
- "@typescript-eslint/eslint-plugin": "^6.4.1",
83
- "@typescript-eslint/parser": "^6.4.1",
84
- "@vitejs/plugin-react-swc": "^3.3.2",
85
- "@vitest/coverage-v8": "^1.2.1",
86
- "eslint": "^8.47.0",
87
- "eslint-config-prettier": "^9.0.0",
88
- "eslint-plugin-import": "^2.28.1",
89
- "eslint-plugin-prettier": "^5.0.0",
90
- "eslint-plugin-react": "^7.33.2",
91
- "eslint-plugin-react-hooks": "^4.6.0",
92
- "eslint-plugin-react-refresh": "^0.4.3",
93
- "eslint-plugin-simple-import-sort": "^10.0.0",
94
- "eslint-plugin-storybook": "^0.6.13",
95
- "happy-dom": "^13.3.1",
96
- "husky": "^8.0.3",
97
- "jsdom": "^23.2.0",
98
- "leaflet": "^1.9.0",
99
- "lint-staged": "^15.1.0",
100
- "prettier": "^3.0.2",
101
- "react": "^18.2.0",
102
- "react-dom": "^18.2.0",
103
- "react-hooks": "^1.0.1",
104
- "react-redux": "^8.1.2",
105
- "redux": "^4.2.1",
106
- "rollup-plugin-polyfill-node": "^0.12.0",
107
- "sass": "^1.66.1",
108
- "storybook": "7.3.2",
109
- "typescript": "^5.2.2",
110
- "vite": "^4.4.5",
111
- "vite-plugin-dts": "^3.5.2",
112
- "vite-plugin-externalize-deps": "^0.7.0",
113
- "vitest": "^1.2.1"
114
- },
115
- "peerDependencies": {
116
- "@overmap-ai/blocks": "1.0.8",
117
- "@tiptap/core": "^2.4.0",
118
- "leaflet": "^1.9.0",
119
- "react": "^18.2.0",
120
- "react-dom": "^18.2.0",
121
- "react-redux": "^8.1.2"
122
- },
123
- "resolutions": {
124
- "//": "Workaround for eslint issue: https://github.com/eslint/eslint/discussions/17215",
125
- "strip-ansi": "6.0.1",
126
- "string-width": "4.2.2",
127
- "wrap-ansi": "7.0.0"
128
- },
129
- "lint-staged": {
130
- "src/**/*.{js,jsx,ts,tsx}": [
131
- "yarn lint",
132
- "yarn format"
133
- ]
134
- },
135
- "files": [
136
- "dist"
137
- ],
138
- "keywords": [
139
- "react",
140
- "geospacial",
141
- "map",
142
- "components"
143
- ],
144
- "homepage": "https://overmap.ai",
145
- "repository": {
146
- "type": "git",
147
- "url": "git+https://github.com/hemora-app/overmap-core.git"
148
- },
149
- "bugs": {
150
- "url": "https://github.com/hemora-app/overmap-core/issues"
151
- }
152
- }
1
+ {
2
+ "name": "@overmap-ai/core",
3
+ "description": "Core functionality for Overmap",
4
+ "author": "Wôrdn Inc.",
5
+ "license": "UNLICENSED",
6
+ "version": "1.0.53-add-agent-slice.0",
7
+ "type": "module",
8
+ "main": "dist/overmap-core.umd.cjs",
9
+ "module": "dist/overmap-core.js",
10
+ "types": "dist/index.d.ts",
11
+ "scripts": {
12
+ "dev": "vite",
13
+ "build": "tsc --noEmit && vite build",
14
+ "lint": "tsc --noEmit && eslint . --ext ts,tsx,js,jsx --report-unused-disable-directives --max-warnings 0",
15
+ "lint:fix": "eslint . --ext ts,tsx,js,jsx --report-unused-disable-directives --max-warnings 0 --fix",
16
+ "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md,html,sass,yaml}\"",
17
+ "preview": "vite preview",
18
+ "prepare": "husky install",
19
+ "storybook": "storybook dev -p 6006",
20
+ "build-storybook": "storybook build",
21
+ "test": "npx vitest"
22
+ },
23
+ "dependencies": {
24
+ "@hello-pangea/dnd": "^16.5.0",
25
+ "@redux-offline/redux-offline": "^2.6.0",
26
+ "@reduxjs/toolkit": "^1.9.5",
27
+ "color": "^4.2.3",
28
+ "dependency-graph": "^1.0.0",
29
+ "eslint-plugin-vitest": "^0.3.20",
30
+ "file-saver": "^2.0.5",
31
+ "formik": "^2.4.5",
32
+ "idb": "^7.1.1",
33
+ "jwt-decode": "^3.1.2",
34
+ "leaflet-draw": "^1.0.4",
35
+ "leaflet.markercluster": "^1.5.3",
36
+ "linkify-react": "^4.1.3",
37
+ "linkifyjs": "^4.1.3",
38
+ "localforage": "^1.10.0",
39
+ "lodash.clonedeep": "^4.5.0",
40
+ "lodash.get": "^4.4.2",
41
+ "lodash.set": "^4.3.2",
42
+ "qr-scanner": "^1.4.2",
43
+ "react-leaflet": "^4.2.1",
44
+ "react-pdf": "^8.0.2",
45
+ "react-sketch-canvas": "^6.2.0",
46
+ "react-spreadsheet": "^0.9.4",
47
+ "redux-persist-migrate": "^5.0.0",
48
+ "superagent": "^8.1.2",
49
+ "uuid": "^9.0.0",
50
+ "xlsx": "^0.18.5"
51
+ },
52
+ "devDependencies": {
53
+ "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
54
+ "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
55
+ "@overmap-ai/blocks": "^1.0.29-alpha.1",
56
+ "@rollup/plugin-commonjs": "^25.0.4",
57
+ "@storybook/addon-essentials": "7.3.2",
58
+ "@storybook/addon-interactions": "7.3.2",
59
+ "@storybook/addon-links": "7.3.2",
60
+ "@storybook/addon-onboarding": "1.0.8",
61
+ "@storybook/blocks": "7.3.2",
62
+ "@storybook/react": "7.3.2",
63
+ "@storybook/react-vite": "7.3.2",
64
+ "@storybook/testing-library": "0.2.0",
65
+ "@testing-library/dom": "^9.3.4",
66
+ "@testing-library/react": "^14.1.2",
67
+ "@testing-library/user-event": "^14.5.2",
68
+ "@tiptap/core": "^2.4.0",
69
+ "@types/color": "^3.0.4",
70
+ "@types/file-saver": "^2.0.7",
71
+ "@types/jwt-decode": "^3.1.0",
72
+ "@types/leaflet": "^1.9.3",
73
+ "@types/lodash.clonedeep": "^4.5.9",
74
+ "@types/lodash.get": "^4.4.9",
75
+ "@types/lodash.set": "^4.3.9",
76
+ "@types/node": "^20.12.11",
77
+ "@types/react": "^18.3.1",
78
+ "@types/react-dom": "^18.2.7",
79
+ "@types/react-redux": "^7.1.26",
80
+ "@types/superagent": "^4.1.18",
81
+ "@types/uuid": "^9.0.3",
82
+ "@types/xlsx": "^0.0.36",
83
+ "@typescript-eslint/eslint-plugin": "^6.4.1",
84
+ "@typescript-eslint/parser": "^6.4.1",
85
+ "@vitejs/plugin-react-swc": "^3.3.2",
86
+ "@vitest/coverage-v8": "^1.2.1",
87
+ "eslint": "^8.47.0",
88
+ "eslint-config-prettier": "^9.0.0",
89
+ "eslint-plugin-import": "^2.28.1",
90
+ "eslint-plugin-prettier": "^5.0.0",
91
+ "eslint-plugin-react": "^7.33.2",
92
+ "eslint-plugin-react-hooks": "^4.6.0",
93
+ "eslint-plugin-react-refresh": "^0.4.3",
94
+ "eslint-plugin-simple-import-sort": "^10.0.0",
95
+ "eslint-plugin-storybook": "^0.6.13",
96
+ "happy-dom": "^13.3.1",
97
+ "husky": "^8.0.3",
98
+ "jsdom": "^23.2.0",
99
+ "leaflet": "^1.9.0",
100
+ "lint-staged": "^15.1.0",
101
+ "prettier": "^3.0.2",
102
+ "react": "^18.2.0",
103
+ "react-dom": "^18.2.0",
104
+ "react-hooks": "^1.0.1",
105
+ "react-redux": "^8.1.2",
106
+ "redux": "^4.2.1",
107
+ "rollup-plugin-polyfill-node": "^0.12.0",
108
+ "sass": "^1.66.1",
109
+ "storybook": "7.3.2",
110
+ "typescript": "^5.2.2",
111
+ "vite": "^4.4.5",
112
+ "vite-plugin-dts": "^3.5.2",
113
+ "vite-plugin-externalize-deps": "^0.7.0",
114
+ "vitest": "^1.2.1"
115
+ },
116
+ "peerDependencies": {
117
+ "@overmap-ai/blocks": "1.0.8",
118
+ "@tiptap/core": "^2.4.0",
119
+ "leaflet": "^1.9.0",
120
+ "react": "^18.2.0",
121
+ "react-dom": "^18.2.0",
122
+ "react-redux": "^8.1.2"
123
+ },
124
+ "resolutions": {
125
+ "//": "Workaround for eslint issue: https://github.com/eslint/eslint/discussions/17215",
126
+ "strip-ansi": "6.0.1",
127
+ "string-width": "4.2.2",
128
+ "wrap-ansi": "7.0.0"
129
+ },
130
+ "lint-staged": {
131
+ "src/**/*.{js,jsx,ts,tsx}": [
132
+ "yarn lint",
133
+ "yarn format"
134
+ ]
135
+ },
136
+ "files": [
137
+ "dist"
138
+ ],
139
+ "keywords": [
140
+ "react",
141
+ "geospacial",
142
+ "map",
143
+ "components"
144
+ ],
145
+ "homepage": "https://overmap.ai",
146
+ "repository": {
147
+ "type": "git",
148
+ "url": "git+https://github.com/hemora-app/overmap-core.git"
149
+ },
150
+ "bugs": {
151
+ "url": "https://github.com/hemora-app/overmap-core/issues"
152
+ }
153
+ }