Widgets

/

interact

Overlay

Content above the page (dialogs, popovers, sheets) with focus management. Unstyled.

Also written Dialog, Popover, Modal; layr format rewrites these to Overlay.

A dialog

Overlay shows content above the page, with focus moved into it and back when it closes. It is shown while open is true; modal: true (the default) blocks the page behind it, and dismissible: true (the default) closes it on Escape or a click on the backdrop, raising close. It is unstyled: its .obj is the dialog you draw.

LAYROpen in playground
Page(
  .name(Dialog)
  .route('/')
  var bool open = false
  Scaffold(
    .config(color: canvas)
    .body(
      Column(
        .config(gap: 12, padding: all(24))
        Button(
          .preset(default)
          .config(label: 'Cancel booking')
          .fnc { open = true }
        )
        Overlay(
          .config(label: 'Cancel booking', open: open)
          .on(close: { open = false })
          .obj(
            Container(
              .config(
                w: 300
                color: panel
                cornerRadius: 16
                padding: all(20)
                shadow: shadow(y: 16, blur: 40, color: black.alpha(25%))
              )
              .obj(
                Column(
                  .config(gap: 12)
                  Text(
                    .config(size: 18, weight: semibold)
                    .obj('Cancel this booking?')
                  )
                  Text(
                    .config(color: muted)
                    .obj('Room B, Tuesday 10:30. This cannot be undone.')
                  )
                  Row(
                    .config(w: fill, gap: 8, xAlign: end)
                    Button(
                      .preset(default)
                      .config(label: 'Keep it')
                      .fnc { open = false }
                    )
                    Button(
                      .config(
                        color: danger
                        cornerRadius: 8
                        padding: sym(x: 14, y: 8)
                      )
                      .fnc { open = false }
                      .obj(
                        Text(
                          .config(color: onAccent, weight: semibold)
                          .obj('Cancel')
                        )
                      )
                    )
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)

Config keys

KeyTypeDefaultMeaning
w (width)len | fill | hugWidth: a length, fill (share the remaining space) or hug (fit content, default).
h (height)len | fill | hugHeight: a length, fill or hug (default).
size (s)sizeWidth and height together: size: 200 or size: (200, 120).
minW (minWidth)lenMinimum width.
maxW (maxWidth)lenMaximum width.
minH (minHeight)lenMinimum height.
maxH (maxHeight)lenMaximum height.
aspect (aspectRatio)numAspect ratio (width / height), e.g. 16/9.
color (bg, background, colorBG)paintBackground paint: a colour or gradient.
padding (pad)insetsSpace inside the object.
cornerRadius (radius, borderRadius, corner)radiusCorner radius: one length or only(topLeft: 8, …).
borderWidthlenBorder width.
borderColorcolorBorder colour.
borderAlignin | mid | outinWhere the border sits relative to the edge: in, mid or out.
borderStylesolid | dashed | dottedsolidBorder line style.
borderSidesall | top | bottom | left | right | x | yallWhich sides draw the border (inside the box).
shadowshadowDrop shadow(s): shadow(y: 4, blur: 12, color: black.alpha(20%)).
clipboolClip children to the object's bounds (and corner radius).
zintStacking order among siblings.
margininsetsSpace outside the object: all(8), sym(x: 8, y: 4), only(top: 8).
opacitynumOpacity from 0 to 1.
hide (hidden)boolRemoves the object from layout and the accessibility tree.
shrinknum1Shrink priority when space runs out. Lower shrinks first; 0 never shrinks.
flexnum1Share of remaining space for fill sizes.
cursorauto | pointer | text | grab | grabbing | move | notAllowed | crosshair | nonePointer cursor.
className (class)txtExtra CSS class names: styling hooks for your own stylesheet (hover rules, third-party CSS).
openboolWhether it is shown.
modalbooltrueBlocks the page and traps focus.
dismissiblebooltrueEscape and backdrop click close it.
labeltxtAccessible name.
placementalignmidWhere it appears.
backdroppaintBackdrop paint for modal overlays.

Group .border(align, color, width, style, sides): Border settings grouped: .border(align: in, color: #0d0d0d, width: 2).

Slots

  • .obj: one object, the default slot

Events

.on(...) accepts tap, press, hover, hoverEnd, focus, blur, key, drag, swipe, mount, unmount, visible, close.