@tamagui/button 1.27.2 → 1.28.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Button.tsx"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["Button"]
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Button.test.tsx"],
4
- "mappings": "AAAA,QAAQ,IAAI,iBAAiB;AAE7B,SAAS,+BAA+B;AACxC,SAA0B,qBAAqB;AAE/C,SAAS,UAAU,QAAQ,YAAY;AAIvC,MAAM,OAAO,cAAc,wBAAwB,CAAC;AAEpD,SAAS,UAAU,MAAM;AACvB,OAAK,OAAO,MAAM;AAChB,WAAO,IAAI,EAAE,WAAW;AAAA,EAC1B,CAAC;AAWH,CAAC;",
4
+ "mappings": "AAAA,QAAQ,IAAI,iBAAiB;AAE7B,SAAS,+BAA+B;AACxC,SAAS,qBAAqB;AAC9B,SAAS,UAAU,QAAQ,YAAY;AAEvC,MAAM,OAAO,cAAc,wBAAwB,CAAC;AAEpD,SAAS,UAAU,MAAM;AACvB,OAAK,OAAO,MAAM;AAChB,WAAO,IAAI,EAAE,WAAW;AAAA,EAC1B,CAAC;AAWH,CAAC;",
5
5
  "names": []
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Button.test.tsx"],
4
- "mappings": "AAAA,QAAQ,IAAI,iBAAiB;AAE7B,SAAS,+BAA+B;AACxC,SAA0B,qBAAqB;AAE/C,SAAS,UAAU,QAAQ,YAAY;AAIvC,MAAM,OAAO,cAAc,wBAAwB,CAAC;AAEpD,SAAS,UAAU,MAAM;AACvB,OAAK,OAAO,MAAM;AAChB,WAAO,IAAI,EAAE,WAAW;AAAA,EAC1B,CAAC;AAWH,CAAC;",
4
+ "mappings": "AAAA,QAAQ,IAAI,iBAAiB;AAE7B,SAAS,+BAA+B;AACxC,SAAS,qBAAqB;AAC9B,SAAS,UAAU,QAAQ,YAAY;AAEvC,MAAM,OAAO,cAAc,wBAAwB,CAAC;AAEpD,SAAS,UAAU,MAAM;AACvB,OAAK,OAAO,MAAM;AAChB,WAAO,IAAI,EAAE,WAAW;AAAA,EAC1B,CAAC;AAWH,CAAC;",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/button",
3
- "version": "1.27.2",
3
+ "version": "1.28.0",
4
4
  "sideEffects": [
5
5
  "*.css"
6
6
  ],
@@ -29,17 +29,17 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@tamagui/font-size": "1.27.2",
33
- "@tamagui/get-button-sized": "1.27.2",
34
- "@tamagui/helpers-tamagui": "1.27.2",
35
- "@tamagui/text": "1.27.2",
36
- "@tamagui/web": "1.27.2"
32
+ "@tamagui/font-size": "1.28.0",
33
+ "@tamagui/get-button-sized": "1.28.0",
34
+ "@tamagui/helpers-tamagui": "1.28.0",
35
+ "@tamagui/text": "1.28.0",
36
+ "@tamagui/web": "1.28.0"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "react": "*"
40
40
  },
41
41
  "devDependencies": {
42
- "@tamagui/build": "1.27.2",
42
+ "@tamagui/build": "1.28.0",
43
43
  "react": "^18.2.0",
44
44
  "vitest": "^0.26.3"
45
45
  },
@@ -1,12 +1,9 @@
1
1
  process.env.TAMAGUI_TARGET = 'web'
2
2
 
3
3
  import { getDefaultTamaguiConfig } from '@tamagui/config-default'
4
- import { TamaguiProvider, createTamagui } from '@tamagui/core'
5
- import { render } from '@testing-library/react'
4
+ import { createTamagui } from '@tamagui/core'
6
5
  import { describe, expect, test } from 'vitest'
7
6
 
8
- import { Button } from '.'
9
-
10
7
  const conf = createTamagui(getDefaultTamaguiConfig())
11
8
 
