@flighthq/layout 0.3.0 → 0.3.1-next.1041.35b950c

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.
@@ -72,11 +72,11 @@ const flexLayoutResolver = (out, tree, intrinsicSizes, parentIndex, childIndex)
72
72
  return LayoutResolutionFailureKind.InvalidItemStyle;
73
73
  if (wrap === 'nowrap')
74
74
  lineCross = crossSize;
75
- if (wrap === 'wrap-reverse') {
76
- const totalCross = getFlexLinesCrossSize(tree, intrinsicSizes, parentIndex, row, mainSize, gap);
77
- crossOffset = crossSize - totalCross + crossOffset;
78
- }
75
+ const crossReverse = wrap === 'wrap-reverse';
76
+ if (crossReverse)
77
+ crossOffset = crossSize - crossOffset - lineCross;
79
78
  const distributable = mainSize - lineBaseSum - gap * Math.max(0, lineCount - 1);
79
+ const shrinkScale = getFlexShrinkScale(tree, intrinsicSizes, parentIndex, row, lineStartIndex, lineLastIndex, Math.max(0, -distributable), lineShrinkWeight);
80
80
  let usedMain = gap * Math.max(0, lineCount - 1);
81
81
  let targetMainSize = 0;
82
82
  let beforeTarget = 0;
@@ -86,7 +86,7 @@ const flexLayoutResolver = (out, tree, intrinsicSizes, parentIndex, childIndex)
86
86
  continue;
87
87
  const item = node.itemStyle;
88
88
  const base = getFlexBase(node, intrinsicSizes, i, row);
89
- const itemMainSize = getFlexItemMainSize(base, item?.grow ?? 0, item?.shrink ?? 1, distributable, lineGrowSum, lineShrinkWeight);
89
+ const itemMainSize = getFlexItemMainSize(base, item?.grow ?? 0, item?.shrink ?? 1, distributable, lineGrowSum, shrinkScale);
90
90
  if (i === childIndex)
91
91
  targetMainSize = itemMainSize;
92
92
  else if (i < childIndex)
@@ -107,7 +107,7 @@ const flexLayoutResolver = (out, tree, intrinsicSizes, parentIndex, childIndex)
107
107
  let targetCrossSize = getFlexCross(intrinsicSizes, childIndex, row);
108
108
  if (align === 'stretch')
109
109
  targetCrossSize = lineCross;
110
- const targetCross = crossStart + crossOffset + getFlexAlignOffset(align, lineCross, targetCrossSize);
110
+ const targetCross = crossStart + crossOffset + getFlexAlignOffset(align, lineCross, targetCrossSize, crossReverse);
111
111
  const childOffset = childIndex * 4;
112
112
  out[childOffset] = row ? targetMain : targetCross;
113
113
  out[childOffset + 1] = row ? targetCross : targetMain;
@@ -115,29 +115,39 @@ const flexLayoutResolver = (out, tree, intrinsicSizes, parentIndex, childIndex)
115
115
  out[childOffset + 3] = row ? targetCrossSize : targetMainSize;
116
116
  return null;
117
117
  };
