@tamagui/group 1.14.1 → 1.14.2

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.
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/Group.tsx"],
4
4
  "sourcesContent": ["import {\n GetProps,\n TamaguiElement,\n UnionableString,\n Variable,\n getConfig,\n getExpandedShorthands,\n getTokens,\n getVariableValue,\n isTamaguiElement,\n mergeProps,\n spacedChildren,\n styled,\n useMediaPropsActive,\n withStaticProperties,\n} from '@tamagui/core'\nimport { Scope, createContextScope } from '@tamagui/create-context'\nimport { ThemeableStack } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport React, { Children, forwardRef, isValidElement } from 'react'\nimport { ScrollView } from 'react-native'\nimport { useIndex, useIndexedChildren } from 'reforest'\n\ntype DisablePassBorderRadius = boolean | 'bottom' | 'top' | 'start' | 'end'\n\ninterface GroupContextValue {\n vertical: boolean\n disablePassBorderRadius: DisablePassBorderRadius\n onItemMount: () => void\n onItemUnmount: () => void\n radius?: number | UnionableString | Variable<any>\n disabled?: boolean\n}\n\nconst GROUP_NAME = 'Group'\n\ntype ScopedProps<P> = P & { __scopeGroup?: Scope }\nconst [createGroupContext, createGroupScope] = createContextScope(GROUP_NAME)\nconst [GroupProvider, useGroupContext] = createGroupContext<GroupContextValue>(GROUP_NAME)\n\nexport const GroupFrame = styled(ThemeableStack, {\n name: 'GroupFrame',\n\n variants: {\n unstyled: {\n false: {\n size: '$true',\n y: 0,\n backgroundColor: '$background',\n },\n },\n\n size: (val, { tokens }) => {\n const borderRadius = tokens.radius[val] ?? val ?? tokens.radius['$true']\n return {\n borderRadius,\n }\n },\n } as const,\n\n defaultVariants: {\n unstyled: false,\n },\n})\n\nexport type GroupProps = GetProps<typeof GroupFrame> & {\n /**\n * @deprecated use `orientation` instead\n */\n axis?: 'horizontal' | 'vertical'\n orientation?: 'horizontal' | 'vertical'\n scrollable?: boolean\n /**\n * @default false\n */\n showScrollIndicator?: boolean\n disabled?: boolean\n disablePassBorderRadius?: DisablePassBorderRadius\n /**\n * forces the group to use the Group.Item API\n */\n forceUseItem?: boolean\n}\n\nfunction createGroup(verticalDefault: boolean) {\n return withStaticProperties(\n forwardRef<TamaguiElement, ScopedProps<GroupProps>>((props, ref) => {\n const activeProps = useMediaPropsActive(props)\n\n const {\n __scopeGroup,\n children: childrenProp,\n space,\n size = '$true',\n spaceDirection,\n separator,\n scrollable,\n axis = verticalDefault ? 'vertical' : 'horizontal',\n orientation = axis,\n disabled: disabledProp,\n disablePassBorderRadius: disablePassBorderRadiusProp,\n borderRadius,\n forceUseItem,\n ...restProps\n } = getExpandedShorthands(activeProps)\n\n const vertical = orientation === 'vertical'\n const [itemChildrenCount, setItemChildrenCount] = useControllableState({\n defaultProp: forceUseItem ? 1 : 0,\n })\n const isUsingItems = true // itemChildrenCount > 0\n\n // 1 off given border to adjust for border radius? This should be user controllable\n const radius =\n borderRadius ??\n (size ? getVariableValue(getTokens().radius[size]) - 1 : undefined)\n\n const hasRadius = radius !== undefined\n const disablePassBorderRadius = disablePassBorderRadiusProp ?? !hasRadius\n\n if (!isUsingItems) console.log('screw up!')\n const childrenArray = Children.toArray(childrenProp)\n const children = isUsingItems\n ? childrenProp\n : childrenArray.map((child, i) => {\n if (!isValidElement(child)) {\n return child\n }\n const disabled = child.props.disabled ?? disabledProp\n\n const isFirst = i === 0\n const isLast = i === childrenArray.length - 1\n\n const radiusStyles =\n disablePassBorderRadius === true\n ? null\n : getBorderRadius({\n isFirst,\n isLast,\n radius,\n vertical,\n disable: disablePassBorderRadius,\n })\n const props = {\n disabled,\n ...(isTamaguiElement(child) ? radiusStyles : { style: radiusStyles }),\n }\n\n return cloneElementWithPropOrder(child, props)\n })\n\n const indexedChildren = useIndexedChildren(\n spacedChildren({\n direction: spaceDirection,\n separator,\n space,\n children,\n })\n )\n\n const onItemMount = React.useCallback(\n () => setItemChildrenCount((prev) => prev + 1),\n []\n )\n const onItemUnmount = React.useCallback(\n () => setItemChildrenCount((prev) => prev - 1),\n []\n )\n\n return (\n <GroupProvider\n disablePassBorderRadius={disablePassBorderRadius}\n vertical={orientation === 'vertical'}\n radius={radius}\n disabled={disabledProp}\n onItemMount={onItemMount}\n onItemUnmount={onItemUnmount}\n scope={__scopeGroup}\n >\n <GroupFrame\n ref={ref}\n size={size}\n flexDirection={orientation === 'horizontal' ? 'row' : 'column'}\n borderRadius={borderRadius}\n {...restProps}\n >\n {wrapScroll({ ...activeProps, orientation }, indexedChildren)}\n </GroupFrame>\n </GroupProvider>\n )\n }),\n {\n Item: GroupItem,\n }\n )\n}\n\nconst GroupItem = (props: ScopedProps<{ children: React.ReactNode }>) => {\n const { __scopeGroup, children } = props\n const groupItemProps = useGroupItem(\n { disabled: isValidElement(children) ? children.props.disabled : undefined },\n __scopeGroup\n )\n\n if (!isValidElement(children)) {\n return children as any\n }\n\n if (isTamaguiElement(children)) {\n return React.cloneElement(children, groupItemProps)\n }\n\n return React.cloneElement(children, {\n style: {\n ...children.props?.['style'],\n ...groupItemProps,\n },\n } as any)\n}\n\nexport const useGroupItem = (\n childrenProps: { disabled: boolean },\n __scopeGroup?: Scope\n) => {\n const treeIndex = useIndex()\n const context = useGroupContext('GroupItem', __scopeGroup)\n\n React.useEffect(() => {\n context.onItemMount()\n return () => {\n context.onItemUnmount()\n }\n }, [])\n\n if (!treeIndex) {\n throw Error('<Group.Item/> should only be used within a <Group/>')\n }\n\n const isFirst = treeIndex.index === 0\n const isLast = treeIndex.index === treeIndex.maxIndex\n\n const disabled = childrenProps.disabled ?? context.disabled\n\n let propsToPass: Record<string, any> = {\n disabled,\n }\n\n if (context.disablePassBorderRadius !== true) {\n const borderRadius = getBorderRadius({\n radius: context.radius,\n isFirst,\n isLast,\n vertical: context.vertical,\n disable: context.disablePassBorderRadius,\n })\n return { ...propsToPass, ...borderRadius }\n }\n return propsToPass\n}\n\nexport const Group = createGroup(true)\nexport const YGroup = Group\nexport const XGroup = createGroup(false)\n\nconst wrapScroll = (\n { scrollable, orientation, showScrollIndicator = false }: GroupProps,\n children: any\n) => {\n if (scrollable)\n return (\n <ScrollView\n {...(orientation === 'vertical' && {\n showsVerticalScrollIndicator: showScrollIndicator,\n })}\n {...(orientation === 'horizontal' && {\n horizontal: true,\n showsHorizontalScrollIndicator: showScrollIndicator,\n })}\n >\n {children}\n </ScrollView>\n )\n return children\n}\n\nconst getBorderRadius = ({\n isFirst,\n isLast,\n radius,\n vertical,\n disable,\n}: {\n radius: any\n vertical: boolean\n isFirst: boolean\n isLast: boolean\n disable: DisablePassBorderRadius\n}) => {\n // TODO: RTL support would be nice here\n return {\n borderTopLeftRadius: isFirst && disable !== 'top' && disable !== 'start' ? radius : 0,\n borderTopRightRadius:\n disable !== 'top' &&\n disable !== 'end' &&\n ((vertical && isFirst) || (!vertical && isLast))\n ? radius\n : 0,\n borderBottomLeftRadius:\n disable !== 'bottom' &&\n disable !== 'start' &&\n ((vertical && isLast) || (!vertical && isFirst))\n ? radius\n : 0,\n borderBottomRightRadius:\n isLast && disable !== 'bottom' && disable !== 'end' ? radius : 0,\n }\n}\n\nconst cloneElementWithPropOrder = (child: any, props: Object) => {\n const next = mergeProps(child.props, props, false, getConfig().shorthands)[0]\n return React.cloneElement({ ...child, props: null }, next)\n}\n"],
