tamagui 1.5.18 → 1.5.20

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.
@@ -28,6 +28,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var Group_exports = {};
30
30
  __export(Group_exports, {
31
+ Group: () => Group,
31
32
  GroupFrame: () => GroupFrame,
32
33
  XGroup: () => XGroup,
33
34
  YGroup: () => YGroup
@@ -35,14 +36,25 @@ __export(Group_exports, {
35
36
  module.exports = __toCommonJS(Group_exports);
36
37
  var import_jsx_runtime = require("react/jsx-runtime");
37
38
  var import_core = require("@tamagui/core");
39
+ var import_create_context = require("@tamagui/create-context");
38
40
  var import_stacks = require("@tamagui/stacks");
41
+ var import_use_controllable_state = require("@tamagui/use-controllable-state");
39
42
  var import_react = __toESM(require("react"));
40
43
  var import_react_native = require("react-native");
44
+ var import_reforest = require("reforest");
45
+ const GROUP_NAME = "Group";
46
+ const [createGroupContext, createGroupScope] = (0, import_create_context.createContextScope)(GROUP_NAME);
47
+ const [GroupProvider, useGroupContext] = createGroupContext(GROUP_NAME);
41
48
  const GroupFrame = (0, import_core.styled)(import_stacks.ThemeableStack, {
42
49
  name: "GroupFrame",
43
- backgroundColor: "$background",
44
- y: 0,
45
50
  variants: {
51
+ unstyled: {
52
+ false: {
53
+ y: 0,
54
+ backgroundColor: "$background",
55
+ size: "$true"
56
+ }
57
+ },
46
58
  size: (val, { tokens }) => {
47
59
  const borderRadius = tokens.radius[val] ?? val ?? tokens.radius["$true"];
48
60
  return {
@@ -51,97 +63,153 @@ const GroupFrame = (0, import_core.styled)(import_stacks.ThemeableStack, {
51
63
  }
52
64
  },
53
65
  defaultVariants: {
54
- size: "$true"
66
+ unstyled: false
55
67
  }
56
68
  });
57
69
  function createGroup(verticalDefault) {
58
- return (0, import_react.forwardRef)((props, ref) => {
59
- const activeProps = (0, import_core.useMediaPropsActive)(props);
60
- const {
61
- children: childrenProp,
62
- space,
63
- size = "$true",
64
- spaceDirection,
65
- separator,
66
- scrollable,
67
- vertical = verticalDefault,
68
- disabled: disabledProp,
69
- disablePassBorderRadius: disablePassBorderRadiusProp,
70
- borderRadius,
71
- ...restProps
72
- } = (0, import_core.getExpandedShorthands)(activeProps);
73
- const radius = borderRadius ?? (size ? (0, import_core.getVariableValue)((0, import_core.getTokens)().radius[size]) - 1 : void 0);
74
- const hasRadius = radius !== void 0;
75
- const disablePassBorderRadius = disablePassBorderRadiusProp ?? !hasRadius;
76
- const childrens = import_react.Children.toArray(childrenProp);
77
- const children = childrens.map((child, i) => {
78
- if (!(0, import_react.isValidElement)(child))
79
- return child;
80
- const disabled = child.props.disabled ?? disabledProp;
81
- const isFirst = i === 0;
82
- const isLast = i === childrens.length - 1;
83
- const radiusStyles = disablePassBorderRadius ? null : {
84
- borderTopLeftRadius: 0,
85
- borderTopRightRadius: 0,
86
- borderBottomLeftRadius: 0,
87
- borderBottomRightRadius: 0,
88
- ...hasRadius && {
89
- ...isFirst && !vertical && {
90
- borderTopLeftRadius: radius,
91
- borderBottomLeftRadius: radius
92
- },
93
- ...isFirst && vertical && {
94
- borderTopLeftRadius: radius,
95
- borderTopRightRadius: radius
96
- },
97
- ...isLast && !vertical && {
98
- borderTopRightRadius: radius,
99
- borderBottomRightRadius: radius
100
- },
101
- ...isLast && vertical && {
102
- borderBottomLeftRadius: radius,
103
- borderBottomRightRadius: radius
104
- }
70
+ return (0, import_core.withStaticProperties)(
71
+ (0, import_react.forwardRef)((props, ref) => {
72
+ const activeProps = (0, import_core.useMediaPropsActive)(props);
73
+ const {
74
+ __scopeGroup,
75
+ children: childrenProp,
76
+ space,
77
+ size = "$true",
78
+ spaceDirection,
79
+ separator,
80
+ scrollable,
81
+ axis = verticalDefault ? "vertical" : "horizontal",
82
+ disabled: disabledProp,
83
+ disablePassBorderRadius: disablePassBorderRadiusProp,
84
+ borderRadius,
85
+ forceUseItem,
86
+ ...restProps
87
+ } = (0, import_core.getExpandedShorthands)(activeProps);
88
+ const vertical = axis === "vertical";
89
+ const [itemChildrenCount, setItemChildrenCount] = (0, import_use_controllable_state.useControllableState)({
90
+ defaultProp: forceUseItem ? 1 : 0
91
+ });
92
+ const isUsingItems = itemChildrenCount > 0;
93
+ const radius = borderRadius ?? (size ? (0, import_core.getVariableValue)((0, import_core.getTokens)().radius[size]) - 1 : void 0);
94
+ const hasRadius = radius !== void 0;
95
+ const disablePassBorderRadius = disablePassBorderRadiusProp ?? !hasRadius;
96
+ const childrenArray = import_react.Children.toArray(childrenProp);
97
+ const children = isUsingItems ? childrenProp : childrenArray.map((child, i) => {
98
+ if (!(0, import_react.isValidElement)(child)) {
99
+ return child;
105
100
  }
106
- };
107
- const props2 = {
108
- disabled,
109
- ...(0, import_core.isTamaguiElement)(child) ? radiusStyles : { style: radiusStyles }
110
- };
111
- return cloneElementWithPropOrder(child, props2);
101
+ const disabled = child.props.disabled ?? disabledProp;
102
+ const isFirst = i === 0;
103
+ const isLast = i === childrenArray.length - 1;
104
+ const radiusStyles = disablePassBorderRadius ? null : getBorderRadius({ isFirst, isLast, radius, vertical });
105
+ const props2 = {
106
+ disabled,
107
+ ...(0, import_core.isTamaguiElement)(child) ? radiusStyles : { style: radiusStyles }
108
+ };
109
+ return cloneElementWithPropOrder(child, props2);
110
+ });
111
+ const indexedChildren = (0, import_reforest.useIndexedChildren)(
112
+ (0, import_core.spacedChildren)({
113
+ direction: spaceDirection,
114
+ separator,
115
+ space,
116
+ children
117
+ })
118
+ );
119
+ const onItemMount = import_react.default.useCallback(
120
+ () => setItemChildrenCount((prev) => prev + 1),
121
+ []
122
+ );
123
+ const onItemUnmount = import_react.default.useCallback(
124
+ () => setItemChildrenCount((prev) => prev - 1),
125
+ []
126
+ );
127
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
128
+ GroupProvider,
129
+ {
130
+ disablePassBorderRadius,
131
+ vertical: axis === "vertical",
132
+ radius,
133
+ disabled: disabledProp,
134
+ onItemMount,
135
+ onItemUnmount,
136
+ scope: __scopeGroup,
137
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
138
+ GroupFrame,
139
+ {
140
+ ref,
141
+ size,
142
+ flexDirection: axis === "horizontal" ? "row" : "column",
143
+ borderRadius,
144
+ ...restProps,
145
+ children: wrapScroll(activeProps, indexedChildren)
146
+ }
147
+ )
148
+ }
149
+ );
150
+ }),
151
+ {
152
+ Item: GroupItem
153
+ }
154
+ );
155
+ }
156
+ const GroupItem = (props) => {
157
+ var _a;
158
+ const { __scopeGroup, children } = props;
159
+ const treeIndex = (0, import_reforest.useIndex)();
160
+ const context = useGroupContext("GroupItem", __scopeGroup);
161
+ import_react.default.useEffect(() => {
162
+ context.onItemMount();
163
+ return () => {
164
+ context.onItemUnmount();
165
+ };
166
+ }, []);
167
+ if (!(0, import_react.isValidElement)(children)) {
168
+ return children;
169
+ }
170
+ const disabled = children.props.disabled ?? context.disabled;
171
+ if (!treeIndex) {
172
+ throw Error("<Group.Item/> should only be used within a <Group/>");
173
+ }
174
+ const isFirst = treeIndex.index === 0;
175
+ const isLast = treeIndex.index === treeIndex.maxIndex;
176
+ let propsToPass = {
177
+ disabled
178
+ };
179
+ if (!context.disablePassBorderRadius) {
180
+ const radiusStyles = getBorderRadius({
181
+ radius: context.radius,
182
+ isFirst,
183
+ isLast,
184
+ vertical: context.vertical
112
185
  });
113
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
114
- GroupFrame,
115
- {
116
- ref,
117
- size,
118
- flexDirection: !vertical ? "row" : "column",
119
- borderRadius,
120
- ...restProps,
121
- children: wrapScroll(
122
- activeProps,
123
- (0, import_core.spacedChildren)({
124
- direction: spaceDirection,
125
- separator,
126
- space,
127
- children
128
- })
129
- )
130
- }
131
- );
186
+ if ((0, import_core.isTamaguiElement)(children)) {
187
+ propsToPass = { ...propsToPass, ...radiusStyles };
188
+ } else {
189
+ propsToPass.style = radiusStyles;
190
+ }
191
+ }
192
+ return (0, import_react.cloneElement)(children, {
193
+ ...propsToPass,
194
+ // @ts-ignore
195
+ style: {
196
+ ...(_a = children.props) == null ? void 0 : _a["style"],
197
+ ...propsToPass.style
198
+ }
132
199
  });
133
- }
134
- const YGroup = createGroup(true);
200
+ };
201
+ const Group = createGroup(true);
202
+ const YGroup = Group;
135
203
  const XGroup = createGroup(false);
136
- const wrapScroll = ({ scrollable, vertical, showScrollIndicator = false }, children) => {
204
+ const wrapScroll = ({ scrollable, axis, showScrollIndicator = false }, children) => {
137
205
  if (scrollable)
138
206
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
139
207
  import_react_native.ScrollView,
140
208
  {
141
- ...vertical && {
209
+ ...axis === "vertical" && {
142
210
  showsVerticalScrollIndicator: showScrollIndicator
143
211
  },
144
- ...!vertical && {
212
+ ...axis === "horizontal" && {
145
213
  horizontal: true,
146
214
  showsHorizontalScrollIndicator: showScrollIndicator
147
215
  },
@@ -150,12 +218,26 @@ const wrapScroll = ({ scrollable, vertical, showScrollIndicator = false }, child
150
218
  );
151
219
  return children;
152
220
  };
221
+ const getBorderRadius = ({
222
+ isFirst,
223
+ isLast,
224
+ radius,
225
+ vertical
226
+ }) => {
227
+ return {
228
+ borderTopLeftRadius: isFirst ? radius : 0,
229
+ borderTopRightRadius: vertical && isFirst || !vertical && isLast ? radius : 0,
230
+ borderBottomLeftRadius: vertical && isLast || !vertical && isFirst ? radius : 0,
231
+ borderBottomRightRadius: isLast ? radius : 0
232
+ };
233
+ };
153
234
  const cloneElementWithPropOrder = (child, props) => {
154
235
  const next = (0, import_core.mergeProps)(child.props, props, false, (0, import_core.getConfig)().shorthands)[0];
155
236
  return import_react.default.cloneElement({ ...child, props: null }, next);
156
237
  };
157
238
  // Annotate the CommonJS export names for ESM import in node:
158
239
  0 && (module.exports = {
240
+ Group,
159
241
  GroupFrame,
160
242
  XGroup,
161
243
  YGroup
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/views/Group.tsx"],
4
- "sourcesContent": ["import {\n GetProps,\n TamaguiElement,\n getConfig,\n getExpandedShorthands,\n getTokens,\n getVariableValue,\n isTamaguiElement,\n mergeProps,\n spacedChildren,\n styled,\n useMediaPropsActive,\n} from '@tamagui/core'\nimport { ThemeableStack } from '@tamagui/stacks'\nimport React, { Children, forwardRef, isValidElement } from 'react'\nimport { ScrollView } from 'react-native'\n\nexport const GroupFrame = styled(ThemeableStack, {\n name: 'GroupFrame',\n backgroundColor: '$background',\n y: 0,\n\n variants: {\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 size: '$true',\n },\n})\n\nexport type GroupProps = GetProps<typeof GroupFrame> & {\n scrollable?: boolean\n /**\n * @default false\n */\n showScrollIndicator?: boolean\n disabled?: boolean\n vertical?: boolean\n disablePassBorderRadius?: boolean\n}\n\nfunction createGroup(verticalDefault: boolean) {\n return forwardRef<TamaguiElement, GroupProps>((props, ref) => {\n const activeProps = useMediaPropsActive(props)\n\n const {\n children: childrenProp,\n space,\n size = '$true',\n spaceDirection,\n separator,\n scrollable,\n vertical = verticalDefault,\n disabled: disabledProp,\n disablePassBorderRadius: disablePassBorderRadiusProp,\n borderRadius,\n ...restProps\n } = getExpandedShorthands(activeProps)\n\n const radius =\n borderRadius ?? (size ? getVariableValue(getTokens().radius[size]) - 1 : undefined)\n\n const hasRadius = radius !== undefined\n const disablePassBorderRadius = disablePassBorderRadiusProp ?? !hasRadius\n const childrens = Children.toArray(childrenProp)\n const children = childrens.map((child, i) => {\n if (!isValidElement(child)) return child\n const disabled = child.props.disabled ?? disabledProp\n\n const isFirst = i === 0\n const isLast = i === childrens.length - 1\n\n const radiusStyles = disablePassBorderRadius\n ? null\n : {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n ...(hasRadius && {\n ...(isFirst &&\n !vertical && {\n borderTopLeftRadius: radius,\n borderBottomLeftRadius: radius,\n }),\n ...(isFirst &&\n vertical && {\n borderTopLeftRadius: radius,\n borderTopRightRadius: radius,\n }),\n ...(isLast &&\n !vertical && {\n borderTopRightRadius: radius,\n borderBottomRightRadius: radius,\n }),\n ...(isLast &&\n vertical && {\n borderBottomLeftRadius: radius,\n borderBottomRightRadius: radius,\n }),\n }),\n }\n\n const props = {\n disabled,\n ...(isTamaguiElement(child) ? radiusStyles : { style: radiusStyles }),\n }\n\n return cloneElementWithPropOrder(child, props)\n })\n\n return (\n <GroupFrame\n ref={ref}\n size={size}\n flexDirection={!vertical ? 'row' : 'column'}\n borderRadius={borderRadius}\n {...restProps}\n >\n {wrapScroll(\n activeProps,\n spacedChildren({\n direction: spaceDirection,\n separator,\n space,\n children,\n })\n )}\n </GroupFrame>\n )\n })\n}\n\nexport const YGroup = createGroup(true)\nexport const XGroup = createGroup(false)\n\nconst wrapScroll = (\n { scrollable, vertical, showScrollIndicator = false }: GroupProps,\n children: any\n) => {\n if (scrollable)\n return (\n <ScrollView\n {...(vertical && {\n showsVerticalScrollIndicator: showScrollIndicator,\n })}\n {...(!vertical && {\n horizontal: true,\n showsHorizontalScrollIndicator: showScrollIndicator,\n })}\n >\n {children}\n </ScrollView>\n )\n return children\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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsHM;AAtHN,kBAYO;AACP,oBAA+B;AAC/B,mBAA4D;AAC5D,0BAA2B;AAEpB,MAAM,iBAAa,oBAAO,8BAAgB;AAAA,EAC/C,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,GAAG;AAAA,EAEH,UAAU;AAAA,IACR,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,MAAM;AAAA,EACR;AACF,CAAC;AAaD,SAAS,YAAY,iBAA0B;AAC7C,aAAO,yBAAuC,CAAC,OAAO,QAAQ;AAC5D,UAAM,kBAAc,iCAAoB,KAAK;AAE7C,UAAM;AAAA,MACJ,UAAU;AAAA,MACV;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,UAAU;AAAA,MACV,yBAAyB;AAAA,MACzB;AAAA,MACA,GAAG;AAAA,IACL,QAAI,mCAAsB,WAAW;AAErC,UAAM,SACJ,iBAAiB,WAAO,kCAAiB,uBAAU,EAAE,OAAO,IAAI,CAAC,IAAI,IAAI;AAE3E,UAAM,YAAY,WAAW;AAC7B,UAAM,0BAA0B,+BAA+B,CAAC;AAChE,UAAM,YAAY,sBAAS,QAAQ,YAAY;AAC/C,UAAM,WAAW,UAAU,IAAI,CAAC,OAAO,MAAM;AAC3C,UAAI,KAAC,6BAAe,KAAK;AAAG,eAAO;AACnC,YAAM,WAAW,MAAM,MAAM,YAAY;AAEzC,YAAM,UAAU,MAAM;AACtB,YAAM,SAAS,MAAM,UAAU,SAAS;AAExC,YAAM,eAAe,0BACjB,OACA;AAAA,QACE,qBAAqB;AAAA,QACrB,sBAAsB;AAAA,QACtB,wBAAwB;AAAA,QACxB,yBAAyB;AAAA,QACzB,GAAI,aAAa;AAAA,UACf,GAAI,WACF,CAAC,YAAY;AAAA,YACX,qBAAqB;AAAA,YACrB,wBAAwB;AAAA,UAC1B;AAAA,UACF,GAAI,WACF,YAAY;AAAA,YACV,qBAAqB;AAAA,YACrB,sBAAsB;AAAA,UACxB;AAAA,UACF,GAAI,UACF,CAAC,YAAY;AAAA,YACX,sBAAsB;AAAA,YACtB,yBAAyB;AAAA,UAC3B;AAAA,UACF,GAAI,UACF,YAAY;AAAA,YACV,wBAAwB;AAAA,YACxB,yBAAyB;AAAA,UAC3B;AAAA,QACJ;AAAA,MACF;AAEJ,YAAMA,SAAQ;AAAA,QACZ;AAAA,QACA,OAAI,8BAAiB,KAAK,IAAI,eAAe,EAAE,OAAO,aAAa;AAAA,MACrE;AAEA,aAAO,0BAA0B,OAAOA,MAAK;AAAA,IAC/C,CAAC;AAED,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,eAAe,CAAC,WAAW,QAAQ;AAAA,QACnC;AAAA,QACC,GAAG;AAAA,QAEH;AAAA,UACC;AAAA,cACA,4BAAe;AAAA,YACb,WAAW;AAAA,YACX;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAAA;AAAA,IACF;AAAA,EAEJ,CAAC;AACH;AAEO,MAAM,SAAS,YAAY,IAAI;AAC/B,MAAM,SAAS,YAAY,KAAK;AAEvC,MAAM,aAAa,CACjB,EAAE,YAAY,UAAU,sBAAsB,MAAM,GACpD,aACG;AACH,MAAI;AACF,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAI,YAAY;AAAA,UACf,8BAA8B;AAAA,QAChC;AAAA,QACC,GAAI,CAAC,YAAY;AAAA,UAChB,YAAY;AAAA,UACZ,gCAAgC;AAAA,QAClC;AAAA,QAEC;AAAA;AAAA,IACH;AAEJ,SAAO;AACT;AAEA,MAAM,4BAA4B,CAAC,OAAY,UAAkB;AAC/D,QAAM,WAAO,wBAAW,MAAM,OAAO,OAAO,WAAO,uBAAU,EAAE,UAAU,EAAE,CAAC;AAC5E,SAAO,aAAAC,QAAM,aAAa,EAAE,GAAG,OAAO,OAAO,KAAK,GAAG,IAAI;AAC3D;",
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, cloneElement, forwardRef, isValidElement } from 'react'\nimport { ScrollView } from 'react-native'\nimport { useIndex, useIndexedChildren } from 'reforest'\n\ninterface GroupContextValue {\n vertical: boolean\n disablePassBorderRadius: boolean\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 y: 0,\n backgroundColor: '$background',\n size: '$true',\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 axis?: 'horizontal' | 'vertical'\n\n scrollable?: boolean\n /**\n * @default false\n */\n showScrollIndicator?: boolean\n disabled?: boolean\n disablePassBorderRadius?: boolean\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 disabled: disabledProp,\n disablePassBorderRadius: disablePassBorderRadiusProp,\n borderRadius,\n forceUseItem,\n ...restProps\n } = getExpandedShorthands(activeProps)\n\n const vertical = axis === 'vertical'\n const [itemChildrenCount, setItemChildrenCount] = useControllableState({\n defaultProp: forceUseItem ? 1 : 0,\n })\n const isUsingItems = 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 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 = disablePassBorderRadius\n ? null\n : getBorderRadius({ isFirst, isLast, radius, vertical })\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={axis === '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={axis === 'horizontal' ? 'row' : 'column'}\n borderRadius={borderRadius}\n {...restProps}\n >\n {wrapScroll(activeProps, 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 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 (!isValidElement(children)) {\n return children as any\n }\n\n const disabled = children.props.disabled ?? context.disabled\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 let propsToPass: Record<string, any> = {\n disabled,\n }\n\n if (!context.disablePassBorderRadius) {\n const radiusStyles = getBorderRadius({\n radius: context.radius,\n isFirst,\n isLast,\n vertical: context.vertical,\n })\n if (isTamaguiElement(children)) {\n propsToPass = { ...propsToPass, ...radiusStyles }\n } else {\n propsToPass.style = radiusStyles\n }\n }\n\n return cloneElement(children, {\n ...propsToPass,\n // @ts-ignore\n style: {\n ...children.props?.['style'],\n ...propsToPass.style,\n },\n })\n}\n\nexport const Group = createGroup(true)\nexport const YGroup = Group\nexport const XGroup = createGroup(false)\n\nconst wrapScroll = (\n { scrollable, axis, showScrollIndicator = false }: GroupProps,\n children: any\n) => {\n if (scrollable)\n return (\n <ScrollView\n {...(axis === 'vertical' && {\n showsVerticalScrollIndicator: showScrollIndicator,\n })}\n {...(axis === '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}: {\n radius: any\n vertical: boolean\n isFirst: boolean\n isLast: boolean\n}) => {\n // TODO: RTL support would be nice here\n return {\n borderTopLeftRadius: isFirst ? radius : 0,\n borderTopRightRadius: (vertical && isFirst) || (!vertical && isLast) ? radius : 0,\n borderBottomLeftRadius: (vertical && isLast) || (!vertical && isFirst) ? radius : 0,\n borderBottomRightRadius: isLast ? 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
6
  "names": ["props", "React"]
7
7
  }
@@ -8,16 +8,28 @@ import {
8
8
  mergeProps,
9
9
  spacedChildren,
10
10
  styled,
11
- useMediaPropsActive
11
+ useMediaPropsActive,
12
+ withStaticProperties
12
13
  } from "@tamagui/core";
14
+ import { createContextScope } from "@tamagui/create-context";
13
15
  import { ThemeableStack } from "@tamagui/stacks";
14
- import React, { Children, forwardRef, isValidElement } from "react";
16
+ import { useControllableState } from "@tamagui/use-controllable-state";
17
+ import React, { Children, cloneElement, forwardRef, isValidElement } from "react";
15
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);
16
23
  const GroupFrame = styled(ThemeableStack, {
17
24
  name: "GroupFrame",
18
- backgroundColor: "$background",
19
- y: 0,
20
25
  variants: {
26
+ unstyled: {
27
+ false: {
28
+ y: 0,
29
+ backgroundColor: "$background",
30
+ size: "$true"
31
+ }
32
+ },
21
33
  size: (val, { tokens }) => {
22
34
  const borderRadius = tokens.radius[val] ?? val ?? tokens.radius["$true"];
23
35
  return {
@@ -26,97 +38,153 @@ const GroupFrame = styled(ThemeableStack, {
26
38
  }
27
39
  },
28
40
  defaultVariants: {
29
- size: "$true"
41
+ unstyled: false
30
42
  }
31
43
  });
32
44
  function createGroup(verticalDefault) {
33
- return forwardRef((props, ref) => {
34
- const activeProps = useMediaPropsActive(props);
35
- const {
36
- children: childrenProp,
37
- space,
38
- size = "$true",
39
- spaceDirection,
40
- separator,
41
- scrollable,
42
- vertical = verticalDefault,
43
- disabled: disabledProp,
44
- disablePassBorderRadius: disablePassBorderRadiusProp,
45
- borderRadius,
46
- ...restProps
47
- } = getExpandedShorthands(activeProps);
48
- const radius = borderRadius ?? (size ? getVariableValue(getTokens().radius[size]) - 1 : void 0);
49
- const hasRadius = radius !== void 0;
50
- const disablePassBorderRadius = disablePassBorderRadiusProp ?? !hasRadius;
51
- const childrens = Children.toArray(childrenProp);
52
- const children = childrens.map((child, i) => {
53
- if (!isValidElement(child))
54
- return child;
55
- const disabled = child.props.disabled ?? disabledProp;
56
- const isFirst = i === 0;
57
- const isLast = i === childrens.length - 1;
58
- const radiusStyles = disablePassBorderRadius ? null : {
59
- borderTopLeftRadius: 0,
60
- borderTopRightRadius: 0,
61
- borderBottomLeftRadius: 0,
62
- borderBottomRightRadius: 0,
63
- ...hasRadius && {
64
- ...isFirst && !vertical && {
65
- borderTopLeftRadius: radius,
66
- borderBottomLeftRadius: radius
67
- },
68
- ...isFirst && vertical && {
69
- borderTopLeftRadius: radius,
70
- borderTopRightRadius: radius
71
- },
72
- ...isLast && !vertical && {
73
- borderTopRightRadius: radius,
74
- borderBottomRightRadius: radius
75
- },
76
- ...isLast && vertical && {
77
- borderBottomLeftRadius: radius,
78
- borderBottomRightRadius: radius
79
- }
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
+ disabled: disabledProp,
58
+ disablePassBorderRadius: disablePassBorderRadiusProp,
59
+ borderRadius,
60
+ forceUseItem,
61
+ ...restProps
62
+ } = getExpandedShorthands(activeProps);
63
+ const vertical = axis === "vertical";
64
+ const [itemChildrenCount, setItemChildrenCount] = useControllableState({
65
+ defaultProp: forceUseItem ? 1 : 0
66
+ });
67
+ const isUsingItems = itemChildrenCount > 0;
68
+ const radius = borderRadius ?? (size ? getVariableValue(getTokens().radius[size]) - 1 : void 0);
69
+ const hasRadius = radius !== void 0;
70
+ const disablePassBorderRadius = disablePassBorderRadiusProp ?? !hasRadius;
71
+ const childrenArray = Children.toArray(childrenProp);
72
+ const children = isUsingItems ? childrenProp : childrenArray.map((child, i) => {
73
+ if (!isValidElement(child)) {
74
+ return child;
80
75
  }
81
- };
82
- const props2 = {
83
- disabled,
84
- ...isTamaguiElement(child) ? radiusStyles : { style: radiusStyles }
85
- };
86
- return cloneElementWithPropOrder(child, props2);
76
+ const disabled = child.props.disabled ?? disabledProp;
77
+ const isFirst = i === 0;
78
+ const isLast = i === childrenArray.length - 1;
79
+ const radiusStyles = disablePassBorderRadius ? null : getBorderRadius({ isFirst, isLast, radius, vertical });
80
+ const props2 = {
81
+ disabled,
82
+ ...isTamaguiElement(child) ? radiusStyles : { style: radiusStyles }
83
+ };
84
+ return cloneElementWithPropOrder(child, props2);
85
+ });
86
+ const indexedChildren = useIndexedChildren(
87
+ spacedChildren({
88
+ direction: spaceDirection,
89
+ separator,
90
+ space,
91
+ children
92
+ })
93
+ );
94
+ const onItemMount = React.useCallback(
95
+ () => setItemChildrenCount((prev) => prev + 1),
96
+ []
97
+ );
98
+ const onItemUnmount = React.useCallback(
99
+ () => setItemChildrenCount((prev) => prev - 1),
100
+ []
101
+ );
102
+ return /* @__PURE__ */ jsx(
103
+ GroupProvider,
104
+ {
105
+ disablePassBorderRadius,
106
+ vertical: axis === "vertical",
107
+ radius,
108
+ disabled: disabledProp,
109
+ onItemMount,
110
+ onItemUnmount,
111
+ scope: __scopeGroup,
112
+ children: /* @__PURE__ */ jsx(
113
+ GroupFrame,
114
+ {
115
+ ref,
116
+ size,
117
+ flexDirection: axis === "horizontal" ? "row" : "column",
118
+ borderRadius,
119
+ ...restProps,
120
+ children: wrapScroll(activeProps, indexedChildren)
121
+ }
122
+ )
123
+ }
124
+ );
125
+ }),
126
+ {
127
+ Item: GroupItem
128
+ }
129
+ );
130
+ }
131
+ const GroupItem = (props) => {
132
+ var _a;
133
+ const { __scopeGroup, children } = props;
134
+ const treeIndex = useIndex();
135
+ const context = useGroupContext("GroupItem", __scopeGroup);
136
+ React.useEffect(() => {
137
+ context.onItemMount();
138
+ return () => {
139
+ context.onItemUnmount();
140
+ };
141
+ }, []);
142
+ if (!isValidElement(children)) {
143
+ return children;
144
+ }
145
+ const disabled = children.props.disabled ?? context.disabled;
146
+ if (!treeIndex) {
147
+ throw Error("<Group.Item/> should only be used within a <Group/>");
148
+ }
149
+ const isFirst = treeIndex.index === 0;
150
+ const isLast = treeIndex.index === treeIndex.maxIndex;
151
+ let propsToPass = {
152
+ disabled
153
+ };
154
+ if (!context.disablePassBorderRadius) {
155
+ const radiusStyles = getBorderRadius({
156
+ radius: context.radius,
157
+ isFirst,
158
+ isLast,
159
+ vertical: context.vertical
87
160
  });
88
- return /* @__PURE__ */ jsx(
89
- GroupFrame,
90
- {
91
- ref,
92
- size,
93
- flexDirection: !vertical ? "row" : "column",
94
- borderRadius,
95
- ...restProps,
96
- children: wrapScroll(
97
- activeProps,
98
- spacedChildren({
99
- direction: spaceDirection,
100
- separator,
101
- space,
102
- children
103
- })
104
- )
105
- }
106
- );
161
+ if (isTamaguiElement(children)) {
162
+ propsToPass = { ...propsToPass, ...radiusStyles };
163
+ } else {
164
+ propsToPass.style = radiusStyles;
165
+ }
166
+ }
167
+ return cloneElement(children, {
168
+ ...propsToPass,
169
+ // @ts-ignore
170
+ style: {
171
+ ...(_a = children.props) == null ? void 0 : _a["style"],
172
+ ...propsToPass.style
173
+ }
107
174
  });
108
- }
109
- const YGroup = createGroup(true);
175
+ };
176
+ const Group = createGroup(true);
177
+ const YGroup = Group;
110
178
  const XGroup = createGroup(false);
111
- const wrapScroll = ({ scrollable, vertical, showScrollIndicator = false }, children) => {
179
+ const wrapScroll = ({ scrollable, axis, showScrollIndicator = false }, children) => {
112
180
  if (scrollable)
113
181
  return /* @__PURE__ */ jsx(
114
182
  ScrollView,
115
183
  {
116
- ...vertical && {
184
+ ...axis === "vertical" && {
117
185
  showsVerticalScrollIndicator: showScrollIndicator
118
186
  },
119
- ...!vertical && {
187
+ ...axis === "horizontal" && {
120
188
  horizontal: true,
121
189
  showsHorizontalScrollIndicator: showScrollIndicator
122
190
  },
@@ -125,11 +193,25 @@ const wrapScroll = ({ scrollable, vertical, showScrollIndicator = false }, child
125
193
  );
126
194
  return children;
127
195
  };
196
+ const getBorderRadius = ({
197
+ isFirst,
198
+ isLast,
199
+ radius,
200
+ vertical
201
+ }) => {
202
+ return {
203
+ borderTopLeftRadius: isFirst ? radius : 0,
204
+ borderTopRightRadius: vertical && isFirst || !vertical && isLast ? radius : 0,
205
+ borderBottomLeftRadius: vertical && isLast || !vertical && isFirst ? radius : 0,
206
+ borderBottomRightRadius: isLast ? radius : 0
207
+ };
208
+ };
128
209
  const cloneElementWithPropOrder = (child, props) => {
129
210
  const next = mergeProps(child.props, props, false, getConfig().shorthands)[0];
130
211
  return React.cloneElement({ ...child, props: null }, next);
131
212
  };
132
213
  export {
214
+ Group,
133
215
  GroupFrame,
134
216
  XGroup,
135
217
  YGroup