118
- function getFlexLinesCrossSize(tree, intrinsicSizes, parentIndex, row, mainSize, gap) {
119
- let lineCount = 0;
120
- let lineUsed = 0;
121
- let lineCross = 0;
122
- let total = 0;
123
- for (let i = 0; i < tree.nodes.length; i++) {
124
- const node = tree.nodes[i];
125
- if (node.parentIndex !== parentIndex)
126
- continue;
127
- const base = getFlexBase(node, intrinsicSizes, i, row);
128
- if (lineCount > 0 && lineUsed + gap + base > mainSize) {
129
- total += lineCross + (total === 0 ? 0 : gap);
130
- lineCount = 0;
131
- lineUsed = 0;
132
- lineCross = 0;
118
+ // Repeatedly freezes items whose weighted reduction reaches zero, then rescales the remaining deficit.
119
+ // This is the flex shrink freeze loop without a temporary item array.
120
+ function getFlexShrinkScale(tree, intrinsicSizes, parentIndex, row, lineStartIndex, lineLastIndex, deficit, initialWeight) {
121
+ if (deficit === 0 || initialWeight === 0)
122
+ return 0;
123
+ let scale = deficit / initialWeight;
124
+ let frozenCount = -1;
125
+ for (;;) {
126
+ let nextFrozenCount = 0;
127
+ let frozenBase = 0;
128
+ let activeWeight = 0;
129
+ for (let i = lineStartIndex; i <= lineLastIndex; i++) {
130
+ const node = tree.nodes[i];
131
+ if (node.parentIndex !== parentIndex)
132
+ continue;
133
+ const item = node.itemStyle;
134
+ const base = getFlexBase(node, intrinsicSizes, i, row);
135
+ const weight = (item?.shrink ?? 1) * base;
136
+ if (weight === 0)
137
+ continue;
138
+ if (scale * weight >= base) {
139
+ frozenBase += base;
140
+ nextFrozenCount++;
141
+ }
142
+ else {
143
+ activeWeight += weight;
144
+ }
133
145
  }
134
- lineUsed += (lineCount === 0 ? 0 : gap) + base;
135
- lineCross = Math.max(lineCross, getFlexCross(intrinsicSizes, i, row));
136
- lineCount++;
146
+ if (nextFrozenCount === frozenCount || activeWeight === 0)
147
+ return scale;
148
+ frozenCount = nextFrozenCount;
149
+ scale = Math.max(0, deficit - frozenBase) / activeWeight;
137
150
  }
138
- if (lineCount > 0)
139
- total += lineCross + (total === 0 ? 0 : gap);
140
- return total;
141
151
  }
142
152
  function getFlexBase(node, intrinsicSizes, nodeIndex, row) {
143
153
  const item = node.itemStyle;
@@ -147,12 +157,11 @@ function getFlexBase(node, intrinsicSizes, nodeIndex, row) {
147
157
  function getFlexCross(intrinsicSizes, nodeIndex, row) {
148
158
  return finiteSize(intrinsicSizes[nodeIndex * 2 + (row ? 1 : 0)]);
149
159
  }
150
- function getFlexItemMainSize(base, grow, shrink, distributable, growSum, shrinkWeight) {
160
+ function getFlexItemMainSize(base, grow, shrink, distributable, growSum, shrinkScale) {
151
161
  if (distributable > 0 && growSum > 0)
152
162
  return base + (distributable * grow) / growSum;
153
- if (distributable < 0 && shrinkWeight > 0) {
154
- return Math.max(0, base + (distributable * shrink * base) / shrinkWeight);
155
- }
163
+ if (distributable < 0)
164
+ return Math.max(0, base - shrinkScale * shrink * base);
156
165
  return base;
157
166
  }
158
167
  function countFlexSiblings(tree, parentIndex, startIndex, endIndex) {
@@ -182,11 +191,11 @@ function getFlexJustifyOffset(justify, free, distributedGap) {
182
191
  return distributedGap;
183
192
  return 0;
184
193
  }
185
- function getFlexAlignOffset(align, available, size) {
186
- if (align === 'end')
187
- return available - size;
194
+ function getFlexAlignOffset(align, available, size, reverse) {
188
195
  if (align === 'center')
189
196
  return (available - size) / 2;
197
+ if (align === (reverse ? 'start' : 'end'))
198
+ return available - size;
190
199
  return 0;
191
200
  }
192
201
  function isFlexLayoutContainerStyle(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"flexLayout.js","sourceRoot":"","sources":["../src/flexLayout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flexLayout.js","sourceRoot":"","sources":["../src/flexLayout.ts"],"names":[],"mappings":"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"}
@@ -98,7 +98,15 @@ function getGridAutoTrackSize(tree, intrinsicSizes, parentIndex, container, colu
98
98
  autoTracksInSpan++;
99
99
  }
100
100
  if (autoTracksInSpan > 0) {
101
- size = Math.max(size, finiteSize(intrinsicSizes[i * 2 + (columns ? 0 : 1)]) / autoTracksInSpan);
101
+ let remainingIntrinsic = finiteSize(intrinsicSizes[i * 2 + (columns ? 0 : 1)]);
102
+ const gap = columns ? (container.columnGap ?? 0) : (container.rowGap ?? 0);
103
+ remainingIntrinsic -= gap * Math.max(0, span - 1);
104
+ for (let j = start; j < start + span && j < tracks.length; j++) {
105
+ const candidate = tracks[j];
106
+ if (candidate.kind === 'fixed')
107
+ remainingIntrinsic -= candidate.size;
108
+ }
109
+ size = Math.max(size, Math.max(0, remainingIntrinsic) / autoTracksInSpan);
102
110
  }
103
111
  }
104
112
  return size;
@@ -1 +1 @@
1
- {"version":3,"file":"gridLayout.js","sourceRoot":"","sources":["../src/gridLayout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gridLayout.js","sourceRoot":"","sources":["../src/gridLayout.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAEvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,MAAM,UAAU,0BAA0B,CAAC,KAA4B;IACrE,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,kBAAkB,GAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;IAChG,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC;IAC9D,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC;QAAE,OAAO,2BAA2B,CAAC,qBAAqB,CAAC;IAC1G,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;IACnD,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;QAAE,OAAO,2BAA2B,CAAC,gBAAgB,CAAC;IAE3F,MAAM,SAAS,GAAG,cAAoD,CAAC;IACvE,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtF,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,SAAiD,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC;IACnC,IACE,MAAM,GAAG,CAAC;QACV,GAAG,GAAG,CAAC;QACP,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM;QAC9C,GAAG,GAAG,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EACrC,CAAC;QACD,OAAO,2BAA2B,CAAC,gBAAgB,CAAC;IACtD,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,IAAI,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC;IACvF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,UAAU,GAAG,aAAa,CAAC,CAAC;IACxF,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC;IAEnC,IAAI,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QACxG,CAAC,IAAI,SAAS,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;IACpD,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,KAAK,IAAI,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IAC9G,CAAC;IAED,IAAI,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;QACvG,CAAC,IAAI,MAAM,CAAC;IACd,CAAC;IACD,IAAI,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAC9G,CAAC;IAED,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACrB,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAC7B,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,SAAS,gBAAgB,CACvB,IAA0B,EAC1B,cAAiC,EACjC,WAAmB,EACnB,SAA6C,EAC7C,OAAgB,EAChB,UAAkB,EAClB,aAAqB,EACrB,GAAW;IAEX,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpD,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO;YAAE,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC;aACtD,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,QAAQ,IAAI,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7F,CAAC;;YAAM,aAAa,IAAI,SAAS,CAAC,QAAQ,CAAC;IAC7C,CAAC;IACD,OAAO,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;AAC5G,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAA0B,EAC1B,cAAiC,EACjC,WAAmB,EACnB,SAA6C,EAC7C,OAAgB,EAChB,UAAkB;IAElB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5D,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,SAAS;QACzF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAiD,CAAC;QACpE,MAAM,KAAK,GAAG,OAAO;YACnB,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/D,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;QACtE,IAAI,UAAU,GAAG,KAAK,IAAI,UAAU,IAAI,KAAK,GAAG,IAAI;YAAE,SAAS;QAC/D,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/D,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM;gBAAE,gBAAgB,EAAE,CAAC;QACpD,CAAC;QACD,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,kBAAkB,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YAC3E,kBAAkB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YAClD,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO;oBAAE,kBAAkB,IAAI,SAAS,CAAC,IAAI,CAAC;YACvE,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CACpB,IAA0B,EAC1B,WAAmB,EACnB,UAAkB,EAClB,WAAmB;IAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,SAAiD,CAAC;IACtF,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IACnD,OAAO,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC;AACrE,CAAC;AAED,SAAS,UAAU,CAAC,IAA0B,EAAE,WAAmB,EAAE,UAAkB,EAAE,WAAmB;IAC1G,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,SAAiD,CAAC;IACtF,IAAI,IAAI,EAAE,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,cAAc,CAAC,IAA0B,EAAE,WAAmB,EAAE,UAAkB;IACzF,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW;YAAE,OAAO,EAAE,CAAC;IAC9F,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAoB;IACtD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,KAA0C,CAAC;IACzD,OAAO,CACL,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1B,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,2BAA2B,CAAC,KAAK,CAAC,SAAS,CAAC;QAC5C,2BAA2B,CAAC,KAAK,CAAC,aAAa,CAAC;QAChD,2BAA2B,CAAC,KAAK,CAAC,WAAW,CAAC;QAC9C,2BAA2B,CAAC,KAAK,CAAC,YAAY,CAAC;QAC/C,2BAA2B,CAAC,KAAK,CAAC,UAAU,CAAC;QAC7C,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9D,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC9D,MAAM,SAAS,GAAG,KAAiC,CAAC;QACpD,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QACxC,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,SAAS;QAChF,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,IAAI,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC;YAAE,SAAS;QACpF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAoB;IACjD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,KAAqC,CAAC;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;IAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC;IACvC,OAAO,CACL,SAAS,KAAK,MAAM;QACpB,4BAA4B,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1C,yBAAyB,CAAC,KAAK,CAAC,UAAU,CAAC;QAC3C,4BAA4B,CAAC,KAAK,CAAC,GAAG,CAAC;QACvC,yBAAyB,CAAC,KAAK,CAAC,OAAO,CAAC,CACzC,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAc;IACjD,OAAO,KAAK,KAAK,SAAS,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAc;IAClD,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAK,KAAgB,IAAI,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAK,KAAgB,GAAG,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/layout",
3
- "version": "0.3.0",
3
+ "version": "0.3.1-next.1041.35b950c",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,7 +38,7 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/types": "0.3.0"
41
+ "@flighthq/types": "0.3.1-next.1041.35b950c"
42
42
  },
43
43
  "devDependencies": {
44
44
  "typescript": "^5.3.0"
@@ -18,9 +18,18 @@ function resolve(nodes: LayoutNode[], intrinsicSizes: number[], width = 200, hei
18
18
  }
19
19
 
20
20
  describe('registerAnchorLayoutResolver', () => {
21
- it('aligns a natural-size child with the existing viewport vocabulary', () => {
22
- const out = resolve([node(-1), node(0, { align: 'bottomright' })], [0, 0, 40, 20]);
23
- expect([...out.slice(4)]).toEqual([160, 80, 40, 20]);
21
+ it.each([
22
+ ['top', 87, 0],
23
+ ['bottom', 87, 108],
24
+ ['left', 0, 54],
25
+ ['right', 174, 54],
26
+ ['topleft', 0, 0],
27
+ ['topright', 174, 0],
28
+ ['bottomleft', 0, 108],
29
+ ['bottomright', 174, 108],
30
+ ] as const)('aligns a natural-size child to %s', (align, x, y) => {
31
+ const out = resolve([node(-1), node(0, { align })], [0, 0, 37, 19], 211, 127);
32
+ expect([...out.slice(4)]).toEqual([x, y, 37, 19]);
24
33
  });
25
34
 
26
35
  it('stretches between opposing pins as the available rect changes', () => {
@@ -34,13 +43,25 @@ describe('registerAnchorLayoutResolver', () => {
34
43
  expect([...out.slice(4)]).toEqual([12, 80, 30, 20]);
35
44
  });
36
45
 
46
+ it('positions from right and bottom pins on asymmetric axes', () => {
47
+ const out = resolve([node(-1), node(0, { bottom: 13, right: 11 })], [0, 0, 37, 19], 211, 127);
48
+ expect([...out.slice(4)]).toEqual([163, 95, 37, 19]);
49
+ });
50
+
51
+ it('normalizes invalid intrinsic sizes for a null item style', () => {
52
+ const out = resolve([node(-1), node(0)], [0, 0, Number.NaN, -1], 211, 127);
53
+ expect([...out.slice(4)]).toEqual([0, 0, 0, 0]);
54
+ });
55
+
37
56
  it('propagates nested rectangles in one parent-before-child pass', () => {
38
57
  const out = resolve(
39
- [node(-1), node(0, { bottom: 10, left: 10, right: 10, top: 10 }), node(1, { align: 'bottomright' })],
40
- [0, 0, 0, 0, 20, 15],
58
+ [node(-1), node(0, { bottom: 17, left: 13, right: 29, top: 7 }), node(1, { align: 'bottomright' })],
59
+ [0, 0, 0, 0, 31, 19],
60
+ 211,
61
+ 127,
41
62
  );
42
- expect([...out.slice(4, 8)]).toEqual([10, 10, 180, 80]);
43
- expect([...out.slice(8)]).toEqual([170, 75, 20, 15]);
63
+ expect([...out.slice(4, 8)]).toEqual([13, 7, 169, 103]);
64
+ expect([...out.slice(8)]).toEqual([151, 91, 31, 19]);
44
65
  });
45
66
 
46
67
  it('rejects a style shape its parent resolver cannot interpret', () => {
@@ -50,4 +71,12 @@ describe('registerAnchorLayoutResolver', () => {
50
71
  expect(resolveLayoutTree(new Float32Array(8), state, input, new Float32Array(4), 100, 100)).toBe(false);
51
72
  expect(explainLayoutResolution(state, input, 1)?.kind).toBe('InvalidItemStyle');
52
73
  });
74
+
75
+ it('rejects a non-empty anchor container style', () => {
76
+ const input: LayoutTree = { nodes: [{ ...node(-1), containerStyle: { unexpected: true } }, node(0)] };
77
+ const state = createLayoutState();
78
+ registerAnchorLayoutResolver(state);
79
+ expect(resolveLayoutTree(new Float32Array(8), state, input, new Float32Array(4), 100, 100)).toBe(false);
80
+ expect(explainLayoutResolution(state, input, 0)?.kind).toBe('InvalidContainerStyle');
81
+ });
53
82
  });
@@ -40,6 +40,115 @@ describe('registerFlexLayoutResolver', () => {
40
40
  expect(out[10]).toBe(50);
41
41
  });
42
42
 
43
+ it('redistributes shrink deficit after an item reaches zero', () => {
44
+ const out = resolve(
45
+ [root({ align: 'start' }), child({ basis: 100, shrink: 10 }), child({ basis: 100, shrink: 1 })],
46
+ [0, 0, 0, 10, 0, 20],
47
+ 50,
48
+ );
49
+ expect([...out.slice(4, 8)]).toEqual([0, 0, 0, 10]);
50
+ expect([...out.slice(8)]).toEqual([0, 0, 50, 20]);
51
+ });
52
+
53
+ it('preserves an item whose shrink factor is zero', () => {
54
+ const out = resolve(
55
+ [root({ align: 'start' }), child({ basis: 80, shrink: 0 }), child({ basis: 80, shrink: 1 })],
56
+ [0, 0, 0, 10, 0, 20],
57
+ 100,
58
+ );
59
+ expect([...out.slice(4, 8)]).toEqual([0, 0, 80, 10]);
60
+ expect([...out.slice(8)]).toEqual([80, 0, 20, 20]);
61
+ });
62
+
63
+ it('preserves overflow when every shrink factor is zero', () => {
64
+ const out = resolve(
65
+ [root({ align: 'start' }), child({ basis: 80, shrink: 0 }), child({ basis: 60, shrink: 0 })],
66
+ [0, 0, 0, 10, 0, 20],
67
+ 100,
68
+ );
69
+ expect([...out.slice(4, 8)]).toEqual([0, 0, 80, 10]);
70
+ expect([...out.slice(8)]).toEqual([80, 0, 60, 20]);
71
+ });
72
+
73
+ it('distinguishes a zero basis from basis-auto', () => {
74
+ const out = resolve(
75
+ [root({ align: 'start', justify: 'end' }), child({ basis: 0 }), child({ basis: 20 })],
76
+ [0, 0, 30, 10, 0, 20],
77
+ 50,
78
+ );
79
+ expect([...out.slice(4, 8)]).toEqual([30, 0, 0, 10]);
80
+ expect([...out.slice(8)]).toEqual([30, 0, 20, 20]);
81
+ });
82
+
83
+ it('accepts explicit zero numeric fields and an empty item style', () => {
84
+ const out = resolve(
85
+ [
86
+ root({
87
+ gap: 0,
88
+ paddingBottom: 0,
89
+ paddingLeft: 0,
90
+ paddingRight: 0,
91
+ paddingTop: 0,
92
+ }),
93
+ child({ basis: 0, grow: 0, shrink: 0 }),
94
+ child({}),
95
+ ],
96
+ [0, 0, 30, 10, 20, 17],
97
+ 100,
98
+ 70,
99
+ );
100
+ expect([...out.slice(4, 8)]).toEqual([0, 0, 0, 70]);
101
+ expect([...out.slice(8)]).toEqual([0, 0, 20, 70]);
102
+ });
103
+
104
+ it('stretches a null item style across the default cross axis', () => {
105
+ const out = resolve([root(), child()], [0, 0, 20, 10], 137, 83);
106
+ expect([...out.slice(4)]).toEqual([0, 0, 20, 83]);
107
+ });
108
+
109
+ it('uses container alignment for an explicit auto align-self', () => {
110
+ const out = resolve([root({ align: 'end' }), child({ alignSelf: 'auto' })], [0, 0, 20, 17], 137, 83);
111
+ expect([...out.slice(4)]).toEqual([0, 66, 20, 17]);
112
+ });
113
+
114
+ it('uses the default shrink factor in weighted overflow', () => {
115
+ const out = resolve(
116
+ [root({ align: 'start' }), child({ basis: 80 }), child({ basis: 80, shrink: 2 })],
117
+ [0, 0, 0, 10, 0, 20],
118
+ 100,
119
+ );
120
+ expect(out[6]).toBe(60);
121
+ expect(out[8]).toBe(60);
122
+ expect(out[10]).toBe(40);
123
+ });
124
+
125
+ it('keeps one item at main-start for space-between', () => {
126
+ const out = resolve([root({ align: 'start', justify: 'space-between' }), child({ basis: 20 })], [0, 0, 0, 10]);
127
+ expect([...out.slice(4)]).toEqual([0, 0, 20, 10]);
128
+ });
129
+
130
+ it('normalizes an invalid intrinsic basis while honoring explicit stretch', () => {
131
+ const out = resolve([root({ align: 'stretch' }), child()], [0, 0, Number.NaN, -1], 137, 83);
132
+ expect([...out.slice(4)]).toEqual([0, 0, 0, 83]);
133
+ });
134
+
135
+ it.each([
136
+ ['start', 0, 10],
137
+ ['end', 70, 80],
138
+ ['center', 35, 45],
139
+ ['space-between', 0, 80],
140
+ ['space-around', 17.5, 62.5],
141
+ ['space-evenly', 70 / 3, 170 / 3],
142
+ ] as const)('applies %s main-axis justification', (justify, firstX, secondX) => {
143
+ const out = resolve(
144
+ [root({ align: 'start', justify }), child({ basis: 10 }), child({ basis: 20 })],
145
+ [0, 0, 0, 10, 0, 20],
146
+ 100,
147
+ );
148
+ expect(out[4]).toBeCloseTo(firstX);
149
+ expect(out[8]).toBeCloseTo(secondX);
150
+ });
151
+
43
152
  it('applies padding, gap, justify, and cross-axis alignment', () => {
44
153
  const out = resolve(
45
154
  [
@@ -63,6 +172,102 @@ describe('registerFlexLayoutResolver', () => {
63
172
  expect([...out.slice(8)]).toEqual([80, 50, 30, 20]);
64
173
  });
65
174
 
175
+ it('deducts asymmetric opposing padding from grown and stretched content', () => {
176
+ const out = resolve(
177
+ [
178
+ root({
179
+ paddingBottom: 17,
180
+ paddingLeft: 13,
181
+ paddingRight: 29,
182
+ paddingTop: 7,
183
+ }),
184
+ child({ grow: 1 }),
185
+ ],
186
+ [0, 0, 0, 0],
187
+ 211,
188
+ 127,
189
+ );
190
+ expect([...out.slice(4)]).toEqual([13, 7, 169, 103]);
191
+ });
192
+
193
+ it('deducts asymmetric opposing padding for column layout', () => {
194
+ const out = resolve(
195
+ [
196
+ root({
197
+ direction: 'column',
198
+ paddingBottom: 17,
199
+ paddingLeft: 13,
200
+ paddingRight: 29,
201
+ paddingTop: 7,
202
+ }),
203
+ child({ grow: 1 }),
204
+ ],
205
+ [0, 0, 0, 0],
206
+ 211,
207
+ 127,
208
+ );
209
+ expect([...out.slice(4)]).toEqual([13, 7, 169, 103]);
210
+ });
211
+
212
+ it('deducts gaps before distributing growth', () => {
213
+ const out = resolve(
214
+ [root({ align: 'start', gap: 10 }), child({ basis: 10, grow: 1 }), child({ basis: 10, grow: 1 })],
215
+ [0, 0, 0, 11, 0, 23],
216
+ 100,
217
+ 70,
218
+ );
219
+ expect([...out.slice(4, 8)]).toEqual([0, 0, 45, 11]);
220
+ expect([...out.slice(8)]).toEqual([55, 0, 45, 23]);
221
+ });
222
+
223
+ it('keeps exact-fit items together when wrapping', () => {
224
+ const out = resolve(
225
+ [root({ align: 'start', gap: 10, wrap: 'wrap' }), child({ basis: 40 }), child({ basis: 50 })],
226
+ [0, 0, 0, 11, 0, 23],
227
+ 100,
228
+ 70,
229
+ );
230
+ expect([...out.slice(4, 8)]).toEqual([0, 0, 40, 11]);
231
+ expect([...out.slice(8)]).toEqual([50, 0, 50, 23]);
232
+ });
233
+
234
+ it('wraps when the gap alone pushes the next item past the line', () => {
235
+ const out = resolve(
236
+ [root({ align: 'start', gap: 10, wrap: 'wrap' }), child({ basis: 50 }), child({ basis: 45 })],
237
+ [0, 0, 0, 11, 0, 23],
238
+ 100,
239
+ 70,
240
+ );
241
+ expect([...out.slice(4, 8)]).toEqual([0, 0, 50, 11]);
242
+ expect([...out.slice(8)]).toEqual([0, 21, 45, 23]);
243
+ });
244
+
245
+ it('keeps an oversized first item at the first cross-axis position', () => {
246
+ const out = resolve(
247
+ [root({ align: 'start', gap: 10, wrap: 'wrap' }), child({ basis: 120 })],
248
+ [0, 0, 0, 17],
249
+ 100,
250
+ 70,
251
+ );
252
+ expect([...out.slice(4)]).toEqual([0, 0, 100, 17]);
253
+ });
254
+
255
+ it('distributes space-between across more than two items', () => {
256
+ const out = resolve(
257
+ [
258
+ root({ align: 'start', justify: 'space-between' }),
259
+ child({ basis: 10 }),
260
+ child({ basis: 10 }),
261
+ child({ basis: 10 }),
262
+ ],
263
+ [0, 0, 0, 10, 0, 20, 0, 30],
264
+ 100,
265
+ );
266
+ expect(out[4]).toBe(0);
267
+ expect(out[8]).toBe(45);
268
+ expect(out[12]).toBe(90);
269
+ });
270
+
66
271
  it('supports column-reverse without changing item role semantics', () => {
67
272
  const out = resolve(
68
273
  [root({ align: 'start', direction: 'column-reverse', gap: 5 }), child(), child()],
@@ -74,7 +279,75 @@ describe('registerFlexLayoutResolver', () => {
74
279
  expect([...out.slice(8)]).toEqual([0, 30, 30, 15]);
75
280
  });
76
281
 
77
- it('wraps lines and supports wrap-reverse', () => {
282
+ it('supports row-reverse without transposing the cross axis', () => {
283
+ const out = resolve(
284
+ [root({ align: 'start', direction: 'row-reverse', gap: 5 }), child(), child()],
285
+ [0, 0, 10, 17, 20, 23],
286
+ 100,
287
+ 70,
288
+ );
289
+ expect([...out.slice(4, 8)]).toEqual([90, 0, 10, 17]);
290
+ expect([...out.slice(8)]).toEqual([65, 0, 20, 23]);
291
+ });
292
+
293
+ it('applies a nonzero justify offset from row-reverse main-start', () => {
294
+ const out = resolve(
295
+ [root({ align: 'start', direction: 'row-reverse', justify: 'center' }), child({ basis: 20 })],
296
+ [0, 0, 0, 17],
297
+ 100,
298
+ 70,
299
+ );
300
+ expect([...out.slice(4)]).toEqual([40, 0, 20, 17]);
301
+ });
302
+
303
+ it('resolves a nested column from an asymmetric flex parent rectangle', () => {
304
+ const nodes: LayoutNode[] = [
305
+ root({
306
+ align: 'start',
307
+ paddingBottom: 5,
308
+ paddingLeft: 11,
309
+ paddingRight: 13,
310
+ paddingTop: 7,
311
+ }),
312
+ {
313
+ containerStyle: {
314
+ align: 'start',
315
+ direction: 'column',
316
+ paddingBottom: 5,
317
+ paddingLeft: 3,
318
+ paddingRight: 7,
319
+ paddingTop: 4,
320
+ },
321
+ itemStyle: { basis: 100 },
322
+ kind: FlexLayoutKind,
323
+ parentIndex: 0,
324
+ },
325
+ { ...child({ basis: 20 }), parentIndex: 1 },
326
+ ];
327
+ const out = resolve(nodes, [0, 0, 0, 60, 17, 0], 200, 100);
328
+ expect([...out.slice(4, 8)]).toEqual([11, 7, 100, 60]);
329
+ expect([...out.slice(8)]).toEqual([14, 11, 17, 20]);
330
+ });
331
+
332
+ it('skips interleaved descendants when positioning later siblings', () => {
333
+ const nodes: LayoutNode[] = [
334
+ root({ align: 'start' }),
335
+ {
336
+ containerStyle: { align: 'start' },
337
+ itemStyle: { basis: 20 },
338
+ kind: FlexLayoutKind,
339
+ parentIndex: 0,
340
+ },
341
+ { ...child({ basis: 5 }), parentIndex: 1 },
342
+ child({ basis: 30 }),
343
+ ];
344
+ const out = resolve(nodes, [0, 0, 0, 10, 0, 4, 0, 17], 40, 60);
345
+ expect([...out.slice(4, 8)]).toEqual([0, 0, 16, 10]);
346
+ expect([...out.slice(8, 12)]).toEqual([0, 0, 5, 4]);
347
+ expect([...out.slice(12)]).toEqual([16, 0, 24, 17]);
348
+ });
349
+
350
+ it('wraps lines and reverses their cross-axis direction for wrap-reverse', () => {
78
351
  const normal = resolve(
79
352
  [root({ align: 'start', gap: 5, wrap: 'wrap' }), child({ basis: 60 }), child({ basis: 60 })],
80
353
  [0, 0, 0, 10, 0, 20],
@@ -90,8 +363,38 @@ describe('registerFlexLayoutResolver', () => {
90
363
  100,
91
364
  80,
92
365
  );
93
- expect(reversed[5]).toBe(45);
94
- expect(reversed[9]).toBe(60);
366
+ expect(reversed[5]).toBe(70);
367
+ expect(reversed[9]).toBe(45);
368
+
369
+ const column = resolve(
370
+ [
371
+ root({ align: 'start', direction: 'column', gap: 5, wrap: 'wrap-reverse' }),
372
+ child({ basis: 60 }),
373
+ child({ basis: 60 }),
374
+ ],
375
+ [0, 0, 10, 0, 20, 0],
376
+ 90,
377
+ 100,
378
+ );
379
+ expect([...column.slice(4, 8)]).toEqual([80, 0, 10, 60]);
380
+ expect([...column.slice(8)]).toEqual([55, 0, 20, 60]);
381
+ });
382
+
383
+ it('reverses start and end alignment within wrap-reverse lines', () => {
384
+ const out = resolve(
385
+ [
386
+ root({ align: 'start', gap: 5, wrap: 'wrap-reverse' }),
387
+ child({ basis: 40 }),
388
+ child({ alignSelf: 'end', basis: 40 }),
389
+ child({ basis: 60 }),
390
+ ],
391
+ [0, 0, 0, 10, 0, 20, 0, 30],
392
+ 100,
393
+ 90,
394
+ );
395
+ expect([...out.slice(4, 8)]).toEqual([0, 80, 40, 10]);
396
+ expect([...out.slice(8, 12)]).toEqual([45, 70, 40, 20]);
397
+ expect([...out.slice(12)]).toEqual([0, 35, 60, 30]);
95
398
  });
96
399
 
97
400
  it('returns a diagnosable sentinel for mismatched styles', () => {
@@ -101,4 +404,42 @@ describe('registerFlexLayoutResolver', () => {
101
404
  expect(resolveLayoutTree(new Float32Array(8), state, { nodes }, new Float32Array(4), 100, 100)).toBe(false);
102
405
  expect(explainLayoutResolution(state, { nodes }, 1)?.kind).toBe('InvalidItemStyle');
103
406
  });
407
+
408
+ it('rejects an invalid container enum', () => {
409
+ const nodes = [{ ...root(), containerStyle: { direction: 'diagonal' } }, child()];
410
+ const state = createLayoutState();
411
+ registerFlexLayoutResolver(state);
412
+ expect(resolveLayoutTree(new Float32Array(8), state, { nodes }, new Float32Array(4), 100, 100)).toBe(false);
413
+ expect(explainLayoutResolution(state, { nodes }, 0)?.kind).toBe('InvalidContainerStyle');
414
+ });
415
+
416
+ it.each([
417
+ { align: 'middle' },
418
+ { gap: -1 },
419
+ { justify: 'edges' },
420
+ { paddingBottom: Number.POSITIVE_INFINITY },
421
+ { wrap: 'reverse' },
422
+ ])('rejects malformed container field %#', (containerStyle) => {
423
+ const nodes = [{ ...root(), containerStyle }, child()];
424
+ const state = createLayoutState();
425
+ registerFlexLayoutResolver(state);
426
+ expect(resolveLayoutTree(new Float32Array(8), state, { nodes }, new Float32Array(4), 100, 100)).toBe(false);
427
+ expect(explainLayoutResolution(state, { nodes }, 0)?.kind).toBe('InvalidContainerStyle');
428
+ });
429
+
430
+ it.each([{ alignSelf: 'middle' }, { basis: -1 }, { grow: -1 }, { shrink: Number.NaN }])(
431
+ 'rejects malformed item field %#',
432
+ (itemStyle) => {
433
+ const nodes = [root(), { ...child(), itemStyle }];
434
+ const state = createLayoutState();
435
+ registerFlexLayoutResolver(state);
436
+ expect(resolveLayoutTree(new Float32Array(8), state, { nodes }, new Float32Array(4), 100, 100)).toBe(false);
437
+ expect(explainLayoutResolution(state, { nodes }, 1)?.kind).toBe('InvalidItemStyle');
438
+ },
439
+ );
440
+
441
+ it('normalizes positive infinity in an intrinsic basis', () => {
442
+ const out = resolve([root({ align: 'start' }), child()], [0, 0, Number.POSITIVE_INFINITY, 17], 100, 70);
443
+ expect([...out.slice(4)]).toEqual([0, 0, 0, 17]);
444
+ });
104
445
  });
@@ -41,6 +41,27 @@ describe('registerGridLayoutResolver', () => {
41
41
  expect([...out.slice(12)]).toEqual([90, 0, 110, 25]);
42
42
  });
43
43
 
44
+ it('distributes space in proportion to unequal fraction tracks', () => {
45
+ const out = resolve(
46
+ [
47
+ root({
48
+ columns: [
49
+ { fraction: 1, kind: 'fraction' },
50
+ { fraction: 2, kind: 'fraction' },
51
+ ],
52
+ rows: [{ kind: 'fixed', size: 10 }],
53
+ }),
54
+ child({ column: 0, row: 0 }),
55
+ child({ column: 1, row: 0 }),
56
+ ],
57
+ new Array(6).fill(0),
58
+ 180,
59
+ 70,
60
+ );
61
+ expect([...out.slice(4, 8)]).toEqual([0, 0, 60, 10]);
62
+ expect([...out.slice(8)]).toEqual([60, 0, 120, 10]);
63
+ });
64
+
44
65
  it('assigns omitted placement row-major', () => {
45
66
  const out = resolve(
46
67
  [
@@ -67,6 +88,26 @@ describe('registerGridLayoutResolver', () => {
67
88
  expect([...out.slice(12)]).toEqual([0, 14, 20, 15]);
68
89
  });
69
90
 
91
+ it('accepts explicit zero container fields and an empty item style', () => {
92
+ const out = resolve(
93
+ [
94
+ root({
95
+ columnGap: 0,
96
+ columns: [{ kind: 'fixed', size: 0 }],
97
+ paddingBottom: 0,
98
+ paddingLeft: 0,
99
+ paddingRight: 0,
100
+ paddingTop: 0,
101
+ rowGap: 0,
102
+ rows: [{ kind: 'fixed', size: 0 }],
103
+ }),
104
+ child({}),
105
+ ],
106
+ new Array(4).fill(0),
107
+ );
108
+ expect([...out.slice(4)]).toEqual([0, 0, 0, 0]);
109
+ });
110
+
70
111
  it('supports spans, padding, and independent gaps', () => {
71
112
  const out = resolve(
72
113
  [
@@ -102,6 +143,125 @@ describe('registerGridLayoutResolver', () => {
102
143
  expect([...out.slice(4)]).toEqual([0, 0, 80, 20]);
103
144
  });
104
145
 
146
+ it('deducts fixed tracks and gaps from a spanning intrinsic contribution', () => {
147
+ const out = resolve(
148
+ [
149
+ root({
150
+ columnGap: 10,
151
+ columns: [{ kind: 'auto' }, { kind: 'fixed', size: 30 }],
152
+ rowGap: 5,
153
+ rows: [{ kind: 'auto' }, { kind: 'fixed', size: 20 }],
154
+ }),
155
+ child({ column: 0, columnSpan: 2, row: 0, rowSpan: 2 }),
156
+ ],
157
+ [0, 0, 100, 70],
158
+ 173,
159
+ 119,
160
+ );
161
+ expect([...out.slice(4)]).toEqual([0, 0, 100, 70]);
162
+ });
163
+
164
+ it('does not deduct tracks outside an intrinsic item span', () => {
165
+ const out = resolve(
166
+ [
167
+ root({ columns: [{ kind: 'auto' }, { kind: 'fixed', size: 30 }], rows: [{ kind: 'auto' }] }),
168
+ child({ column: 0, row: 0 }),
169
+ ],
170
+ [0, 0, 100, 17],
171
+ 173,
172
+ 119,
173
+ );
174
+ expect([...out.slice(4)]).toEqual([0, 0, 100, 17]);
175
+ });
176
+
177
+ it('keeps intrinsic row and column sizing on their distinct axes', () => {
178
+ const out = resolve(
179
+ [
180
+ root({
181
+ columnGap: 7,
182
+ columns: [{ kind: 'auto' }, { kind: 'auto' }],
183
+ rowGap: 5,
184
+ rows: [{ kind: 'auto' }, { kind: 'auto' }],
185
+ }),
186
+ child({ column: 0, row: 0 }),
187
+ child({ column: 1, row: 0 }),
188
+ child({ column: 0, row: 1 }),
189
+ ],
190
+ [0, 0, 70, 11, 23, 31, 41, 47],
191
+ 173,
192
+ 119,
193
+ );
194
+ expect([...out.slice(4, 8)]).toEqual([0, 0, 70, 31]);
195
+ expect([...out.slice(8, 12)]).toEqual([77, 0, 23, 31]);
196
+ expect([...out.slice(12)]).toEqual([0, 36, 70, 47]);
197
+ });
198
+
199
+ it('normalizes invalid intrinsic sizes for auto tracks', () => {
200
+ const out = resolve(
201
+ [root({ columns: [{ kind: 'auto' }], rows: [{ kind: 'auto' }] }), child()],
202
+ [0, 0, Number.NaN, -1],
203
+ 173,
204
+ 119,
205
+ );
206
+ expect([...out.slice(4)]).toEqual([0, 0, 0, 0]);
207
+ });
208
+
209
+ it('normalizes positive infinity in auto-track intrinsic sizes', () => {
210
+ const out = resolve(
211
+ [root({ columns: [{ kind: 'auto' }], rows: [{ kind: 'auto' }] }), child()],
212
+ [0, 0, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY],
213
+ 173,
214
+ 119,
215
+ );
216
+ expect([...out.slice(4)]).toEqual([0, 0, 0, 0]);
217
+ });
218
+
219
+ it('resolves nested fractional rows and columns from asymmetric parent rectangles', () => {
220
+ const nodes: LayoutNode[] = [
221
+ root({
222
+ columnGap: 5,
223
+ columns: [
224
+ { kind: 'fixed', size: 30 },
225
+ { fraction: 1, kind: 'fraction' },
226
+ ],
227
+ paddingBottom: 17,
228
+ paddingLeft: 7,
229
+ paddingRight: 13,
230
+ paddingTop: 11,
231
+ rowGap: 3,
232
+ rows: [
233
+ { kind: 'fixed', size: 20 },
234
+ { fraction: 2, kind: 'fraction' },
235
+ ],
236
+ }),
237
+ {
238
+ containerStyle: {
239
+ columnGap: 2,
240
+ columns: [
241
+ { fraction: 1, kind: 'fraction' },
242
+ { kind: 'fixed', size: 20 },
243
+ ],
244
+ paddingBottom: 8,
245
+ paddingLeft: 4,
246
+ paddingRight: 9,
247
+ paddingTop: 6,
248
+ rowGap: 5,
249
+ rows: [
250
+ { kind: 'fixed', size: 10 },
251
+ { fraction: 3, kind: 'fraction' },
252
+ ],
253
+ },
254
+ itemStyle: { column: 1, row: 1 },
255
+ kind: GridLayoutKind,
256
+ parentIndex: 0,
257
+ },
258
+ { ...child({ column: 0, row: 1 }), parentIndex: 1 },
259
+ ];
260
+ const out = resolve(nodes, new Array(6).fill(0), 200, 130);
261
+ expect([...out.slice(4, 8)]).toEqual([42, 34, 145, 79]);
262
+ expect([...out.slice(8)]).toEqual([46, 55, 110, 50]);
263
+ });
264
+
105
265
  it('returns diagnosable sentinels for mismatched container and item styles', () => {
106
266
  const invalidContainerNodes = [
107
267
  { ...root({ columns: [{ kind: 'auto' }], rows: [{ kind: 'auto' }] }), containerStyle: { columns: [] } },
@@ -120,4 +280,54 @@ describe('registerGridLayoutResolver', () => {
120
280
  ).toBe(false);
121
281
  expect(explainLayoutResolution(state, { nodes: invalidItemNodes }, 1)?.kind).toBe('InvalidItemStyle');
122
282
  });
283
+
284
+ it('rejects a span that exceeds the explicit grid', () => {
285
+ const nodes = [
286
+ root({ columns: [{ kind: 'auto' }, { kind: 'auto' }], rows: [{ kind: 'auto' }] }),
287
+ child({ column: 1, columnSpan: 2, row: 0 }),
288
+ ];
289
+ const state = createLayoutState();
290
+ registerGridLayoutResolver(state);
291
+ expect(resolveLayoutTree(new Float32Array(8), state, { nodes }, new Float32Array(4), 100, 100)).toBe(false);
292
+ expect(explainLayoutResolution(state, { nodes }, 1)?.kind).toBe('InvalidItemStyle');
293
+ });
294
+
295
+ it('rejects a row span that exceeds the explicit grid', () => {
296
+ const nodes = [
297
+ root({ columns: [{ kind: 'auto' }], rows: [{ kind: 'auto' }, { kind: 'auto' }] }),
298
+ child({ column: 0, row: 1, rowSpan: 2 }),
299
+ ];
300
+ const state = createLayoutState();
301
+ registerGridLayoutResolver(state);
302
+ expect(resolveLayoutTree(new Float32Array(8), state, { nodes }, new Float32Array(4), 100, 100)).toBe(false);
303
+ expect(explainLayoutResolution(state, { nodes }, 1)?.kind).toBe('InvalidItemStyle');
304
+ });
305
+
306
+ it.each([
307
+ null,
308
+ { columns: [null], rows: [{ kind: 'auto' }] },
309
+ { columns: [{ fraction: 0, kind: 'fraction' }], rows: [{ kind: 'auto' }] },
310
+ { columns: [{ kind: 'fixed', size: -1 }], rows: [{ kind: 'auto' }] },
311
+ { columns: [{ kind: 'auto' }], paddingLeft: Number.POSITIVE_INFINITY, rows: [{ kind: 'auto' }] },
312
+ ])('rejects malformed container style %#', (containerStyle) => {
313
+ const nodes = [{ ...root({ columns: [{ kind: 'auto' }], rows: [{ kind: 'auto' }] }), containerStyle }, child()];
314
+ const state = createLayoutState();
315
+ registerGridLayoutResolver(state);
316
+ expect(resolveLayoutTree(new Float32Array(8), state, { nodes }, new Float32Array(4), 100, 100)).toBe(false);
317
+ expect(explainLayoutResolution(state, { nodes }, 0)?.kind).toBe('InvalidContainerStyle');
318
+ });
319
+
320
+ it.each([
321
+ { column: -1, row: 0 },
322
+ { column: 0.5, row: 0 },
323
+ { column: '0', row: 0 },
324
+ { column: 0, columnSpan: 0, row: 0 },
325
+ { column: 0, row: 0, rowSpan: 0 },
326
+ ])('rejects malformed item placement %#', (itemStyle) => {
327
+ const nodes = [root({ columns: [{ kind: 'auto' }], rows: [{ kind: 'auto' }] }), { ...child(), itemStyle }];
328
+ const state = createLayoutState();
329
+ registerGridLayoutResolver(state);
330
+ expect(resolveLayoutTree(new Float32Array(8), state, { nodes }, new Float32Array(4), 100, 100)).toBe(false);
331
+ expect(explainLayoutResolution(state, { nodes }, 1)?.kind).toBe('InvalidItemStyle');
332
+ });
123
333
  });
@@ -9,6 +9,8 @@ describe('createLayoutState', () => {
9
9
  const state = createLayoutState();
10
10
  expect(state.resolvers.size).toBe(0);
11
11
  expect(state.lastFailureKind).toBeNull();
12
+ expect(state.lastFailureNodeIndex).toBe(-1);
13
+ expect(state.lastFailureParentIndex).toBe(-1);
12
14
  expect(state.guard).toBeNull();
13
15
  });
14
16
  });
@@ -23,6 +23,41 @@ describe('explainLayoutResolution', () => {
23
23
  resolverKind: 'acme.Root',
24
24
  });
25
25
  });
26
+
27
+ it('diagnoses invalid hierarchy without retained state', () => {
28
+ const invalid = tree([{ ...root, parentIndex: -2 }]);
29
+ expect(explainLayoutResolution(createLayoutState(), invalid, 0)).toMatchObject({
30
+ kind: 'InvalidHierarchy',
31
+ nodeIndex: 0,
32
+ parentIndex: -2,
33
+ });
34
+ expect(explainLayoutResolution(createLayoutState(), tree([{ ...root, parentIndex: 0 }]), 0)).toMatchObject({
35
+ kind: 'InvalidHierarchy',
36
+ nodeIndex: 0,
37
+ parentIndex: 0,
38
+ });
39
+ });
40
+
41
+ it('returns null at the exact upper node-index boundary', () => {
42
+ expect(explainLayoutResolution(createLayoutState(), tree([root, child]), 2)).toBeNull();
43
+ });
44
+
45
+ it('returns a retained failure only for its matching node', () => {
46
+ const state = createLayoutState();
47
+ const input = tree([root, child]);
48
+ registerLayoutResolver(state, root.kind, () => 'InvalidItemStyle');
49
+ expect(resolveLayoutTree(new Float32Array(8), state, input, new Float32Array(4), 100, 100)).toBe(false);
50
+ expect(explainLayoutResolution(state, input, -1)?.kind).toBe('InvalidItemStyle');
51
+ expect(explainLayoutResolution(state, input, 1)?.kind).toBe('InvalidItemStyle');
52
+ expect(explainLayoutResolution(state, input, 0)).toBeNull();
53
+ });
54
+
55
+ it('does not return a node-zero failure for a different node', () => {
56
+ const state = createLayoutState();
57
+ const input = tree([root, child]);
58
+ expect(resolveLayoutTree(new Float32Array(8), state, input, new Float32Array(4), 100, 100)).toBe(false);
59
+ expect(explainLayoutResolution(state, input, 1)).toBeNull();
60
+ });
26
61
  });
27
62
 
28
63
  describe('resolveLayoutTree', () => {
@@ -33,6 +68,13 @@ describe('resolveLayoutTree', () => {
33
68
  expect([...out]).toEqual([0, 0, 320, 180, 0, 0, 320, 180]);
34
69
  });
35
70
 
71
+ it('normalizes non-finite and negative available root sizes', () => {
72
+ const out = new Float32Array(4);
73
+ const state = createLayoutState();
74
+ expect(resolveLayoutTree(out, state, tree([root]), new Float32Array(2), Number.NaN, -1)).toBe(true);
75
+ expect([...out]).toEqual([0, 0, 0, 0]);
76
+ });
77
+
36
78
  it('dispatches a child through its parent kind', () => {
37
79
  const out = new Float32Array(8);
38
80
  const state = createLayoutState();
@@ -52,6 +94,8 @@ describe('resolveLayoutTree', () => {
52
94
  expect(explainLayoutResolution(state, tree([root, child]), -1)).toMatchObject({
53
95
  actualLength: 7,
54
96
  kind: 'OutputTooSmall',
97
+ nodeIndex: -1,
98
+ parentIndex: -1,
55
99
  requiredLength: 8,
56
100
  });
57
101
  });
@@ -61,7 +105,11 @@ describe('resolveLayoutTree', () => {
61
105
  expect(resolveLayoutTree(new Float32Array(8), state, tree([root, child]), new Float32Array(3), 100, 100)).toBe(
62
106
  false,
63
107
  );
64
- expect(explainLayoutResolution(state, tree([root, child]), -1)?.kind).toBe('IntrinsicSizesTooSmall');
108
+ expect(explainLayoutResolution(state, tree([root, child]), -1)).toMatchObject({
109
+ kind: 'IntrinsicSizesTooSmall',
110
+ nodeIndex: -1,
111
+ parentIndex: -1,
112
+ });
65
113
  });
66
114
 
67
115
  it('rejects a child that does not follow its parent', () => {
@@ -71,12 +119,34 @@ describe('resolveLayoutTree', () => {
71
119
  expect(explainLayoutResolution(state, invalid, 0)).toMatchObject({ kind: 'InvalidHierarchy', nodeIndex: 0 });
72
120
  });
73
121
 
122
+ it('rejects a parent index below the root sentinel', () => {
123
+ const invalid = tree([{ ...root, parentIndex: -2 }]);
124
+ const state = createLayoutState();
125
+ expect(resolveLayoutTree(new Float32Array(4), state, invalid, new Float32Array(2), 100, 100)).toBe(false);
126
+ expect(explainLayoutResolution(state, invalid, 0)).toMatchObject({
127
+ kind: 'InvalidHierarchy',
128
+ nodeIndex: 0,
129
+ parentIndex: -2,
130
+ });
131
+ });
132
+
133
+ it('clears retained failure details before a successful resolution', () => {
134
+ const state = createLayoutState();
135
+ const input = tree([root]);
136
+ expect(resolveLayoutTree(new Float32Array(3), state, input, new Float32Array(2), 100, 100)).toBe(false);
137
+ expect(resolveLayoutTree(new Float32Array(4), state, input, new Float32Array(2), 100, 100)).toBe(true);
138
+ expect(explainLayoutResolution(state, input, -1)).toBeNull();
139
+ expect(state.lastFailureNodeIndex).toBe(-1);
140
+ expect(state.lastFailureParentIndex).toBe(-1);
141
+ });
142
+
74
143
  it('reports an unregistered parent kind only when it has a child to arrange', () => {
75
144
  const state = createLayoutState();
76
145
  const input = tree([root, child]);
77
146
  expect(resolveLayoutTree(new Float32Array(8), state, input, new Float32Array(4), 100, 100)).toBe(false);
78
147
  expect(explainLayoutResolution(state, input, 0)).toMatchObject({
79
148
  kind: 'UnregisteredKind',
149
+ parentIndex: -1,
80
150
  resolverKind: 'acme.Root',
81
151
  });
82
152
  expect(explainLayoutResolution(createLayoutState(), tree([root]), 0)).toBeNull();