5
- "mappings": "AAmLU,cAAAA,MAAA,oBAnLV,OAKE,aAAAC,EACA,yBAAAC,EACA,aAAAC,EACA,oBAAAC,EACA,oBAAAC,EACA,cAAAC,EACA,kBAAAC,EACA,UAAAC,EACA,uBAAAC,EACA,wBAAAC,MACK,gBACP,OAAgB,sBAAAC,MAA0B,0BAC1C,OAAS,kBAAAC,MAAsB,kBAC/B,OAAS,wBAAAC,MAA4B,kCACrC,OAAOC,GAAS,YAAAC,EAAU,cAAAC,GAAY,kBAAAC,MAAsB,QAC5D,OAAS,cAAAC,OAAkB,eAC3B,OAAS,YAAAC,GAAU,sBAAAC,OAA0B,WAa7C,MAAMC,EAAa,QAGb,CAACC,GAAoBC,EAAgB,EAAIZ,EAAmBU,CAAU,EACtE,CAACG,GAAeC,EAAe,EAAIH,GAAsCD,CAAU,EAE5EK,GAAalB,EAAOI,EAAgB,CAC/C,KAAM,aAEN,SAAU,CACR,SAAU,CACR,MAAO,CACL,KAAM,QACN,EAAG,EACH,gBAAiB,aACnB,CACF,EAEA,KAAM,CAACe,EAAK,CAAE,OAAAC,CAAO,KAEZ,CACL,aAFmBA,EAAO,OAAOD,CAAG,GAAKA,GAAOC,EAAO,OAAO,KAGhE,EAEJ,EAEA,gBAAiB,CACf,SAAU,EACZ,CACF,CAAC,EAqBD,SAASC,EAAYC,EAA0B,CAC7C,OAAOpB,EACLM,GAAoD,CAACe,EAAOC,IAAQ,CAClE,MAAMC,EAAcxB,EAAoBsB,CAAK,EAEvC,CACJ,aAAAG,EACA,SAAUC,EACV,MAAAC,EACA,KAAAC,EAAO,QACP,eAAAC,EACA,UAAAC,EACA,WAAAC,GACA,KAAAC,EAAOX,EAAkB,WAAa,aACtC,YAAAY,EAAcD,EACd,SAAUE,EACV,wBAAyBC,EACzB,aAAAC,EACA,aAAAC,EACA,GAAGC,CACL,EAAI7C,EAAsB+B,CAAW,EAE/Be,EAAWN,IAAgB,WAC3B,CAACO,GAAmBC,CAAoB,EAAIrC,EAAqB,CACrE,YAAaiC,EAAe,EAAI,CAClC,CAAC,EACKK,EAAe,GAGfC,EACJP,IACCR,EAAOjC,EAAiBD,EAAU,EAAE,OAAOkC,CAAI,CAAC,EAAI,EAAI,QAGrDgB,EAA0BT,GAA+B,EAD7CQ,IAAW,QAGxBD,GAAc,QAAQ,IAAI,WAAW,EAC1C,MAAMG,EAAgBvC,EAAS,QAAQoB,CAAY,EAC7CoB,EAAWJ,EACbhB,EACAmB,EAAc,IAAI,CAACE,EAAOC,IAAM,CAC9B,GAAI,CAACxC,EAAeuC,CAAK,EACvB,OAAOA,EAET,MAAME,EAAWF,EAAM,MAAM,UAAYb,EAEnCgB,EAAUF,IAAM,EAChBG,EAASH,IAAMH,EAAc,OAAS,EAEtCO,EACJR,IAA4B,GACxB,KACAS,EAAgB,CACd,QAAAH,EACA,OAAAC,EACA,OAAAR,EACA,SAAAJ,EACA,QAASK,CACX,CAAC,EACDtB,EAAQ,CACZ,SAAA2B,EACA,GAAIrD,EAAiBmD,CAAK,EAAIK,EAAe,CAAE,MAAOA,CAAa,CACrE,EAEA,OAAOE,GAA0BP,EAAOzB,CAAK,CAC/C,CAAC,EAECiC,EAAkB5C,GACtBb,EAAe,CACb,UAAW+B,EACX,UAAAC,EACA,MAAAH,EACA,SAAAmB,CACF,CAAC,CACH,EAEMU,EAAcnD,EAAM,YACxB,IAAMoC,EAAsBgB,GAASA,EAAO,CAAC,EAC7C,CAAC,CACH,EACMC,EAAgBrD,EAAM,YAC1B,IAAMoC,EAAsBgB,GAASA,EAAO,CAAC,EAC7C,CAAC,CACH,EAEA,OACElE,EAACwB,GAAA,CACC,wBAAyB6B,EACzB,SAAUX,IAAgB,WAC1B,OAAQU,EACR,SAAUT,EACV,YAAasB,EACb,cAAeE,EACf,MAAOjC,EAEP,SAAAlC,EAAC0B,GAAA,CACC,IAAKM,EACL,KAAMK,EACN,cAAeK,IAAgB,aAAe,MAAQ,SACtD,aAAcG,EACb,GAAGE,EAEH,SAAAqB,GAAW,CAAE,GAAGnC,EAAa,YAAAS,CAAY,EAAGsB,CAAe,EAC9D,EACF,CAEJ,CAAC,EACD,CACE,KAAMK,EACR,CACF,CACF,CAEA,MAAMA,GAAatC,GAAsD,CArMzE,IAAAuC,EAsME,KAAM,CAAE,aAAApC,EAAc,SAAAqB,CAAS,EAAIxB,EAC7BwC,EAAiBC,GACrB,CAAE,SAAUvD,EAAesC,CAAQ,EAAIA,EAAS,MAAM,SAAW,MAAU,EAC3ErB,CACF,EAEA,OAAKjB,EAAesC,CAAQ,EAIxBlD,EAAiBkD,CAAQ,EACpBzC,EAAM,aAAayC,EAAUgB,CAAc,EAG7CzD,EAAM,aAAayC,EAAU,CAClC,MAAO,CACL,IAAGe,EAAAf,EAAS,QAAT,YAAAe,EAAiB,MACpB,GAAGC,CACL,CACF,CAAQ,EAZChB,CAaX,EAEaiB,GAAe,CAC1BC,EACAvC,IACG,CACH,MAAMwC,EAAYvD,GAAS,EACrBwD,EAAUlD,GAAgB,YAAaS,CAAY,EASzD,GAPApB,EAAM,UAAU,KACd6D,EAAQ,YAAY,EACb,IAAM,CACXA,EAAQ,cAAc,CACxB,GACC,CAAC,CAAC,EAED,CAACD,EACH,MAAM,MAAM,qDAAqD,EAGnE,MAAMf,EAAUe,EAAU,QAAU,EAC9Bd,EAASc,EAAU,QAAUA,EAAU,SAI7C,IAAIE,EAAmC,CACrC,SAHeH,EAAc,UAAYE,EAAQ,QAInD,EAEA,GAAIA,EAAQ,0BAA4B,GAAM,CAC5C,MAAM9B,EAAeiB,EAAgB,CACnC,OAAQa,EAAQ,OAChB,QAAAhB,EACA,OAAAC,EACA,SAAUe,EAAQ,SAClB,QAASA,EAAQ,uBACnB,CAAC,EACD,MAAO,CAAE,GAAGC,EAAa,GAAG/B,CAAa,CAC3C,CACA,OAAO+B,CACT,EAEaC,GAAQhD,EAAY,EAAI,EACxBiD,GAASD,GACTE,GAASlD,EAAY,EAAK,EAEjCuC,GAAa,CACjB,CAAE,WAAA5B,EAAY,YAAAE,EAAa,oBAAAsC,EAAsB,EAAM,EACvDzB,IAEIf,EAEAxC,EAACkB,GAAA,CACE,GAAIwB,IAAgB,YAAc,CACjC,6BAA8BsC,CAChC,EACC,GAAItC,IAAgB,cAAgB,CACnC,WAAY,GACZ,+BAAgCsC,CAClC,EAEC,SAAAzB,EACH,EAEGA,EAGHO,EAAkB,CAAC,CACvB,QAAAH,EACA,OAAAC,EACA,OAAAR,EACA,SAAAJ,EACA,QAAAiC,CACF,KAQS,CACL,oBAAqBtB,GAAWsB,IAAY,OAASA,IAAY,QAAU7B,EAAS,EACpF,qBACE6B,IAAY,OACZA,IAAY,QACVjC,GAAYW,GAAa,CAACX,GAAYY,GACpCR,EACA,EACN,uBACE6B,IAAY,UACZA,IAAY,UACVjC,GAAYY,GAAY,CAACZ,GAAYW,GACnCP,EACA,EACN,wBACEQ,GAAUqB,IAAY,UAAYA,IAAY,MAAQ7B,EAAS,CACnE,GAGIW,GAA4B,CAACP,EAAYzB,IAAkB,CAC/D,MAAMmD,EAAO5E,EAAWkD,EAAM,MAAOzB,EAAO,GAAO9B,EAAU,EAAE,UAAU,EAAE,CAAC,EAC5E,OAAOa,EAAM,aAAa,CAAE,GAAG0C,EAAO,MAAO,IAAK,EAAG0B,CAAI,CAC3D",
6
- "names": ["jsx", "getConfig", "getExpandedShorthands", "getTokens", "getVariableValue", "isTamaguiElement", "mergeProps", "spacedChildren", "styled", "useMediaPropsActive", "withStaticProperties", "createContextScope", "ThemeableStack", "useControllableState", "React", "Children", "forwardRef", "isValidElement", "ScrollView", "useIndex", "useIndexedChildren", "GROUP_NAME", "createGroupContext", "createGroupScope", "GroupProvider", "useGroupContext", "GroupFrame", "val", "tokens", "createGroup", "verticalDefault", "props", "ref", "activeProps", "__scopeGroup", "childrenProp", "space", "size", "spaceDirection", "separator", "scrollable", "axis", "orientation", "disabledProp", "disablePassBorderRadiusProp", "borderRadius", "forceUseItem", "restProps", "vertical", "itemChildrenCount", "setItemChildrenCount", "isUsingItems", "radius", "disablePassBorderRadius", "childrenArray", "children", "child", "i", "disabled", "isFirst", "isLast", "radiusStyles", "getBorderRadius", "cloneElementWithPropOrder", "indexedChildren", "onItemMount", "prev", "onItemUnmount", "wrapScroll", "GroupItem", "_a", "groupItemProps", "useGroupItem", "childrenProps", "treeIndex", "context", "propsToPass", "Group", "YGroup", "XGroup", "showScrollIndicator", "disable", "next"]
5
+ "mappings": "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",
6
+ "names": ["props"]
7
7
  }
