@grafloria/element 0.4.67 → 0.4.68

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafloria/element",
3
- "version": "0.4.67",
3
+ "version": "0.4.68",
4
4
  "type": "module",
5
5
  "main": "./src/index.js",
6
6
  "types": "./src/index.d.ts",
@@ -234,8 +234,19 @@ export function resolve(input) {
234
234
  return { kind: 'beside', board, containerId: c.id, side, kept: false };
235
235
  if (opaque(board, c) || !c.inner)
236
236
  return { kind: 'plain', board, grace: false };
237
- if (!c.inner.contains(x + ndx0, y + ndy0))
238
- return { kind: 'plain', board, grace: false }; // the margin: the container's own frame
237
+ // The margin — inside the frame, outside the inner board — is the
238
+ // container's own tile, in the way. Except a tab container's 8-px inset
239
+ // UNDER ITS STRIP for a plain widget: a widget can never land on the
240
+ // parent board there, the container being solid to it, so "the parent's"
241
+ // was a refusal flashed for 8 px on the way up out of the page (0.4.68);
242
+ // that inset is the page's. The strip rows stay the tile's (a carried
243
+ // GROUP on the strip pushes the container, 0.4.44), and so does the
244
+ // inset for a group: strip and inset push, the page body nests.
245
+ if (!c.inner.contains(x + ndx0, y + ndy0)) {
246
+ const insetUnderStrip = c.layout === 'tabs' && ty >= frame.y + c.stripHeight && input.ghostSubtree.size === 0;
247
+ if (!insetUnderStrip)
248
+ return { kind: 'plain', board, grace: false };
249
+ }
239
250
  return descend(c.inner, ndx0, ndy0);
240
251
  }
241
252
  const over = overhang(board, dx, dy);