1
0
Fork 0
firefox/toolkit/content/widgets/moz-box-item
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00
..
moz-box-item.css Adding upstream version 140.0. 2025-06-25 09:37:52 +02:00
moz-box-item.figma.ts Adding upstream version 140.0. 2025-06-25 09:37:52 +02:00
moz-box-item.mjs Adding upstream version 140.0. 2025-06-25 09:37:52 +02:00
moz-box-item.stories.mjs Adding upstream version 140.0. 2025-06-25 09:37:52 +02:00
README.stories.md Adding upstream version 140.0. 2025-06-25 09:37:52 +02:00

MozBoxItem

moz-box-item is a component that can be used separately or together with moz-box-button and moz-box-link as a part of a moz-box-group to display related content and actions.

<moz-box-item style={{ width: "400px" }}
              label="I'm a box item">
</moz-box-item>

Code

The source for moz-box-item can be found under toolkit/content/widgets/moz-box-item/

How to use moz-box-item

Importing the element

Like other custom elements, you should usually be able to rely on moz-box-item getting lazy loaded at the time of first use. See this documentation for more information on using design system custom elements.

Setting the label and description

In order to set a label and description, use the label and description attributes. In general, the label and description should be controlled by Fluent.

<moz-box-item label="I'm a box item" description="Some description of the item"></moz-box-item>
<moz-box-item style={{ width: "400px" }}
              label="I'm a box item"
              description="Some description of the item">
</moz-box-item>

Setting an icon

In order to have an icon appear next to the label, use the .iconSrc property or iconsrc attribute.

<moz-box-item label="I'm a box item"
              description="Some description of the item"
              iconsrc="chrome://global/skin/icons/highlights.svg">
</moz-box-item>
<moz-box-item style={{ width: "400px" }}
              label="I'm a box item"
              description="Some description of the item"
              iconsrc="chrome://global/skin/icons/highlights.svg">
</moz-box-item>

Setting the layout of the content

You can set a layout style for the box content using the layout attribute. There are 2 layout options: default or large-icon. The default layout will set a smaller icon next to the label. Use large-icon layout to display a bigger, vertically centered icon.

<moz-box-item label="I'm a box item"
              description="Some description of the item"
              layout="large-icon"
              iconsrc="chrome://global/skin/icons/info.svg">
</moz-box-item>
<moz-box-item style={{ width: "400px" }}
              label="I'm a box item"
              description="Some description of the item"
              layout="large-icon"
              iconsrc="chrome://global/skin/icons/info.svg">
</moz-box-item>

Adding actions to the moz-box-item

The moz-box-item component supports 2 slots for actions: actions and actions-start. You should set the correct aria-label for any icon buttons that are included in actions using fluent, since we cannot programmatically associate the button with the label in the shadow DOM.

The actions slot goes after the label/description/etc. Using this slot is a preferred way to ad actions to the component.

<moz-box-item label="I'm a box item">
  <moz-button label="Click me!" slot="actions"></moz-button>
</moz-box-item>
<moz-box-item style={{ width: "400px" }} label="I'm a box item">
  <moz-button label="Click me!" slot="actions"></moz-button>
</moz-box-item>

Use slot="actions-start" if you need to place an action at the beginning of the container. If moz-box-item is a part of the moz-box-group, the number of items in actions-start slot should be consistent across the entire group.

<moz-box-item label="I'm a box item">
  <moz-button iconsrc="chrome://global/skin/icons/delete.svg"
              aria-label="Delete I'm a box item"
              slot="actions-start">
  </moz-button>
</moz-box-item>
<moz-box-item style={{ width: "400px" }} label="I'm a box item">
  <moz-button iconsrc="chrome://global/skin/icons/delete.svg"
              aria-label="Delete I'm a box item"
              slot="actions-start">
  </moz-button>
</moz-box-item>

Using the default slot

Use the default slot if you need to place a custom content into the moz-box-item.

<moz-box-item>
  <div class="slotted">
    <img src="chrome://global/skin/illustrations/security-error.svg" />
    <span>This is an example message</span>
    <span class="text-deemphasized">
      Message description would go down here
    </span>
  </div>
</moz-box-item>
<moz-box-item style={{ width: "280px" }}>
  <div style={{ display: "flex", justifyContent: "center", alignItems: "center", flexDirection: "column", textAlign: "center" }}>
    <img src="chrome://global/skin/illustrations/security-error.svg" style={{ width: "150px", marginBlockEnd: "16px" }} />
    <span>This is an example message</span>
    <span class="text-deemphasized">
      Message description would go down here
    </span>
  </div>
</moz-box-item>

Fluent usage

The label and description attributes of moz-box-item will generally be provided via Fluent attributes. The relevant data-l10n-attrs are set automatically, so to get things working you just need to supply a data-l10n-id as you would with any other element.

For example, the following Fluent messages:

moz-box-item-label =
  .label = I'm a box item
moz-box-item-label-description =
  .label = I'm a box item
  .description = Some description of the item

would be used to set attributes on the different moz-box-item elements as follows:

<moz-box-item data-l10n-id="moz-box-item-label"></moz-box-item>
<moz-box-item data-l10n-id="moz-box-item-label-description"></moz-box-item>