JavaScript Tabs
JavaScript Component
Package size: 1.4KB gzipped
The Lemonade JavaScript tabs is a lightweight, framework-agnostic component designed to organize and display distinct content sections in a clean, minimalist tabbed interface.
Documentation
Installation
npm install @lemonadejs/tabs
Settings
Property | Description |
---|---|
selected?: number |
Index of the initially selected tab (default: 0). |
position?: string |
Position of the tabs bar within the parent element ('center' to align tabs to the center). |
data?: tabItem[] |
Provides an alternative method for defining tab titles and content using a tabItem object. See the Tab Item section below. |
round?: boolean |
Determines if tabs should have rounded corners. |
onopen?: function |
Callback triggered when a new tab is opened. |
allowCreate?: function |
Displays a button to create a new tab when set. |
Tab Item
Property | Description |
---|---|
title |
The title of the tab, serving as the label displayed on the tab options. |
content |
The HTML content intended for this specific tab. |
Examples
Basic example
How to utilize Tabs in simple implementations: This example demonstrates the declarative approach.
See this example on codesandbox
<html>
<script src="https://cdn.jsdelivr.net/npm/lemonadejs/dist/lemonade.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@lemonadejs/tabs/dist/index.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@lemonadejs/tabs/dist/style.min.css" />
<div id="root">
<div title="Tab 1">Content of the first tab</div>
<div title="Tab 2">Content of the second tab</div>
</div>
<script>
Tabs(document.getElementById("root"));
</script>
</html>
import lemonade from 'lemonadejs'
import Tabs from '@lemonadejs/tabs';
import '@lemonadejs/tabs/dist/style.css';
export default function App() {
const self = this;
return render => render`<div>
<Tabs>
<div title="Tab 1">Content of the first tab</div>
<div title="Tab 2">Content of the second tab</div>
</Tabs>
</div>`
}
import React, { useRef } from "react";
import Tabs from "@lemonadejs/tabs/dist/react";
import "@lemonadejs/tabs/dist/style.css";
export default function Component() {
const component = useRef();
return (<div>
<Tabs ref={component}>
<div title={"Tab 1"}>Content of the first tab</div>
<div title={"Tab 2"}>Content of the second tab</div>
</Tabs>
</div>)
}
<template>
<Tabs ref="component">
<div title="Tab 1">Content of the first tab</div>
<div title="Tab 2">Content of the second tab</div>
</Tabs>
</template>
<script>
import Tabs from '@lemonadejs/tabs/dist/vue';
import '@lemonadejs/tabs/dist/style.css';
export default {
name: 'App',
components: {
Tabs,
},
};
</script>
Data property
Create a new tabs instance based on a JSON data definition with the on open event.
See this example on codesandbox
<html>
<script src="https://cdn.jsdelivr.net/npm/lemonadejs/dist/lemonade.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@lemonadejs/tabs/dist/index.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@lemonadejs/tabs/dist/style.min.css" />
<div id="root"></div>
<input id="btn1" type="button" value="Select Second Tab" />
<script>
const data = [
{
title: "Monday",
content: `<ul>
<li>09:00 AM - 10:00 AM: Keynote Speech</li>
<li>10:30 AM - 12:00 PM: Panel Discussion</li>
<li>12:00 PM - 01:30 PM: Lunch Break</li>
<li>01:30 PM - 03:00 PM: Workshop</li>
<li>03:30 PM - 05:00 PM: Networking Session</li>
</ul>`
},
{
title: "Tuesday",
content: `<ul>
<li>09:30 AM - 10:30 AM: Keynote Speech</li>
<li>11:00 AM - 12:30 PM: Workshop</li>
<li>12:30 PM - 01:30 PM: Lunch Break</li>
<li>02:00 PM - 03:30 PM: Breakout Sessions</li>
<li>04:00 PM - 05:30 PM: Fireside Chat</li>
</ul>`
}
];
const component = Tabs(document.getElementById("root"), {
data: data,
onopen: () => {
console.log('tab is opened');
}
});
document.getElementById("btn1").addEventListener("click", () => {
component.selected = 1;
})
</script>
</html>
import lemonade from 'lemonadejs'
import Tabs from '@lemonadejs/tabs';
import '@lemonadejs/tabs/dist/style.css';
export default function App() {
const data = [
{
title: "Monday",
content: `<ul>
<li>09:00 AM - 10:00 AM: Keynote Speech</li>
<li>10:30 AM - 12:00 PM: Panel Discussion</li>
<li>12:00 PM - 01:30 PM: Lunch Break</li>
<li>01:30 PM - 03:00 PM: Workshop</li>
<li>03:30 PM - 05:00 PM: Networking Session</li>
</ul>`
},
{
title: "Tuesday",
content: `<ul>
<li>09:30 AM - 10:30 AM: Keynote Speech</li>
<li>11:00 AM - 12:30 PM: Workshop</li>
<li>12:30 PM - 01:30 PM: Lunch Break</li>
<li>02:00 PM - 03:30 PM: Breakout Sessions</li>
<li>04:00 PM - 05:30 PM: Fireside Chat</li>
</ul>`
}
];
const open = () => {
this.selected = 1;
}
const onopen = () => {
console.log('tab is opened');
}
return render => render`<div>
<Tabs data="${data}" onopen="${onopen}"></Tabs>
<button onclick="${open}">Go To Wednesday</button>
</div>`
}
import React, { useRef } from "react";
import Tabs from "@lemonadejs/tabs/dist/react";
import "@lemonadejs/tabs/dist/style.css";
const data = [
{
title: "Monday",
content: `<ul>
<li>09:00 AM - 10:00 AM: Keynote Speech</li>
<li>10:30 AM - 12:00 PM: Panel Discussion</li>
<li>12:00 PM - 01:30 PM: Lunch Break</li>
<li>01:30 PM - 03:00 PM: Workshop</li>
<li>03:30 PM - 05:00 PM: Networking Session</li>
</ul>`
},
{
title: "Tuesday",
content: `<ul>
<li>09:30 AM - 10:30 AM: Keynote Speech</li>
<li>11:00 AM - 12:30 PM: Workshop</li>
<li>12:30 PM - 01:30 PM: Lunch Break</li>
<li>02:00 PM - 03:30 PM: Breakout Sessions</li>
<li>04:00 PM - 05:30 PM: Fireside Chat</li>
</ul>`
}
];
export default function App() {
const component = useRef();
const open = () => {
component.current.selected = 1;
}
const onopen = () => {
console.log('tab is opened');
}
return <>
<Tabs ref={component} data={data} onopen={onopen} />
<button onClick={() => open()}>Go To Wednesday</button>
</>;
}
<template>
<Tabs ref="component" :data="data" :onopen="onopen" />
<button @click="open">Go To Wednesday</button>
</template>
<script>
import Tabs from '@lemonadejs/tabs/dist/vue';
import '@lemonadejs/tabs/dist/style.css';
export default {
name: 'App',
components: {
Tabs,
},
data() {
const data = [
{
title: "Monday",
content: `<ul>
<li>09:00 AM - 10:00 AM: Keynote Speech</li>
<li>10:30 AM - 12:00 PM: Panel Discussion</li>
<li>12:00 PM - 01:30 PM: Lunch Break</li>
<li>01:30 PM - 03:00 PM: Workshop</li>
<li>03:30 PM - 05:00 PM: Networking Session</li>
</ul>`
},
{
title: "Tuesday",
content: `<ul>
<li>09:30 AM - 10:30 AM: Keynote Speech</li>
<li>11:00 AM - 12:30 PM: Workshop</li>
<li>12:30 PM - 01:30 PM: Lunch Break</li>
<li>02:00 PM - 03:30 PM: Breakout Sessions</li>
<li>04:00 PM - 05:30 PM: Fireside Chat</li>
</ul>`
}
]
return {
data
}
},
methods: {
open: function() {
this.$refs.component.current.selected = 1;
},
onopen: function() {
console.log('tab is opened');
}
}
};
</script>
Create as Web Component
Also, you can use the plugin as a web component as below.
<html>
<script src="https://cdn.jsdelivr.net/npm/lemonadejs/dist/lemonade.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@lemonadejs/tabs/dist/index.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@lemonadejs/tabs/dist/style.min.css" />
<lm-tabs id="root">
<div title="Tab 1">Content of the first tab</div>
<div title="Tab 2">Content of the second tab</div>
</lm-tabs>
<input id="btn1" type="button" value="Select Second Tab" />
<script>
// My web component element
let instance = document.getElementById('root');
// Bind event to my button
document.getElementById("btn1").addEventListener("click", () => {
instance.selected = 1;
})
</script>
</html>