<!doctype html>
<html class=reftest-wait>
<title>CSS Container Queries Test: Size queries on CSS Layout API containers</title>
<link rel="help" href="https://drafts.csswg.org/css-conditional-5/#size-container">
<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/">
<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
<script src="/common/reftest-wait.js"></script>
<script src="/common/worklet-reftest.js"></script>
<style>
  #test1 {
    width: 400px;
    height: 100px;
  }
  #outer {
    display: inline; /* Shouldn't pass without layout api support */
    display: layout(half);
    height: 100px;
    container-type: inline-size;
  }
  @container (width = 400px) {
    #inner {
      display: inline; /* Shouldn't pass without layout api support */
      display: layout(half);
      height: 100px;
      container-type: inline-size;
    }
  }
  @container (width = 200px) {
    #green {
      background-color: green;
      height: 100px;
    }
  }
</style>
<p>Test passes if there is a filled green square.</p>
<div id="test1">
  <div id="outer">
    <div id="inner">
      <div id="green"></div>
    </div>
  </div>
</div>

<script id="code" type="text/worklet">
  registerLayout("half", class {
    async intrinsicSizes() {}
    async layout(children, edges, constraints, styleMap) {
      const childInlineSize = constraints.fixedInlineSize / 2;
      const childFragments = await Promise.all(children.map((child) => {
        return child.layoutNextFragment({fixedInlineSize: childInlineSize});
      }));

      for (let childFragment of childFragments) {
        childFragment.inlineOffset = 0;
        childFragment.blockOffset = 0;
      }
      const autoBlockSize = 100;
      return {autoBlockSize, childFragments};
    }
  });
</script>

<script>
  importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, document.getElementById("code").textContent);
</script>
</html>