@@ -1,2 +1,235 @@
1
- import{jsx as b}from"react/jsx-runtime";import{getConfig as L,getExpandedShorthands as O,getTokens as N,getVariableValue as H,isTamaguiElement as g,mergeProps as W,spacedChildren as X,styled as Y,useMediaPropsActive as j,withStaticProperties as q}from"@tamagui/core";import{createContextScope as J}from"@tamagui/create-context";import{ThemeableStack as K}from"@tamagui/stacks";import{useControllableState as Q}from"@tamagui/use-controllable-state";import i,{Children as Z,forwardRef as ee,isValidElement as m}from"react";import{ScrollView as oe}from"react-native";import{useIndex as re,useIndexedChildren as te}from"reforest";const S="Group",[se,Ee]=J(S),[ne,ae]=se(S),ie=Y(K,{name:"GroupFrame",variants:{unstyled:{false:{size:"$true",y:0,backgroundColor:"$background"}},size:(r,{tokens:t})=>({borderRadius:t.radius[r]??r??t.radius.$true})},defaultVariants:{unstyled:!1}});function C(r){return q(ee((t,e)=>{const o=j(t),{__scopeGroup:s,children:d,space:f,size:a="$true",spaceDirection:u,separator:B,scrollable:me,axis:E=r?"vertical":"horizontal",orientation:l=E,disabled:P,disablePassBorderRadius:w,borderRadius:R,forceUseItem:z,...V}=O(o),U=l==="vertical",[be,G]=Q({defaultProp:z?1:0}),h=!0,c=R??(a?H(N().radius[a])-1:void 0),p=w??!(c!==void 0);h||console.log("screw up!");const x=Z.toArray(d),T=h?d:x.map((n,I)=>{if(!m(n))return n;const k=n.props.disabled??P,F=I===0,A=I===x.length-1,y=p===!0?null:v({isFirst:F,isLast:A,radius:c,vertical:U,disable:p}),$={disabled:k,...g(n)?y:{style:y}};return pe(n,$)}),_=te(X({direction:u,separator:B,space:f,children:T})),D=i.useCallback(()=>G(n=>n+1),[]),M=i.useCallback(()=>G(n=>n-1),[]);return b(ne,{disablePassBorderRadius:p,vertical:l==="vertical",radius:c,disabled:P,onItemMount:D,onItemUnmount:M,scope:s,children:b(ie,{ref:e,size:a,flexDirection:l==="horizontal"?"row":"column",borderRadius:R,...V,children:ce({...o,orientation:l},_)})})}),{Item:de})}const de=r=>{var s;const{__scopeGroup:t,children:e}=r,o=le({disabled:m(e)?e.props.disabled:void 0},t);return m(e)?g(e)?i.cloneElement(e,o):i.cloneElement(e,{style:{...(s=e.props)==null?void 0:s.style,...o}}):e},le=(r,t)=>{const e=re(),o=ae("GroupItem",t);if(i.useEffect(()=>(o.onItemMount(),()=>{o.onItemUnmount()}),[]),!e)throw Error("<Group.Item/> should only be used within a <Group/>");const s=e.index===0,d=e.index===e.maxIndex;let a={disabled:r.disabled??o.disabled};if(o.disablePassBorderRadius!==!0){const u=v({radius:o.radius,isFirst:s,isLast:d,vertical:o.vertical,disable:o.disablePassBorderRadius});return{...a,...u}}return a},ue=C(!0),we=ue,ze=C(!1),ce=({scrollable:r,orientation:t,showScrollIndicator:e=!1},o)=>r?b(oe,{...t==="vertical"&&{showsVerticalScrollIndicator:e},...t==="horizontal"&&{horizontal:!0,showsHorizontalScrollIndicator:e},children:o}):o,v=({isFirst:r,isLast:t,radius:e,vertical:o,disable:s})=>({borderTopLeftRadius:r&&s!=="top"&&s!=="start"?e:0,borderTopRightRadius:s!=="top"&&s!=="end"&&(o&&r||!o&&t)?e:0,borderBottomLeftRadius:s!=="bottom"&&s!=="start"&&(o&&t||!o&&r)?e:0,borderBottomRightRadius:t&&s!=="bottom"&&s!=="end"?e:0}),pe=(r,t)=>{const e=W(r.props,t,!1,L().shorthands)[0];return i.cloneElement({...r,props:null},e)};export{ue as Group,ie as GroupFrame,ze as XGroup,we as YGroup,le as useGroupItem};
1
+ import { jsx } from "react/jsx-runtime";
2
+ import {
3
+ getConfig,
4
+ getExpandedShorthands,
5
+ getTokens,
6
+ getVariableValue,
7
+ isTamaguiElement,
8
+ mergeProps,
9
+ spacedChildren,
10
+ styled,
11
+ useMediaPropsActive,
12
+ withStaticProperties
13
+ } from "@tamagui/core";
14
+ import { createContextScope } from "@tamagui/create-context";
15
+ import { ThemeableStack } from "@tamagui/stacks";
16
+ import { useControllableState } from "@tamagui/use-controllable-state";
17
+ import React, { Children, forwardRef, isValidElement } from "react";
18
+ import { ScrollView } from "react-native";
19
+ import { useIndex, useIndexedChildren } from "reforest";
20
+ const GROUP_NAME = "Group";
21
+ const [createGroupContext, createGroupScope] = createContextScope(GROUP_NAME);
22
+ const [GroupProvider, useGroupContext] = createGroupContext(GROUP_NAME);
23
+ const GroupFrame = styled(ThemeableStack, {
24
+ name: "GroupFrame",
25
+ variants: {
26
+ unstyled: {
27
+ false: {
28
+ size: "$true",
29
+ y: 0,
30
+ backgroundColor: "$background"
31
+ }
32
+ },
33
+ size: (val, { tokens }) => {
34
+ const borderRadius = tokens.radius[val] ?? val ?? tokens.radius["$true"];
35
+ return {
36
+ borderRadius
37
+ };
38
+ }
39
+ },
40
+ defaultVariants: {
41
+ unstyled: false
42
+ }
43
+ });
44
+ function createGroup(verticalDefault) {
45
+ return withStaticProperties(
46
+ forwardRef((props, ref) => {
47
+ const activeProps = useMediaPropsActive(props);
48
+ const {
49
+ __scopeGroup,
50
+ children: childrenProp,
51
+ space,
52
+ size = "$true",
53
+ spaceDirection,
54
+ separator,
55
+ scrollable,
56
+ axis = verticalDefault ? "vertical" : "horizontal",
57
+ orientation = axis,
58
+ disabled: disabledProp,
59
+ disablePassBorderRadius: disablePassBorderRadiusProp,
60
+ borderRadius,
61
+ forceUseItem,
62
+ ...restProps
63
+ } = getExpandedShorthands(activeProps);
64
+ const vertical = orientation === "vertical";
65
+ const [itemChildrenCount, setItemChildrenCount] = useControllableState({
66
+ defaultProp: forceUseItem ? 1 : 0
67
+ });
68
+ const isUsingItems = true;
69
+ const radius = borderRadius ?? (size ? getVariableValue(getTokens().radius[size]) - 1 : void 0);
70
+ const hasRadius = radius !== void 0;
71
+ const disablePassBorderRadius = disablePassBorderRadiusProp ?? !hasRadius;
72
+ if (!isUsingItems)
73
+ console.log("screw up!");
74
+ const childrenArray = Children.toArray(childrenProp);
75
+ const children = isUsingItems ? childrenProp : childrenArray.map((child, i) => {
76
+ if (!isValidElement(child)) {
77
+ return child;
78
+ }
79
+ const disabled = child.props.disabled ?? disabledProp;
80
+ const isFirst = i === 0;
81
+ const isLast = i === childrenArray.length - 1;
82
+ const radiusStyles = disablePassBorderRadius === true ? null : getBorderRadius({
83
+ isFirst,
84
+ isLast,
85
+ radius,
86
+ vertical,
87
+ disable: disablePassBorderRadius
88
+ });
89
+ const props2 = {
90
+ disabled,
91
+ ...isTamaguiElement(child) ? radiusStyles : { style: radiusStyles }
92
+ };
93
+ return cloneElementWithPropOrder(child, props2);
94
+ });
95
+ const indexedChildren = useIndexedChildren(
96
+ spacedChildren({
97
+ direction: spaceDirection,
98
+ separator,
99
+ space,
100
+ children
101
+ })
102
+ );
103
+ const onItemMount = React.useCallback(
104
+ () => setItemChildrenCount((prev) => prev + 1),
105
+ []
106
+ );
107
+ const onItemUnmount = React.useCallback(
108
+ () => setItemChildrenCount((prev) => prev - 1),
109
+ []
110
+ );
111
+ return /* @__PURE__ */ jsx(
112
+ GroupProvider,
113
+ {
114
+ disablePassBorderRadius,
115
+ vertical: orientation === "vertical",
116
+ radius,
117
+ disabled: disabledProp,
118
+ onItemMount,
119
+ onItemUnmount,
120
+ scope: __scopeGroup,
121
+ children: /* @__PURE__ */ jsx(
122
+ GroupFrame,
123
+ {
124
+ ref,
125
+ size,
126
+ flexDirection: orientation === "horizontal" ? "row" : "column",
127
+ borderRadius,
128
+ ...restProps,
129
+ children: wrapScroll({ ...activeProps, orientation }, indexedChildren)
130
+ }
131
+ )
132
+ }
133
+ );
134
+ }),
135
+ {
136
+ Item: GroupItem
137
+ }
138
+ );
139
+ }
140
+ const GroupItem = (props) => {
141
+ var _a;
142
+ const { __scopeGroup, children } = props;
143
+ const groupItemProps = useGroupItem(
144
+ { disabled: isValidElement(children) ? children.props.disabled : void 0 },
145
+ __scopeGroup
146
+ );
147
+ if (!isValidElement(children)) {
148
+ return children;
149
+ }
150
+ if (isTamaguiElement(children)) {
151
+ return React.cloneElement(children, groupItemProps);
152
+ }
153
+ return React.cloneElement(children, {
154
+ style: {
155
+ ...(_a = children.props) == null ? void 0 : _a["style"],
156
+ ...groupItemProps
157
+ }
158
+ });
159
+ };
160
+ const useGroupItem = (childrenProps, __scopeGroup) => {
161
+ const treeIndex = useIndex();
162
+ const context = useGroupContext("GroupItem", __scopeGroup);
163
+ React.useEffect(() => {
164
+ context.onItemMount();
165
+ return () => {
166
+ context.onItemUnmount();
167
+ };
168
+ }, []);
169
+ if (!treeIndex) {
170
+ throw Error("<Group.Item/> should only be used within a <Group/>");
171
+ }
172
+ const isFirst = treeIndex.index === 0;
173
+ const isLast = treeIndex.index === treeIndex.maxIndex;
174
+ const disabled = childrenProps.disabled ?? context.disabled;
175
+ let propsToPass = {
176
+ disabled
177
+ };
178
+ if (context.disablePassBorderRadius !== true) {
179
+ const borderRadius = getBorderRadius({
180
+ radius: context.radius,
181
+ isFirst,
182
+ isLast,
183
+ vertical: context.vertical,
184
+ disable: context.disablePassBorderRadius
185
+ });
186
+ return { ...propsToPass, ...borderRadius };
187
+ }
188
+ return propsToPass;
189
+ };
190
+ const Group = createGroup(true);
191
+ const YGroup = Group;
192
+ const XGroup = createGroup(false);
193
+ const wrapScroll = ({ scrollable, orientation, showScrollIndicator = false }, children) => {
194
+ if (scrollable)
195
+ return /* @__PURE__ */ jsx(
196
+ ScrollView,
197
+ {
198
+ ...orientation === "vertical" && {
199
+ showsVerticalScrollIndicator: showScrollIndicator
200
+ },
201
+ ...orientation === "horizontal" && {
202
+ horizontal: true,
203
+ showsHorizontalScrollIndicator: showScrollIndicator
204
+ },
205
+ children
206
+ }
207
+ );
208
+ return children;
209
+ };
210
+ const getBorderRadius = ({
211
+ isFirst,
212
+ isLast,
213
+ radius,
214
+ vertical,
215
+ disable
216
+ }) => {
217
+ return {
218
+ borderTopLeftRadius: isFirst && disable !== "top" && disable !== "start" ? radius : 0,
219
+ borderTopRightRadius: disable !== "top" && disable !== "end" && (vertical && isFirst || !vertical && isLast) ? radius : 0,
220
+ borderBottomLeftRadius: disable !== "bottom" && disable !== "start" && (vertical && isLast || !vertical && isFirst) ? radius : 0,
221
+ borderBottomRightRadius: isLast && disable !== "bottom" && disable !== "end" ? radius : 0
222
+ };
223
+ };
224
+ const cloneElementWithPropOrder = (child, props) => {
225
+ const next = mergeProps(child.props, props, false, getConfig().shorthands)[0];
226
+ return React.cloneElement({ ...child, props: null }, next);
227
+ };
228
+ export {
229
+ Group,
230
+ GroupFrame,
231
+ XGroup,
232
+ YGroup,
233
+ useGroupItem
234
+ };
2
235
  //# sourceMappingURL=Group.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/Group.tsx"],
