@hanzogui/spacer 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/Spacer.cjs +64 -0
  3. package/dist/cjs/Spacer.native.js +69 -0
  4. package/dist/cjs/Spacer.native.js.map +1 -0
  5. package/dist/cjs/Unspaced.cjs +34 -0
  6. package/dist/cjs/Unspaced.native.js +37 -0
  7. package/dist/cjs/Unspaced.native.js.map +1 -0
  8. package/dist/cjs/index.cjs +29 -0
  9. package/dist/cjs/index.native.js +32 -0
  10. package/dist/cjs/index.native.js.map +1 -0
  11. package/dist/cjs/spacedChildren.cjs +118 -0
  12. package/dist/cjs/spacedChildren.native.js +143 -0
  13. package/dist/cjs/spacedChildren.native.js.map +1 -0
  14. package/dist/cjs/types.cjs +16 -0
  15. package/dist/cjs/types.native.js +19 -0
  16. package/dist/cjs/types.native.js.map +1 -0
  17. package/dist/esm/Spacer.mjs +41 -0
  18. package/dist/esm/Spacer.mjs.map +1 -0
  19. package/dist/esm/Spacer.native.js +43 -0
  20. package/dist/esm/Spacer.native.js.map +1 -0
  21. package/dist/esm/Unspaced.mjs +10 -0
  22. package/dist/esm/Unspaced.mjs.map +1 -0
  23. package/dist/esm/Unspaced.native.js +10 -0
  24. package/dist/esm/Unspaced.native.js.map +1 -0
  25. package/dist/esm/index.js +5 -0
  26. package/dist/esm/index.js.map +1 -0
  27. package/dist/esm/index.mjs +5 -0
  28. package/dist/esm/index.mjs.map +1 -0
  29. package/dist/esm/index.native.js +5 -0
  30. package/dist/esm/index.native.js.map +1 -0
  31. package/dist/esm/spacedChildren.mjs +84 -0
  32. package/dist/esm/spacedChildren.mjs.map +1 -0
  33. package/dist/esm/spacedChildren.native.js +106 -0
  34. package/dist/esm/spacedChildren.native.js.map +1 -0
  35. package/dist/esm/types.mjs +2 -0
  36. package/dist/esm/types.mjs.map +1 -0
  37. package/dist/esm/types.native.js +2 -0
  38. package/dist/esm/types.native.js.map +1 -0
  39. package/package.json +47 -0
  40. package/src/Spacer.tsx +42 -0
  41. package/src/Unspaced.tsx +11 -0
  42. package/src/index.ts +4 -0
  43. package/src/spacedChildren.tsx +134 -0
  44. package/src/types.ts +21 -0
  45. package/types/Spacer.d.ts +2 -0
  46. package/types/Spacer.d.ts.map +1 -0
  47. package/types/Unspaced.d.ts +8 -0
  48. package/types/Unspaced.d.ts.map +1 -0
  49. package/types/index.d.ts +5 -0
  50. package/types/index.d.ts.map +1 -0
  51. package/types/spacedChildren.d.ts +4 -0
  52. package/types/spacedChildren.d.ts.map +1 -0
  53. package/types/types.d.ts +19 -0
  54. package/types/types.d.ts.map +1 -0
