List Item Svelte Component

List Item Components

There are following components included:

  • ListItem - main list item element
  • ListItemRow - list item row element for custom layout
  • ListItemCell - list item cell element for custom layout

List Item Properties

PropTypeDefaultDescription
<ListItem> properties
titlestringList item title
subtitlestringList item subtitle (only for Media List)
textstringList item text (only for Media List)
headerstringList item header text
footerstringList item footer text
mediastringList item media image URL
afterstringList item label
badgestring
number
List item Badge
badgeColorstringList item Badge color. One of the default colors
mediaItembooleanEnables Media list item for the current list item
dividerbooleanConverts list item to list item divider
groupTitlebooleanConverts list item to list group title
targetbooleanList item link target attribute
noChevronbooleanfalseRemoves "chevron" icon on list item link
chevronCenterbooleanfalseSets "chevron" icon on media list item on center (vertically)
tooltipstringList button tooltip text to show on button hover/press
tooltipTriggerstringhoverDefines how to trigger (open) Tooltip. Can be hover, click or manual
<ListItem> Menu List specific properties
selectedbooleanWhether the menu list item is selected (currently active)
<ListItem> Swipeout specific properties
swipeoutbooleanConverts list item to swipeout list item
swipeoutOpenedbooleanDefines whether swipe actions should be opened or not. Note, only one swipeout item can be opened at same time
<ListItem> Accordion specific properties
accordionItembooleanfalseConverts list item to accordion list item
accordionItemOpenedbooleanfalseMakes accordion item opened
<ListItem> Sortable List specific properties
sortablebooleanAllows to disable (when false) sorting of specific list item. Note, that it makes sense and work only on first or last items in the list and won't work correctly if you disable sortable for some of the items in the middle.
<ListItem> Virtual List specific properties
virtualListIndexnumberAllows to pass list item index (from whole collection) when used in Virtual List. Useful to be used together with Sortable to know correct changed indexes
<ListItem> Smart Select specific properties
smartSelectbooleanfalseEnables Smart Select behavior
smartSelectParamsobjectObject with Smart Select Parameters
<ListItem> Checkboxes & Radios specific properties
checkboxbooleanfalseEnables checkbox-item
radiobooleanfalseEnables radio-item
radioIconstringAllows to specify radio icon position - in the beggining or in the end of the list item. Can be start or end. By default radio list item icon is displayed in the end of the list item in iOS theme, and in the beginning of the list item in MD and Aurora themes.
checkedbooleanfalseWhether the checkbox/radio input is checked
indeterminatebooleanDefines whether the checkbox input is in indeterminate state or not
namestringCheckbox/radio input name
valuestring
number
Checkbox/radio input value
readonlybooleanfalseWhether the checkbox/radio input is readonly
disabledbooleanfalseWhether the checkbox/radio input is disabled
requiredbooleanfalseWhether the checkbox/radio input is required
<ListItem> navigation/router related properties
linkboolean
string
Enables link and link URL if specified as string. Same as href prop
tabLinkstring
boolean
Enables tab link and specify CSS selector of the target tab (if specified as a string)
tabLinkActivebooleanMakes this tab link active
hrefstring
boolean
#URL of the page to load. In case of boolean href="false" it won't add href tag
targetstringValue of link target attribute, e.g. _blank, _self, etc.
viewstringCSS selector of the View to load the page. Or current to load in current view.
externalbooleanEnable to bypass Framework7's link click handler
backbooleanEnables back navigation link
openInstringAllows open page route as modal or panel. Can be popup, loginScreen, sheet, popover or panel
forcebooleanForce page to load and ignore previous page in history (use together with back prop)
reloadCurrentbooleanReloads new page instead of the currently active one
reloadPreviousbooleanReplace the previous page in history with the new one from route
reloadAllbooleanLoad new page and remove all previous pages from history and DOM
reloadDetailbooleanReload Detail page in Master Detail view
animatebooleanDisables pages animation
transitionstringName of the custom page transition
ignoreCachebooleanIgnores caching
routeTabIdstringRoutable Tab id
routePropsobjectObject with additional props that will be passed to target route component
preventRouterbooleanfalseIf set, then it won't be processed by Framework7 router
<ListItem> action related properties
panelOpenstring
boolean
CSS selector of panel to open on click. Or can be left or right if there is only left or right panel in DOM.
panelClosestring
boolean
Closes panel on click
panelTogglestring
boolean
CSS selector of panel to toggle on click. Or can be left or right if there is only left or right panel in DOM.
actionsOpenstring
boolean
CSS selector of the action sheet to open on click
actionsClosestring
boolean
CSS selector of the action sheet to close on click. Or boolean property to close currently opened action sheet
popupOpenstring
boolean
CSS selector of the popup to open on click
popupClosestring
boolean
CSS selector of the popup to close on click. Or boolean property to close currently opened popup
popoverOpenstring
boolean
CSS selector of the popover to open on click
popoverClosestring
boolean
CSS selector of the popover to close on click. Or boolean property to close currently opened popover
sheetOpenstring
boolean
CSS selector of the sheet modal to open on click
sheetClosestring
boolean
CSS selector of the sheet modal to close on click. Or boolean property to close currently opened sheet modal
loginScreenOpenstring
boolean
CSS selector of the login screen to open on click
loginScreenClosestring
boolean
CSS selector of the login screen to close on click. Or boolean property to close currently opened login screen
sortableEnablestring
boolean
CSS selector of the Sortable list to be enabled on click
sortableDisablestring
boolean
CSS selector of the Sortable list to be disabled on click. Or boolean property to close currently opened Sortable list
sortableTogglestring
boolean
CSS selector of the Sortable list to toggle on click. Or boolean property to toggle currently opened/closed Sortable list
searchbarEnablestring
boolean
CSS selector of the Expandable Searchbar to be enabled on click. Or boolean property to enable the first found Searchbar
searchbarDisablestring
boolean
CSS selector of the Expandable Searchbar to be disabled on click. Or boolean property to disable the first found Searchbar
searchbarTogglestring
boolean
CSS selector of the Expandable Searchbar to toggle on click. Or boolean property to toggle the first found Searchbar
searchbarClearstring
boolean
CSS selector of the Expandable Searchbar to clear on click. Or boolean property to clear the first found Searchbar
cardOpenstring
boolean
CSS selector of the expandable card to open on click. Or boolean to open first found expandable card
cardClosestring
boolean
CSS selector of the expandable card to close on click. Or boolean property to close currently opened expandable card
cardPreventOpenbooleanClick on element with this prop won't open its parent expandable card
menuClosebooleanCloses Menu dropdown on click