12
9
  describe('Button', () => {
package/src/Button.tsx CHANGED
@@ -1,16 +1,20 @@
1
- import type { Scope } from '@tamagui/create-context'
2
- import { createContextScope } from '@tamagui/create-context'
3
1
  import { getFontSize } from '@tamagui/font-size'
4
2
  import { getButtonSized } from '@tamagui/get-button-sized'
5
- import { ColorProp, useGetThemedIcon } from '@tamagui/helpers-tamagui'
3
+ import { useGetThemedIcon } from '@tamagui/helpers-tamagui'
6
4
  import { ThemeableStack } from '@tamagui/stacks'
7
- import { SizableText, TextParentStyles, wrapChildrenInText } from '@tamagui/text'
5
+ import {
6
+ SizableText,
7
+ TextContextStyles,
8
+ TextParentStyles,
9
+ wrapChildrenInText,
10
+ } from '@tamagui/text'
8
11
  import {
9
12
  ButtonNestingContext,
13
+ ColorStyleProp,
10
14
  GetProps,
11
15
  SizeTokens,
12
- TamaguiElement,
13
16
  ThemeableProps,
17
+ createStyledContext,
14
18
  getVariableValue,
15
19
  isRSC,
16
20
  spacedChildren,
@@ -18,14 +22,22 @@ import {
18
22
  useProps,
19
23
  withStaticProperties,
20
24
  } from '@tamagui/web'
21
- import {
22
- FunctionComponent,
23
- forwardRef,
24
- useCallback,
25
- useContext,
26
- useEffect,
27
- useState,
28
- } from 'react'
25
+ import { FunctionComponent, useContext } from 'react'
26
+
27
+ export const ButtonContext = createStyledContext<
28
+ TextContextStyles & {
29
+ size: SizeTokens
30
+ }
31
+ >({
32
+ size: '$true',
33
+ color: undefined,
34
+ fontFamily: undefined,
35
+ fontSize: undefined,
36
+ fontStyle: undefined,
37
+ fontWeight: undefined,
38
+ letterSpacing: undefined,
39
+ textAlign: undefined,
40
+ })
29
41
 
30
42
  type ButtonIconProps = { color?: string; size?: number }
31
43
  type IconProp = JSX.Element | FunctionComponent<ButtonIconProps> | null
@@ -66,6 +78,7 @@ const BUTTON_NAME = 'Button'
66
78
  const ButtonFrame = styled(ThemeableStack, {
67
79
  name: BUTTON_NAME,
68
80
  tag: 'button',
81
+ context: ButtonContext,
69
82
  focusable: true,
70
83
 
71
84
  variants: {
@@ -119,9 +132,9 @@ const ButtonFrame = styled(ThemeableStack, {
119
132
  },
120
133
  })
121
134
 
122
- const BUTTON_TEXT_NAME = 'ButtonText'
123
- const ButtonTextFrame = styled(SizableText, {
124
- name: BUTTON_TEXT_NAME,
135
+ const ButtonText = styled(SizableText, {
136
+ name: 'ButtonText',
137
+ context: ButtonContext,
125
138
 
126
139
  variants: {
127
140
  unstyled: {
@@ -142,82 +155,22 @@ const ButtonTextFrame = styled(SizableText, {
142
155
  },
143
156
  })
144
157
 
145
- type ScopedProps<P> = P & { __scopeButton?: Scope }
146
- const [createButtonContext, createButtonScope] = createContextScope('Button')
147
-
148
- type ButtonContextValue = {
149
- size: SizeTokens
150
- color: ColorProp
151
-
152
- // used to keep backward compat with the new Button.Text api
153
- hasTextComponent: boolean
154
- registerButtonText: () => () => void
155
- }
156
-
157
- const [ButtonProvider, useButtonContext] =
158
- createButtonContext<ButtonContextValue>('Button')
159
-
160
- const ButtonTextComponent = ButtonTextFrame.extractable(
161
- forwardRef<TamaguiElement, ScopedProps<GetProps<typeof ButtonTextFrame>>>(
162
- (props, ref) => {
163
- const context = useButtonContext(BUTTON_TEXT_NAME, props.__scopeButton)
164
-
165
- useEffect(() => {
166
- const unregister = context.registerButtonText()
167
- return () => unregister()
168
- }, [context.registerButtonText])
169
-
170
- return <ButtonTextFrame size={props.size ?? context.size} {...props} ref={ref} />
171
- }
172
- )
173
- )
174
-
175
- const BUTTON_ICON_NAME = 'ButtonIcon'
176
-
177
- const ButtonIcon = (
178
- props: ScopedProps<{
179
- children: React.ReactNode
180
- scaleIcon?: number
181
- }>
182
- ) => {
158
+ const ButtonIcon = (props: { children: React.ReactNode; scaleIcon?: number }) => {
183
159
  const { children, scaleIcon = 1 } = props
184
- const context = useButtonContext(BUTTON_ICON_NAME, props.__scopeButton)
185
-
186
- const size = context.size
187
- const color = context.color
188
-
160
+ const { size, color } = useContext(ButtonContext)
189
161
  const iconSize = (typeof size === 'number' ? size * 0.5 : getFontSize(size)) * scaleIcon
190
162
  const getThemedIcon = useGetThemedIcon({ size: iconSize, color })
191
163
  return getThemedIcon(children)
192
164
  }
193
165
 
194
- const ButtonComponent = ButtonFrame.styleable<ScopedProps<ButtonProps>>(function Button(
195
- props,
196
- ref
197
- ) {
166
+ const ButtonComponent = ButtonFrame.styleable<ButtonProps>(function Button(props, ref) {
198
167
  const { props: buttonProps } = useButton(props)
199
- const [buttonTextCount, setButtonTextCount] = useState(0)
200
-
201
- const registerButtonText = useCallback(() => {
202
- setButtonTextCount((prev) => prev + 1)
203
- return () => setButtonTextCount((prev) => prev - 1)
204
- }, [setButtonTextCount])
205
-
206
- const hasTextComponent = buttonTextCount > 0
207
-
208
- return (
209
- <ButtonProvider
210
- scope={props.__scopeButton}
211
- color={props.color}
212
- hasTextComponent={hasTextComponent}
213
- size={props.size ?? '$true'}
214
- registerButtonText={registerButtonText}
215
- >
216
- <ButtonFrame {...(hasTextComponent ? props : buttonProps)} ref={ref} />
217
- </ButtonProvider>
218
- )
168
+ return <ButtonFrame {...buttonProps} ref={ref} />
219
169
  })
220
170
 
171
+ /**
172
+ * @deprecated Instead of useButton, see the Button docs for the newer and much improved Advanced customization pattern: https://tamagui.dev/docs/components/button
173
+ */
221
174
  const buttonStaticConfig = {
222
175
  inlineProps: new Set([
223
176
  // text props go here (can't really optimize them, but we never fully extract button anyway)
@@ -234,13 +187,16 @@ const buttonStaticConfig = {
234
187
  }
235
188
 
236
189
  const Button = withStaticProperties(ButtonComponent, {
237
- Text: ButtonTextComponent,
190
+ Text: ButtonText,
238
191
  Icon: ButtonIcon,
239
192
  })
240
193
 
194
+ /**
195
+ * @deprecated Instead of useButton, see the Button docs for the newer and much improved Advanced customization pattern: https://tamagui.dev/docs/components/button
196
+ */
241
197
  function useButton(
242
198
  propsIn: ButtonProps,
243
- { Text = ButtonTextFrame }: { Text: any } = { Text: ButtonTextFrame }
199
+ { Text = Button.Text }: { Text: any } = { Text: Button.Text }
244
200
  ) {
245
201
  // careful not to desctructure and re-order props, order is important
246
202
  const {
@@ -279,12 +235,13 @@ function useButton(
279
235
  const contents = wrapChildrenInText(
280
236
  Text,
281
237
  propsActive,
282
- Text === ButtonTextFrame && hasUnstyled
238
+ Text === ButtonText && hasUnstyled
283
239
  ? {
284
240
  unstyled: propsIn.unstyled,
285
241
  }
286
242
  : undefined
287
243
  )
244
+
288
245
  const inner = spacedChildren({
289
246
  // a bit arbitrary but scaling to font size is necessary so long as button does
290
247
  space: spaceSize,
@@ -333,14 +290,13 @@ function useButton(
333
290
  }
334
291
 
335
292
  export {
336
- createButtonScope,
337
293
  Button,
294
+ ButtonFrame,
295
+ ButtonText,
296
+ ButtonIcon,
338
297
 
339
- // legacy api
298
+ // legacy
340
299
  useButton,
341
300
  buttonStaticConfig,
342
- ButtonFrame,
343
- ButtonTextFrame as ButtonText,
344
301
  }
345
-
346
302
  export type { ButtonProps }