@sanity/ui 4.0.0-static.16 → 4.0.0-static.18

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 (54) hide show
  1. package/dist/css/index.css +1 -1
  2. package/dist/css/index.css.map +1 -1
  3. package/dist/css/index.d.ts +4 -0
  4. package/dist/css/index.js +5986 -5974
  5. package/dist/css/index.js.map +1 -1
  6. package/dist/index.js +9 -10
  7. package/dist/index.js.map +1 -1
  8. package/package.json +7 -7
  9. package/src/core/components/autocomplete/__workshop__/custom.tsx +14 -1
  10. package/src/core/components/autocomplete/__workshop__/example.tsx +12 -1
  11. package/src/core/components/dialog/__workshop__/position.tsx +9 -1
  12. package/src/core/components/dialog/__workshop__/props.tsx +2 -0
  13. package/src/core/components/menu/__workshop__/menuButton.tsx +6 -1
  14. package/src/core/components/menu/__workshop__/tones.tsx +7 -1
  15. package/src/core/components/toast/__workshop__/toast.tsx +2 -0
  16. package/src/core/primitives/avatar/__workshop__/asButton.tsx +8 -1
  17. package/src/core/primitives/avatar/__workshop__/stack.tsx +5 -1
  18. package/src/core/primitives/badge/__workshop__/props.tsx +12 -1
  19. package/src/core/primitives/box/__workshop__/props.tsx +6 -1
  20. package/src/core/primitives/button/__workshop__/props.tsx +22 -0
  21. package/src/core/primitives/button/__workshop__/stacked.tsx +16 -0
  22. package/src/core/primitives/card/__workshop__/props.tsx +10 -0
  23. package/src/core/primitives/card/__workshop__/selected.tsx +1 -1
  24. package/src/core/primitives/card/card.tsx +2 -2
  25. package/src/core/primitives/code/__workshop__/props.tsx +6 -1
  26. package/src/core/primitives/container/__workshop__/example.tsx +6 -1
  27. package/src/core/primitives/flex/__workshop__/example.tsx +7 -1
  28. package/src/core/primitives/heading/__workshop__/plain.tsx +12 -1
  29. package/src/core/primitives/inline/__workshop__/plain.tsx +5 -1
  30. package/src/core/primitives/label/__workshop__/plain.tsx +15 -1
  31. package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +13 -1
  32. package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +2 -0
  33. package/src/core/primitives/popover/__workshop__/PlainStory.tsx +8 -0
  34. package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +7 -1
  35. package/src/core/primitives/popover/__workshop__/TestStory.tsx +6 -0
  36. package/src/core/primitives/select/__workshop__/plain.tsx +4 -0
  37. package/src/core/primitives/skeleton/__workshop__/delay.tsx +9 -1
  38. package/src/core/primitives/skeleton/__workshop__/skeleton.tsx +9 -1
  39. package/src/core/primitives/spinner/__workshop__/Props.tsx +6 -1
  40. package/src/core/primitives/stack/__workshop__/plain.tsx +4 -1
  41. package/src/core/primitives/text/__workshop__/colored.tsx +8 -1
  42. package/src/core/primitives/text/__workshop__/example.tsx +15 -1
  43. package/src/core/primitives/textArea/__workshop__/plain.tsx +8 -0
  44. package/src/core/primitives/textInput/__workshop__/plain.tsx +34 -4
  45. package/src/core/primitives/textInput/__workshop__/typed.tsx +7 -1
  46. package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +2 -0
  47. package/src/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx +2 -0
  48. package/src/core/primitives/tooltip/__workshop__/props.tsx +12 -0
  49. package/src/core/primitives/tooltip/__workshop__/resizableBoundary.tsx +5 -0
  50. package/src/css/primitives/card/__workshop__/color.tsx +9 -1
  51. package/src/css/primitives/card/card.css.ts +10 -0
  52. package/src/css/theme/buildCSSTheme.ts +4 -0
  53. package/src/css/types.ts +4 -0
  54. package/src/css/vars.css.ts +4 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/ui",