List Item Events

EventDescription
<ListItem> events
clickEvent will be triggeres when user clicks on list item
changeEvent will be triggeres when "change" event occurs on list item input (radio or checkbox)
swipeoutEvent will be triggered while you move swipeout element. First handler argument contains progress object with current opened progress percentage
swipeoutOpenEvent will be triggered when swipeout element starts its opening animation
swipeoutOpenedEvent will be triggered after swipeout element completes its opening animation
swipeoutCloseEvent will be triggered when swipeout element starts its closing animation
swipeoutClosedEvent will be triggered after swipeout element completes its closing animation
swipeoutDeleteEvent will be triggered after swipeout element starts its delete animation
swipeoutDeletedEvent will be triggered after swipeout element completes its delete animation right before it will be removed from DOM
accordionBeforeOpenEvent will be triggered right before accordion content starts its opening animation. First handler argument receives prevent function that will prevent accordion from opening when called.
accordionOpenEvent will be triggered when accordion content starts its opening animation.
accordionOpenedEvent will be triggered after accordion content completes its opening animation.
accordionBeforeCloseEvent will be triggered right before accordion content starts its closing animation. First handler argument receives prevent function that will prevent accordion from closing when called.
accordionCloseEvent will be triggered when accordion content starts its closing animation.
accordionClosedEvent will be triggered after accordion content completes its closing animation.

List Item Slots

