@tamagui/core 1.2.2 → 1.2.4

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.
@@ -497,7 +497,9 @@ export function createComponent<
497
497
  } as any)
498
498
  }
499
499
 
500
- if (props.href !== undefined && hrefAttrs !== undefined) {
500
+ // TODO move into getSplitStyles inital `if (process.env.TAMAGUI_TARGET === 'web')` block
501
+
502
+ if (viewProps.href !== undefined && hrefAttrs !== undefined) {
501
503
  const { download, rel, target } = hrefAttrs
502
504
  if (download != null) {
503
505
  viewProps.download = download
@@ -512,39 +514,42 @@ export function createComponent<
512
514
 
513
515
  // FOCUS
514
516
  // "focusable" indicates that an element may be a keyboard tab-stop.
515
- const _focusable = focusable !== undefined ? focusable : accessible
516
- const role = viewProps.role
517
- if (_focusable === false) {
518
- viewProps.tabIndex = '-1'
519
- }
520
- if (
521
- // These native elements are focusable by default
522
- elementType === 'a' ||
523
- elementType === 'button' ||
524
- elementType === 'input' ||
525
- elementType === 'select' ||
526
- elementType === 'textarea'
527
- ) {
528
- if (_focusable === false || accessibilityDisabled === true) {
517
+ // ported from RNW: TODO move into getSplitStyles
518
+ if (!viewProps.tabIndex) {
519
+ const _focusable = focusable !== undefined ? focusable : accessible
520
+ const role = viewProps.role
521
+ if (_focusable === false) {
529
522
  viewProps.tabIndex = '-1'
530
523
  }
531
- } else if (
532
- // These roles are made focusable by default
533
- role === 'button' ||
534
- role === 'checkbox' ||
535
- role === 'link' ||
536
- role === 'radio' ||
537
- role === 'textbox' ||
538
- role === 'switch'
539
- ) {
540
- if (_focusable !== false) {
524
+ if (
525
+ // These native elements are focusable by default
526
+ elementType === 'a' ||
527
+ elementType === 'button' ||
528
+ elementType === 'input' ||
529
+ elementType === 'select' ||
530
+ elementType === 'textarea'
531
+ ) {
532
+ if (_focusable === false || accessibilityDisabled === true) {
533
+ viewProps.tabIndex = '-1'
534
+ }
535
+ } else if (
536
+ // These roles are made focusable by default
537
+ role === 'button' ||
538
+ role === 'checkbox' ||
539
+ role === 'link' ||
540
+ role === 'radio' ||
541
+ role === 'textbox' ||
542
+ role === 'switch'
543
+ ) {
544
+ if (_focusable !== false) {
545
+ viewProps.tabIndex = '0'
546
+ }
547
+ }
548
+ // Everything else must explicitly set the prop
549
+ if (_focusable === true) {
541
550
  viewProps.tabIndex = '0'
542
551
  }
543
552
  }
544
- // Everything else must explicitly set the prop
545
- if (_focusable === true) {
546
- viewProps.tabIndex = '0'
547
- }
548
553
  } else {
549
554
  viewProps = nonTamaguiProps
550
555
  }
@@ -286,37 +286,49 @@ const resolveTokensAndVariants: StyleResolver = (
286
286
  const fKey = conf.shorthands[rKey] || rKey
287
287
  const val = value[rKey]
288
288
 
289
- if (isVariable(val)) {
290
- res[fKey] = !isWeb || returnVariablesAs === 'value' ? val.val : val.variable
291
- } else if (variants[fKey]) {
289
+ if (fKey in variants) {
292
290
  // avoids infinite loop if variant is matching a style prop
293
291
  // eg: { variants: { flex: { true: { flex: 2 } } } }
294
- if (parentVariantKey === key) {
292
+ if (parentVariantKey && parentVariantKey === key) {
295
293
  res[fKey] = val
296
294
  } else {
297
- Object.assign(
298
- res,
299
- Object.fromEntries(
300
- resolveVariants(
301
- fKey,
302
- val,
303
- props,
304
- defaultProps,
305
- theme,
306
- variants,
307
- fontFamily,
308
- conf,
309
- returnVariablesAs,
310
- staticConfig,
311
- key,
312
- languageContext,
313
- avoidDefaultProps,
314
- debug
315
- )
316
- )
295
+ const variantOut = resolveVariants(
296
+ fKey,
297
+ val,
298
+ props,
299
+ defaultProps,
300
+ theme,
301
+ variants,
302
+ fontFamily,
303
+ conf,
304
+ returnVariablesAs,
305
+ staticConfig,
306
+ key,
307
+ languageContext,
308
+ avoidDefaultProps,
309
+ debug
317
310
  )
311
+
312
+ const { pressStyle, hoverStyle, focusStyle, enterStyle, exitStyle, ...rest } =
313
+ Object.fromEntries(variantOut)
314
+ const subs = { pressStyle, hoverStyle, focusStyle, enterStyle, exitStyle }
315
+ Object.assign(res, rest)
316
+ for (const key in subs) {
317
+ if (subs[key]) {
318
+ res[key] ??= {}
319
+ Object.assign(res[key], subs[key])
320
+ }
321
+ }
318
322
  }
319
- } else if (typeof val === 'string') {
323
+ continue
324
+ }
325
+
326
+ if (isVariable(val)) {
327
+ res[fKey] = !isWeb || returnVariablesAs === 'value' ? val.val : val.variable
328
+ continue
329
+ }
330
+
331
+ if (typeof val === 'string') {
320
332
  const fVal =
321
333
  val[0] === '$'
322
334
  ? getToken(
@@ -331,10 +343,15 @@ const resolveTokensAndVariants: StyleResolver = (
331
343
  )
332
344
  : val
333
345
  res[fKey] = fVal
334
- } else {
335
- if (isObj(val)) {
336
- // sub-objects: media queries, pseudos, shadowOffset
337
- res[fKey] = resolveTokensAndVariants(
346
+ continue
347
+ }
348
+
349
+ if (isObj(val)) {
350
+ // sub-objects: media queries, pseudos, shadowOffset
351
+ res[fKey] ??= {}
352
+ Object.assign(
353
+ res[fKey],
354
+ resolveTokensAndVariants(
338
355
  fKey,
339
356
  val,
340
357
  props,
@@ -350,11 +367,12 @@ const resolveTokensAndVariants: StyleResolver = (
350
367
  avoidDefaultProps,
351
368
  debug
352
369
  )
353
- } else {
354
- // nullish values cant be tokens, need no extra parsing
355
- res[fKey] = val
356
- }
370
+ )
371
+ } else {
372
+ // nullish values cant be tokens, need no extra parsing
373
+ res[fKey] = val
357
374
  }
375
+
358
376
  if (process.env.NODE_ENV === 'development') {
359
377
  if (debug) {
360
378
  if (res[fKey]?.[0] === '$') {
@@ -1 +1 @@
1
- {"version":3,"file":"createComponent.d.ts","sourceRoot":"","sources":["../src/createComponent.tsx"],"names":[],"mappings":"AAeA,OAAO,KAWN,MAAM,OAAO,CAAA;AAkBd,OAAO,EACL,SAAS,EACT,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EAErB,cAAc,EAIf,MAAM,SAAS,CAAA;AAoBhB,eAAO,MAAM,qBAAqB,EAAE,qBAMnC,CAAA;AAeD,eAAO,MAAM,QAAQ,eAAsB,CAAA;AAkC3C,wBAAgB,eAAe,CAC7B,kBAAkB,SAAS,MAAM,GAAG,EAAE,EACtC,GAAG,GAAG,cAAc,EACpB,SAAS,GAAG,KAAK,EAEjB,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,kBAAkB,EACpD,eAAe,CAAC,EAAE,iBAAiB,4DAm3BpC;AAGD,eAAO,MAAM,QAAQ;YAAW;QAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE;;CAEjD,CAAA;AAMD,eAAO,MAAM,MAAM,0DA8CjB,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,mBAiGxD"}
1
+ {"version":3,"file":"createComponent.d.ts","sourceRoot":"","sources":["../src/createComponent.tsx"],"names":[],"mappings":"AAeA,OAAO,KAWN,MAAM,OAAO,CAAA;AAkBd,OAAO,EACL,SAAS,EACT,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EAErB,cAAc,EAIf,MAAM,SAAS,CAAA;AAoBhB,eAAO,MAAM,qBAAqB,EAAE,qBAMnC,CAAA;AAeD,eAAO,MAAM,QAAQ,eAAsB,CAAA;AAkC3C,wBAAgB,eAAe,CAC7B,kBAAkB,SAAS,MAAM,GAAG,EAAE,EACtC,GAAG,GAAG,cAAc,EACpB,SAAS,GAAG,KAAK,EAEjB,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,kBAAkB,EACpD,eAAe,CAAC,EAAE,iBAAiB,4DAw3BpC;AAGD,eAAO,MAAM,QAAQ;YAAW;QAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE;;CAEjD,CAAA;AAMD,eAAO,MAAM,MAAM,0DA8CjB,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,mBAiGxD"}