4
4
  "sourcesContent": ["import {\n GetProps,\n TamaguiElement,\n UnionableString,\n Variable,\n getConfig,\n getExpandedShorthands,\n getTokens,\n getVariableValue,\n isTamaguiElement,\n mergeProps,\n spacedChildren,\n styled,\n useMediaPropsActive,\n withStaticProperties,\n} from '@tamagui/core'\nimport { Scope, createContextScope } from '@tamagui/create-context'\nimport { ThemeableStack } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport React, { Children, forwardRef, isValidElement } from 'react'\nimport { ScrollView } from 'react-native'\nimport { useIndex, useIndexedChildren } from 'reforest'\n\ntype DisablePassBorderRadius = boolean | 'bottom' | 'top' | 'start' | 'end'\n\ninterface GroupContextValue {\n vertical: boolean\n disablePassBorderRadius: DisablePassBorderRadius\n onItemMount: () => void\n onItemUnmount: () => void\n radius?: number | UnionableString | Variable<any>\n disabled?: boolean\n}\n\nconst GROUP_NAME = 'Group'\n\ntype ScopedProps<P> = P & { __scopeGroup?: Scope }\nconst [createGroupContext, createGroupScope] = createContextScope(GROUP_NAME)\nconst [GroupProvider, useGroupContext] = createGroupContext<GroupContextValue>(GROUP_NAME)\n\nexport const GroupFrame = styled(ThemeableStack, {\n name: 'GroupFrame',\n\n variants: {\n unstyled: {\n false: {\n size: '$true',\n y: 0,\n backgroundColor: '$background',\n },\n },\n\n size: (val, { tokens }) => {\n const borderRadius = tokens.radius[val] ?? val ?? tokens.radius['$true']\n return {\n borderRadius,\n }\n },\n } as const,\n\n defaultVariants: {\n unstyled: false,\n },\n})\n\nexport type GroupProps = GetProps<typeof GroupFrame> & {\n /**\n * @deprecated use `orientation` instead\n */\n axis?: 'horizontal' | 'vertical'\n orientation?: 'horizontal' | 'vertical'\n scrollable?: boolean\n /**\n * @default false\n */\n showScrollIndicator?: boolean\n disabled?: boolean\n disablePassBorderRadius?: DisablePassBorderRadius\n /**\n * forces the group to use the Group.Item API\n */\n forceUseItem?: boolean\n}\n\nfunction createGroup(verticalDefault: boolean) {\n return withStaticProperties(\n forwardRef<TamaguiElement, ScopedProps<GroupProps>>((props, ref) => {\n const activeProps = useMediaPropsActive(props)\n\n const {\n __scopeGroup,\n children: childrenProp,\n space,\n size = '$true',\n spaceDirection,\n separator,\n scrollable,\n axis = verticalDefault ? 'vertical' : 'horizontal',\n orientation = axis,\n disabled: disabledProp,\n disablePassBorderRadius: disablePassBorderRadiusProp,\n borderRadius,\n forceUseItem,\n ...restProps\n } = getExpandedShorthands(activeProps)\n\n const vertical = orientation === 'vertical'\n const [itemChildrenCount, setItemChildrenCount] = useControllableState({\n defaultProp: forceUseItem ? 1 : 0,\n })\n const isUsingItems = true // itemChildrenCount > 0\n\n // 1 off given border to adjust for border radius? This should be user controllable\n const radius =\n borderRadius ??\n (size ? getVariableValue(getTokens().radius[size]) - 1 : undefined)\n\n const hasRadius = radius !== undefined\n const disablePassBorderRadius = disablePassBorderRadiusProp ?? !hasRadius\n\n if (!isUsingItems) console.log('screw up!')\n const childrenArray = Children.toArray(childrenProp)\n const children = isUsingItems\n ? childrenProp\n : childrenArray.map((child, i) => {\n if (!isValidElement(child)) {\n return child\n }\n const disabled = child.props.disabled ?? disabledProp\n\n const isFirst = i === 0\n const isLast = i === childrenArray.length - 1\n\n const radiusStyles =\n disablePassBorderRadius === true\n ? null\n : getBorderRadius({\n isFirst,\n isLast,\n radius,\n vertical,\n disable: disablePassBorderRadius,\n })\n const props = {\n disabled,\n ...(isTamaguiElement(child) ? radiusStyles : { style: radiusStyles }),\n }\n\n return cloneElementWithPropOrder(child, props)\n })\n\n const indexedChildren = useIndexedChildren(\n spacedChildren({\n direction: spaceDirection,\n separator,\n space,\n children,\n })\n )\n\n const onItemMount = React.useCallback(\n () => setItemChildrenCount((prev) => prev + 1),\n []\n )\n const onItemUnmount = React.useCallback(\n () => setItemChildrenCount((prev) => prev - 1),\n []\n )\n\n return (\n <GroupProvider\n disablePassBorderRadius={disablePassBorderRadius}\n vertical={orientation === 'vertical'}\n radius={radius}\n disabled={disabledProp}\n onItemMount={onItemMount}\n onItemUnmount={onItemUnmount}\n scope={__scopeGroup}\n >\n <GroupFrame\n ref={ref}\n size={size}\n flexDirection={orientation === 'horizontal' ? 'row' : 'column'}\n borderRadius={borderRadius}\n {...restProps}\n >\n {wrapScroll({ ...activeProps, orientation }, indexedChildren)}\n </GroupFrame>\n </GroupProvider>\n )\n }),\n {\n Item: GroupItem,\n }\n )\n}\n\nconst GroupItem = (props: ScopedProps<{ children: React.ReactNode }>) => {\n const { __scopeGroup, children } = props\n const groupItemProps = useGroupItem(\n { disabled: isValidElement(children) ? children.props.disabled : undefined },\n __scopeGroup\n )\n\n if (!isValidElement(children)) {\n return children as any\n }\n\n if (isTamaguiElement(children)) {\n return React.cloneElement(children, groupItemProps)\n }\n\n return React.cloneElement(children, {\n style: {\n ...children.props?.['style'],\n ...groupItemProps,\n },\n } as any)\n}\n\nexport const useGroupItem = (\n childrenProps: { disabled: boolean },\n __scopeGroup?: Scope\n) => {\n const treeIndex = useIndex()\n const context = useGroupContext('GroupItem', __scopeGroup)\n\n React.useEffect(() => {\n context.onItemMount()\n return () => {\n context.onItemUnmount()\n }\n }, [])\n\n if (!treeIndex) {\n throw Error('<Group.Item/> should only be used within a <Group/>')\n }\n\n const isFirst = treeIndex.index === 0\n const isLast = treeIndex.index === treeIndex.maxIndex\n\n const disabled = childrenProps.disabled ?? context.disabled\n\n let propsToPass: Record<string, any> = {\n disabled,\n }\n\n if (context.disablePassBorderRadius !== true) {\n const borderRadius = getBorderRadius({\n radius: context.radius,\n isFirst,\n isLast,\n vertical: context.vertical,\n disable: context.disablePassBorderRadius,\n })\n return { ...propsToPass, ...borderRadius }\n }\n return propsToPass\n}\n\nexport const Group = createGroup(true)\nexport const YGroup = Group\nexport const XGroup = createGroup(false)\n\nconst wrapScroll = (\n { scrollable, orientation, showScrollIndicator = false }: GroupProps,\n children: any\n) => {\n if (scrollable)\n return (\n <ScrollView\n {...(orientation === 'vertical' && {\n showsVerticalScrollIndicator: showScrollIndicator,\n })}\n {...(orientation === 'horizontal' && {\n horizontal: true,\n showsHorizontalScrollIndicator: showScrollIndicator,\n })}\n >\n {children}\n </ScrollView>\n )\n return children\n}\n\nconst getBorderRadius = ({\n isFirst,\n isLast,\n radius,\n vertical,\n disable,\n}: {\n radius: any\n vertical: boolean\n isFirst: boolean\n isLast: boolean\n disable: DisablePassBorderRadius\n}) => {\n // TODO: RTL support would be nice here\n return {\n borderTopLeftRadius: isFirst && disable !== 'top' && disable !== 'start' ? radius : 0,\n borderTopRightRadius:\n disable !== 'top' &&\n disable !== 'end' &&\n ((vertical && isFirst) || (!vertical && isLast))\n ? radius\n : 0,\n borderBottomLeftRadius:\n disable !== 'bottom' &&\n disable !== 'start' &&\n ((vertical && isLast) || (!vertical && isFirst))\n ? radius\n : 0,\n borderBottomRightRadius:\n isLast && disable !== 'bottom' && disable !== 'end' ? radius : 0,\n }\n}\n\nconst cloneElementWithPropOrder = (child: any, props: Object) => {\n const next = mergeProps(child.props, props, false, getConfig().shorthands)[0]\n return React.cloneElement({ ...child, props: null }, next)\n}\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "getConfig", "getExpandedShorthands", "getTokens", "getVariableValue", "isTamaguiElement", "mergeProps", "spacedChildren", "styled", "useMediaPropsActive", "withStaticProperties", "createContextScope", "ThemeableStack", "useControllableState", "React", "Children", "forwardRef", "isValidElement", "ScrollView", "useIndex", "useIndexedChildren", "GROUP_NAME", "createGroupContext", "createGroupScope", "GroupProvider", "useGroupContext", "GroupFrame", "val", "tokens", "createGroup", "verticalDefault", "props", "ref", "activeProps", "__scopeGroup", "childrenProp", "space", "size", "spaceDirection", "separator", "scrollable", "axis", "orientation", "disabledProp", "disablePassBorderRadiusProp", "borderRadius", "forceUseItem", "restProps", "vertical", "itemChildrenCount", "setItemChildrenCount", "isUsingItems", "radius", "disablePassBorderRadius", "childrenArray", "children", "child", "i", "disabled", "isFirst", "isLast", "radiusStyles", "getBorderRadius", "cloneElementWithPropOrder", "indexedChildren", "onItemMount", "prev", "onItemUnmount", "wrapScroll", "GroupItem", "_a", "groupItemProps", "useGroupItem", "childrenProps", "treeIndex", "context", "propsToPass", "Group", "YGroup", "XGroup", "showScrollIndicator", "disable", "next"]
5
+ "mappings": "AAmLU;AAnLV;AAAA,EAKE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAgB,0BAA0B;AAC1C,SAAS,sBAAsB;AAC/B,SAAS,4BAA4B;AACrC,OAAO,SAAS,UAAU,YAAY,sBAAsB;AAC5D,SAAS,kBAAkB;AAC3B,SAAS,UAAU,0BAA0B;AAa7C,MAAM,aAAa;AAGnB,MAAM,CAAC,oBAAoB,gBAAgB,IAAI,mBAAmB,UAAU;AAC5E,MAAM,CAAC,eAAe,eAAe,IAAI,mBAAsC,UAAU;AAElF,MAAM,aAAa,OAAO,gBAAgB;AAAA,EAC/C,MAAM;AAAA,EAEN,UAAU;AAAA,IACR,UAAU;AAAA,MACR,OAAO;AAAA,QACL,MAAM;AAAA,QACN,GAAG;AAAA,QACH,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,MAAM,CAAC,KAAK,EAAE,OAAO,MAAM;AACzB,YAAM,eAAe,OAAO,OAAO,GAAG,KAAK,OAAO,OAAO,OAAO,OAAO;AACvE,aAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB;AAAA,IACf,UAAU;AAAA,EACZ;AACF,CAAC;AAqBD,SAAS,YAAY,iBAA0B;AAC7C,SAAO;AAAA,IACL,WAAoD,CAAC,OAAO,QAAQ;AAClE,YAAM,cAAc,oBAAoB,KAAK;AAE7C,YAAM;AAAA,QACJ;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,kBAAkB,aAAa;AAAA,QACtC,cAAc;AAAA,QACd,UAAU;AAAA,QACV,yBAAyB;AAAA,QACzB;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI,sBAAsB,WAAW;AAErC,YAAM,WAAW,gBAAgB;AACjC,YAAM,CAAC,mBAAmB,oBAAoB,IAAI,qBAAqB;AAAA,QACrE,aAAa,eAAe,IAAI;AAAA,MAClC,CAAC;AACD,YAAM,eAAe;AAGrB,YAAM,SACJ,iBACC,OAAO,iBAAiB,UAAU,EAAE,OAAO,IAAI,CAAC,IAAI,IAAI;AAE3D,YAAM,YAAY,WAAW;AAC7B,YAAM,0BAA0B,+BAA+B,CAAC;AAEhE,UAAI,CAAC;AAAc,gBAAQ,IAAI,WAAW;AAC1C,YAAM,gBAAgB,SAAS,QAAQ,YAAY;AACnD,YAAM,WAAW,eACb,eACA,cAAc,IAAI,CAAC,OAAO,MAAM;AAC9B,YAAI,CAAC,eAAe,KAAK,GAAG;AAC1B,iBAAO;AAAA,QACT;AACA,cAAM,WAAW,MAAM,MAAM,YAAY;AAEzC,cAAM,UAAU,MAAM;AACtB,cAAM,SAAS,MAAM,cAAc,SAAS;AAE5C,cAAM,eACJ,4BAA4B,OACxB,OACA,gBAAgB;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS;AAAA,QACX,CAAC;AACP,cAAMA,SAAQ;AAAA,UACZ;AAAA,UACA,GAAI,iBAAiB,KAAK,IAAI,eAAe,EAAE,OAAO,aAAa;AAAA,QACrE;AAEA,eAAO,0BAA0B,OAAOA,MAAK;AAAA,MAC/C,CAAC;AAEL,YAAM,kBAAkB;AAAA,QACtB,eAAe;AAAA,UACb,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAEA,YAAM,cAAc,MAAM;AAAA,QACxB,MAAM,qBAAqB,CAAC,SAAS,OAAO,CAAC;AAAA,QAC7C,CAAC;AAAA,MACH;AACA,YAAM,gBAAgB,MAAM;AAAA,QAC1B,MAAM,qBAAqB,CAAC,SAAS,OAAO,CAAC;AAAA,QAC7C,CAAC;AAAA,MACH;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,UAAU,gBAAgB;AAAA,UAC1B;AAAA,UACA,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UAEP;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA,eAAe,gBAAgB,eAAe,QAAQ;AAAA,cACtD;AAAA,cACC,GAAG;AAAA,cAEH,qBAAW,EAAE,GAAG,aAAa,YAAY,GAAG,eAAe;AAAA;AAAA,UAC9D;AAAA;AAAA,MACF;AAAA,IAEJ,CAAC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,MAAM,YAAY,CAAC,UAAsD;AArMzE;AAsME,QAAM,EAAE,cAAc,SAAS,IAAI;AACnC,QAAM,iBAAiB;AAAA,IACrB,EAAE,UAAU,eAAe,QAAQ,IAAI,SAAS,MAAM,WAAW,OAAU;AAAA,IAC3E;AAAA,EACF;AAEA,MAAI,CAAC,eAAe,QAAQ,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,QAAQ,GAAG;AAC9B,WAAO,MAAM,aAAa,UAAU,cAAc;AAAA,EACpD;AAEA,SAAO,MAAM,aAAa,UAAU;AAAA,IAClC,OAAO;AAAA,MACL,IAAG,cAAS,UAAT,mBAAiB;AAAA,MACpB,GAAG;AAAA,IACL;AAAA,EACF,CAAQ;AACV;AAEO,MAAM,eAAe,CAC1B,eACA,iBACG;AACH,QAAM,YAAY,SAAS;AAC3B,QAAM,UAAU,gBAAgB,aAAa,YAAY;AAEzD,QAAM,UAAU,MAAM;AACpB,YAAQ,YAAY;AACpB,WAAO,MAAM;AACX,cAAQ,cAAc;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,MAAI,CAAC,WAAW;AACd,UAAM,MAAM,qDAAqD;AAAA,EACnE;AAEA,QAAM,UAAU,UAAU,UAAU;AACpC,QAAM,SAAS,UAAU,UAAU,UAAU;AAE7C,QAAM,WAAW,cAAc,YAAY,QAAQ;AAEnD,MAAI,cAAmC;AAAA,IACrC;AAAA,EACF;AAEA,MAAI,QAAQ,4BAA4B,MAAM;AAC5C,UAAM,eAAe,gBAAgB;AAAA,MACnC,QAAQ,QAAQ;AAAA,MAChB;AAAA,MACA;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB,SAAS,QAAQ;AAAA,IACnB,CAAC;AACD,WAAO,EAAE,GAAG,aAAa,GAAG,aAAa;AAAA,EAC3C;AACA,SAAO;AACT;AAEO,MAAM,QAAQ,YAAY,IAAI;AAC9B,MAAM,SAAS;AACf,MAAM,SAAS,YAAY,KAAK;AAEvC,MAAM,aAAa,CACjB,EAAE,YAAY,aAAa,sBAAsB,MAAM,GACvD,aACG;AACH,MAAI;AACF,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAI,gBAAgB,cAAc;AAAA,UACjC,8BAA8B;AAAA,QAChC;AAAA,QACC,GAAI,gBAAgB,gBAAgB;AAAA,UACnC,YAAY;AAAA,UACZ,gCAAgC;AAAA,QAClC;AAAA,QAEC;AAAA;AAAA,IACH;AAEJ,SAAO;AACT;AAEA,MAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AAEJ,SAAO;AAAA,IACL,qBAAqB,WAAW,YAAY,SAAS,YAAY,UAAU,SAAS;AAAA,IACpF,sBACE,YAAY,SACZ,YAAY,UACV,YAAY,WAAa,CAAC,YAAY,UACpC,SACA;AAAA,IACN,wBACE,YAAY,YACZ,YAAY,YACV,YAAY,UAAY,CAAC,YAAY,WACnC,SACA;AAAA,IACN,yBACE,UAAU,YAAY,YAAY,YAAY,QAAQ,SAAS;AAAA,EACnE;AACF;AAEA,MAAM,4BAA4B,CAAC,OAAY,UAAkB;AAC/D,QAAM,OAAO,WAAW,MAAM,OAAO,OAAO,OAAO,UAAU,EAAE,UAAU,EAAE,CAAC;AAC5E,SAAO,MAAM,aAAa,EAAE,GAAG,OAAO,OAAO,KAAK,GAAG,IAAI;AAC3D;",
6
+ "names": ["props"]
7
7
  }
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export*from"./Group";
1
+ export * from "./Group";
2
2
  //# sourceMappingURL=index.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