3
- "version": "4.0.0-static.16",
3
+ "version": "4.0.0-static.18",
4
4
  "keywords": [
5
5
  "react",
6
6
  "ui",
@@ -132,10 +132,10 @@
132
132
  "@commitlint/config-conventional": "^19.8.1",
133
133
  "@eslint/js": "^9.32.0",
134
134
  "@sanity/browserslist-config": "^1.0.5",
135
- "@sanity/pkg-utils": "^7.11.0",
135
+ "@sanity/pkg-utils": "^7.11.4",
136
136
  "@sanity/prettier-config": "^2.0.1",
137
137
  "@sanity/semantic-release-preset": "^5.0.0",
138
- "@sanity/ui-workshop": "^3.1.2",
138
+ "@sanity/ui-workshop": "4.0.0-static.8",
139
139
  "@testing-library/dom": "^10.4.1",
140
140
  "@testing-library/jest-dom": "^6.6.4",
141
141
  "@testing-library/react": "^16.3.0",
@@ -146,7 +146,7 @@
146
146
  "@types/react-is": "^19.0.0",
147
147
  "@vanilla-extract/css": "^1.17.4",
148
148
  "@vanilla-extract/vite-plugin": "^5.1.1",
149
- "@vitejs/plugin-react": "^4.7.0",
149
+ "@vitejs/plugin-react": "^5.0.0",
150
150
  "@vitest/browser": "^3.2.4",
151
151
  "babel-plugin-react-compiler": "19.1.0-rc.2",
152
152
  "browserslist-config-baseline": "^0.5.0",
@@ -163,7 +163,8 @@
163
163
  "eslint-plugin-import": "^2.32.0",
164
164
  "eslint-plugin-jsx-a11y": "^6.10.2",
165
165
  "eslint-plugin-react": "^7.37.5",
166
- "eslint-plugin-react-hooks": "0.0.0-experimental-edac0dde-20250723",
166
+ "eslint-plugin-react-compiler": "19.1.0-rc.2",
167
+ "eslint-plugin-react-hooks": "0.0.0-experimental-66f09bd0-20250806",
167
168
  "eslint-plugin-react-refresh": "^0.4.20",
168
169
  "eslint-plugin-simple-import-sort": "^12.1.1",
169
170
  "eslint-plugin-storybook": "^9.1.1",
@@ -186,7 +187,7 @@
186
187
  "tsconfig-paths": "^4.2.0",
187
188
  "typescript": "5.9.2",
188
189
  "typescript-eslint": "^8.39.0",
189
- "vite": "^6.3.5",
190
+ "vite": "^7.1.0",
190
191
  "vite-tsconfig-paths": "^5.1.4",
191
192
  "vitest": "^3.2.4",
192
193
  "vitest-axe": "1.0.0-pre.5"
@@ -208,7 +209,6 @@
208
209
  "cypress"
209
210
  ],
