tldraw 4.1.0-next.58b63dd1ac80 → 4.1.0-next.74327a60f18a

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 (33) hide show
  1. package/dist-cjs/index.d.ts +2 -11
  2. package/dist-cjs/index.js +1 -4
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +55 -63
  5. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  6. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js +47 -54
  7. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +3 -3
  8. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.js +55 -62
  9. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.js.map +2 -2
  10. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js +5 -12
  11. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js.map +2 -2
  12. package/dist-cjs/lib/ui/version.js +3 -3
  13. package/dist-cjs/lib/ui/version.js.map +1 -1
  14. package/dist-esm/index.d.mts +2 -11
  15. package/dist-esm/index.mjs +4 -10
  16. package/dist-esm/index.mjs.map +2 -2
  17. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +57 -68
  18. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  19. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs +47 -54
  20. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +3 -3
  21. package/dist-esm/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.mjs +56 -63
  22. package/dist-esm/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.mjs.map +2 -2
  23. package/dist-esm/lib/ui/components/StylePanel/StylePanelDropdownPicker.mjs +5 -12
  24. package/dist-esm/lib/ui/components/StylePanel/StylePanelDropdownPicker.mjs.map +2 -2
  25. package/dist-esm/lib/ui/version.mjs +3 -3
  26. package/dist-esm/lib/ui/version.mjs.map +1 -1
  27. package/package.json +3 -3
  28. package/src/index.ts +0 -3
  29. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +49 -60
  30. package/src/lib/ui/components/StylePanel/StylePanelButtonPicker.tsx +53 -70
  31. package/src/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.tsx +90 -105
  32. package/src/lib/ui/components/StylePanel/StylePanelDropdownPicker.tsx +51 -72
  33. package/src/lib/ui/version.ts +3 -3
@@ -6,7 +6,7 @@ import {
6
6
  TLDefaultColorStyle,
7
7
  useEditor,
8
8
  } from '@tldraw/editor'
9
- import { memo, useMemo, useRef } from 'react'
9
+ import { memo, ReactElement, useMemo, useRef } from 'react'
10
10
  import { useDefaultColorTheme } from '../../../shapes/shared/useDefaultColorTheme'
11
11
  import { StyleValuesForUi } from '../../../styles'
12
12
  import { PORTRAIT_BREAKPOINT } from '../../constants'
@@ -34,19 +34,8 @@ export interface StylePanelButtonPickerProps<T extends string> {
34
34
  onHistoryMark?(id: string): void
35
35
  }
36
36
 