@@ -0,0 +1,43 @@
1
+ import { styled, View } from "@hanzo/gui-web";
2
+ var getSpacerSize = function (size, param) {
3
+ var {
4
+ tokens
5
+ } = param;
6
+ size = size === !0 ? "$true" : size;
7
+ var _tokens_space_size,
8
+ sizePx = (_tokens_space_size = tokens.space[size]) !== null && _tokens_space_size !== void 0 ? _tokens_space_size : size;
9
+ return {
10
+ width: sizePx,
11
+ height: sizePx,
12
+ minWidth: sizePx,
13
+ minHeight: sizePx
14
+ };
15
+ },
16
+ Spacer = styled(View, {
17
+ name: "Spacer",
18
+ pointerEvents: "none",
19
+ render: "span",
20
+ variants: {
21
+ size: {
22
+ "...size": getSpacerSize,
23
+ "...": getSpacerSize
24
+ },
25
+ direction: {
26
+ horizontal: {
27
+ height: 0,
28
+ minHeight: 0
29
+ },
30
+ vertical: {
31
+ width: 0,
32
+ minWidth: 0
33
+ },
34
+ both: {}
35
+ }
36
+ },
37
+ defaultVariants: {
38
+ // @ts-ignore
39
+ size: !0
40
+ }
41
+ });
42
+ export { Spacer };
43
+ //# sourceMappingURL=Spacer.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["styled","View","getSpacerSize","size","param","tokens","_tokens_space_size","sizePx","space","width","height","minWidth","minHeight","Spacer","name","pointerEvents","render","variants","direction","horizontal","vertical","both","defaultVariants"],"sources":["../../src/Spacer.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,MAAA,EAAQC,IAAA,QAA6B;AAE9C,IAAAC,aAAM,YAAAA,CAAsDC,IAAE,EAAAC,KAAO;IACnE;MAAAC;IAAO,IAASD,KAAO;IACvBD,IAAA,GAAMA,IAAA,KAAS,YAAa,GAAAA,IAAW;IACvC,IAAAG,kBAAO;MAAAC,MAAA,IAAAD,kBAAA,GAAAD,MAAA,CAAAG,KAAA,CAAAL,IAAA,eAAAG,kBAAA,cAAAA,kBAAA,GAAAH,IAAA;IAAA,OACL;MACAM,KAAA,EAAAF,MAAQ;MACRG,MAAA,EAAAH,MAAU;MACVI,QAAA,EAAAJ,MAAW;MACbK,SAAA,EAAAL;IACF,CAEa;EAAsB;EACjCM,MAAM,GAAAb,MAAA,CAAAC,IAAA;IACNa,IAAA;IACAC,aAAQ;IAERC,MAAA,QAAU;IAAAC,QACF;MAAAd,IACJ;QACA,SAAO,EAAAD,aAAA;QACT,OAAAA;MAEA;MAAWgB,SACT;QAAYC,UACF;UACRT,MAAA;UACFE,SAAA;QACA;QAAUQ,QACR,EAAO;UACPX,KAAA;UACFE,QAAA;QACA;QACFU,IAAA;MACF;IAEA;IAAiBC,eAAA;MAEf;MACFnB,IAAA;IACD","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ function Unspaced(props) {
2
+ return props.children;
3
+ }
4
+ Unspaced.isUnspaced = !0;
5
+ function isUnspaced(child) {
6
+ const t = child?.type;
7
+ return t?.isVisuallyHidden || t?.isUnspaced;
8
+ }
9
+ export { Unspaced, isUnspaced };
10
+ //# sourceMappingURL=Unspaced.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Unspaced","props","children","isUnspaced","child","t","type","isVisuallyHidden"],"sources":["../../src/Unspaced.tsx"],"sourcesContent":[null],"mappings":"AACO,SAASA,SAASC,KAAA,EAA2B;EAClD,OAAOA,KAAA,CAAMC,QAAA;AACf;AAEAF,QAAA,CAASG,UAAA,GAAgB;AAElB,SAASA,WAAWC,KAAA,EAAwB;EACjD,MAAMC,CAAA,GAAID,KAAA,EAAQE,IAAA;EAClB,OAAOD,CAAA,EAAIE,gBAAA,IAAuBF,CAAA,EAAIF,UAAA;AACxC","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ function Unspaced(props) {
2
+ return props.children;
3
+ }
4
+ Unspaced.isUnspaced = !0;
5
+ function isUnspaced(child) {
6
+ var t = child?.type;
7
+ return t?.isVisuallyHidden || t?.isUnspaced;
8
+ }
9
+ export { Unspaced, isUnspaced };
10
+ //# sourceMappingURL=Unspaced.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Unspaced","props","children","isUnspaced","child","t","type","isVisuallyHidden"],"sources":["../../src/Unspaced.tsx"],"sourcesContent":[null],"mappings":"AACO,SAASA,SAASC,KAAA,EAA2B;EAClD,OAAOA,KAAA,CAAMC,QAAA;AACf;AAEAF,QAAA,CAASG,UAAA,GAAgB;AAElB,SAASA,WAAWC,KAAA,EAAwB;EACjD,IAAAC,CAAA,GAAMD,KAAI,EAAAE,IAAQ;EAClB,OAAOD,CAAA,EAAIE,gBAAA,IAAuBF,CAAA,EAAIF,UAAA;AACxC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import { spacedChildren } from "./spacedChildren.mjs";
2
+ export * from "./Spacer.mjs";
3
+ export * from "./Unspaced.mjs";
4
+ export { spacedChildren };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["spacedChildren"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,cAAA,QAAsB;AAC/B,cAAc;AACd,cAAc","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import { spacedChildren } from "./spacedChildren.mjs";
2
+ export * from "./Spacer.mjs";
3
+ export * from "./Unspaced.mjs";
4
+ export { spacedChildren };
5
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["spacedChildren"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,cAAA,QAAsB;AAC/B,cAAc;AACd,cAAc","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import { spacedChildren } from "./spacedChildren.native.js";
2
+ export * from "./Spacer.native.js";
3
+ export * from "./Unspaced.native.js";
4
+ export { spacedChildren };
5
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["spacedChildren"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,cAAA,QAAsB;AAC/B,cAAc;AACd,cAAc","ignoreList":[]}
@@ -0,0 +1,84 @@
1
+ import { createComponent } from "@hanzo/gui-web";
2
+ import React from "react";
3
+ import { Spacer } from "./Spacer.mjs";
4
+ import { isUnspaced } from "./Unspaced.mjs";
5
+ import { jsx } from "react/jsx-runtime";
6
+ function spacedChildren(props) {
7
+ const {
8
+ isZStack,
9
+ children,
10
+ space,
11
+ direction,
12
+ spaceFlex,
13
+ separator,
14
+ ensureKeys
15
+ } = props,
16
+ hasSpace = !!(space || spaceFlex),
17
+ hasSeparator = separator != null,
18
+ areChildrenArray = Array.isArray(children);
19
+ if (!ensureKeys && !(hasSpace || hasSeparator || isZStack)) return children;
20
+ const childrenList = areChildrenArray ? children : React.Children.toArray(children);
21
+ if (childrenList.length <= 1 && !isZStack && !childrenList[0]?.type?.shouldForwardSpace) return children;
22
+ const final = [];
23
+ for (let [index, child] of childrenList.entries()) {
24
+ const isEmpty = child == null || Array.isArray(child) && child.length === 0;
25
+ if (!isEmpty && React.isValidElement(child) && child.type?.shouldForwardSpace && (child = React.cloneElement(child, {
26
+ space,
27
+ spaceFlex,
28
+ separator,
29
+ key: child.key
30
+ })), isEmpty || !child || child.key && !isZStack ? final.push(child) : final.push(/* @__PURE__ */jsx(React.Fragment, {
31
+ children: isZStack ? /* @__PURE__ */jsx(AbsoluteFill, {
32
+ children: child
33
+ }) : child
34
+ }, `${index}0t`)), isUnspaced(child) && index === 0 || isZStack) continue;
35
+ const next = childrenList[index + 1];
36
+ next && !isEmpty && !isUnspaced(next) && (separator ? (hasSpace && final.push(createSpacer({
37
+ key: `_${index}_00t`,
38
+ direction,
39
+ space,
40
+ spaceFlex
41
+ })), final.push(/* @__PURE__ */jsx(React.Fragment, {
42
+ children: separator
43
+ }, `${index}03t`)), hasSpace && final.push(createSpacer({
44
+ key: `_${index}01t`,
45
+ direction,
46
+ space,
47
+ spaceFlex
48
+ }))) : final.push(createSpacer({
49
+ key: `_${index}02t`,
50
+ direction,
51
+ space,
52
+ spaceFlex
53
+ })));
54
+ }
55
+ return process.env.NODE_ENV === "development" && props.debug && console.info(" Spaced children", final, props), final;
56
+ }
57
+ function createSpacer({
58
+ key,
59
+ direction,
60
+ space,
61
+ spaceFlex
62
+ }) {
63
+ return /* @__PURE__ */jsx(Spacer, {
64
+ size: space,
65
+ direction,
66
+ ...(typeof spaceFlex < "u" && {
67
+ flex: spaceFlex === !0 ? 1 : spaceFlex === !1 ? 0 : spaceFlex
68
+ })
69
+ }, key);
70
+ }
71
+ const AbsoluteFill = createComponent({
72
+ defaultProps: {
73
+ display: "flex",
74
+ flexDirection: "column",
75
+ position: "absolute",
76
+ top: 0,
77
+ right: 0,
78
+ bottom: 0,
79
+ left: 0,
80
+ pointerEvents: "box-none"
81
+ }
82
+ });
83
+ export { spacedChildren };
84
+ //# sourceMappingURL=spacedChildren.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createComponent","React","Spacer","isUnspaced","jsx","spacedChildren","props","isZStack","children","space","direction","spaceFlex","separator","ensureKeys","hasSpace","hasSeparator","areChildrenArray","Array","isArray","childrenList","Children","toArray","length","type","shouldForwardSpace","final","index","child","entries","isEmpty","isValidElement","cloneElement","key","push","Fragment","AbsoluteFill","next","createSpacer","process","env","NODE_ENV","debug","console","info","size","flex","defaultProps","display","flexDirection","position","top","right","bottom","left","pointerEvents"],"sources":["../../src/spacedChildren.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,106 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createComponent } from "@hanzo/gui-web";
3
+ import React from "react";
4
+ import { Spacer } from "./Spacer.native.js";
5
+ import { isUnspaced } from "./Unspaced.native.js";
6
+ function spacedChildren(props) {
7
+ var _childrenList__type,
8
+ _childrenList_,
9
+ {
10
+ isZStack,
11
+ children,
12
+ space,
13
+ direction,
14
+ spaceFlex,
15
+ separator,
16
+ ensureKeys
17
+ } = props,
18
+ hasSpace = !!(space || spaceFlex),
19
+ hasSeparator = separator != null,
20
+ areChildrenArray = Array.isArray(children);
21
+ if (!ensureKeys && !(hasSpace || hasSeparator || isZStack)) return children;
22
+ var childrenList = areChildrenArray ? children : React.Children.toArray(children),
23
+ len = childrenList.length;
24
+ if (len <= 1 && !isZStack && !(!((_childrenList_ = childrenList[0]) === null || _childrenList_ === void 0 || (_childrenList__type = _childrenList_.type) === null || _childrenList__type === void 0) && _childrenList__type.shouldForwardSpace)) return children;
25
+ var final = [],
26
+ _iteratorNormalCompletion = !0,
27
+ _didIteratorError = !1,
28
+ _iteratorError = void 0;
29
+ try {
30
+ for (var _iterator = childrenList.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
31
+ var [index, child] = _step.value,
32
+ _child_type,
33
+ isEmpty = child == null || Array.isArray(child) && child.length === 0;
34
+ if (!isEmpty && /* @__PURE__ */React.isValidElement(child) && !((_child_type = child.type) === null || _child_type === void 0) && _child_type.shouldForwardSpace && (child = /* @__PURE__ */React.cloneElement(child, {
35
+ space,
36
+ spaceFlex,
37
+ separator,
38
+ key: child.key
39
+ })), isEmpty || !child || child.key && !isZStack ? final.push(child) : final.push(/* @__PURE__ */_jsx(React.Fragment, {
40
+ children: isZStack ? /* @__PURE__ */_jsx(AbsoluteFill, {
41
+ children: child
42
+ }) : child
43
+ }, `${index}0t`)), !(isUnspaced(child) && index === 0) && !isZStack) {
44
+ var next = childrenList[index + 1];
45
+ next && !isEmpty && !isUnspaced(next) && (separator ? (hasSpace && final.push(createSpacer({
46
+ key: `_${index}_00t`,
47
+ direction,
48
+ space,
49
+ spaceFlex
50
+ })), final.push(/* @__PURE__ */_jsx(React.Fragment, {
51
+ children: separator
52
+ }, `${index}03t`)), hasSpace && final.push(createSpacer({
53
+ key: `_${index}01t`,
54
+ direction,
55
+ space,
56
+ spaceFlex
57
+ }))) : final.push(createSpacer({
58
+ key: `_${index}02t`,
59
+ direction,
60
+ space,
61
+ spaceFlex
62
+ })));
63
+ }
64
+ }
65
+ } catch (err) {
66
+ _didIteratorError = !0, _iteratorError = err;
67
+ } finally {
68
+ try {
69
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
70
+ } finally {
71
+ if (_didIteratorError) throw _iteratorError;
72
+ }
73
+ }
74
+ return process.env.NODE_ENV === "development" && props.debug && console.info(" Spaced children", final, props), final;
75
+ }
76
+ function createSpacer(param) {
77
+ var {
78
+ key,
79
+ direction,
80
+ space,
81
+ spaceFlex
82
+ } = param;
83
+ return /* @__PURE__ */_jsx(Spacer, {
84
+ // @ts-ignore
85
+ size: space,
86
+ // @ts-ignore
87
+ direction,
88
+ ...(typeof spaceFlex < "u" && {
89
+ flex: spaceFlex === !0 ? 1 : spaceFlex === !1 ? 0 : spaceFlex
90
+ })
91
+ }, key);
92
+ }
93
+ var AbsoluteFill = createComponent({
94
+ defaultProps: {
95
+ display: "flex",
96
+ flexDirection: "column",
97
+ position: "absolute",
98
+ top: 0,
99
+ right: 0,
100
+ bottom: 0,
101
+ left: 0,
102
+ pointerEvents: "box-none"
103
+ }
104
+ });
105
+ export { spacedChildren };
106
+ //# sourceMappingURL=spacedChildren.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jsx","_jsx","createComponent","React","Spacer","isUnspaced","spacedChildren","props","_childrenList__type","_childrenList_","isZStack","children","space","direction","spaceFlex","separator","ensureKeys","hasSpace","hasSeparator","areChildrenArray","Array","isArray","childrenList","Children","toArray","len","length","type","shouldForwardSpace","final","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","entries","Symbol","iterator","_step","next","done","index","child","value","_child_type","isEmpty","isValidElement","cloneElement","key","push","Fragment","AbsoluteFill","createSpacer","err","return","process","env","NODE_ENV","debug","console","info","param","size","flex","defaultProps","display"],"sources":["../../src/spacedChildren.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,GAAA,IAAAC,IAAA,2BAAuB;AAChC,SAAOC,eAAW;AAClB,OAAAC,KAAS,aAAc;AACvB,SAASC,MAAA,4BAAkB;AA6CL,SAAAC,UAAA;AA1Cf,SAASC,eAAeC,KAAA,EAA4B;EACzD,IAAAC,mBAAkB;IAAAC,cAAiB;IAAA;MAAAC,QAAW;MAAAC,QAAW;MAAAC,KAAW;MAAAC,SAAW;MAAAC,SACzE;MAAAC,SAAW;MAACC;IAAW,IAAAT,KAAA;IACvBU,QAAA,MAAAL,KAA4C,IAAAE,SAAc;IAC1DI,YAAA,GAAAH,SAAyB,QAAQ;IAAAI,gBAAQ,GAAAC,KAAA,CAAAC,OAAA,CAAAV,QAAA;EAE/C,IAAI,CAACK,UAAA,IAAc,EAAEC,QAAA,IAAYC,YAAA,IAAgBR,QAAA,GAC/C,OAAOC,QAAA;EAGT,IAAAW,YAAM,GAAAH,gBAAe,GAAAR,QAChB,GAAAR,KACD,CAAAoB,QAAM,CAAAC,OAAS,CAAAb,QAAQ;IAAQc,GAAA,GAAAH,YAAA,CAAAI,MAAA;EAGnC,IADYD,GAAA,UAAaf,QAAA,IACd,IAAM,CAAAD,cAAa,GAAAa,YAAkB,SAAU,QAAAb,cAAA,gBAAAD,mBAAA,GAAAC,cAAA,CAAAkB,IAAA,cAAAnB,mBAAA,gBAAAA,mBAAA,CAAAoB,kBAAA,GACxD,OAAOjB,QAAA;EAGT,IAAAkB,KAAM,KAA2B;IAACC,yBAAA;IAAAC,iBAAA;IAAAC,cAAA;EAClC;IACE,SAAMC,SACJ,GAAAX,YAEC,CAAAY,OAAM,GAAAC,MAAQ,CAAAC,QAAU,KAAMC,KAAA,IAAAP,yBAAW,IAAAO,KAAA,GAAAJ,SAAA,CAAAK,IAAA,IAAAC,IAAA,GAAAT,yBAAA;MA0B5C,IAvBK,CAAAU,KAAA,EAAAC,KAAW,IAAMJ,KAAA,CAAAK,KAAA;QAAAC,WAAyB;QAAAC,OAAM,GAAOH,KAAA,YAAArB,KAAA,CAC1DC,OAAA,CAAQoB,KAAA,CAAM,IAAAA,KAAA,CAAAf,MAAa,KAAO;MAChC,KAAAkB,OAAA,mBAAAzC,KAAA,CAAA0C,cAAA,CAAAJ,KAAA,QAAAE,WAAA,GAAAF,KAAA,CAAAd,IAAA,cAAAgB,WAAA,gBAAAA,WAAA,CAAAf,kBAAA,KAAAa,KAAA,kBAAAtC,KAAA,CAAA2C,YAAA,CAAAL,KAAA;QACA7B,KAAA;QACAE,SAAA;QACAC,SAAW;QACLgC,GAIN,EAAAN,KAAA,CAAAM;MAIA,KAAAH,OAAA,KAAAH,KAAC,IAAMA,KAAA,CAAAM,GAAA,IACJ,CAAArC,QAAA,GAAAmB,KAAA,CAAAmB,IAAW,CAAAP,KAAA,IAAAZ,KAAA,CAAAmB,IAAC,gBAAc/C,IAAA,CAAAE,KAAA,CAAA8C,QAAwB;QAMrDtC,QAAA,EAAWD,QAAK,GAAK,eAErBT,IAAA,CAAAiD,YAAU;UAERvC,QAAO,EAAA8B;QAET,KAASA;MAIL,MAAAD,KAAA,IAAa,MAAAnC,UAAA,CAAAoC,KAAA,KAAAD,KAAA,YAAA9B,QAAA;QACX,IAAA4B,IAAK,GAAIhB,YAAK,CAAAkB,KAAA;QACdF,IAAA,KAAAM,OAAA,KAAAvC,UAAA,CAAAiC,IAAA,MAAAvB,SAAA,IAAAE,QAAA,IAAAY,KAAA,CAAAmB,IAAA,CAAAG,YAAA;UACAJ,GAAA,MAAAP,KAAA;UACA3B,SAAA;UACDD,KAAA;UAGLE;QAGI,KAAAe,KAAA,CAAamB,IAAA,gBAAA/C,IAAA,CAAAE,KAAA,CAAA8C,QAAA;UACXtC,QAAS,EAAAI;QACT,MAAAyB,KAAA,SAAAvB,QAAA,IAAAY,KAAA,CAAAmB,IAAA,CAAAG,YAAA;UACAJ,GAAA,MAAAP,KAAA;UACA3B,SAAA;UACDD,KAAA;UAILE;QACE,OAAAe,KAAa,CAAAmB,IAAA,CAAAG,YAAA;UACXJ,GAAK,MAAIP,KAAK;UACd3B,SAAA;UACAD,KAAA;UACAE;QACD;MACH;IAGN;EAEA,SAAIsC,GAAA;IAONrB,iBAAA,OAAAC,cAAA,GAAAoB,GAAA;EAIA,UAAS;IACP;MACG,CAAAtB,yBAAA,IAAAG,SAAA,CAAAoB,MAAA,YAAApB,SAAA,CAAAoB,MAAA;IAAA;MAGC,IAAAtB,iBAAM,EAEN,MAAAC,cAAA;IAAA;EACyC;EACkB,OAC3DsB,OAAA,CAAAC,GAAA,CAAAC,QAAA,sBAAAjD,KAAA,CAAAkD,KAAA,IAAAC,OAAA,CAAAC,IAAA,sBAAA9B,KAAA,EAAAtB,KAAA,GAAAsB,KAAA;AAAA;AAAA,SAPKsB,aAAAS,KAAA;EAQP;IAAAb,GAAA;IAAAlC,SAAA;IAAAD,KAAA;IAAAE;EAAA,IAAA8C,KAAA;EAEJ,sBAAA3D,IAAA,CAAAG,MAAA;IAEA;IACEyD,IAAA,EAAAjD,KAAA;IACE;IACAC,SAAA;IACA,WAAUC,SAAA;MACVgD,IAAK,EAAAhD,SAAA,cAAAA,SAAA,cAAAA;IACL;EAAO,GACPiC,GAAA;AAAQ;AACF,IACNG,YAAA,GAAehD,eAAA;EACjB6D,YAAA;IACDC,OAAA","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@hanzogui/spacer",
3
+ "version": "2.0.0",
4
+ "files": [
5
+ "src",
6
+ "types",
7
+ "dist"
8
+ ],
9
+ "type": "module",
10
+ "sideEffects": false,
11
+ "main": "dist/cjs",
12
+ "module": "dist/esm",
13
+ "types": "./types/index.d.ts",
14
+ "exports": {
15
+ "./package.json": "./package.json",
16
+ ".": {
17
+ "types": "./types/index.d.ts",
18
+ "react-native": "./dist/esm/index.native.js",
19
+ "browser": "./dist/esm/index.mjs",
20
+ "module": "./dist/esm/index.mjs",
21
+ "import": "./dist/esm/index.mjs",
22
+ "require": "./dist/cjs/index.cjs",
23
+ "default": "./dist/esm/index.mjs"
24
+ }
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "scripts": {
30
+ "build": "hanzo-gui-build",
31
+ "watch": "hanzo-gui-build --watch",
32
+ "clean": "hanzo-gui-build clean",
33
+ "clean:build": "hanzo-gui-build clean:build"
34
+ },
35
+ "dependencies": {
36
+ "@hanzogui/web": "2.0.0-rc.29"
37
+ },
38
+ "devDependencies": {
39
+ "@hanzogui/build": "2.0.0-rc.29",
40
+ "react": ">=19",
41
+ "react-native": "0.83.2"
42
+ },
43
+ "peerDependencies": {
44
+ "react": ">=19",
45
+ "react-native": "*"
46
+ }
47
+ }
package/src/Spacer.tsx ADDED
@@ -0,0 +1,42 @@
1
+ import { styled, View, type SizeTokens } from '@hanzogui/web'
2
+
3
+ const getSpacerSize = (size: SizeTokens | number | boolean, { tokens }) => {
4
+ size = size === true ? '$true' : size
5
+ const sizePx = tokens.space[size as any] ?? size
6
+ return {
7
+ width: sizePx,
8
+ height: sizePx,
9
+ minWidth: sizePx,
10
+ minHeight: sizePx,
11
+ }
12
+ }
13
+
14
+ export const Spacer = styled(View, {
15
+ name: 'Spacer',
16
+ pointerEvents: 'none',
17
+ render: 'span',
18
+
19
+ variants: {
20
+ size: {
21
+ '...size': getSpacerSize,
22
+ '...': getSpacerSize,
23
+ },
24
+
25
+ direction: {
26
+ horizontal: {
27
+ height: 0,
28
+ minHeight: 0,
29
+ },
30
+ vertical: {
31
+ width: 0,
32
+ minWidth: 0,
33
+ },
34
+ both: {},
35
+ },
36
+ } as const,
37
+
38
+ defaultVariants: {
39
+ // @ts-ignore
40
+ size: true,
41
+ },
42
+ })
@@ -0,0 +1,11 @@
1
+ // for elements to avoid spacing
2
+ export function Unspaced(props: { children?: any }) {
3
+ return props.children
4
+ }
5
+
6
+ Unspaced['isUnspaced'] = true
7
+
8
+ export function isUnspaced(child: React.ReactNode) {
9
+ const t = child?.['type']
10
+ return t?.['isVisuallyHidden'] || t?.['isUnspaced']
11
+ }
package/src/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ export { spacedChildren } from './spacedChildren'
2
+ export * from './Spacer'
3
+ export * from './Unspaced'
4
+ export type * from './types'
@@ -0,0 +1,134 @@
1
+ import { createComponent } from '@hanzogui/web'
2
+ import React from 'react'
3
+ import { Spacer } from './Spacer'
4
+ import { isUnspaced } from './Unspaced'
5
+ import type { SpacedChildrenProps } from './types'
6
+
7
+ export function spacedChildren(props: SpacedChildrenProps) {
8
+ const { isZStack, children, space, direction, spaceFlex, separator, ensureKeys } = props
9
+ const hasSpace = !!(space || spaceFlex)
10
+ const hasSeparator = !(separator === undefined || separator === null)
11
+ const areChildrenArray = Array.isArray(children)
12
+
13
+ if (!ensureKeys && !(hasSpace || hasSeparator || isZStack)) {
14
+ return children
15
+ }
16
+
17
+ const childrenList = areChildrenArray
18
+ ? (children as any[])
19
+ : React.Children.toArray(children)
20
+
21
+ const len = childrenList.length
22
+ if (len <= 1 && !isZStack && !childrenList[0]?.['type']?.['shouldForwardSpace']) {
23
+ return children
24
+ }
25
+
26
+ const final: React.ReactNode[] = []
27
+ for (let [index, child] of childrenList.entries()) {
28
+ const isEmpty =
29
+ child === null ||
30
+ child === undefined ||
31
+ (Array.isArray(child) && child.length === 0)
32
+
33
+ // forward space
34
+ if (!isEmpty && React.isValidElement(child) && child.type?.['shouldForwardSpace']) {
35
+ child = React.cloneElement(child, {
36
+ space,
37
+ spaceFlex,
38
+ separator,
39
+ key: child.key,
40
+ } as any)
41
+ }
42
+
43
+ // push them all, but wrap some in Fragment
44
+ if (isEmpty || !child || (child['key'] && !isZStack)) {
45
+ final.push(child)
46
+ } else {
47
+ final.push(
48
+ <React.Fragment key={`${index}0t`}>
49
+ {isZStack ? <AbsoluteFill>{child}</AbsoluteFill> : child}
50
+ </React.Fragment>
51
+ )
52
+ }
53
+
54
+ // first child unspaced avoid insert space
55
+ if (isUnspaced(child) && index === 0) continue
56
+ // no spacing on ZStack
57
+ if (isZStack) continue
58
+
59
+ const next = childrenList[index + 1]
60
+
61
+ if (next && !isEmpty && !isUnspaced(next)) {
62
+ if (separator) {
63
+ if (hasSpace) {
64
+ final.push(
65
+ createSpacer({
66
+ key: `_${index}_00t`,
67
+ direction,
68
+ space,
69
+ spaceFlex,
70
+ })
71
+ )
72
+ }
73
+ final.push(<React.Fragment key={`${index}03t`}>{separator}</React.Fragment>)
74
+ if (hasSpace) {
75
+ final.push(
76
+ createSpacer({
77
+ key: `_${index}01t`,
78
+ direction,
79
+ space,
80
+ spaceFlex,
81
+ })
82
+ )
83
+ }
84
+ } else {
85
+ final.push(
86
+ createSpacer({
87
+ key: `_${index}02t`,
88
+ direction,
89
+ space,
90
+ spaceFlex,
91
+ })
92
+ )
93
+ }
94
+ }
95
+ }
96
+
97
+ if (process.env.NODE_ENV === 'development') {
98
+ if (props.debug) {
99
+ console.info(` Spaced children`, final, props)
100
+ }
101
+ }
102
+
103
+ return final
104
+ }
105
+
106
+ type CreateSpacerProps = SpacedChildrenProps & { key: string }
107
+
108
+ function createSpacer({ key, direction, space, spaceFlex }: CreateSpacerProps) {
109
+ return (
110
+ <Spacer
111
+ key={key}
112
+ // @ts-ignore
113
+ size={space}
114
+ // @ts-ignore
115
+ direction={direction}
116
+ {...(typeof spaceFlex !== 'undefined' && {
117
+ flex: spaceFlex === true ? 1 : spaceFlex === false ? 0 : spaceFlex,
118
+ })}
119
+ />
120
+ )
121
+ }
122
+
123
+ const AbsoluteFill: any = createComponent({
124
+ defaultProps: {
125
+ display: 'flex',
126
+ flexDirection: 'column',
127
+ position: 'absolute',
128
+ top: 0,
129
+ right: 0,
130
+ bottom: 0,
131
+ left: 0,
132
+ pointerEvents: 'box-none',
133
+ },
134
+ })
package/src/types.ts ADDED
@@ -0,0 +1,21 @@
1
+ import type { DebugProp, SpaceTokens, SpaceValue } from '@hanzogui/web'
2
+
3
+ export type SpaceDirection = 'vertical' | 'horizontal' | 'both'
4
+
5
+ export type SpacedChildrenProps = {
6
+ isZStack?: boolean
7
+ children?: React.ReactNode
8
+ space?: SpaceValue
9
+ spaceFlex?: boolean | number
10
+ direction?: SpaceDirection
11
+ separator?: React.ReactNode
12
+ ensureKeys?: boolean
13
+ debug?: DebugProp
14
+ }
15
+
16
+ export type SpaceProps = {
17
+ space?: SpaceTokens | number
18
+ spaceDirection?: SpaceDirection
19
+ separator?: React.ReactNode
20
+ flex?: SpaceTokens | number | boolean
21
+ }
@@ -0,0 +1,2 @@
1
+ export declare const Spacer: any;
2
+ //# sourceMappingURL=Spacer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spacer.d.ts","sourceRoot":"","sources":["../src/Spacer.tsx"],"names":[],"mappings":"AAaA,eAAO,MAAM,MAAM,KA4BjB,CAAA"}
@@ -0,0 +1,8 @@
1
+ export declare function Unspaced(props: {
2
+ children?: any;
3
+ }): any;
4
+ export declare namespace Unspaced {
5
+ var isUnspaced: boolean;
6
+ }
7
+ export declare function isUnspaced(child: React.ReactNode): any;
8
+ //# sourceMappingURL=Unspaced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Unspaced.d.ts","sourceRoot":"","sources":["../src/Unspaced.tsx"],"names":[],"mappings":"AACA,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,OAEjD;yBAFe,QAAQ;;;AAMxB,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,OAGhD"}
@@ -0,0 +1,5 @@
1
+ export { spacedChildren } from './spacedChildren';
2
+ export * from './Spacer';
3
+ export * from './Unspaced';
4
+ export type * from './types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,mBAAmB,SAAS,CAAA"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { SpacedChildrenProps } from './types';
3
+ export declare function spacedChildren(props: SpacedChildrenProps): React.ReactNode;
4
+ //# sourceMappingURL=spacedChildren.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacedChildren.d.ts","sourceRoot":"","sources":["../src/spacedChildren.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAElD,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,mBAiGxD"}