210
211
  "overrides": {
211
- "@sanity/ui-workshop": "file:registry/sanity-ui-workshop-3.0.0-local.12.tgz",
212
212
  "@types/react": "$@types/react",
213
213
  "@types/react-dom": "$@types/react-dom",
214
214
  "@types/react-is": "$@types/react-is",
@@ -16,9 +16,12 @@ export default function CustomStory(): React.JSX.Element {
16
16
  const data: ExampleOption[] = countries.map((d) => ({value: d.code, title: d.name}))
17
17
  const border = useBoolean('Border', true)
18
18
  const disabled = useBoolean('Disabled', false)
19
+ // @ts-expect-error - TODO: fix this
19
20
  const fontSize = useSelect('Font size', WORKSHOP_TEXT_FONT_SIZE_OPTIONS, 2)
20
21
  const openButton = useBoolean('Open button', true)
22
+ // @ts-expect-error - TODO: fix this
21
23
  const padding = useSelect('Padding', WORKSHOP_SPACE_OPTIONS, 3)
24
+ // @ts-expect-error - TODO: fix this
22
25
  const radius = useSelect('Radius', WORKSHOP_RADIUS_OPTIONS, 2)
23
26
  const readOnly = useBoolean('Read only', false)
24
27
  const [value, setValue] = useState('')
@@ -31,10 +34,17 @@ export default function CustomStory(): React.JSX.Element {
31
34
  href="#"
32
35
  key={option.value}
33
36
  onClick={(event) => event.preventDefault()}
37
+ // @ts-expect-error - TODO: fix this
34
38
  padding={padding}
39
+ // @ts-expect-error - TODO: fix this
35
40
  radius={Math.max((radius ?? 0) - 1, 0) as Radius}
36
41
  >
37
- <Text size={fontSize}>{option.title}</Text>
42
+ <Text
43
+ // @ts-expect-error - TODO: fix this
44
+ size={fontSize}
45
+ >
46
+ {option.title}
47
+ </Text>
38
48
  </Card>
39
49
  ),
40
50
  [fontSize, padding, radius],
@@ -63,13 +73,16 @@ export default function CustomStory(): React.JSX.Element {
63
73
  border={border}
64
74
  disabled={disabled}
65
75
  filterOption={filterOption}
76
+ // @ts-expect-error - TODO: fix this
66
77
  fontSize={fontSize}
67
78
  id="custom"
68
79
  onChange={setValue}
69
80
  openButton={openButton}
70
81
  options={options}
82
+ // @ts-expect-error - TODO: fix this
71
83
  padding={padding}
72
84
  placeholder="Search"
85
+ // @ts-expect-error - TODO: fix this
73
86
  radius={radius}
74
87
  readOnly={readOnly}
75
88
  renderOption={renderOption}
@@ -32,14 +32,18 @@ const typingPerfTest: PerfTestProps<HTMLInputElement> = {
32
32
  export default function ExampleStory(): React.JSX.Element {
33
33
  const {ref, Wrapper} = usePerfTest(typingPerfTest)
34
34
 
35
+ // @ts-expect-error - TODO: fix this
35
36
  const layoutTone = useSelect('Layout tone', WORKSHOP_CARD_TONE_OPTIONS)
36
37
  const options = useMemo(() => countries.map((country) => ({value: country.code})), [])
37
38
  const border = useBoolean('Border', true)
38
39
  const customValidity = useText('Custom validity')
39
40
  const disabled = useBoolean('Disabled', false)
41
+ // @ts-expect-error - TODO: fix this
40
42
  const fontSize = useSelect('Font size', WORKSHOP_TEXT_FONT_SIZE_OPTIONS)
41
43
  const openButton = useBoolean('Open button', false)
44
+ // @ts-expect-error - TODO: fix this
42
45
  const padding = useSelect('Padding', WORKSHOP_SPACE_OPTIONS, 3)
46
+ // @ts-expect-error - TODO: fix this
43
47
  const radius = useSelect('Radius', WORKSHOP_RADIUS_OPTIONS, 2)
44
48
  const readOnly = useBoolean('Read only', false)
45
49
  const [value, setValue] = useState('')
@@ -47,7 +51,11 @@ export default function ExampleStory(): React.JSX.Element {
47
51
  const handleChange = useCallback((value: string) => setValue(value), [])
48
52
 
49
53
  return (
50
- <Card height="fill" tone={layoutTone}>
54
+ <Card
55
+ height="fill"
56
+ // @ts-expect-error - TODO: fix this
57
+ tone={layoutTone}
58
+ >
51
59
  <Container width={1}>
52
60
  <Box paddingX={[4, 5, 6]} paddingY={[5, 6, 7]}>
53
61
  <Stack gap={3}>
@@ -59,13 +67,16 @@ export default function ExampleStory(): React.JSX.Element {
59
67
  border={border}
60
68
  customValidity={customValidity}
61
69
  disabled={disabled}
70
+ // @ts-expect-error - TODO: fix this
62
71
  fontSize={fontSize}
63
72
  onChange={handleChange}
64
73
  id="default"
65
74
  openButton={openButton}
66
75
  options={options}
76
+ // @ts-expect-error - TODO: fix this
67
77
  padding={padding}
68
78
  placeholder="Search"
79
+ // @ts-expect-error - TODO: fix this
69
80
  radius={radius}
70
81
  readOnly={readOnly}
71
82
  ref={ref}
@@ -6,6 +6,7 @@ import {WORKSHOP_DIALOG_POSITION_OPTIONS} from '$workshop'
6
6
 
7
7
  export default function PositionStory(): React.JSX.Element {
8
8
  const open = useBoolean('Open', true)
9
+ // @ts-expect-error - TODO: fix this
9
10
  const position = useSelect('Position', WORKSHOP_DIALOG_POSITION_OPTIONS)
10
11
 
11
12
  return (
@@ -22,7 +23,14 @@ export default function PositionStory(): React.JSX.Element {
22
23
  </Stack>
23
24
 
24
25
  <LayerProvider>
25
- {open && <Dialog header="Position example" id="position-example" position={position} />}
26
+ {open && (
27
+ <Dialog
28
+ header="Position example"
29
+ id="position-example"
30
+ // @ts-expect-error - TODO: fix this
31
+ position={position}
32
+ />
33
+ )}
26
34
  </LayerProvider>
27
35
  </Box>
28
36
  </Box>
@@ -9,6 +9,7 @@ export default function PropsStory(): React.JSX.Element {
9
9
  const header = useText('Header', 'Props example')
10
10
  const onClickOutside = useBoolean('Close when click outside', false)
11
11
  const hideCloseButton = useBoolean('Hide close button', false)
12
+ // @ts-expect-error - TODO: fix this
12
13
  const width = useSelect('Width', WORKSHOP_CONTAINER_WIDTH_OPTIONS)
13
14
  const [open, setOpen] = useState(false)
14
15
  const buttonRef = useRef<HTMLButtonElement | null>(null)
@@ -37,6 +38,7 @@ export default function PropsStory(): React.JSX.Element {
37
38
  onClickOutside={onClickOutside ? handleClose : undefined}
38
39
  onClose={handleClose}
39
40
  open={open}
41
+ // @ts-expect-error - TODO: fix this
40
42
  width={width}
41
43
  >
42
44
  <Box padding={4}>
@@ -17,6 +17,7 @@ import {useMemo} from 'react'
17
17
  import {WORKSHOP_CARD_TONE_OPTIONS} from '$workshop'
18
18
 
19
19
  export default function MenuButtonStory(): React.JSX.Element {
20
+ // @ts-expect-error - TODO: fix this
20
21
  const layoutTone = useSelect('Layout tone', WORKSHOP_CARD_TONE_OPTIONS, 'default')
21
22
  const portal = useBoolean('Portal', false)
22
23
 
@@ -29,7 +30,11 @@ export default function MenuButtonStory(): React.JSX.Element {
29
30
  )
30
31
 
31
32
  return (
32
- <Card height="fill" tone={layoutTone}>
33
+ <Card
34
+ height="fill"
35
+ // @ts-expect-error - TODO: fix this
36
+ tone={layoutTone}
37
+ >
33
38
  <Box padding={[4, 5, 6]}>
34
39
  <Grid gridTemplateColumns={3} gap={2}>
35
40
  <Button id="prev-button" mode="ghost" text="Prev" />
@@ -7,12 +7,18 @@ import {WORKSHOP_CARD_TONE_OPTIONS} from '$workshop'
7
7
 
8
8
  export default function TonesStory(): React.JSX.Element {
9
9
  const disabled = useBoolean('Disabled', false)
10
+ // @ts-expect-error - TODO: fix this
10
11
  const parentTone = useSelect('Parent tone', WORKSHOP_CARD_TONE_OPTIONS, 'default')
11
12
 
12
13
  return (
13
14
  <LayerProvider>
14
15
  <Box padding={[4, 5, 6]}>
15
- <Card radius={3} shadow={3} tone={parentTone}>
16
+ <Card
17
+ radius={3}
18
+ shadow={3}
19
+ // @ts-expect-error - TODO: fix this
20
+ tone={parentTone}
21
+ >
16
22
  <Menu>
17
23
  {ELEMENT_TONES.map((tone) => (
18
24
  <MenuItem disabled={disabled} icon={CubeIcon} key={tone} text={tone} tone={tone} />
@@ -6,6 +6,7 @@ import {WORKSHOP_TOAST_STATUS_OPTIONS} from '$workshop'
6
6
  export default function ToastStory(): React.JSX.Element {
7
7
  const closable = useBoolean('Closable', false)
8
8
  const title = useString('Title', 'Toast title')
9
+ // @ts-expect-error - TODO: fix this
9
10
  const status = useSelect('Status', WORKSHOP_TOAST_STATUS_OPTIONS)
10
11
  const description = useText('Description')
11
12
  const handleClose = useAction('onClose')
@@ -17,6 +18,7 @@ export default function ToastStory(): React.JSX.Element {
17
18
  closable={closable}
18
19
  description={description}
19
20
  onClose={handleClose}
21
+ // @ts-expect-error - TODO: fix this
20
22
  status={status}
21
23
  title={title}
22
24
  />
@@ -4,11 +4,18 @@ import {useSelect} from '@sanity/ui-workshop'
4
4
  import {WORKSHOP_AVATAR_SIZE_OPTIONS} from '$workshop'
5
5
 
6
6
  export default function AsButtonStory(): React.JSX.Element {
7
+ // @ts-expect-error - TODO: fix this
7
8
  const size = useSelect('Size', WORKSHOP_AVATAR_SIZE_OPTIONS, 1)
8
9
 
9
10
  return (
10
11
  <Flex align="center" height="fill" justify="center">
11
- <Avatar as="button" color="purple" initials="uq" size={size} />
12
+ <Avatar
13
+ as="button"
14
+ color="purple"
15
+ initials="uq"
16
+ // @ts-expect-error - TODO: fix this
17
+ size={size}
18
+ />
12
19
  </Flex>
13
20
  )
14
21
  }
@@ -4,11 +4,15 @@ import {useSelect} from '@sanity/ui-workshop'
4
4
  import {WORKSHOP_AVATAR_SIZE_OPTIONS} from '$workshop'
5
5
 
6
6
  export default function StackStory(): React.JSX.Element {
7
+ // @ts-expect-error - TODO: fix this
7
8
  const size = useSelect('Size', WORKSHOP_AVATAR_SIZE_OPTIONS, 1)
8
9
 
9
10
  return (
10
11
  <Flex align="center" height="fill" justify="center">
11
- <AvatarStack size={size}>
12
+ <AvatarStack
13
+ // @ts-expect-error - TODO: fix this
14
+ size={size}
15
+ >
12
16
  <AvatarCounter count={2} />
13
17
  <Avatar color="magenta" initials="uq" />
14
18
  <Avatar
@@ -4,14 +4,25 @@ import {useAction, useSelect, useText} from '@sanity/ui-workshop'
4
4
  import {WORKSHOP_BADGE_TONE_OPTIONS, WORKSHOP_SPACE_OPTIONS} from '$workshop'
5
5
 
6
6
  export default function PropsStory(): React.JSX.Element {
7
+ // @ts-expect-error - TODO: fix this
7
8
  const paddingX = useSelect('Padding X', WORKSHOP_SPACE_OPTIONS, 1)
9
+ // @ts-expect-error - TODO: fix this
8
10
  const paddingY = useSelect('Padding Y', WORKSHOP_SPACE_OPTIONS, 1)
11
+ // @ts-expect-error - TODO: fix this
9
12
  const tone = useSelect('Tone', WORKSHOP_BADGE_TONE_OPTIONS, 'default')
10
13
  const textProp = useText('Text', 'Label')
11
14
 
12
15
  return (
13
16
  <Flex align="center" height="fill" justify="center">
14
- <Badge onClick={useAction('onClick')} paddingX={paddingX} paddingY={paddingY} tone={tone}>
17
+ <Badge
18
+ onClick={useAction('onClick')}
19
+ // @ts-expect-error - TODO: fix this
20
+ paddingX={paddingX}
21
+ // @ts-expect-error - TODO: fix this
22
+ paddingY={paddingY}
23
+ // @ts-expect-error - TODO: fix this
24
+ tone={tone}
25
+ >
15
26
  {textProp}
16
27
  </Badge>
17
28
  </Flex>
@@ -4,12 +4,17 @@ import {useAction, useSelect} from '@sanity/ui-workshop'
4
4
  import {WORKSHOP_SPACE_OPTIONS} from '$workshop'
5
5
 
6
6
  export default function PropsStory(): React.JSX.Element {
7
+ // @ts-expect-error - TODO: fix this
7
8
  const padding = useSelect('Padding', WORKSHOP_SPACE_OPTIONS, 0)
8
9
 
9
10
  return (
10
11
  <Box padding={[4, 5, 6]}>
11
12
  <Card border tone="inherit">
12
- <Box onClick={useAction('onClick')} padding={padding}>
13
+ <Box
14
+ onClick={useAction('onClick')}
15
+ // @ts-expect-error - TODO: fix this
16
+ padding={padding}
17
+ >
13
18
  <Text>
14
19
  Box with <code>padding={padding}</code>
15
20
  </Text>
@@ -15,39 +15,61 @@ import {
15
15
 
16
16
  export default function ButtonStory(): React.JSX.Element {
17
17
  const disabled = useBoolean('Disabled')
18
+ // @ts-expect-error - TODO: fix this
18
19
  const fontSize = useSelect('Font size', WORKSHOP_TEXT_FONT_SIZE_OPTIONS)
20
+ // @ts-expect-error - TODO: fix this
19
21
  const gap = useSelect('Gap', WORKSHOP_SPACE_OPTIONS)
22
+ // @ts-expect-error - TODO: fix this
20
23
  const icon = useSelect('Icon', WORKSHOP_ICON_SYMBOL_OPTIONS)
24
+ // @ts-expect-error - TODO: fix this
21
25
  const iconRight = useSelect('Icon (right)', WORKSHOP_ICON_SYMBOL_OPTIONS)
26
+ // @ts-expect-error - TODO: fix this
22
27
  const justify = useSelect('Justify', WORKSHOP_FLEX_JUSTIFY_OPTIONS)
23
28
  const loading = useBoolean('Loading')
29
+ // @ts-expect-error - TODO: fix this
24
30
  const mode = useSelect('Mode', WORKSHOP_BUTTON_MODE_OPTIONS)
31
+ // @ts-expect-error - TODO: fix this
25
32
  const paddingX = useSelect('Padding X', WORKSHOP_SPACE_OPTIONS)
33
+ // @ts-expect-error - TODO: fix this
26
34
  const paddingY = useSelect('Padding Y', WORKSHOP_SPACE_OPTIONS)
27
35
  const selected = useBoolean('Selected')
36
+ // @ts-expect-error - TODO: fix this
28
37
  const tone = useSelect('Tone', WORKSHOP_BUTTON_TONE_OPTIONS)
38
+ // @ts-expect-error - TODO: fix this
29
39
  const textAlign = useSelect('Text align', WORKSHOP_BUTTON_TEXT_ALIGN_OPTIONS)
30
40
  const textProp = useText('Text', 'Label')
41
+ // @ts-expect-error - TODO: fix this
31
42
  const textWeight = useSelect('Text weight', WORKSHOP_TEXT_WEIGHT_OPTIONS)
32
43
 
33
44
  return (
34
45
  <Flex align="center" height="fill" justify="center">
35
46
  <Button
36
47
  disabled={disabled}
48
+ // @ts-expect-error - TODO: fix this
37
49
  fontSize={fontSize}
50
+ // @ts-expect-error - TODO: fix this
38
51
  gap={gap}
52
+ // @ts-expect-error - TODO: fix this
39
53
  icon={icon && icons[icon]}
54
+ // @ts-expect-error - TODO: fix this
40
55
  iconRight={iconRight && icons[iconRight]}
56
+ // @ts-expect-error - TODO: fix this
41
57
  justify={justify}
42
58
  loading={loading}
59
+ // @ts-expect-error - TODO: fix this
43
60
  mode={mode}
44
61
  onClick={useAction('onClick')}
62
+ // @ts-expect-error - TODO: fix this
45
63
  paddingX={paddingX}
64
+ // @ts-expect-error - TODO: fix this
46
65
  paddingY={paddingY}
47
66
  selected={selected}
67
+ // @ts-expect-error - TODO: fix this
48
68
  textAlign={textAlign}
49
69
  text={textProp}
70
+ // @ts-expect-error - TODO: fix this
50
71
  textWeight={textWeight}
72
+ // @ts-expect-error - TODO: fix this
51
73
  tone={tone}
52
74
  />
53
75
  </Flex>
@@ -14,14 +14,22 @@ import {
14
14
  export default function StackedStory(): React.JSX.Element {
15
15
  const tones = Object.entries(WORKSHOP_BUTTON_TONE_OPTIONS)
16
16
  const disabled = useBoolean('Disabled', false)
17
+ // @ts-expect-error - TODO: fix this
17
18
  const fontSize = useSelect('Font size', WORKSHOP_TEXT_FONT_SIZE_OPTIONS, 2)
19
+ // @ts-expect-error - TODO: fix this
18
20
  const gap = useSelect('Gap', WORKSHOP_SPACE_OPTIONS, 3)
21
+ // @ts-expect-error - TODO: fix this
19
22
  const icon = useSelect('Icon', WORKSHOP_ICON_SYMBOL_OPTIONS, 'add-circle')
23
+ // @ts-expect-error - TODO: fix this
20
24
  const iconRight = useSelect('Icon (right)', WORKSHOP_ICON_SYMBOL_OPTIONS)
25
+ // @ts-expect-error - TODO: fix this
21
26
  const justify = useSelect('Justify', WORKSHOP_FLEX_JUSTIFY_OPTIONS, 'center')
27
+ // @ts-expect-error - TODO: fix this
22
28
  const mode = useSelect('Mode', WORKSHOP_BUTTON_MODE_OPTIONS, 'default')
23
29
  const onClick = useAction('onClick')
30
+ // @ts-expect-error - TODO: fix this
24
31
  const paddingX = useSelect('Padding X', WORKSHOP_SPACE_OPTIONS, 3)
32
+ // @ts-expect-error - TODO: fix this
25
33
  const paddingY = useSelect('Padding Y', WORKSHOP_SPACE_OPTIONS, 3)
26
34
  const selected = useBoolean('Selected', false)
27
35
 
@@ -34,15 +42,23 @@ export default function StackedStory(): React.JSX.Element {
34
42
  {tones.map(([title, tone]) => (
35
43
  <Button
36
44
  disabled={disabled}
45
+ // @ts-expect-error - TODO: fix this
37
46
  fontSize={fontSize}
47
+ // @ts-expect-error - TODO: fix this
38
48
  gap={gap}
49
+ // @ts-expect-error - TODO: fix this
39
50
  icon={icon && icons[icon]}
51
+ // @ts-expect-error - TODO: fix this
40
52
  iconRight={iconRight && icons[iconRight]}
53
+ // @ts-expect-error - TODO: fix this
41
54
  justify={justify}
42
55
  key={tone}
56
+ // @ts-expect-error - TODO: fix this
43
57
  mode={mode}
44
58
  onClick={onClick}
59
+ // @ts-expect-error - TODO: fix this
45
60
  paddingX={paddingX}
61
+ // @ts-expect-error - TODO: fix this
46
62
  paddingY={paddingY}
47
63
  selected={selected}
48
64
  text={title}
@@ -10,30 +10,40 @@ import {
10
10
  } from '$workshop'
11
11
 
12
12
  export default function PropsStory(): React.JSX.Element {
13
+ // @ts-expect-error - TODO: fix this
13
14
  const as = useSelect('As', WORKSHOP_CARD_AS_OPTIONS, 'div')
14
15
  const border = useBoolean('Border', false)
15
16
  const checkered = useBoolean('Checkered', false)
16
17
  const muted = useBoolean('Muted', false)
18
+ // @ts-expect-error - TODO: fix this
17
19
  const padding = useSelect('Padding', WORKSHOP_SPACE_OPTIONS, 3)
18
20
  const pressed = useBoolean('Pressed', false)
21
+ // @ts-expect-error - TODO: fix this
19
22
  const radius = useSelect('Radius', WORKSHOP_RADIUS_OPTIONS, 0)
20
23
  const selected = useBoolean('Selected', false)
24
+ // @ts-expect-error - TODO: fix this
21
25
  const shadow = useSelect('Shadow', WORKSHOP_SHADOW_OPTIONS, 0)
26
+ // @ts-expect-error - TODO: fix this
22
27
  const tone = useSelect('Tone', WORKSHOP_CARD_TONE_OPTIONS, 'default')
23
28
 
24
29
  return (
25
30
  <Flex align="center" height="fill" justify="center" padding={4} sizing="border">
26
31
  <Card
27
32
  __unstable_checkered={checkered}
33
+ // @ts-expect-error - TODO: fix this
28
34
  as={as}
29
35
  border={border}
30
36
  muted={muted}
31
37
  onClick={useAction('onClick')}
38
+ // @ts-expect-error - TODO: fix this
32
39
  padding={padding}
33
40
  pressed={pressed}
41
+ // @ts-expect-error - TODO: fix this
34
42
  radius={radius}
35
43
  selected={selected}
44
+ // @ts-expect-error - TODO: fix this
36
45
  shadow={shadow}
46
+ // @ts-expect-error - TODO: fix this
37
47
  tone={tone}
38
48
  >
39
49
  <Stack gap={3}>
@@ -38,7 +38,7 @@ export default function SelectedStory(): React.JSX.Element {
38
38
  )
39
39
  }
40
40
 
41
- function Preview({selected}: {selected: boolean}) {
41
+ function Preview({selected}: {selected: boolean | undefined}) {
42
42
  return (
43
43
  <Flex>
44
44
  <Box flex={1}>
@@ -47,7 +47,6 @@ export function Card<E extends CardElementType = typeof DEFAULT_CARD_ELEMENT>(
47
47
  __unstable_focusRing: focusRing = false,
48
48
  as = DEFAULT_CARD_ELEMENT,
49
49
  className,
50
- disabled,
51
50
  pressed,
52
51
  radius = 0,
53
52
  scheme: schemeProp,
@@ -72,7 +71,8 @@ export function Card<E extends CardElementType = typeof DEFAULT_CARD_ELEMENT>(
72
71
  tone,
73
72
  })}
74
73
  data-checkered={checkered ? '' : undefined}
75
- data-disabled={disabled ? '' : undefined}
74
+ // Extract the disabled prop without removing it from `...rest` so that the underlying <button> or <a> has `[disabled]` when needed
75
+ data-disabled={props.disabled ? '' : undefined}
76
76
  data-focus-ring={focusRing ? '' : undefined}
77
77
  data-pressed={pressed ? '' : undefined}
78
78
  data-selected={selected ? '' : undefined}
@@ -6,11 +6,16 @@ import {WORKSHOP_CODE_LANGUAGE_OPTIONS, WORKSHOP_TEXT_FONT_SIZE_OPTIONS} from '$
6
6
  export default function PropsStory(): React.JSX.Element {
7
7
  const code = useText('Code', `console.log('Hello, world')`)
8
8
  const language = useSelect('Language', WORKSHOP_CODE_LANGUAGE_OPTIONS, 'typescript')
9
+ // @ts-expect-error - TODO: fix this
9
10
  const size = useSelect('Size', WORKSHOP_TEXT_FONT_SIZE_OPTIONS, 1)
10
11
 
11
12
  return (
12
13
  <Box padding={[4, 5, 6]}>
13
- <Code language={language} size={size}>
14
+ <Code
15
+ language={language}
16
+ // @ts-expect-error - TODO: fix this
17
+ size={size}
18
+ >
14
19
  {code}
15
20
  </Code>
16
21
  </Box>
@@ -4,11 +4,16 @@ import {useAction, useSelect} from '@sanity/ui-workshop'
4
4
  import {WORKSHOP_CONTAINER_WIDTH_OPTIONS} from '$workshop'
5
5
 
6
6
  export default function PlainStory(): React.JSX.Element {
7
+ // @ts-expect-error - TODO: fix this
7
8
  const width = useSelect('Width', WORKSHOP_CONTAINER_WIDTH_OPTIONS, 0)
8
9
 
9
10
  return (
10
11
  <Flex align="center" height="fill" justify="center" padding={[4, 5, 6]} sizing="border">
11
- <Container onClick={useAction('onClick')} width={width}>
12
+ <Container
13
+ onClick={useAction('onClick')}
14
+ // @ts-expect-error - TODO: fix this
15
+ width={width}
16
+ >
12
17
  <Card padding={4} shadow={1}>
13
18
  <Text size={1}>
14
19
  Container with <code>max-width={width}</code>
@@ -14,10 +14,16 @@ const DebugCard = styled(Card)`
14
14
  `
15
15
 
16
16
  export default function ExampleStory(): React.JSX.Element {
17
+ // @ts-expect-error - TODO: fix this
17
18
  const direction = useSelect('Direction', WORKSHOP_FLEX_DIRECTION_OPTIONS, 'row')
18
19
 
19
20
  return (
20
- <Flex direction={direction} height="fill" style={{width: '100%'}}>
21
+ <Flex
22
+ // @ts-expect-error - TODO: fix this
23
+ direction={direction}
24
+ height="fill"
25
+ style={{width: '100%'}}
26
+ >
21
27
  <DebugCard flex={1}>
22
28
  <Code size={1}>1</Code>
23
29
  </DebugCard>
@@ -9,19 +9,30 @@ import {
9
9
 
10
10
  export default function PlainStory(): React.JSX.Element {
11
11
  const muted = useBoolean('Muted', false)
12
+ // @ts-expect-error - TODO: fix this
12
13
  const size = useSelect('Size', WORKSHOP_HEADING_FONT_SIZE_OPTIONS, 2)
13
14
  const textChild = useText('Text', 'Hello, world')
14
15
  const textOverflow = useSelect(
15
16
  'Text overflow',
17
+ // @ts-expect-error - TODO: fix this
16
18
  WORKSHOP_TEXT_OVERFLOW_OPTIONS,
17
19
  undefined,
18
20
  'Props',
19
21
  )
22
+ // @ts-expect-error - TODO: fix this
20
23
  const weight = useSelect('Weight', WORKSHOP_FONT_WEIGHT_OPTIONS)
21
24
 
22
25
  return (
23
26
  <Flex align="center" height="fill" justify="center" padding={[4, 5, 6]} sizing="border">
24
- <Heading muted={muted} size={size} textOverflow={textOverflow} weight={weight}>
27
+ <Heading
28
+ muted={muted}
29
+ // @ts-expect-error - TODO: fix this
30
+ size={size}
31
+ // @ts-expect-error - TODO: fix this
32
+ textOverflow={textOverflow}
33
+ // @ts-expect-error - TODO: fix this
34
+ weight={weight}
35
+ >
25
36
  {textChild}
26
37
  </Heading>
27
38
  </Flex>
@@ -6,7 +6,11 @@ import {WORKSHOP_SPACE_OPTIONS} from '$workshop'
6
6
  export default function PlainStory(): React.JSX.Element {
7
7
  return (
8
8
  <Flex align="center" height="fill" justify="center" padding={[4, 5, 6]} sizing="border">
9
- <Inline gap={useSelect('Gap', WORKSHOP_SPACE_OPTIONS, 0)} onClick={useAction('onClick')}>
9
+ <Inline
10
+ // @ts-expect-error - TODO: fix this
11
+ gap={useSelect('Gap', WORKSHOP_SPACE_OPTIONS, 0)}
12
+ onClick={useAction('onClick')}
13
+ >
10
14
  <Card padding={1} shadow={1}>
11
15
  <Text size={1}>Inline item</Text>
12
16
  </Card>
@@ -9,17 +9,31 @@ import {
9
9
  } from '$workshop'
10
10
 
11
11
  export default function PlainStory(): React.JSX.Element {
12
+ // @ts-expect-error - TODO: fix this
12
13
  const align = useSelect('Align', WORKSHOP_TEXT_ALIGN_OPTIONS)
13
14
  const muted = useBoolean('Muted', false)
15
+ // @ts-expect-error - TODO: fix this
14
16
  const size = useSelect('Size', WORKSHOP_LABEL_FONT_SIZE_OPTIONS)
15
17
  const textChild = useText('Text', 'Label text')
18
+ // @ts-expect-error - TODO: fix this
16
19
  const textOverflow = useSelect('Text overflow', WORKSHOP_TEXT_OVERFLOW_OPTIONS)
20
+ // @ts-expect-error - TODO: fix this
17
21
  const weight = useSelect('Weight', WORKSHOP_FONT_WEIGHT_OPTIONS)
18
22
 
19
23
  return (
20
24
  <Flex align="center" height="fill" justify="center" padding={[4, 5, 6]} sizing="border">
21
25
  <Container width={0}>
22
- <Label align={align} muted={muted} size={size} textOverflow={textOverflow} weight={weight}>
26
+ <Label
27
+ // @ts-expect-error - TODO: fix this
28
+ align={align}
29
+ muted={muted}
30
+ // @ts-expect-error - TODO: fix this
31
+ size={size}
32
+ // @ts-expect-error - TODO: fix this
33
+ textOverflow={textOverflow}
34
+ // @ts-expect-error - TODO: fix this
35
+ weight={weight}
36
+ >
23
37
  {textChild}
24
38
  </Label>
25
39
  </Container>