List Item Svelte component (<ListItem>) has additional slots for custom elements:

  • root-start - element will be inserted in the beginning of <li> element
  • root / root-end - element will be inserted in the end of <li> element
  • content-start - element will be inserted in the beginning of <div class="item-content"> element
  • content / content-end - element will be inserted in the end of <div class="item-content"> element
  • inner-start - element will be inserted in the beginning of <div class="item-inner"> element
  • default / inner / inner-end - element will be inserted in the end of <div class="item-inner"> element
  • media - element will be inserted inside of <div class="item-media"> element
  • before-title - element will be inserted before <div class="item-title"> element
  • title - element will be inserted inside of <div class="item-title"> element
  • after-title - element will be inserted after <div class="item-title"> element
  • subtitle - element will be inserted inside of <div class="item-subtitle"> element
  • text - element will be inserted inside of <div class="item-text"> element
  • header - element will be inserted inside of <div class="item-header"> element
  • footer - element will be inserted inside of <div class="item-footer"> element
  • after-start - element will be inserted in the beginning of <div class="item-after"> element
  • after / after-end - element will be inserted in the end of <div class="item-after"> element
<List mediaList>
  <ListItem
    link="/home/"
    title="Item Title"
    subtitle="Item Subtitle"
    text="Text"
    after="Read more"
    >
      <img src="path-to-my-image.jpg" slot="media">
      <div slot="root-start">Root Start</div>
      <div slot="root">Root End</div>
      <div slot="content-start">Content Start</div>
      <div slot="content">Content End</div>
      <div slot="media-start">Media Start</div>
      <div slot="media">Media</div>
      <span slot="after-start">After Start</span>
      <span slot="after">After End</span>
      <div slot="inner-start">Inner Start</div>
      <div slot="inner">Inner End</div>
      <div slot="before-title">Before Title</div>
      <div slot="after-title">After Title</div>
  </ListItem>
</List>

<!-- Renders to: -->

<div class="list media-list">
  <ul>
    <li>
      <div>Root Start</div>
      <a href="/home/" class="item-link">
        <div class="item-content">
          <div>Content Start</div>
          <div class="item-media">
            <img src="path-to-my-image.jpg">
          </div>
          <div class="item-inner">
            <div>Inner Start</div>
            <div class="item-title-row">
              <div>Before Title</div>
              <div class="item-title">Item Title</div>
              <div>After Title</div>
              <div class="item-after">
                <span>After Start</span>
                <span>Read more</span>
                <span>After End</span>
              </div>
            </div>
            <div class="item-subtitle">Item Subtitle</div>
            <div class="item-text">Text</div>
            <div>Inner End</div>
          </div>
          <div>Content End</div>
        </div>
      </a>
      <div>Root End</div>
    </li>
  </ul>
</div>

Examples