4
  "sourcesContent": ["export * from './Group'\n"],
5
- "mappings": "AAAA,WAAc",
5
+ "mappings": "AAAA,cAAc;",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- export*from"./Group";
1
+ export * from "./Group";
2
2
  //# sourceMappingURL=index.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
4
  "sourcesContent": ["export * from './Group'\n"],
5
- "mappings": "AAAA,WAAc",
5
+ "mappings": "AAAA,cAAc;",
6
6
  "names": []
7
7
  }
package/dist/jsx/Group.js CHANGED
@@ -1,2 +1,221 @@
1
- import{getConfig as $,getExpandedShorthands as L,getTokens as O,getVariableValue as N,isTamaguiElement as y,mergeProps as j,spacedChildren as H,styled as W,useMediaPropsActive as X,withStaticProperties as Y}from"@tamagui/core";import{createContextScope as q}from"@tamagui/create-context";import{ThemeableStack as J}from"@tamagui/stacks";import{useControllableState as K}from"@tamagui/use-controllable-state";import i,{Children as Q,forwardRef as Z,isValidElement as m}from"react";import{ScrollView as Pe}from"react-native";import{useIndex as Re,useIndexedChildren as Ge}from"reforest";const g="Group",[he,He]=q(g),[Ie,ye]=he(g),Se=W(J,{name:"GroupFrame",variants:{unstyled:{false:{size:"$true",y:0,backgroundColor:"$background"}},size:(r,{tokens:t})=>({borderRadius:t.radius[r]??r??t.radius.$true})},defaultVariants:{unstyled:!1}});function S(r){return Y(Z((t,e)=>{const o=X(t),{__scopeGroup:s,children:d,space:b,size:a="$true",spaceDirection:u,separator:v,scrollable:ze,axis:B=r?"vertical":"horizontal",orientation:l=B,disabled:f,disablePassBorderRadius:E,borderRadius:P,forceUseItem:w,...z}=L(o),V=l==="vertical",[Ve,R]=K({defaultProp:w?1:0}),G=!0,c=P??(a?N(O().radius[a])-1:void 0),p=E??!(c!==void 0);G||console.log("screw up!");const h=Q.toArray(d),U=G?d:h.map((n,x)=>{if(!m(n))return n;const M=n.props.disabled??f,k=x===0,F=x===h.length-1,I=p===!0?null:C({isFirst:k,isLast:F,radius:c,vertical:V,disable:p}),A={disabled:M,...y(n)?I:{style:I}};return we(n,A)}),T=Ge(H({direction:u,separator:v,space:b,children:U})),_=i.useCallback(()=>R(n=>n+1),[]),D=i.useCallback(()=>R(n=>n-1),[]);return<Ie disablePassBorderRadius={p}vertical={l==="vertical"}radius={c}disabled={f}onItemMount={_}onItemUnmount={D}scope={s}><Se ref={e}size={a}flexDirection={l==="horizontal"?"row":"column"}borderRadius={P}{...z}>{Ee({...o,orientation:l},T)}</Se></Ie>}),{Item:Ce})}const Ce=r=>{const{__scopeGroup:t,children:e}=r,o=ve({disabled:m(e)?e.props.disabled:void 0},t);return m(e)?y(e)?i.cloneElement(e,o):i.cloneElement(e,{style:{...e.props?.style,...o}}):e},ve=(r,t)=>{const e=Re(),o=ye("GroupItem",t);if(i.useEffect(()=>(o.onItemMount(),()=>{o.onItemUnmount()}),[]),!e)throw Error("<Group.Item/> should only be used within a <Group/>");const s=e.index===0,d=e.index===e.maxIndex;let a={disabled:r.disabled??o.disabled};if(o.disablePassBorderRadius!==!0){const u=C({radius:o.radius,isFirst:s,isLast:d,vertical:o.vertical,disable:o.disablePassBorderRadius});return{...a,...u}}return a},Be=S(!0),We=Be,Xe=S(!1),Ee=({scrollable:r,orientation:t,showScrollIndicator:e=!1},o)=>r?<Pe{...t==="vertical"&&{showsVerticalScrollIndicator:e}}{...t==="horizontal"&&{horizontal:!0,showsHorizontalScrollIndicator:e}}>{o}</Pe>:o,C=({isFirst:r,isLast:t,radius:e,vertical:o,disable:s})=>({borderTopLeftRadius:r&&s!=="top"&&s!=="start"?e:0,borderTopRightRadius:s!=="top"&&s!=="end"&&(o&&r||!o&&t)?e:0,borderBottomLeftRadius:s!=="bottom"&&s!=="start"&&(o&&t||!o&&r)?e:0,borderBottomRightRadius:t&&s!=="bottom"&&s!=="end"?e:0}),we=(r,t)=>{const e=j(r.props,t,!1,$().shorthands)[0];return i.cloneElement({...r,props:null},e)};export{Be as Group,Se as GroupFrame,Xe as XGroup,We as YGroup,ve as useGroupItem};
1
+ import {
2
+ getConfig,
3
+ getExpandedShorthands,
4
+ getTokens,
5
+ getVariableValue,
6
+ isTamaguiElement,
7
+ mergeProps,
8
+ spacedChildren,
9
+ styled,
10
+ useMediaPropsActive,
11
+ withStaticProperties
12
+ } from "@tamagui/core";
13
+ import { createContextScope } from "@tamagui/create-context";
14
+ import { ThemeableStack } from "@tamagui/stacks";
15
+ import { useControllableState } from "@tamagui/use-controllable-state";
16
+ import React, { Children, forwardRef, isValidElement } from "react";
17
+ import { ScrollView } from "react-native";
18
+ import { useIndex, useIndexedChildren } from "reforest";
19
+ const GROUP_NAME = "Group";
20
+ const [createGroupContext, createGroupScope] = createContextScope(GROUP_NAME);
21
+ const [GroupProvider, useGroupContext] = createGroupContext(GROUP_NAME);
22
+ const GroupFrame = styled(ThemeableStack, {
23
+ name: "GroupFrame",
24
+ variants: {
25
+ unstyled: {
26
+ false: {
27
+ size: "$true",
28
+ y: 0,
29
+ backgroundColor: "$background"
30
+ }
31
+ },
32
+ size: (val, { tokens }) => {
33
+ const borderRadius = tokens.radius[val] ?? val ?? tokens.radius["$true"];
34
+ return {
35
+ borderRadius
36
+ };
37
+ }
38
+ },
39
+ defaultVariants: {
40
+ unstyled: false
41
+ }
42
+ });
43
+ function createGroup(verticalDefault) {
44
+ return withStaticProperties(
45
+ forwardRef((props, ref) => {
46
+ const activeProps = useMediaPropsActive(props);
47
+ const {
48
+ __scopeGroup,
49
+ children: childrenProp,
50
+ space,
51
+ size = "$true",
52
+ spaceDirection,
53
+ separator,
54
+ scrollable,
55
+ axis = verticalDefault ? "vertical" : "horizontal",
56
+ orientation = axis,
57
+ disabled: disabledProp,
58
+ disablePassBorderRadius: disablePassBorderRadiusProp,
59
+ borderRadius,
60
+ forceUseItem,
61
+ ...restProps
62
+ } = getExpandedShorthands(activeProps);
63
+ const vertical = orientation === "vertical";
64
+ const [itemChildrenCount, setItemChildrenCount] = useControllableState({
65
+ defaultProp: forceUseItem ? 1 : 0
66
+ });
67
+ const isUsingItems = true;
68
+ const radius = borderRadius ?? (size ? getVariableValue(getTokens().radius[size]) - 1 : void 0);
69
+ const hasRadius = radius !== void 0;
70
+ const disablePassBorderRadius = disablePassBorderRadiusProp ?? !hasRadius;
71
+ if (!isUsingItems)
72
+ console.log("screw up!");
73
+ const childrenArray = Children.toArray(childrenProp);
74
+ const children = isUsingItems ? childrenProp : childrenArray.map((child, i) => {
75
+ if (!isValidElement(child)) {
76
+ return child;
77
+ }
78
+ const disabled = child.props.disabled ?? disabledProp;
79
+ const isFirst = i === 0;
80
+ const isLast = i === childrenArray.length - 1;
81
+ const radiusStyles = disablePassBorderRadius === true ? null : getBorderRadius({
82
+ isFirst,
83
+ isLast,
84
+ radius,
85
+ vertical,
86
+ disable: disablePassBorderRadius
87
+ });
88
+ const props2 = {
89
+ disabled,
90
+ ...isTamaguiElement(child) ? radiusStyles : { style: radiusStyles }
91
+ };
92
+ return cloneElementWithPropOrder(child, props2);
93
+ });
94
+ const indexedChildren = useIndexedChildren(
95
+ spacedChildren({
96
+ direction: spaceDirection,
97
+ separator,
98
+ space,
99
+ children
100
+ })
101
+ );
102
+ const onItemMount = React.useCallback(
103
+ () => setItemChildrenCount((prev) => prev + 1),
104
+ []
105
+ );
106
+ const onItemUnmount = React.useCallback(
107
+ () => setItemChildrenCount((prev) => prev - 1),
108
+ []
109
+ );
110
+ return <GroupProvider
111
+ disablePassBorderRadius={disablePassBorderRadius}
112
+ vertical={orientation === "vertical"}
113
+ radius={radius}
114
+ disabled={disabledProp}
115
+ onItemMount={onItemMount}
116
+ onItemUnmount={onItemUnmount}
117
+ scope={__scopeGroup}
118
+ ><GroupFrame
119
+ ref={ref}
120
+ size={size}
121
+ flexDirection={orientation === "horizontal" ? "row" : "column"}
122
+ borderRadius={borderRadius}
123
+ {...restProps}
124
+ >{wrapScroll({ ...activeProps, orientation }, indexedChildren)}</GroupFrame></GroupProvider>;
125
+ }),
126
+ {
127
+ Item: GroupItem
128
+ }
129
+ );
130
+ }
131
+ const GroupItem = (props) => {
132
+ const { __scopeGroup, children } = props;
133
+ const groupItemProps = useGroupItem(
134
+ { disabled: isValidElement(children) ? children.props.disabled : void 0 },
135
+ __scopeGroup
136
+ );
137
+ if (!isValidElement(children)) {
138
+ return children;
139
+ }
140
+ if (isTamaguiElement(children)) {
141
+ return React.cloneElement(children, groupItemProps);
142
+ }
143
+ return React.cloneElement(children, {
144
+ style: {
145
+ ...children.props?.["style"],
146
+ ...groupItemProps
147
+ }
148
+ });
149
+ };
150
+ const useGroupItem = (childrenProps, __scopeGroup) => {
151
+ const treeIndex = useIndex();
152
+ const context = useGroupContext("GroupItem", __scopeGroup);
153
+ React.useEffect(() => {
154
+ context.onItemMount();
155
+ return () => {
156
+ context.onItemUnmount();
157
+ };
158
+ }, []);
159
+ if (!treeIndex) {
160
+ throw Error("<Group.Item/> should only be used within a <Group/>");
161
+ }
162
+ const isFirst = treeIndex.index === 0;
163
+ const isLast = treeIndex.index === treeIndex.maxIndex;
164
+ const disabled = childrenProps.disabled ?? context.disabled;
165
+ let propsToPass = {
166
+ disabled
167
+ };
168
+ if (context.disablePassBorderRadius !== true) {
169
+ const borderRadius = getBorderRadius({
170
+ radius: context.radius,
171
+ isFirst,
172
+ isLast,
173
+ vertical: context.vertical,
174
+ disable: context.disablePassBorderRadius
175
+ });
176
+ return { ...propsToPass, ...borderRadius };
177
+ }
178
+ return propsToPass;
179
+ };
180
+ const Group = createGroup(true);
181
+ const YGroup = Group;
182
+ const XGroup = createGroup(false);
183
+ const wrapScroll = ({ scrollable, orientation, showScrollIndicator = false }, children) => {
184
+ if (scrollable)
185
+ return <ScrollView
186
+ {...orientation === "vertical" && {
187
+ showsVerticalScrollIndicator: showScrollIndicator
188
+ }}
189
+ {...orientation === "horizontal" && {
190
+ horizontal: true,
191
+ showsHorizontalScrollIndicator: showScrollIndicator
192
+ }}
193
+ >{children}</ScrollView>;
194
+ return children;
195
+ };
196
+ const getBorderRadius = ({
197
+ isFirst,
198
+ isLast,
199
+ radius,
200
+ vertical,
201
+ disable
202
+ }) => {
203
+ return {
204
+ borderTopLeftRadius: isFirst && disable !== "top" && disable !== "start" ? radius : 0,
205
+ borderTopRightRadius: disable !== "top" && disable !== "end" && (vertical && isFirst || !vertical && isLast) ? radius : 0,
206
+ borderBottomLeftRadius: disable !== "bottom" && disable !== "start" && (vertical && isLast || !vertical && isFirst) ? radius : 0,
207
+ borderBottomRightRadius: isLast && disable !== "bottom" && disable !== "end" ? radius : 0
208
+ };
209
+ };
210
+ const cloneElementWithPropOrder = (child, props) => {
211
+ const next = mergeProps(child.props, props, false, getConfig().shorthands)[0];
212
+ return React.cloneElement({ ...child, props: null }, next);
213
+ };
214
+ export {
215
+ Group,
216
+ GroupFrame,
217
+ XGroup,
218
+ YGroup,
219
+ useGroupItem
220
+ };
2
221
  //# sourceMappingURL=Group.js.map