37
- function StylePanelButtonPickerInner<T extends string>(props: StylePanelButtonPickerProps<T>) {
38
- const { enhancedA11yMode } = useStylePanelContext()
39
- return (
40
- <>
41
- {enhancedA11yMode && <StylePanelSubheading>{props.title}</StylePanelSubheading>}
42
- <TldrawUiToolbar label={props.title}>
43
- <StylePanelButtonPickerInline {...props} />
44
- </TldrawUiToolbar>
45
- </>
46
- )
47
- }
48
-
49
- function StylePanelButtonPickerInlineInner<T extends string>(
37
+ /** @public */
38
+ export const StylePanelButtonPicker = memo(function StylePanelButtonPicker<T extends string>(
50
39
  props: StylePanelButtonPickerProps<T>
51
40
  ) {
52
41
  const ctx = useStylePanelContext()
@@ -137,60 +126,54 @@ function StylePanelButtonPickerInlineInner<T extends string>(
137
126
  const Layout = items.length > 4 ? TldrawUiGrid : TldrawUiRow
138
127
 
139
128
  return (
140
- <TldrawUiToolbarToggleGroup
141
- data-testid={`style.${uiType}`}
142
- type="single"
143
- value={value.type === 'shared' ? value.value : null}
144
- asChild
145
- >
146
- <Layout>
147
- {items.map((item) => {
148
- const isActive = value.type === 'shared' && value.value === item.value
149
- const label = title + ' — ' + msg(`${uiType}-style.${item.value}` as TLUiTranslationKey)
150
- return (
151
- <TldrawUiToolbarToggleItem
152
- type="icon"
153
- key={item.value}
154
- data-id={item.value}
155
- data-testid={`style.${uiType}.${item.value}`}
156
- aria-label={label + (isActive ? ` (${msg('style-panel.selected')})` : '')}
157
- tooltip={
158
- <>
159
- <div>{label}</div>
160
- {isActive ? <div>({msg('style-panel.selected')})</div> : null}
161
- </>
162
- }
163
- value={item.value}
164
- data-state={value.type === 'shared' && value.value === item.value ? 'on' : 'off'}
165
- data-isactive={isActive}
166
- title={label}
167
- style={
168
- style === (DefaultColorStyle as StyleProp<unknown>)
169
- ? { color: getColorValue(theme, item.value as TLDefaultColorStyle, 'solid') }
170
- : undefined
171
- }
172
- onPointerEnter={handleButtonPointerEnter}
173
- onPointerDown={handleButtonPointerDown}
174
- onPointerUp={handleButtonPointerUp}
175
- onClick={handleButtonClick}
176
- >
177
- <TldrawUiButtonIcon icon={item.icon} />
178
- </TldrawUiToolbarToggleItem>
179
- )
180
- })}
181
- </Layout>
182
- </TldrawUiToolbarToggleGroup>
129
+ <>
130
+ {ctx.enhancedA11yMode && <StylePanelSubheading>{title}</StylePanelSubheading>}
131
+ <TldrawUiToolbar label={title}>
132
+ <TldrawUiToolbarToggleGroup
133
+ data-testid={`style.${uiType}`}
134
+ type="single"
135
+ value={value.type === 'shared' ? value.value : undefined}
136
+ asChild
137
+ >
138
+ <Layout>
139
+ {items.map((item) => {
140
+ const isActive = value.type === 'shared' && value.value === item.value
141
+ const label =
142
+ title + ' — ' + msg(`${uiType}-style.${item.value}` as TLUiTranslationKey)
143
+ return (
144
+ <TldrawUiToolbarToggleItem
145
+ type="icon"
146
+ key={item.value}
147
+ data-id={item.value}
148
+ data-testid={`style.${uiType}.${item.value}`}
149
+ aria-label={label + (isActive ? ` (${msg('style-panel.selected')})` : '')}
150
+ tooltip={
151
+ <>
152
+ <div>{label}</div>
153
+ {isActive ? <div>({msg('style-panel.selected')})</div> : null}
154
+ </>
155
+ }
156
+ value={item.value}
157
+ data-state={value.type === 'shared' && value.value === item.value ? 'on' : 'off'}
158
+ data-isactive={isActive}
159
+ title={label}
160
+ style={
161
+ style === (DefaultColorStyle as StyleProp<unknown>)
162
+ ? { color: getColorValue(theme, item.value as TLDefaultColorStyle, 'solid') }
163
+ : undefined
164
+ }
165
+ onPointerEnter={handleButtonPointerEnter}
166
+ onPointerDown={handleButtonPointerDown}
167
+ onPointerUp={handleButtonPointerUp}
168
+ onClick={handleButtonClick}
169
+ >
170
+ <TldrawUiButtonIcon icon={item.icon} />
171
+ </TldrawUiToolbarToggleItem>
172
+ )
173
+ })}
174
+ </Layout>
175
+ </TldrawUiToolbarToggleGroup>
176
+ </TldrawUiToolbar>
177
+ </>
183
178
  )
184
- }
185
-
186
- /** @public @react */
187
- export const StylePanelButtonPicker = memo(StylePanelButtonPickerInner) as <T extends string>(
188
- props: StylePanelButtonPickerProps<T>
189
- ) => React.JSX.Element
190
-
191
- /** @public @react*/
192
- export const StylePanelButtonPickerInline = memo(StylePanelButtonPickerInlineInner) as <
193
- T extends string,
194
- >(
195
- props: StylePanelButtonPickerProps<T>
196
- ) => React.JSX.Element
179
+ }) as <T extends string>(props: StylePanelButtonPickerProps<T>) => ReactElement
@@ -29,27 +29,12 @@ export interface StylePanelDoubleDropdownPickerProps<T extends string> {
29
29
  onValueChange?(style: StyleProp<T>, value: T): void
30
30
  }
31
31
 
32
- function StylePanelDoubleDropdownPickerInner<T extends string>(
33
- props: StylePanelDoubleDropdownPickerProps<T>
34
- ) {
35
- const msg = useTranslation()
36
- return (
37
- <div className="tlui-style-panel__double-select-picker">
38
- <div title={msg(props.label)} className="tlui-style-panel__double-select-picker-label">
39
- {msg(props.label)}
40
- </div>
41
- <TldrawUiToolbar orientation="horizontal" label={msg(props.label)}>
42
- <StylePanelDoubleDropdownPickerInline {...props} />
43
- </TldrawUiToolbar>
44
- </div>
45
- )
46
- }
47
-
48
- function StylePanelDoubleDropdownPickerInlineInner<T extends string>(
32
+ function DoubleDropdownPickerInner<T extends string>(
49
33
  props: StylePanelDoubleDropdownPickerProps<T>
50
34
  ) {
51
35
  const ctx = useStylePanelContext()
52
36
  const {
37
+ label,
53
38
  uiTypeA,
54
39
  uiTypeB,
55
40
  labelA,
@@ -85,100 +70,100 @@ function StylePanelDoubleDropdownPickerInlineInner<T extends string>(
85
70
  const idA = `style panel ${uiTypeA} A`
86
71
  const idB = `style panel ${uiTypeB} B`
87
72
  return (
88
- <>
89
- <TldrawUiPopover id={idA} open={isOpenA} onOpenChange={setIsOpenA}>
90
- <TldrawUiPopoverTrigger>
91
- <TldrawUiToolbarButton
92
- type="icon"
93
- data-testid={`style.${uiTypeA}`}
94
- title={
95
- msg(labelA) +
96
- ' — ' +
97
- (valueA === null || valueA.type === 'mixed'
98
- ? msg('style-panel.mixed')
99
- : msg(`${uiTypeA}-style.${valueA.value}` as TLUiTranslationKey))
100
- }
101
- >
102
- <TldrawUiButtonIcon icon={iconA} small invertIcon />
103
- </TldrawUiToolbarButton>
104
- </TldrawUiPopoverTrigger>
105
- <TldrawUiPopoverContent side="left" align="center" sideOffset={80} alignOffset={0}>
106
- <TldrawUiToolbar orientation="grid" label={msg(labelA)}>
107
- <TldrawUiMenuContextProvider type="icons" sourceId="style-panel">
108
- {itemsA.map((item) => {
109
- return (
110
- <TldrawUiToolbarButton
111
- data-testid={`style.${uiTypeA}.${item.value}`}
112
- type="icon"
113
- key={item.value}
114
- onClick={() => {
115
- onValueChange(styleA, item.value)
116
- tlmenus.deleteOpenMenu(idA, editor.contextId)
117
- setIsOpenA(false)
118
- }}
119
- title={`${msg(labelA)} — ${msg(`${uiTypeA}-style.${item.value}`)}`}
120
- >
121
- <TldrawUiButtonIcon icon={item.icon} invertIcon />
122
- </TldrawUiToolbarButton>
123
- )
124
- })}
125
- </TldrawUiMenuContextProvider>
126
- </TldrawUiToolbar>
127
- </TldrawUiPopoverContent>
128
- </TldrawUiPopover>
129
- <TldrawUiPopover id={idB} open={isOpenB} onOpenChange={setIsOpenB}>
130
- <TldrawUiPopoverTrigger>
131
- <TldrawUiToolbarButton
132
- type="icon"
133
- data-testid={`style.${uiTypeB}`}
134
- title={
135
- msg(labelB) +
136
- ' — ' +
137
- (valueB === null || valueB.type === 'mixed'
138
- ? msg('style-panel.mixed')
139
- : msg(`${uiTypeB}-style.${valueB.value}` as TLUiTranslationKey))
140
- }
141
- >
142
- <TldrawUiButtonIcon icon={iconB} small />
143
- </TldrawUiToolbarButton>
144
- </TldrawUiPopoverTrigger>
145
- <TldrawUiPopoverContent side="left" align="center" sideOffset={116} alignOffset={0}>
146
- <TldrawUiToolbar orientation="grid" label={msg(labelB)}>
147
- <TldrawUiMenuContextProvider type="icons" sourceId="style-panel">
148
- {itemsB.map((item) => {
149
- return (
150
- <TldrawUiToolbarButton
151
- key={item.value}
152
- type="icon"
153
- title={`${msg(labelB)} — ${msg(`${uiTypeB}-style.${item.value}` as TLUiTranslationKey)}`}
154
- data-testid={`style.${uiTypeB}.${item.value}`}
155
- onClick={() => {
156
- onValueChange(styleB, item.value)
157
- tlmenus.deleteOpenMenu(idB, editor.contextId)
158
- setIsOpenB(false)
159
- }}
160
- >
161
- <TldrawUiButtonIcon icon={item.icon} />
162
- </TldrawUiToolbarButton>
163
- )
164
- })}
165
- </TldrawUiMenuContextProvider>
166
- </TldrawUiToolbar>
167
- </TldrawUiPopoverContent>
168
- </TldrawUiPopover>
169
- </>
73
+ <div className="tlui-style-panel__double-select-picker">
74
+ <div title={msg(label)} className="tlui-style-panel__double-select-picker-label">
75
+ {msg(label)}
76
+ </div>
77
+ <TldrawUiToolbar orientation="horizontal" label={msg(label)}>
78
+ <TldrawUiPopover id={idA} open={isOpenA} onOpenChange={setIsOpenA}>
79
+ <TldrawUiPopoverTrigger>
80
+ <TldrawUiToolbarButton
81
+ type="icon"
82
+ data-testid={`style.${uiTypeA}`}
83
+ title={
84
+ msg(labelA) +
85
+ ' — ' +
86
+ (valueA === null || valueA.type === 'mixed'
87
+ ? msg('style-panel.mixed')
88
+ : msg(`${uiTypeA}-style.${valueA.value}` as TLUiTranslationKey))
89
+ }
90
+ >
91
+ <TldrawUiButtonIcon icon={iconA} small invertIcon />
92
+ </TldrawUiToolbarButton>
93
+ </TldrawUiPopoverTrigger>
94
+ <TldrawUiPopoverContent side="left" align="center" sideOffset={80} alignOffset={0}>
95
+ <TldrawUiToolbar orientation="grid" label={msg(labelA)}>
96
+ <TldrawUiMenuContextProvider type="icons" sourceId="style-panel">
97
+ {itemsA.map((item) => {
98
+ return (
99
+ <TldrawUiToolbarButton
100
+ data-testid={`style.${uiTypeA}.${item.value}`}
101
+ type="icon"
102
+ key={item.value}
103
+ onClick={() => {
104
+ onValueChange(styleA, item.value)
105
+ tlmenus.deleteOpenMenu(idA, editor.contextId)
106
+ setIsOpenA(false)
107
+ }}
108
+ title={`${msg(labelA)} — ${msg(`${uiTypeA}-style.${item.value}`)}`}
109
+ >
110
+ <TldrawUiButtonIcon icon={item.icon} invertIcon />
111
+ </TldrawUiToolbarButton>
112
+ )
113
+ })}
114
+ </TldrawUiMenuContextProvider>
115
+ </TldrawUiToolbar>
116
+ </TldrawUiPopoverContent>
117
+ </TldrawUiPopover>
118
+ <TldrawUiPopover id={idB} open={isOpenB} onOpenChange={setIsOpenB}>
119
+ <TldrawUiPopoverTrigger>
120
+ <TldrawUiToolbarButton
121
+ type="icon"
122
+ data-testid={`style.${uiTypeB}`}
123
+ title={
124
+ msg(labelB) +
125
+ ' — ' +
126
+ (valueB === null || valueB.type === 'mixed'
127
+ ? msg('style-panel.mixed')
128
+ : msg(`${uiTypeB}-style.${valueB.value}` as TLUiTranslationKey))
129
+ }
130
+ >
131
+ <TldrawUiButtonIcon icon={iconB} small />
132
+ </TldrawUiToolbarButton>
133
+ </TldrawUiPopoverTrigger>
134
+ <TldrawUiPopoverContent side="left" align="center" sideOffset={116} alignOffset={0}>
135
+ <TldrawUiToolbar orientation="grid" label={msg(labelB)}>
136
+ <TldrawUiMenuContextProvider type="icons" sourceId="style-panel">
137
+ {itemsB.map((item) => {
138
+ return (
139
+ <TldrawUiToolbarButton
140
+ key={item.value}
141
+ type="icon"
142
+ title={`${msg(labelB)} — ${msg(`${uiTypeB}-style.${item.value}` as TLUiTranslationKey)}`}
143
+ data-testid={`style.${uiTypeB}.${item.value}`}
144
+ onClick={() => {
145
+ onValueChange(styleB, item.value)
146
+ tlmenus.deleteOpenMenu(idB, editor.contextId)
147
+ setIsOpenB(false)
148
+ }}
149
+ >
150
+ <TldrawUiButtonIcon icon={item.icon} />
151
+ </TldrawUiToolbarButton>
152
+ )
153
+ })}
154
+ </TldrawUiMenuContextProvider>
155
+ </TldrawUiToolbar>
156
+ </TldrawUiPopoverContent>
157
+ </TldrawUiPopover>
158
+ </TldrawUiToolbar>
159
+ </div>
170
160
  )
171
161
  }
172
162
 
173
163
  // need to memo like this to get generics
174
164
  /** @public @react */
175
- export const StylePanelDoubleDropdownPicker = React.memo(StylePanelDoubleDropdownPickerInner) as <
165
+ export const StylePanelDoubleDropdownPicker = React.memo(DoubleDropdownPickerInner) as <
176
166
  T extends string,
177
167
  >(
178
168
  props: StylePanelDoubleDropdownPickerProps<T>
179
169
  ) => React.JSX.Element
180
-
181
- /** @public @react */
182
- export const StylePanelDoubleDropdownPickerInline = React.memo(
183
- StylePanelDoubleDropdownPickerInlineInner
184
- ) as <T extends string>(props: StylePanelDoubleDropdownPickerProps<T>) => React.JSX.Element
@@ -28,21 +28,7 @@ export interface StylePanelDropdownPickerProps<T extends string> {
28
28
  onValueChange?(style: StyleProp<T>, value: T): void
29
29
  }
30
30
 
31
- function StylePanelDropdownPickerInner<T extends string>(props: StylePanelDropdownPickerProps<T>) {
32
- const msg = useTranslation()
33
- const toolbarLabel = props.label
34
- ? msg(props.label)
35
- : msg(`style-panel.${props.stylePanelType}` as TLUiTranslationKey)
36
- return (
37
- <TldrawUiToolbar label={toolbarLabel}>
38
- <StylePanelDropdownPickerInline {...props} />
39
- </TldrawUiToolbar>
40
- )
41
- }
42
-
43
- function StylePanelDropdownPickerInlineInner<T extends string>(
44
- props: StylePanelDropdownPickerProps<T>
45
- ) {
31
+ function DropdownPickerInner<T extends string>(props: StylePanelDropdownPickerProps<T>) {
46
32
  const ctx = useStylePanelContext()
47
33
  const {
48
34
  id,
@@ -74,67 +60,60 @@ function StylePanelDropdownPickerInlineInner<T extends string>(
74
60
 
75
61
  const popoverId = `style panel ${id}`
76
62
  return (
77
- <TldrawUiPopover
78
- id={popoverId}
79
- open={isOpen}
80
- onOpenChange={setIsOpen}
81
- className="tlui-style-panel__dropdown-picker"
82
- >
83
- <TldrawUiPopoverTrigger>
84
- <TldrawUiToolbarButton
85
- type={type}
86
- data-testid={`style.${uiType}`}
87
- data-direction="left"
88
- title={titleStr}
89
- >
90
- {labelStr && <TldrawUiButtonLabel>{labelStr}</TldrawUiButtonLabel>}
91
- <TldrawUiButtonIcon icon={(icon as TLUiIconType) ?? 'mixed'} />
92
- </TldrawUiToolbarButton>
93
- </TldrawUiPopoverTrigger>
94
- <TldrawUiPopoverContent side="left" align="center">
95
- <TldrawUiToolbar orientation={items.length > 4 ? 'grid' : 'horizontal'} label={labelStr}>
96
- <TldrawUiMenuContextProvider type="icons" sourceId="style-panel">
97
- {items.map((item) => {
98
- return (
99
- <TldrawUiToolbarButton
100
- key={item.value}
101
- type="icon"
102
- data-testid={`style.${uiType}.${item.value}`}
103
- title={
104
- stylePanelName +
105
- ' — ' +
106
- msg(`${uiType}-style.${item.value}` as TLUiTranslationKey)
107
- }
108
- isActive={icon === item.icon}
109
- onClick={() => {
110
- ctx.onHistoryMark('select style dropdown item')
111
- onValueChange(style, item.value)
112
- tlmenus.deleteOpenMenu(popoverId, editor.contextId)
113
- setIsOpen(false)
114
- }}
115
- >
116
- <TldrawUiButtonIcon icon={item.icon} />
117
- </TldrawUiToolbarButton>
118
- )
119
- })}
120
- </TldrawUiMenuContextProvider>
121
- </TldrawUiToolbar>
122
- </TldrawUiPopoverContent>
123
- </TldrawUiPopover>
63
+ <TldrawUiToolbar label={stylePanelName}>
64
+ <TldrawUiPopover
65
+ id={popoverId}
66
+ open={isOpen}
67
+ onOpenChange={setIsOpen}
68
+ className="tlui-style-panel__dropdown-picker"
69
+ >
70
+ <TldrawUiPopoverTrigger>
71
+ <TldrawUiToolbarButton
72
+ type={type}
73
+ data-testid={`style.${uiType}`}
74
+ data-direction="left"
75
+ title={titleStr}
76
+ >
77
+ {labelStr && <TldrawUiButtonLabel>{labelStr}</TldrawUiButtonLabel>}
78
+ <TldrawUiButtonIcon icon={(icon as TLUiIconType) ?? 'mixed'} />
79
+ </TldrawUiToolbarButton>
80
+ </TldrawUiPopoverTrigger>
81
+ <TldrawUiPopoverContent side="left" align="center">
82
+ <TldrawUiToolbar orientation={items.length > 4 ? 'grid' : 'horizontal'} label={labelStr}>
83
+ <TldrawUiMenuContextProvider type="icons" sourceId="style-panel">
84
+ {items.map((item) => {
85
+ return (
86
+ <TldrawUiToolbarButton
87
+ key={item.value}
88
+ type="icon"
89
+ data-testid={`style.${uiType}.${item.value}`}
90
+ title={
91
+ stylePanelName +
92
+ ' ' +
93
+ msg(`${uiType}-style.${item.value}` as TLUiTranslationKey)
94
+ }
95
+ isActive={icon === item.icon}
96
+ onClick={() => {
97
+ ctx.onHistoryMark('select style dropdown item')
98
+ onValueChange(style, item.value)
99
+ tlmenus.deleteOpenMenu(popoverId, editor.contextId)
100
+ setIsOpen(false)
101
+ }}
102
+ >
103
+ <TldrawUiButtonIcon icon={item.icon} />
104
+ </TldrawUiToolbarButton>
105
+ )
106
+ })}
107
+ </TldrawUiMenuContextProvider>
108
+ </TldrawUiToolbar>
109
+ </TldrawUiPopoverContent>
110
+ </TldrawUiPopover>
111
+ </TldrawUiToolbar>
124
112
  )
125
113
  }
126
114
 
127
115
  // need to export like this to get generics
128
116
  /** @public @react */
129
- export const StylePanelDropdownPicker = React.memo(StylePanelDropdownPickerInner) as <
130
- T extends string,
131
- >(
132
- props: StylePanelDropdownPickerProps<T>
133
- ) => React.JSX.Element
134
-
135
- /** @public @react */
136
- export const StylePanelDropdownPickerInline = React.memo(StylePanelDropdownPickerInlineInner) as <
137
- T extends string,
138
- >(
117
+ export const StylePanelDropdownPicker = React.memo(DropdownPickerInner) as <T extends string>(
139
118
  props: StylePanelDropdownPickerProps<T>
140
119
  ) => React.JSX.Element
@@ -1,9 +1,9 @@
1
1
  // This file is automatically generated by internal/scripts/refresh-assets.ts.
2
2
  // Do not edit manually. Or do, I'm a comment, not a cop.
3
3
 
4
- export const version = '4.1.0-next.58b63dd1ac80'
4
+ export const version = '4.1.0-next.74327a60f18a'
5
5
  export const publishDates = {
6
6
  major: '2025-09-18T14:39:22.803Z',
7
- minor: '2025-10-15T11:02:19.723Z',
8
- patch: '2025-10-15T11:02:19.723Z',
7
+ minor: '2025-10-15T10:52:21.047Z',
8
+ patch: '2025-10-15T10:52:21.047Z',
9
9
  }