<Page>
  <Navbar title="List View"></Navbar>
  <BlockTitle>Simple List</BlockTitle>
  <List simpleList>
    <ListItem title="Item 1"></ListItem>
    <ListItem title="Item 2"></ListItem>
    <ListItem title="Item 3"></ListItem>
  </List>
  <BlockTitle>Simple Links List</BlockTitle>
  <List>
    <ListItem title="Link 1" link="#"></ListItem>
    <ListItem title="Link 2" link="#"></ListItem>
    <ListItem title="Link 3" link="#"></ListItem>
  </List>
  <BlockTitle>Data list, with icons</BlockTitle>
  <List>
    <ListItem title="Ivan Petrov" after="CEO">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem title="John Doe" badge="5">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem title="Jenna Smith">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
  </List>
  <BlockTitle>Links</BlockTitle>
  <List>
    <ListItem link="#" title="Ivan Petrov" after="CEO">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem link="#" title="John Doe" after="Cleaner">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem link="#" title="Jenna Smith">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
  </List>
  <BlockTitle>Links, Header, Footer</BlockTitle>
  <List>
    <ListItem link="#" header="Name" title="John Doe" after="Edit">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem link="#" header="Phone" title="+7 90 111-22-3344" after="Edit">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem link="#" header="Email" title="john@doe" footer="Home" after="Edit">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem link="#" header="Email" title="john@framework7" footer="Work" after="Edit">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
  </List>
  <BlockTitle>Links, no icons</BlockTitle>
  <List>
    <ListItem link="#" title="Ivan Petrov"></ListItem>
    <ListItem link="#" title="John Doe"></ListItem>
    <ListItem divider title="Divider Here"></ListItem>
    <ListItem link="#" title="Ivan Petrov"></ListItem>
    <ListItem link="#" title="Jenna Smith"></ListItem>
  </List>
  <BlockTitle>Grouped with sticky titles</BlockTitle>
  <List ul={false}>
    <ListGroup>
      <ListItem title="A" groupTitle></ListItem>
      <ListItem title="Aaron "></ListItem>
      <ListItem title="Abbie"></ListItem>
      <ListItem title="Adam"></ListItem>
    </ListGroup>
    <ListGroup>
      <ListItem title="B" groupTitle></ListItem>
      <ListItem title="Bailey"></ListItem>
      <ListItem title="Barclay"></ListItem>
      <ListItem title="Bartolo"></ListItem>
    </ListGroup>
    <ListGroup>
      <ListItem title="C" groupTitle></ListItem>
      <ListItem title="Caiden"></ListItem>
      <ListItem title="Calvin"></ListItem>
      <ListItem title="Candy"></ListItem>
    </ListGroup>
  </List>
  <BlockTitle>Mixed and nested</BlockTitle>
  <List>
    <ListItem link="#" title="Ivan Petrov" after="CEO">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem link="#" title="Two icons here">
      <svelte:fragment slot="media">
        <i class="icon demo-list-icon" />
        <i class="icon demo-list-icon" />
      </svelte:fragment>
    </ListItem>
    <ListItem title="No icons here"></ListItem>
    <li>
      <ul>
        <ListItem link="#" title="Ivan Petrov" after="CEO">
          <i slot="media" class="icon demo-list-icon" />
        </ListItem>
        <ListItem link="#" title="Two icons here">
          <svelte:fragment slot="media">
            <i class="icon demo-list-icon" />
            <i class="icon demo-list-icon" />
          </svelte:fragment>
        </ListItem>
        <ListItem title="No icons here"></ListItem>
        <ListItem link="#" title="Ultra long text goes here, no, it is really really long">
          <i slot="media" class="icon demo-list-icon" />
        </ListItem>
        <ListItem title="With toggle">
          <i slot="media" class="icon demo-list-icon" />
          <span slot="after">
            <Toggle />
          </span>
        </ListItem>
      </ul>
    </li>
    <ListItem link="#" title="Ultra long text goes here, no, it is really really long">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem title="With toggle">
      <i slot="media" class="icon demo-list-icon" />
      <span slot="after">
        <Toggle />
      </span>
    </ListItem>
  </List>
  <BlockTitle>Mixed, inset</BlockTitle>
  <List>
    <ListItem link="#" title="Ivan Petrov" after="CEO">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem link="#" title="Two icons here">
      <svelte:fragment slot="media">
      <i class="icon demo-list-icon" />
      <i class="icon demo-list-icon" />
      </svelte:fragment>
    </ListItem>
    <ListItem link="#" title="Ultra long text goes here, no, it is really really long">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem title="With toggle">
      <i slot="media" class="icon demo-list-icon" />
      <span slot="after">
        <Toggle />
      </span>
    </ListItem>
    <div class="block-footer" slot="after-list">
      <p>Here comes some useful information about list above</p>
    </div>
  </List>
  <BlockTitle>Tablet inset</BlockTitle>
  <List mediumInset>
    <ListItem link="#" title="Ivan Petrov" after="CEO">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <ListItem link="#" title="Two icons here">
      <svelte:fragment slot="media">
      <i class="icon demo-list-icon" />
      <i class="icon demo-list-icon" />
      </svelte:fragment>
    </ListItem>
    <ListItem link="#" title="Ultra long text goes here, no, it is really really long">
      <i slot="media" class="icon demo-list-icon" />
    </ListItem>
    <div class="block-footer" slot="after-list">
      <p>This list block will look like "inset" only on tablets (iPad)</p>
    </div>
  </List>

  <BlockTitle>Media Lists</BlockTitle>
  <Block>
    <p>Media Lists are almost the same as Data Lists, but with a more flexible layout for visualization of more complex data, like products, services, users, etc.</p>
  </Block>
  <BlockTitle>Songs</BlockTitle>
  <List mediaList>
    <ListItem
      link="#"
      title="Yellow Submarine"
      after="$15"
      subtitle="Beatles"
      text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In vel dui laoreet, commodo augue id, pulvinar lacus."
    >
      <img slot="media" src="https://cdn.framework7.io/placeholder/people-160x160-1.jpg" width="80" />
    </ListItem>
    <ListItem
      link="#"
      title="Don't Stop Me Now"
      after="$22"
      subtitle="Queen"
      text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In vel dui laoreet, commodo augue id, pulvinar lacus."
    >
      <img slot="media" src="https://cdn.framework7.io/placeholder/people-160x160-2.jpg" width="80" />
    </ListItem>
    <ListItem
      link="#"
      title="Billie Jean"
      after="$16"
      subtitle="Michael Jackson"
      text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In vel dui laoreet, commodo augue id, pulvinar lacus."
    >
      <img slot="media" src="https://cdn.framework7.io/placeholder/people-160x160-3.jpg" width="80" />
    </ListItem>
  </List>
  <BlockTitle>Mail App</BlockTitle>
  <List mediaList>
    <ListItem
      link="#"
      title="Facebook"
      after="17:14"
      subtitle="New messages from John Doe"
      text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In vel dui laoreet, commodo augue id, pulvinar lacus."
    ></ListItem>
    <ListItem
      link="#"
      title="John Doe (via Twitter)"
      after="17:11"
      subtitle="John Doe (@_johndoe) mentioned you on Twitter!"
      text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In vel dui laoreet, commodo augue id, pulvinar lacus."
    ></ListItem>
    <ListItem
      link="#"
      title="Facebook"
      after="16:48"
      subtitle="New messages from John Doe"
      text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In vel dui laoreet, commodo augue id, pulvinar lacus."
    ></ListItem>
    <ListItem
      link="#"
      title="John Doe (via Twitter)"
      after="15:32"
      subtitle="John Doe (@_johndoe) mentioned you on Twitter!"
      text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sagittis tellus ut turpis condimentum, ut dignissim lacus tincidunt. Cras dolor metus, ultrices condimentum sodales sit amet, pharetra sodales eros. Phasellus vel felis tellus. Mauris rutrum ligula nec dapibus feugiat. In vel dui laoreet, commodo augue id, pulvinar lacus."
    ></ListItem>
  </List>
  <BlockTitle>Something more simple</BlockTitle>
  <List mediaList>
    <ListItem
      title="Yellow Submarine"
      subtitle="Beatles">
      <img slot="media" src="https://cdn.framework7.io/placeholder/fashion-88x88-1.jpg" width="44" />
    </ListItem>
    <ListItem
      link="#"
      title="Don't Stop Me Now"
      subtitle="Queen">
      <img slot="media" src="https://cdn.framework7.io/placeholder/fashion-88x88-2.jpg" width="44" />
    </ListItem>
    <ListItem
      title="Billie Jean"
      subtitle="Michael Jackson">
      <img slot="media" src="https://cdn.framework7.io/placeholder/fashion-88x88-3.jpg" width="44" />
    </ListItem>
  </List>
  <BlockTitle>Inset</BlockTitle>
  <List mediaList inset>
    <ListItem
      link="#"
      title="Yellow Submarine"
      subtitle="Beatles">
      <img slot="media" src="https://cdn.framework7.io/placeholder/fashion-88x88-4.jpg" width="44" />
    </ListItem>
    <ListItem
      link="#"
      title="Don't Stop Me Now"
      subtitle="Queen">
      <img slot="media" src="https://cdn.framework7.io/placeholder/fashion-88x88-5.jpg" width="44" />
    </ListItem>
    <ListItem
      link="#"
      title="Billie Jean"
      subtitle="Michael Jackson">
      <img slot="media" src="https://cdn.framework7.io/placeholder/fashion-88x88-6.jpg" width="44" />
    </ListItem>
  </List>
</Page>
  

<style>
  :global(.demo-list-icon, .icon-f7) {
    background: #ccc;
    display: block;
    position: relative;
  }
  :global(.ios .demo-list-icon, .ios .icon-f7, .ios .icon-vi) {
    width: 29px;
    height: 29px;
    border-radius: 6px;
    box-sizing: border-box;
  }
  :global(.md .demo-list-icon, .md .icon-f7, .md .icon-vi) {
    width: 24px;
    height: 24px;
    border-radius: 4px;
  }
  :global(.aurora .demo-list-icon, .aurora .icon-f7, .aurora .icon-vi) {
    width: 18px;
    height: 18px;
    border-radius: 4px;
  }
</style>
<script>
  import {Page, Navbar, BlockTitle, List, ListItem, Icon, ListGroup, Toggle, BlockFooter, Block} from 'framework7-svelte';
</script>