Skip to content

Commit d9d2826

Browse files
authored
feat: support react 19, upgrade build tooling (#111)
* chore: bump dependencies * feat: support react 19, upgrade build tooling * refactor: feedback from code review * refactor: fix lint errors
1 parent 6037dae commit d9d2826

30 files changed

+20528
-38323
lines changed

.gitignore

+6
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,9 @@ lib
6161

6262
# Workshop runtime files
6363
.workshop
64+
65+
# Typescript build info
66+
tsconfig.tsbuildinfo
67+
68+
# Sanity runtime output
69+
.sanity

package-lock.json

+20,344-38,080
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+32-40
Original file line numberDiff line numberDiff line change
@@ -25,75 +25,69 @@
2525
"type": "module",
2626
"exports": {
2727
".": {
28-
"types": "./lib/index.d.ts",
2928
"source": "./src/index.ts",
30-
"require": "./lib/index.cjs",
31-
"node": {
32-
"import": "./lib/index.cjs.js"
33-
},
3429
"import": "./lib/index.js",
30+
"require": "./lib/index.cjs",
3531
"default": "./lib/index.js"
3632
},
3733
"./package.json": "./package.json"
3834
},
3935
"main": "./lib/index.cjs",
40-
"module": "./lib/index.js",
41-
"source": "./src/index.ts",
36+
"module": "./lib/index.esm.js",
4237
"types": "./lib/index.d.ts",
4338
"files": [
4439
"lib",
4540
"sanity.json",
4641
"src",
4742
"v2-incompatible.js"
4843
],
44+
"sideEffects": false,
45+
"browserslist": "extends @sanity/browserslist-config",
4946
"scripts": {
50-
"prebuild": "npm run clean && plugin-kit verify-package --silent && pkg-utils",
51-
"build": "run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict",
47+
"build": "plugin-kit verify-package --silent && pkg-utils build --strict --check --clean",
5248
"clean": "rimraf lib",
5349
"compile": "tsc --noEmit",
54-
"dev": "workshop dev",
50+
"dev": "sanity dev",
5551
"format": "prettier --write --cache --ignore-unknown .",
5652
"link-watch": "plugin-kit link-watch",
5753
"lint": "eslint .",
5854
"prepare": "husky install",
59-
"prepublishOnly": "run-s build",
55+
"prepublishOnly": "npm run build",
6056
"test": "jest",
6157
"watch": "pkg-utils watch --strict"
6258
},
6359
"dependencies": {
64-
"@codemirror/autocomplete": "^6.11.1",
65-
"@codemirror/commands": "^6.3.2",
66-
"@codemirror/lang-html": "^6.4.7",
60+
"@codemirror/autocomplete": "^6.18.3",
61+
"@codemirror/commands": "^6.7.1",
62+
"@codemirror/lang-html": "^6.4.9",
6763
"@codemirror/lang-java": "^6.0.1",
68-
"@codemirror/lang-javascript": "^6.2.1",
64+
"@codemirror/lang-javascript": "^6.2.2",
6965
"@codemirror/lang-json": "^6.0.1",
70-
"@codemirror/lang-markdown": "^6.2.3",
66+
"@codemirror/lang-markdown": "^6.3.1",
7167
"@codemirror/lang-php": "^6.0.1",
72-
"@codemirror/lang-sql": "^6.5.4",
73-
"@codemirror/language": "^6.9.3",
74-
"@codemirror/legacy-modes": "^6.3.3",
75-
"@codemirror/search": "^6.5.5",
76-
"@codemirror/state": "^6.3.3",
77-
"@codemirror/view": "^6.22.3",
78-
"@juggle/resize-observer": "^3.3.1",
79-
"@lezer/highlight": "^1.2.0",
68+
"@codemirror/lang-sql": "^6.8.0",
69+
"@codemirror/language": "^6.10.6",
70+
"@codemirror/legacy-modes": "^6.4.2",
71+
"@codemirror/search": "^6.5.8",
72+
"@codemirror/state": "^6.5.0",
73+
"@codemirror/view": "^6.35.3",
74+
"@juggle/resize-observer": "^3.4.0",
75+
"@lezer/highlight": "^1.2.1",
8076
"@sanity/incompatible-plugin": "^1.0.4",
81-
"@sanity/ui": "^2.0.0",
82-
"@uiw/codemirror-themes": "^4.21.21",
83-
"@uiw/react-codemirror": "^4.21.21"
77+
"@sanity/ui": "^2.10.9",
78+
"@uiw/codemirror-themes": "^4.23.6",
79+
"@uiw/react-codemirror": "^4.23.6"
8480
},
8581
"devDependencies": {
8682
"@babel/core": "^7.23.6",
8783
"@babel/preset-env": "^7.23.6",
8884
"@babel/preset-react": "^7.23.3",
89-
"@commitlint/cli": "^18.4.3",
90-
"@commitlint/config-conventional": "^18.4.3",
85+
"@commitlint/cli": "^19.6.0",
86+
"@commitlint/config-conventional": "^19.6.0",
9187
"@sanity/icons": "^2.8.0",
92-
"@sanity/pkg-utils": "^3.3.5",
93-
"@sanity/plugin-kit": "^3.1.10",
88+
"@sanity/pkg-utils": "^6.12.0",
89+
"@sanity/plugin-kit": "^4.0.18",
9490
"@sanity/semantic-release-preset": "^4.1.6",
95-
"@sanity/ui-workshop": "^1.2.0",
96-
"@sanity/ui-workshop-plugin-sanity": "^1.0.0",
9791
"@testing-library/jest-dom": "^6.1.5",
9892
"@testing-library/react": "^14.1.2",
9993
"@types/jest": "^29.5.11",
@@ -118,22 +112,20 @@
118112
"react-dom": "^18.2.0",
119113
"react-is": "^18.2.0",
120114
"rimraf": "^5.0.5",
121-
"sanity": "^3.21.3",
122-
"sanity-extra": "^1.0.0",
123-
"sanity-testing-library": "^1.0.0",
124-
"semantic-release": "^22.0.0",
115+
"sanity": "^3.67.1",
116+
"semantic-release": "^24.2.0",
125117
"styled-components": "^6.1.1",
126118
"ts-jest": "^29.1.1",
127119
"typescript": "^5.3.3"
128120
},
129121
"peerDependencies": {
130-
"react": "^18",
131-
"react-dom": "^18",
122+
"react": "^18 || >=19.0.0-0",
123+
"react-dom": "^18 || >=19.0.0-0",
132124
"sanity": "^3",
133125
"styled-components": "^5.2 || ^6"
134126
},
135127
"engines": {
136-
"node": ">=14"
128+
"node": ">=18"
137129
},
138130
"sanityExchangeUrl": "https://www.sanity.io/plugins/code-input",
139131
"sanityPlugin": {

sanity.config.ts

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import {defineConfig} from 'sanity'
2+
import {structureTool} from 'sanity/structure'
3+
4+
import {codeInput} from './src/index'
5+
6+
export default defineConfig({
7+
projectId: 'ppsg7ml5',
8+
dataset: 'test',
9+
plugins: [
10+
structureTool({
11+
structure: (S) => S.documentTypeList('codeTest'),
12+
}),
13+
codeInput(),
14+
],
15+
schema: {
16+
types: [
17+
{
18+
name: 'codeTest',
19+
type: 'document',
20+
fields: [
21+
{name: 'title', type: 'string'},
22+
{name: 'code', type: 'code'},
23+
],
24+
},
25+
],
26+
},
27+
tasks: {
28+
enabled: false,
29+
},
30+
scheduledPublishing: {
31+
enabled: false,
32+
},
33+
announcements: {
34+
enabled: false,
35+
},
36+
beta: {
37+
create: {
38+
startInCreateEnabled: false,
39+
},
40+
},
41+
})

src/CodeInput.tsx

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1+
import {Box, Card, Stack, Text} from '@sanity/ui'
12
import {Suspense, useCallback} from 'react'
23
import {MemberField, ObjectInputProps, RenderInputCallback, set, setIfMissing, unset} from 'sanity'
3-
import {Box, Card, Stack, Text} from '@sanity/ui'
44
import styled, {css} from 'styled-components'
5-
import {LanguageField} from './LanguageField'
5+
66
import {useCodeMirror} from './codemirror/useCodeMirror'
77
import {useLanguageMode} from './codemirror/useLanguageMode'
88
import {PATH_CODE} from './config'
9+
import {LanguageField} from './LanguageField'
910
import {CodeInputValue, CodeSchemaType} from './types'
10-
import {useFieldMember} from './useFieldMember'
1111
import {focusRingBorderStyle, focusRingStyle} from './ui/focusRingStyle'
12+
import {useFieldMember} from './useFieldMember'
1213

1314
export type {CodeInputLanguage, CodeInputValue} from './types'
1415

src/LanguageField.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import {useCallback} from 'react'
22
import {FieldMember, InputProps, MemberField, MemberFieldProps, StringInputProps} from 'sanity'
3-
import {CodeInputLanguage} from './types'
3+
44
import {LanguageInput} from './LanguageInput'
5+
import {CodeInputLanguage} from './types'
56

67
export function LanguageField(
78
props: MemberFieldProps & {member: FieldMember; language: string; languages: CodeInputLanguage[]},

src/LanguageInput.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import {ChangeEvent, useCallback} from 'react'
2-
import {StringInputProps, set, unset} from 'sanity'
31
import {Select} from '@sanity/ui'
2+
import {ChangeEvent, useCallback} from 'react'
3+
import {set, StringInputProps, unset} from 'sanity'
4+
45
import {CodeInputLanguage} from './types'
56

67
export interface LanguageInputProps extends StringInputProps {

src/PreviewCode.tsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
import {Box, Card, Flex, Label, Text} from '@sanity/ui'
12
import {Suspense} from 'react'
2-
import styled from 'styled-components'
3-
import {Label, Box, Card, Flex, Text} from '@sanity/ui'
4-
import {CodeInputValue, CodeSchemaType} from './types'
53
import {PreviewProps} from 'sanity'
4+
import styled from 'styled-components'
5+
66
import {useCodeMirror} from './codemirror/useCodeMirror'
77
import {useLanguageMode} from './codemirror/useLanguageMode'
8+
import {CodeInputValue, CodeSchemaType} from './types'
89

910
const PreviewContainer = styled(Box)`
1011
position: relative;
@@ -20,7 +21,7 @@ export interface PreviewCodeProps extends PreviewProps {
2021
/**
2122
* @public
2223
*/
23-
export default function PreviewCode(props: PreviewCodeProps) {
24+
export function PreviewCode(props: PreviewCodeProps) {
2425
const {selection, schemaType: type} = props
2526
const {languageMode} = useLanguageMode(type as CodeSchemaType, props.selection)
2627

src/__workshop__/index.ts

-22
This file was deleted.

src/__workshop__/lazy.tsx

-54
This file was deleted.

src/__workshop__/preview.tsx

-24
This file was deleted.

src/__workshop__/props.tsx

-24
This file was deleted.

src/codemirror/CodeMirrorProxy.tsx

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1+
import type {Extension} from '@codemirror/state'
2+
import {EditorView} from '@codemirror/view'
3+
import {useRootTheme} from '@sanity/ui'
4+
import CodeMirror, {type ReactCodeMirrorProps, type ReactCodeMirrorRef} from '@uiw/react-codemirror'
15
import {forwardRef, useCallback, useContext, useEffect, useMemo, useState} from 'react'
2-
import CodeMirror, {ReactCodeMirrorProps, ReactCodeMirrorRef} from '@uiw/react-codemirror'
3-
import {useCodeMirrorTheme} from './extensions/useCodeMirrorTheme'
4-
import {Extension} from '@codemirror/state'
6+
57
import {CodeInputConfigContext} from './CodeModeContext'
68
import {defaultCodeModes} from './defaultCodeModes'
79
import {
810
highlightLine,
911
highlightState,
1012
setHighlightedLines,
1113
} from './extensions/highlightLineExtension'
12-
import {EditorView} from '@codemirror/view'
13-
import {useRootTheme} from '@sanity/ui'
14-
import {useFontSizeExtension} from './extensions/useFontSize'
1514
import {useThemeExtension} from './extensions/theme'
15+
import {useCodeMirrorTheme} from './extensions/useCodeMirrorTheme'
16+
import {useFontSizeExtension} from './extensions/useFontSize'
1617

1718
export interface CodeMirrorProps extends ReactCodeMirrorProps {
1819
highlightLines?: number[]

0 commit comments

Comments
 (0)