UNPKG

flowbite-2.0

Version:

The most popular library of interactive components built with Tailwind CSS

129 lines 5 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; import instances from '../../dom/instances'; var Default = { defaultTabId: null, activeClasses: 'text-blue-600 hover:text-blue-600 dark:text-blue-500 dark:hover:text-blue-500 border-blue-600 dark:border-blue-500', inactiveClasses: 'dark:border-transparent text-gray-500 hover:text-gray-600 dark:text-gray-400 border-gray-100 hover:border-gray-300 dark:border-gray-700 dark:hover:text-gray-300', onShow: function () { }, }; var Tabs = /** @class */ (function () { function Tabs(accordionEl, items, options) { if (accordionEl === void 0) { accordionEl = null; } if (items === void 0) { items = []; } if (options === void 0) { options = Default; } this._accordionEl = accordionEl; this._items = items; this._activeTab = options ? this.getTab(options.defaultTabId) : null; this._options = __assign(__assign({}, Default), options); this._initialized = false; this.init(); instances.addInstance('Tabs', this, this._accordionEl.id, true); } Tabs.prototype.init = function () { var _this = this; if (this._items.length && !this._initialized) { // set the first tab as active if not set by explicitly if (!this._activeTab) { this.setActiveTab(this._items[0]); } // force show the first default tab this.show(this._activeTab.id, true); // show tab content based on click this._items.map(function (tab) { tab.triggerEl.addEventListener('click', function () { _this.show(tab.id); }); }); } }; Tabs.prototype.destroy = function () { if (this._initialized) { this._initialized = false; } }; Tabs.prototype.removeInstance = function () { this.destroy(); instances.removeInstance('Tabs', this._accordionEl.id); }; Tabs.prototype.destroyAndRemoveInstance = function () { this.destroy(); this.removeInstance(); }; Tabs.prototype.getActiveTab = function () { return this._activeTab; }; Tabs.prototype.setActiveTab = function (tab) { this._activeTab = tab; }; Tabs.prototype.getTab = function (id) { return this._items.filter(function (t) { return t.id === id; })[0]; }; Tabs.prototype.show = function (id, forceShow) { var _a, _b; var _this = this; if (forceShow === void 0) { forceShow = false; } var tab = this.getTab(id); // don't do anything if already active if (tab === this._activeTab && !forceShow) { return; } // hide other tabs this._items.map(function (t) { var _a, _b; if (t !== tab) { (_a = t.triggerEl.classList).remove.apply(_a, _this._options.activeClasses.split(' ')); (_b = t.triggerEl.classList).add.apply(_b, _this._options.inactiveClasses.split(' ')); t.targetEl.classList.add('hidden'); t.triggerEl.setAttribute('aria-selected', 'false'); } }); // show active tab (_a = tab.triggerEl.classList).add.apply(_a, this._options.activeClasses.split(' ')); (_b = tab.triggerEl.classList).remove.apply(_b, this._options.inactiveClasses.split(' ')); tab.triggerEl.setAttribute('aria-selected', 'true'); tab.targetEl.classList.remove('hidden'); this.setActiveTab(tab); // callback function this._options.onShow(this, tab); }; return Tabs; }()); export function initTabs() { document.querySelectorAll('[data-tabs-toggle]').forEach(function ($parentEl) { var tabItems = []; var defaultTabId = null; $parentEl .querySelectorAll('[role="tab"]') .forEach(function ($triggerEl) { var isActive = $triggerEl.getAttribute('aria-selected') === 'true'; var tab = { id: $triggerEl.getAttribute('data-tabs-target'), triggerEl: $triggerEl, targetEl: document.querySelector($triggerEl.getAttribute('data-tabs-target')), }; tabItems.push(tab); if (isActive) { defaultTabId = tab.id; } }); new Tabs($parentEl, tabItems, { defaultTabId: defaultTabId, }); }); } if (typeof window !== 'undefined') { window.Tabs = Tabs; window.initTabs = initTabs; } export default Tabs; //# sourceMappingURL=index.js.map