@morphika/andami 0.2.5 → 0.2.7

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/package.json CHANGED
@@ -1,212 +1,223 @@
1
- {
2
- "name": "@morphika/andami",
3
- "version": "0.2.5",
4
- "description": "Visual Page Builder — core library. A reusable website builder with visual editing, CMS integration, and asset management.",
5
- "type": "module",
6
- "license": "MIT",
7
- "repository": {
8
- "type": "git",
9
- "url": "https://github.com/MorphikaStudio/Morphika_Andami.git"
10
- },
11
- "keywords": [
12
- "visual-builder",
13
- "website-builder",
14
- "cms",
15
- "next.js",
16
- "sanity",
17
- "page-builder",
18
- "morphika"
19
- ],
20
- "publishConfig": {
21
- "access": "public"
22
- },
23
- "files": [
24
- "admin/",
25
- "app/",
26
- "components/",
27
- "lib/",
28
- "sanity/",
29
- "site/",
30
- "studio/",
31
- "styles/",
32
- "tsconfig.json",
33
- "LICENSE",
34
- "!**/__tests__/",
35
- "!**/*.test.ts",
36
- "!**/*.test.tsx",
37
- "!**/*.spec.ts",
38
- "!**/*.spec.tsx",
39
- "!**/archive/"
40
- ],
41
- "scripts": {
42
- "prepack": "node scripts/prepack.mjs",
43
- "test": "vitest",
44
- "test:run": "vitest run",
45
- "lint": "eslint",
46
- "typecheck": "tsc --noEmit"
47
- },
48
- "exports": {
49
- "./config": "./lib/config/index.ts",
50
- "./config/types": "./lib/config/types.ts",
51
- "./components/blocks": "./components/blocks/index.ts",
52
- "./components/blocks/*": "./components/blocks/*.tsx",
53
- "./components/builder": "./components/builder/index.ts",
54
- "./components/builder/*": "./components/builder/*.tsx",
55
- "./components/builder/editors/*": "./components/builder/editors/*.tsx",
56
- "./components/builder/settings-panel": "./components/builder/settings-panel/index.ts",
57
- "./components/builder/settings-panel/*": "./components/builder/settings-panel/*.tsx",
58
- "./components/builder/settings-panel/responsive-helpers": "./components/builder/settings-panel/responsive-helpers.ts",
59
- "./components/builder/asset-browser": "./components/builder/asset-browser/index.ts",
60
- "./components/builder/asset-browser/*": "./components/builder/asset-browser/*.tsx",
61
- "./components/builder/asset-browser/helpers": "./components/builder/asset-browser/helpers.ts",
62
- "./components/builder/asset-browser/types": "./components/builder/asset-browser/types.ts",
63
- "./components/builder/asset-browser/useAssetBrowser": "./components/builder/asset-browser/useAssetBrowser.ts",
64
- "./components/builder/asset-browser/useR2DragDrop": "./components/builder/asset-browser/useR2DragDrop.ts",
65
- "./components/builder/asset-browser/useR2Operations": "./components/builder/asset-browser/useR2Operations.ts",
66
- "./components/builder/live-preview": "./components/builder/live-preview/index.ts",
67
- "./components/builder/live-preview/*": "./components/builder/live-preview/*.tsx",
68
- "./components/admin": "./components/admin/index.ts",
69
- "./components/admin/*": "./components/admin/*.tsx",
70
- "./components/admin/nav-builder": "./components/admin/nav-builder/index.ts",
71
- "./components/admin/nav-builder/*": "./components/admin/nav-builder/*.tsx",
72
- "./components/admin/nav-builder/nav-builder-utils": "./components/admin/nav-builder/nav-builder-utils.ts",
73
- "./components/admin/styles": "./components/admin/styles/index.ts",
74
- "./components/admin/styles/*": "./components/admin/styles/*.tsx",
75
- "./components/ui/*": "./components/ui/*.tsx",
76
- "./lib/builder": "./lib/builder/index.ts",
77
- "./lib/builder/*": "./lib/builder/*.ts",
78
- "./lib/sanity/client": "./lib/sanity/client.ts",
79
- "./lib/sanity/writeClient": "./lib/sanity/writeClient.ts",
80
- "./lib/sanity/queries": "./lib/sanity/queries.ts",
81
- "./lib/sanity/types": "./lib/sanity/types.ts",
82
- "./lib/animation/*": "./lib/animation/*.ts",
83
- "./lib/shader/glsl": "./lib/shader/glsl/index.ts",
84
- "./lib/storage": "./lib/storage/index.ts",
85
- "./lib/storage/*": "./lib/storage/*.ts",
86
- "./lib/contexts/*": "./lib/contexts/*.tsx",
87
- "./lib/styles/provider": "./lib/styles/provider.tsx",
88
- "./lib/hooks/*": "./lib/hooks/*.ts",
89
- "./lib/thumbnails/*": "./lib/thumbnails/*.ts",
90
- "./lib/assets": "./lib/assets.ts",
91
- "./lib/auth": "./lib/auth.ts",
92
- "./lib/auth-token": "./lib/auth-token.ts",
93
- "./lib/csrf": "./lib/csrf.ts",
94
- "./lib/csrf-client": "./lib/csrf-client.ts",
95
- "./lib/security": "./lib/security.ts",
96
- "./lib/bot-guard": "./lib/bot-guard.ts",
97
- "./lib/sanitize": "./lib/sanitize.ts",
98
- "./lib/logger": "./lib/logger.ts",
99
- "./lib/audit": "./lib/audit.ts",
100
- "./lib/revalidate": "./lib/revalidate.ts",
101
- "./lib/color-utils": "./lib/color-utils.ts",
102
- "./lib/format-utils": "./lib/format-utils.ts",
103
- "./lib/utils": "./lib/utils.ts",
104
- "./lib/asset-retry": "./lib/asset-retry.ts",
105
- "./sanity/schemas": "./sanity/schemas/index.ts",
106
- "./sanity/schemas/*": "./sanity/schemas/*.ts",
107
- "./sanity/schemas/blocks": "./sanity/schemas/blocks/index.ts",
108
- "./sanity/schemas/blocks/*": "./sanity/schemas/blocks/*.ts",
109
- "./sanity/schemas/objects/*": "./sanity/schemas/objects/*.ts",
110
- "./sanity/compose": "./sanity/compose.ts",
111
- "./sanity/config": "./sanity/sanity.config.ts",
112
- "./styles/base.css": "./styles/base.css",
113
- "./styles/animations.css": "./styles/animations.css",
114
- "./styles/admin.css": "./styles/admin.css",
115
- "./styles/globals.css": "./styles/globals.css",
116
- "./site": "./site/index.ts",
117
- "./site/page": "./site/page.ts",
118
- "./site/work": "./site/work.ts",
119
- "./site/preview": "./site/preview.ts",
120
- "./site/not-found": "./site/not-found.ts",
121
- "./site/error": "./site/error.ts",
122
- "./site/robots": "./site/robots.ts",
123
- "./site/sitemap": "./site/sitemap.ts",
124
- "./admin": "./admin/index.ts",
125
- "./admin/login": "./admin/login.ts",
126
- "./admin/pages": "./admin/pages.ts",
127
- "./admin/pages/editor": "./admin/pages-editor.ts",
128
- "./admin/projects": "./admin/projects.ts",
129
- "./admin/projects/editor": "./admin/projects-editor.ts",
130
- "./admin/styles": "./admin/styles.ts",
131
- "./admin/navigation": "./admin/navigation.ts",
132
- "./admin/storage": "./admin/storage.ts",
133
- "./admin/assets": "./admin/assets.ts",
134
- "./admin/database": "./admin/database.ts",
135
- "./admin/settings": "./admin/settings.ts",
136
- "./admin/setup": "./admin/setup.ts",
137
- "./components/admin/setup-wizard": "./components/admin/setup-wizard/index.ts",
138
- "./components/admin/setup-wizard/*": "./components/admin/setup-wizard/*.tsx",
139
- "./lib/setup/detect": "./lib/setup/detect.ts",
140
- "./studio": "./studio/index.ts",
141
- "./api/admin/auth": "./app/api/admin/auth/route.ts",
142
- "./api/admin/pages": "./app/api/admin/pages/route.ts",
143
- "./api/admin/pages/slug": "./app/api/admin/pages/[slug]/route.ts",
144
- "./api/admin/pages/duplicate": "./app/api/admin/pages/[slug]/duplicate/route.ts",
145
- "./api/admin/pages/set-home": "./app/api/admin/pages/[slug]/set-home/route.ts",
146
- "./api/admin/assets/scan": "./app/api/admin/assets/scan/route.ts",
147
- "./api/admin/assets/registry": "./app/api/admin/assets/registry/route.ts",
148
- "./api/admin/assets/relink": "./app/api/admin/assets/relink/route.ts",
149
- "./api/admin/assets/relink-confirm": "./app/api/admin/assets/relink/confirm/route.ts",
150
- "./api/admin/assets/file": "./app/api/admin/assets/file/route.ts",
151
- "./api/admin/assets/register": "./app/api/admin/assets/register/route.ts",
152
- "./api/admin/assets/health": "./app/api/admin/assets/health/route.ts",
153
- "./api/admin/r2/connect": "./app/api/admin/r2/connect/route.ts",
154
- "./api/admin/r2/disconnect": "./app/api/admin/r2/disconnect/route.ts",
155
- "./api/admin/r2/status": "./app/api/admin/r2/status/route.ts",
156
- "./api/admin/r2/upload-url": "./app/api/admin/r2/upload-url/route.ts",
157
- "./api/admin/r2/delete": "./app/api/admin/r2/delete/route.ts",
158
- "./api/admin/r2/rename": "./app/api/admin/r2/rename/route.ts",
159
- "./api/admin/custom-sections": "./app/api/admin/custom-sections/route.ts",
160
- "./api/admin/custom-sections/slug": "./app/api/admin/custom-sections/[slug]/route.ts",
161
- "./api/admin/styles": "./app/api/admin/styles/route.ts",
162
- "./api/admin/styles/fonts": "./app/api/admin/styles/fonts/route.ts",
163
- "./api/admin/settings": "./app/api/admin/settings/route.ts",
164
- "./api/admin/database": "./app/api/admin/database/route.ts",
165
- "./api/admin/setup": "./app/api/admin/setup/route.ts",
166
- "./api/admin/setup/complete": "./app/api/admin/setup/complete/route.ts",
167
- "./api/admin/preview": "./app/api/admin/preview/route.ts",
168
- "./api/admin/revalidate": "./app/api/admin/revalidate/route.ts",
169
- "./api/admin/storage/switch": "./app/api/admin/storage/switch/route.ts",
170
- "./api/styles": "./app/api/styles/route.ts",
171
- "./api/projects": "./app/api/projects/route.ts",
172
- "./api/assets": "./app/api/assets/[...path]/route.ts",
173
- "./api/custom-sections": "./app/api/custom-sections/[id]/route.ts",
174
- "./api/draft-mode/enable": "./app/api/draft-mode/enable/route.ts",
175
- "./api/draft-mode/disable": "./app/api/draft-mode/disable/route.ts"
176
- },
177
- "peerDependencies": {
178
- "next": ">=16.0.0",
179
- "react": ">=19.0.0",
180
- "react-dom": ">=19.0.0"
181
- },
182
- "dependencies": {
183
- "@aws-sdk/client-s3": "^3.1021.0",
184
- "@aws-sdk/s3-request-presigner": "^3.1021.0",
185
- "@dnd-kit/core": "^6.3.1",
186
- "@dnd-kit/sortable": "^10.0.0",
187
- "@dnd-kit/utilities": "^3.2.2",
188
- "next-sanity": "^12.1.5",
189
- "ogl": "^1.0.8",
190
- "sanity": "^5.17.1",
191
- "zustand": "^5.0.12"
192
- },
193
- "devDependencies": {
194
- "@tailwindcss/postcss": "^4",
195
- "@testing-library/dom": "^10.4.1",
196
- "@testing-library/jest-dom": "^6.6.3",
197
- "@testing-library/react": "^16.3.0",
198
- "@testing-library/user-event": "^14.6.1",
199
- "@types/node": "^20",
200
- "@types/react": "^19",
201
- "@types/react-dom": "^19",
202
- "eslint": "^9",
203
- "eslint-config-next": "16.2.1",
204
- "jsdom": "^26.1.0",
205
- "next": "16.2.1",
206
- "react": "19.2.4",
207
- "react-dom": "19.2.4",
208
- "tailwindcss": "^4",
209
- "typescript": "^5",
210
- "vitest": "^4.1.2"
211
- }
212
- }
1
+ {
2
+ "name": "@morphika/andami",
3
+ "version": "0.2.7",
4
+ "description": "Visual Page Builder — core library. A reusable website builder with visual editing, CMS integration, and asset management.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/MorphikaStudio/Morphika_Andami.git"
10
+ },
11
+ "keywords": [
12
+ "visual-builder",
13
+ "website-builder",
14
+ "cms",
15
+ "next.js",
16
+ "sanity",
17
+ "page-builder",
18
+ "morphika"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "files": [
24
+ "admin/",
25
+ "app/",
26
+ "components/",
27
+ "lib/",
28
+ "sanity/",
29
+ "site/",
30
+ "studio/",
31
+ "styles/",
32
+ "tsconfig.json",
33
+ "LICENSE",
34
+ "!**/__tests__/",
35
+ "!**/*.test.ts",
36
+ "!**/*.test.tsx",
37
+ "!**/*.spec.ts",
38
+ "!**/*.spec.tsx",
39
+ "!**/archive/"
40
+ ],
41
+ "scripts": {
42
+ "prepack": "node scripts/prepack.mjs",
43
+ "test": "vitest",
44
+ "test:run": "vitest run",
45
+ "lint": "eslint",
46
+ "typecheck": "tsc --noEmit"
47
+ },
48
+ "exports": {
49
+ "./config": "./lib/config/index.ts",
50
+ "./config/types": "./lib/config/types.ts",
51
+ "./components/blocks": "./components/blocks/index.ts",
52
+ "./components/blocks/*": "./components/blocks/*.tsx",
53
+ "./components/builder": "./components/builder/index.ts",
54
+ "./components/builder/*": "./components/builder/*.tsx",
55
+ "./components/builder/editors/*": "./components/builder/editors/*.tsx",
56
+ "./components/builder/settings-panel": "./components/builder/settings-panel/index.ts",
57
+ "./components/builder/settings-panel/*": "./components/builder/settings-panel/*.tsx",
58
+ "./components/builder/settings-panel/responsive-helpers": "./components/builder/settings-panel/responsive-helpers.ts",
59
+ "./components/builder/asset-browser": "./components/builder/asset-browser/index.ts",
60
+ "./components/builder/asset-browser/*": "./components/builder/asset-browser/*.tsx",
61
+ "./components/builder/asset-browser/helpers": "./components/builder/asset-browser/helpers.ts",
62
+ "./components/builder/asset-browser/types": "./components/builder/asset-browser/types.ts",
63
+ "./components/builder/asset-browser/useAssetBrowser": "./components/builder/asset-browser/useAssetBrowser.ts",
64
+ "./components/builder/asset-browser/useR2DragDrop": "./components/builder/asset-browser/useR2DragDrop.ts",
65
+ "./components/builder/asset-browser/useR2Operations": "./components/builder/asset-browser/useR2Operations.ts",
66
+ "./components/builder/live-preview": "./components/builder/live-preview/index.ts",
67
+ "./components/builder/live-preview/*": "./components/builder/live-preview/*.tsx",
68
+ "./components/admin": "./components/admin/index.ts",
69
+ "./components/admin/*": "./components/admin/*.tsx",
70
+ "./components/admin/nav-builder": "./components/admin/nav-builder/index.ts",
71
+ "./components/admin/nav-builder/*": "./components/admin/nav-builder/*.tsx",
72
+ "./components/admin/nav-builder/nav-builder-utils": "./components/admin/nav-builder/nav-builder-utils.ts",
73
+ "./components/admin/styles": "./components/admin/styles/index.ts",
74
+ "./components/admin/styles/*": "./components/admin/styles/*.tsx",
75
+ "./components/ui/*": "./components/ui/*.tsx",
76
+ "./lib/builder": "./lib/builder/index.ts",
77
+ "./lib/builder/*": "./lib/builder/*.ts",
78
+ "./lib/sanity/client": "./lib/sanity/client.ts",
79
+ "./lib/sanity/writeClient": "./lib/sanity/writeClient.ts",
80
+ "./lib/sanity/queries": "./lib/sanity/queries.ts",
81
+ "./lib/sanity/types": "./lib/sanity/types.ts",
82
+ "./lib/editor": "./lib/editor/index.ts",
83
+ "./lib/editor/*": "./lib/editor/*.ts",
84
+ "./lib/animation/*": "./lib/animation/*.ts",
85
+ "./lib/shader/glsl": "./lib/shader/glsl/index.ts",
86
+ "./lib/storage": "./lib/storage/index.ts",
87
+ "./lib/storage/*": "./lib/storage/*.ts",
88
+ "./lib/contexts/*": "./lib/contexts/*.tsx",
89
+ "./lib/styles/provider": "./lib/styles/provider.tsx",
90
+ "./lib/hooks/*": "./lib/hooks/*.ts",
91
+ "./lib/thumbnails/*": "./lib/thumbnails/*.ts",
92
+ "./lib/assets": "./lib/assets.ts",
93
+ "./lib/auth": "./lib/auth.ts",
94
+ "./lib/auth-token": "./lib/auth-token.ts",
95
+ "./lib/csrf": "./lib/csrf.ts",
96
+ "./lib/csrf-client": "./lib/csrf-client.ts",
97
+ "./lib/security": "./lib/security.ts",
98
+ "./lib/bot-guard": "./lib/bot-guard.ts",
99
+ "./lib/sanitize": "./lib/sanitize.ts",
100
+ "./lib/logger": "./lib/logger.ts",
101
+ "./lib/audit": "./lib/audit.ts",
102
+ "./lib/revalidate": "./lib/revalidate.ts",
103
+ "./lib/color-utils": "./lib/color-utils.ts",
104
+ "./lib/format-utils": "./lib/format-utils.ts",
105
+ "./lib/utils": "./lib/utils.ts",
106
+ "./lib/asset-retry": "./lib/asset-retry.ts",
107
+ "./sanity/schemas": "./sanity/schemas/index.ts",
108
+ "./sanity/schemas/*": "./sanity/schemas/*.ts",
109
+ "./sanity/schemas/blocks": "./sanity/schemas/blocks/index.ts",
110
+ "./sanity/schemas/blocks/*": "./sanity/schemas/blocks/*.ts",
111
+ "./sanity/schemas/objects/*": "./sanity/schemas/objects/*.ts",
112
+ "./sanity/compose": "./sanity/compose.ts",
113
+ "./sanity/config": "./sanity/sanity.config.ts",
114
+ "./styles/base.css": "./styles/base.css",
115
+ "./styles/animations.css": "./styles/animations.css",
116
+ "./styles/admin.css": "./styles/admin.css",
117
+ "./styles/globals.css": "./styles/globals.css",
118
+ "./site": "./site/index.ts",
119
+ "./site/page": "./site/page.ts",
120
+ "./site/work": "./site/work.ts",
121
+ "./site/preview": "./site/preview.ts",
122
+ "./site/not-found": "./site/not-found.ts",
123
+ "./site/error": "./site/error.ts",
124
+ "./site/robots": "./site/robots.ts",
125
+ "./site/sitemap": "./site/sitemap.ts",
126
+ "./admin": "./admin/index.ts",
127
+ "./admin/login": "./admin/login.ts",
128
+ "./admin/pages": "./admin/pages.ts",
129
+ "./admin/pages/editor": "./admin/pages-editor.ts",
130
+ "./admin/projects": "./admin/projects.ts",
131
+ "./admin/projects/editor": "./admin/projects-editor.ts",
132
+ "./admin/styles": "./admin/styles.ts",
133
+ "./admin/navigation": "./admin/navigation.ts",
134
+ "./admin/storage": "./admin/storage.ts",
135
+ "./admin/assets": "./admin/assets.ts",
136
+ "./admin/database": "./admin/database.ts",
137
+ "./admin/settings": "./admin/settings.ts",
138
+ "./admin/setup": "./admin/setup.ts",
139
+ "./components/admin/setup-wizard": "./components/admin/setup-wizard/index.ts",
140
+ "./components/admin/setup-wizard/*": "./components/admin/setup-wizard/*.tsx",
141
+ "./lib/setup/detect": "./lib/setup/detect.ts",
142
+ "./studio": "./studio/index.ts",
143
+ "./api/admin/auth": "./app/api/admin/auth/route.ts",
144
+ "./api/admin/pages": "./app/api/admin/pages/route.ts",
145
+ "./api/admin/pages/slug": "./app/api/admin/pages/[slug]/route.ts",
146
+ "./api/admin/pages/duplicate": "./app/api/admin/pages/[slug]/duplicate/route.ts",
147
+ "./api/admin/pages/set-home": "./app/api/admin/pages/[slug]/set-home/route.ts",
148
+ "./api/admin/assets/scan": "./app/api/admin/assets/scan/route.ts",
149
+ "./api/admin/assets/registry": "./app/api/admin/assets/registry/route.ts",
150
+ "./api/admin/assets/relink": "./app/api/admin/assets/relink/route.ts",
151
+ "./api/admin/assets/relink-confirm": "./app/api/admin/assets/relink/confirm/route.ts",
152
+ "./api/admin/assets/file": "./app/api/admin/assets/file/route.ts",
153
+ "./api/admin/assets/register": "./app/api/admin/assets/register/route.ts",
154
+ "./api/admin/assets/health": "./app/api/admin/assets/health/route.ts",
155
+ "./api/admin/r2/connect": "./app/api/admin/r2/connect/route.ts",
156
+ "./api/admin/r2/disconnect": "./app/api/admin/r2/disconnect/route.ts",
157
+ "./api/admin/r2/status": "./app/api/admin/r2/status/route.ts",
158
+ "./api/admin/r2/upload-url": "./app/api/admin/r2/upload-url/route.ts",
159
+ "./api/admin/r2/delete": "./app/api/admin/r2/delete/route.ts",
160
+ "./api/admin/r2/rename": "./app/api/admin/r2/rename/route.ts",
161
+ "./api/admin/custom-sections": "./app/api/admin/custom-sections/route.ts",
162
+ "./api/admin/custom-sections/slug": "./app/api/admin/custom-sections/[slug]/route.ts",
163
+ "./api/admin/styles": "./app/api/admin/styles/route.ts",
164
+ "./api/admin/styles/fonts": "./app/api/admin/styles/fonts/route.ts",
165
+ "./api/admin/settings": "./app/api/admin/settings/route.ts",
166
+ "./api/admin/database": "./app/api/admin/database/route.ts",
167
+ "./api/admin/setup": "./app/api/admin/setup/route.ts",
168
+ "./api/admin/setup/complete": "./app/api/admin/setup/complete/route.ts",
169
+ "./api/admin/preview": "./app/api/admin/preview/route.ts",
170
+ "./api/admin/revalidate": "./app/api/admin/revalidate/route.ts",
171
+ "./api/admin/storage/switch": "./app/api/admin/storage/switch/route.ts",
172
+ "./api/styles": "./app/api/styles/route.ts",
173
+ "./api/projects": "./app/api/projects/route.ts",
174
+ "./api/assets": "./app/api/assets/[...path]/route.ts",
175
+ "./api/custom-sections": "./app/api/custom-sections/[id]/route.ts",
176
+ "./api/draft-mode/enable": "./app/api/draft-mode/enable/route.ts",
177
+ "./api/draft-mode/disable": "./app/api/draft-mode/disable/route.ts"
178
+ },
179
+ "peerDependencies": {
180
+ "next": ">=16.0.0",
181
+ "react": ">=19.0.0",
182
+ "react-dom": ">=19.0.0"
183
+ },
184
+ "dependencies": {
185
+ "@aws-sdk/client-s3": "^3.1021.0",
186
+ "@aws-sdk/s3-request-presigner": "^3.1021.0",
187
+ "@dnd-kit/core": "^6.3.1",
188
+ "@dnd-kit/sortable": "^10.0.0",
189
+ "@dnd-kit/utilities": "^3.2.2",
190
+ "@tiptap/core": "^2.12.0",
191
+ "@tiptap/extension-bubble-menu": "^2.12.0",
192
+ "@tiptap/extension-color": "^2.27.2",
193
+ "@tiptap/extension-link": "^2.12.0",
194
+ "@tiptap/extension-text-style": "^2.27.2",
195
+ "@tiptap/extension-underline": "^2.12.0",
196
+ "@tiptap/pm": "^2.12.0",
197
+ "@tiptap/react": "^2.12.0",
198
+ "@tiptap/starter-kit": "^2.12.0",
199
+ "next-sanity": "^12.1.5",
200
+ "ogl": "^1.0.8",
201
+ "sanity": "^5.17.1",
202
+ "zustand": "^5.0.12"
203
+ },
204
+ "devDependencies": {
205
+ "@tailwindcss/postcss": "^4",
206
+ "@testing-library/dom": "^10.4.1",
207
+ "@testing-library/jest-dom": "^6.6.3",
208
+ "@testing-library/react": "^16.3.0",
209
+ "@testing-library/user-event": "^14.6.1",
210
+ "@types/node": "^20",
211
+ "@types/react": "^19",
212
+ "@types/react-dom": "^19",
213
+ "eslint": "^9",
214
+ "eslint-config-next": "16.2.1",
215
+ "jsdom": "^26.1.0",
216
+ "next": "16.2.1",
217
+ "react": "19.2.4",
218
+ "react-dom": "19.2.4",
219
+ "tailwindcss": "^4",
220
+ "typescript": "^5",
221
+ "vitest": "^4.1.2"
222
+ }
223
+ }
@@ -48,6 +48,19 @@ export const textBlock = defineType({
48
48
  }),
49
49
  ],
50
50
  },
51
+ {
52
+ name: "color",
53
+ type: "object",
54
+ title: "Text Color",
55
+ fields: [
56
+ defineField({
57
+ name: "hex",
58
+ type: "string",
59
+ title: "Color",
60
+ validation: (Rule) => Rule.required(),
61
+ }),
62
+ ],
63
+ },
51
64
  ],
52
65
  },
53
66
  },