@tamagui/web 1.45.5 → 1.45.7

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.
@@ -671,6 +671,10 @@ export function createComponent<
671
671
 
672
672
  const className = classList.join(' ')
673
673
 
674
+ if (className.includes('undefined')) {
675
+ console.warn('???', { classList, componentClassName, fontFamilyClassName })
676
+ }
677
+
674
678
  if (process.env.TAMAGUI_TARGET === 'web') {
675
679
  const style = avoidStyle ? null : animationStyles ?? splitStyles.style
676
680
 
@@ -703,25 +707,28 @@ export function createComponent<
703
707
  // TODO MOVE INTO HOOK
704
708
  if (process.env.TAMAGUI_TARGET === 'native') {
705
709
  // swap out the right family based on weight/style
706
- if (styles && splitStyles.fontFamily) {
707
- const faceInfo = tamaguiConfig.fontsParsed[splitStyles.fontFamily]?.face
708
- if (faceInfo) {
709
- const [weight, style] = (() => {
710
- let weight: string | undefined
711
- let style: string | undefined
712
- for (let i = styles.length; i >= 0; i--) {
713
- weight ??= styles[i]?.fontWeight
714
- style ??= styles[i]?.fontStyle
715
- }
716
- return [weight || '400', style || 'normal'] as const
717
- })()
718
- const overrideFace = faceInfo[weight]?.[style]?.val
719
- if (overrideFace) {
720
- for (const style of styles) {
721
- if (style?.fontFamily) {
722
- style.fontFamily = overrideFace
723
- style.fontWeight = undefined
724
- style.fontStyle = undefined
710
+ if (styles && isText) {
711
+ const fontFamily = splitStyles.fontFamily || tamaguiConfig.defaultFont
712
+ if (fontFamily) {
713
+ const faceInfo = tamaguiConfig.fontsParsed[fontFamily]?.face
714
+ if (faceInfo) {
715
+ const [weight, style] = (() => {
716
+ let weight: string | undefined
717
+ let style: string | undefined
718
+ for (let i = styles.length; i >= 0; i--) {
719
+ weight ??= styles[i]?.fontWeight
720
+ style ??= styles[i]?.fontStyle
721
+ }
722
+ return [weight || '400', style || 'normal'] as const
723
+ })()
724
+ const overrideFace = faceInfo[weight]?.[style]?.val
725
+ if (overrideFace) {
726
+ for (const style of styles) {
727
+ if (style?.fontFamily) {
728
+ style.fontFamily = overrideFace
729
+ style.fontWeight = undefined
730
+ style.fontStyle = undefined
731
+ }
725
732
  }
726
733
  }
727
734
  }
@@ -261,13 +261,22 @@ ${runtimeStyles}`
261
261
 
262
262
  const getNewCSS: GetCSS = (opts) => getCSS({ ...opts, sinceLastCall: true })
263
263
 
264
- const defaultFont =
264
+ const defaultFontName =
265
265
  configIn.defaultFont ||
266
266
  // uses font named "body" if present for compat
267
- ('body' in configIn.fonts ? 'body' : false) ||
267
+ ('body' in configIn.fonts ? 'body' : 0) ||
268
268
  // defaults to the first font to make life easier
269
269
  Object.keys(configIn.fonts)[0]
270
270
 
271
+ if (process.env.NODE_ENV !== 'production') {
272
+ if (defaultFontName?.[0] === '$') {
273
+ throw new Error(`Pass defaultFont without a $ prefix (${configIn.defaultFont})`)
274
+ }
275
+ }
276
+
277
+ // ensure prefixed with $
278
+ const defaultFont = `$${defaultFontName}`
279
+
271
280
  const config: TamaguiInternalConfig = {
272
281
  settings: {},
273
282
  onlyAllowShorthands: false,
@@ -114,9 +114,6 @@ const resolveVariants: StyleResolver = (
114
114
  return
115
115
  }
116
116
 
117
- // set the curProps to use the new value for this variant
118
- styleState.curProps[key] = value
119
-
120
117
  let variantValue = getVariantDefinition(variants[key], key, value, conf)
121
118
 
122
119
  if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
@@ -163,6 +160,17 @@ const resolveVariants: StyleResolver = (
163
160
  }
164
161
 
165
162
  // update curProps for variants expanded:
163
+ if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
164
+ // rome-ignore lint/nursery/noConsoleLog: <explanation>
165
+ console.log(` attaching updated curProps`, {
166
+ new: variantValue,
167
+ before: styleState.curProps,
168
+ after: {
169
+ ...styleState.curProps,
170
+ ...variantValue,
171
+ },
172
+ })
173
+ }
166
174
  styleState.curProps = {
167
175
  ...styleState.curProps,
168
176
  ...variantValue,
@@ -177,6 +185,7 @@ const resolveVariants: StyleResolver = (
177
185
  if (fontFamilyUpdate) {
178
186
  fontFamilyResult = getFontFamilyFromNameOrVariable(fontFamilyUpdate, conf)
179
187
  styleState.fontFamily = fontFamilyResult
188
+
180
189
  if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
181
190
  // rome-ignore lint/nursery/noConsoleLog: <explanation>
182
191
  console.log(` updating font family`, fontFamilyResult)
@@ -212,9 +221,7 @@ const resolveVariants: StyleResolver = (
212
221
  export function getFontFamilyFromNameOrVariable(input: any, conf: TamaguiInternalConfig) {
213
222
  if (isVariable(input)) {
214
223
  const val = variableToFontNameCache.get(input)
215
- if (val) {
216
- return val
217
- }
224
+ if (val) return val
218
225
  for (const key in conf.fontsParsed) {
219
226
  const familyVariable = conf.fontsParsed[key].family
220
227
  if (isVariable(familyVariable)) {
@@ -228,11 +235,6 @@ export function getFontFamilyFromNameOrVariable(input: any, conf: TamaguiInterna
228
235
  if (input?.[0] === '$') {
229
236
  return input
230
237
  }
231
- // this could be mapped back to
232
- if (process.env.NODE_ENV === 'development') {
233
- // rome-ignore lint/nursery/noConsoleLog: ok
234
- console.log('[tamagui] should map back', input)
235
- }
236
238
  }
237
239
  }
238
240
 
@@ -423,12 +425,13 @@ const getToken = (
423
425
  case 'lineHeight':
424
426
  case 'letterSpacing':
425
427
  case 'fontWeight': {
426
- if (fontFamily) {
428
+ const fam = fontFamily || styleState.conf.defaultFont
429
+ if (fam) {
427
430
  const fontsParsed = languageContext
428
431
  ? getFontsForLanguage(conf.fontsParsed, languageContext)
429
432
  : conf.fontsParsed
430
- valOrVar =
431
- fontsParsed[fontFamily]?.[fontShorthand[key] || key]?.[value] || value
433
+ const font = fontsParsed[fam]
434
+ valOrVar = font?.[fontShorthand[key] || key]?.[value] || value
432
435
  hasSet = true
433
436
  }
434
437
  break
@@ -67,6 +67,8 @@ import {
67
67
  } from './normalizeValueWithProperty'
68
68
  import { pseudoDescriptors } from './pseudoDescriptors'
69
69
 
70
+ const fontFamilyKey = 'fontFamily'
71
+
70
72
  // bugfix for some reason it gets reset
71
73
  const IS_STATIC = process.env.IS_STATIC === 'is_static'
72
74
 
@@ -94,7 +96,6 @@ type StyleSplitter = (
94
96
  ) => GetStyleResult
95
97
 
96
98
  export const PROP_SPLIT = '-'
97
- let defaultFontVariable = ''
98
99
 
99
100
  // loop props backwards
100
101
  // track used keys:
@@ -205,7 +206,8 @@ export const getSplitStyles: StyleSplitter = (
205
206
  }
206
207
 
207
208
  for (let i = 0; i < numProps; i++) {
208
- let keyInit = propKeys[i]
209
+ const keyOg = propKeys[i]
210
+ let keyInit = keyOg
209
211
  let valInit = props[keyInit]
210
212
 
211
213
  // normalize shorthands up front
@@ -217,6 +219,8 @@ export const getSplitStyles: StyleSplitter = (
217
219
  if (keyInit in usedKeys) continue
218
220
  if (keyInit in skipProps && !isHOC) continue
219
221
 
222
+ styleState.curProps[keyInit] = valInit
223
+
220
224
  // TODO this is duplicated! but seems to be fixing some bugs so leaving got now
221
225
  if (process.env.TAMAGUI_TARGET === 'web') {
222
226
  if (typeof valInit === 'string' && valInit[0] === '_') {
@@ -495,10 +499,14 @@ export const getSplitStyles: StyleSplitter = (
495
499
  const shouldPassThrough = shouldPassProp || isHOCShouldPassThrough
496
500
 
497
501
  if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
498
- console.groupCollapsed(` 🔹 prop ${keyInit} ${shouldPassThrough ? '(pass)' : ''}`)
502
+ console.groupCollapsed(
503
+ `🔹🔹🔹🔹 ${keyOg}${keyInit !== keyOg ? ` (shorthand for ${keyInit})` : ''} ${
504
+ shouldPassThrough ? '(pass)' : ''
505
+ } 🔹🔹🔹🔹`
506
+ )
499
507
  // prettier-ignore
500
508
  // rome-ignore lint/nursery/noConsoleLog: <explanation>
501
- console.log({ valInit, variants, variant: variants?.[keyInit], isVariant, shouldPassProp, isHOCShouldPassThrough })
509
+ console.log({ valInit, variants, variant: variants?.[keyInit], isVariant, shouldPassProp, isHOCShouldPassThrough, curProps: { ...styleState.curProps } })
502
510
  console.groupEnd()
503
511
  }
504
512
 
@@ -535,11 +543,14 @@ export const getSplitStyles: StyleSplitter = (
535
543
  // after shouldPassThrough
536
544
  if (keyInit in skipProps) continue
537
545
 
538
- // default font family
539
- // is this great? no, but backwards compat until we add tests and make better
540
- defaultFontVariable ||= `$${conf.defaultFont}`
541
- styleState.fontFamily ||=
542
- props[conf.inverseShorthands.fontFamily] || props.fontFamily || defaultFontVariable
546
+ // we sort of have to update fontFamily all the time: before variants run, after each variant
547
+ if (
548
+ valInit &&
549
+ (keyInit === fontFamilyKey || keyInit === shorthands[fontFamilyKey]) &&
550
+ valInit in conf.fontsParsed
551
+ ) {
552
+ styleState.fontFamily = valInit
553
+ }
543
554
 
544
555
  const expanded =
545
556
  isMediaOrPseudo || (!(keyInit in validStyleProps) && !isVariant)
@@ -571,6 +582,13 @@ export const getSplitStyles: StyleSplitter = (
571
582
  if (val == null) continue
572
583
  if (key in usedKeys) continue
573
584
 
585
+ if (key === fontFamilyKey && valInit && val) {
586
+ const fam = valInit[0] === '$' ? valInit : val
587
+ if (fam in conf.fontsParsed) {
588
+ styleState.fontFamily = fam
589
+ }
590
+ }
591
+
574
592
  isMedia = isMediaKey(key)
575
593
  isPseudo = key in validPseudoKeys
576
594
  isMediaOrPseudo = isMedia || isPseudo
@@ -871,7 +889,7 @@ export const getSplitStyles: StyleSplitter = (
871
889
  usedKeys,
872
890
  mediaState[mediaKeyShort]
873
891
  )
874
- if (key === 'fontFamily') {
892
+ if (key === fontFamilyKey) {
875
893
  styleState.fontFamily = mediaStyle.fontFamily as string
876
894
  }
877
895
  }
@@ -886,13 +904,6 @@ export const getSplitStyles: StyleSplitter = (
886
904
  }
887
905
  }
888
906
 
889
- if (key === 'fontFamily' && !styleState.fontFamily && valInit && val) {
890
- const fam = valInit[0] === '$' ? valInit : val
891
- if (fam in conf.fontsParsed) {
892
- styleState.fontFamily = fam
893
- }
894
- }
895
-
896
907
  if (
897
908
  key in validStyleProps ||
898
909
  (process.env.TAMAGUI_TARGET === 'native' && isAndroid && key === 'elevation')
@@ -917,9 +928,6 @@ export const getSplitStyles: StyleSplitter = (
917
928
  }
918
929
  }
919
930
 
920
- // default to default font
921
- styleState.fontFamily ||= conf.defaultFont
922
-
923
931
  fixStyles(style)
924
932
  if (isWeb) {
925
933
  styleToCSS(style)
@@ -927,7 +935,7 @@ export const getSplitStyles: StyleSplitter = (
927
935
 
928
936
  // native: swap out the right family based on weight/style
929
937
  if (process.env.TAMAGUI_TARGET === 'native') {
930
- if ('fontFamily' in style && style.fontFamily) {
938
+ if (fontFamilyKey in style && style.fontFamily) {
931
939
  const faceInfo = getFont(style.fontFamily as string)?.face
932
940
  if (faceInfo) {
933
941
  const overrideFace =
@@ -364,7 +364,7 @@ export const useChangeThemeEffect = (
364
364
  mounted,
365
365
  }
366
366
 
367
- if (process.env.NODE_ENV === 'development' && props['debug']) {
367
+ if (process.env.NODE_ENV === 'development' && props['debug'] && isClient) {
368
368
  console.groupCollapsed(` 🔷 ${themeManager.id} useChangeThemeEffect createState`)
369
369
  const parentState = { ...parentManager?.state }
370
370
  const parentId = parentManager?.id
@@ -1 +1 @@
1
- {"version":3,"file":"createComponent.d.ts","sourceRoot":"","sources":["../src/createComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAWN,MAAM,OAAO,CAAA;AAiBd,OAAO,EACL,SAAS,EACT,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAEhB,qBAAqB,EACrB,cAAc,EAIf,MAAM,SAAS,CAAA;AAoBhB,eAAO,MAAM,qBAAqB,EAAE,qBAMnC,CAAA;AAwBD,eAAO,MAAM,QAAQ,eAAsB,CAAA;AAqB3C,wBAAgB,eAAe,CAC7B,kBAAkB,SAAS,MAAM,GAAG,EAAE,EACtC,GAAG,GAAG,cAAc,EACpB,SAAS,GAAG,KAAK,EACjB,cAAc,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,kBAAkB,4DA22B3D;AAGD,eAAO,MAAM,QAAQ;YAAW;QAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE;;CAAmB,CAAA;AAMrE,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,UAAU,CAAA;IAClB,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,mBAkGxD"}
1
+ {"version":3,"file":"createComponent.d.ts","sourceRoot":"","sources":["../src/createComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAWN,MAAM,OAAO,CAAA;AAiBd,OAAO,EACL,SAAS,EACT,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAEhB,qBAAqB,EACrB,cAAc,EAIf,MAAM,SAAS,CAAA;AAoBhB,eAAO,MAAM,qBAAqB,EAAE,qBAMnC,CAAA;AAwBD,eAAO,MAAM,QAAQ,eAAsB,CAAA;AAqB3C,wBAAgB,eAAe,CAC7B,kBAAkB,SAAS,MAAM,GAAG,EAAE,EACtC,GAAG,GAAG,cAAc,EACpB,SAAS,GAAG,KAAK,EACjB,cAAc,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,kBAAkB,4DAk3B3D;AAGD,eAAO,MAAM,QAAQ;YAAW;QAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE;;CAAmB,CAAA;AAMrE,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,UAAU,CAAA;IAClB,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,mBAkGxD"}
@@ -1 +1 @@
1
- {"version":3,"file":"createTamagui.d.ts","sourceRoot":"","sources":["../src/createTamagui.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,kBAAkB,EAElB,kBAAkB,EAGnB,MAAM,SAAS,CAAA;AAKhB,wBAAgB,aAAa,CAAC,IAAI,SAAS,kBAAkB,EAC3D,QAAQ,EAAE,IAAI,GACb,kBAAkB,CAAC,IAAI,CAAC,CAkS1B"}
1
+ {"version":3,"file":"createTamagui.d.ts","sourceRoot":"","sources":["../src/createTamagui.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,kBAAkB,EAElB,kBAAkB,EAGnB,MAAM,SAAS,CAAA;AAKhB,wBAAgB,aAAa,CAAC,IAAI,SAAS,kBAAkB,EAC3D,QAAQ,EAAE,IAAI,GACb,kBAAkB,CAAC,IAAI,CAAC,CA2S1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"createPropMapper.d.ts","sourceRoot":"","sources":["../../src/helpers/createPropMapper.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,UAAU,EACV,kBAAkB,EAElB,qBAAqB,EAEtB,MAAM,UAAU,CAAA;AAQjB,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN,OAAO,GACP,UAAU,GACV,MAAM,GACN,iBAAiB,CAAA;AAErB,eAAO,MAAM,gBAAgB,iBAAkB,kBAAkB,eAuEhE,CAAA;AAiHD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,qBAAqB,sBAyBtF;AAMD,eAAO,MAAM,uBAAuB,cAAe,GAAG,QAErD,CAAA"}
1
+ {"version":3,"file":"createPropMapper.d.ts","sourceRoot":"","sources":["../../src/helpers/createPropMapper.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,UAAU,EACV,kBAAkB,EAElB,qBAAqB,EAEtB,MAAM,UAAU,CAAA;AAQjB,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN,OAAO,GACP,UAAU,GACV,MAAM,GACN,iBAAiB,CAAA;AAErB,eAAO,MAAM,gBAAgB,iBAAkB,kBAAkB,eAuEhE,CAAA;AA0HD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,qBAAqB,sBAkBtF;AAMD,eAAO,MAAM,uBAAuB,cAAe,GAAG,QAErD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getSplitStyles.d.ts","sourceRoot":"","sources":["../../src/helpers/getSplitStyles.tsx"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAEV,SAAS,EACT,cAAc,EACd,aAAa,EAMb,eAAe,EACf,kBAAkB,EAGlB,cAAc,EACd,WAAW,EAEZ,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAqBtE,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;AAMhE,KAAK,aAAa,GAAG,CACnB,KAAK,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC7B,YAAY,EAAE,kBAAkB,EAChC,UAAU,EAAE;IACV,KAAK,EAAE,WAAW,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb,EACD,KAAK,EAAE,eAAe,EACtB,iBAAiB,CAAC,EAAE,cAAc,GAAG,IAAI,EACzC,eAAe,CAAC,EAAE,mBAAmB,EAErC,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,SAAS,KACd,cAAc,CAAA;AAEnB,eAAO,MAAM,UAAU,MAAM,CAAA;AAU7B,eAAO,MAAM,cAAc,EAAE,aAo+B5B,CAAA;AAkFD,eAAO,MAAM,WAAW,eACV,aAAa,UACjB,MAAM,WACL,MAAM,sBACK,OAAO,wBACL,OAAO,KAC5B,cA6BF,CAAA;AAOD,eAAO,MAAM,cAAc,EAAE,aAQ5B,CAAA;AA6BD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA"}
1
+ {"version":3,"file":"getSplitStyles.d.ts","sourceRoot":"","sources":["../../src/helpers/getSplitStyles.tsx"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAEV,SAAS,EACT,cAAc,EACd,aAAa,EAMb,eAAe,EACf,kBAAkB,EAGlB,cAAc,EACd,WAAW,EAEZ,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAuBtE,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;AAMhE,KAAK,aAAa,GAAG,CACnB,KAAK,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC7B,YAAY,EAAE,kBAAkB,EAChC,UAAU,EAAE;IACV,KAAK,EAAE,WAAW,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb,EACD,KAAK,EAAE,eAAe,EACtB,iBAAiB,CAAC,EAAE,cAAc,GAAG,IAAI,EACzC,eAAe,CAAC,EAAE,mBAAmB,EAErC,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,SAAS,KACd,cAAc,CAAA;AAEnB,eAAO,MAAM,UAAU,MAAM,CAAA;AAS7B,eAAO,MAAM,cAAc,EAAE,aA2+B5B,CAAA;AAkFD,eAAO,MAAM,WAAW,eACV,aAAa,UACjB,MAAM,WACL,MAAM,sBACK,OAAO,wBACL,OAAO,KAC5B,cA6BF,CAAA;AAOD,eAAO,MAAM,cAAc,EAAE,aAQ5B,CAAA;AA6BD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA"}