'use strict';

// Basic
const color = 'color';
const fontFamily = 'font-family';
const backgroundColor = 'background-color';
// Typography
const text = `text ${color} ${fontFamily}`;
const textDanger = `text-danger ${text}`;
const heading = `heading ${text}`;
const heading1 = `heading-1 ${heading}`;
const heading2 = `heading-2 ${heading}`;
const heading3 = `heading-3 ${heading}`;
const heading4 = `heading-4 ${heading}`;
const heading5 = `heading-5 ${heading}`;
const link = `link text ${fontFamily}`;
// Button
const button = `button ${text}`;
const buttonPrimary = `button-primary ${button}`;
const buttonSecondary = `button-secondary ${button}`;
const buttonDanger = `button-danger ${button}`;
const buttonSuccess = `button-success ${button}`;
const buttonWarning = `button-warning ${button}`;
const buttonInfo = `button-info ${button}`;
const buttonLight = `button-light ${button}`;
const buttonDark = `button-dark ${button}`;
const buttonLink = `button-link ${button}`;
const buttonOutlinePrimary = `button-outline-primary ${button}`;
const buttonOutlineSecondary = `button-outline-secondary ${button}`;
const buttonLoading = `button-loading`;
const buttonDisabled = `button-disabled ${button}`;
// Input
const label = `label ${text}`;
const input = `input ${text} ${backgroundColor}`;
const inputGroup = `input-group ${input}`;
const inputInvalid = `input-invalid ${input}`;
const inputDisabled = `input-disabled ${input}`;
const inputFocused = `input-focused ${input}`;
const inputInvalidAndFocused = `input-invalid-and-focused ${input}`;
const inputRadio = `input-radio`;
const inputRadioFocused = `input-radio-focused ${inputRadio}`;
const inputRadioChecked = `input-radio-checked ${inputRadio}`;
const inputRadioCheckedFocused = `input-radio-checked-focused ${inputRadio}`;
const inputRadioInvalid = `input-radio-invalid ${inputRadio}`;
const inputCheckbox = `input-checkbox`;
const inputCheckboxInvalid = `input-checkbox-invalid ${inputCheckbox}`;
const inputCheckboxFocused = `input-checkbox-focused ${inputCheckbox}`;
const inputCheckboxChecked = `input-checkbox-checked ${inputCheckbox}`;
const inputCheckboxCheckedFocused = `input-checkbox-checked-focused ${inputCheckbox}`;
const inputAdornment = `input-adornment ${text}`;
// Alert
const alert = `alert ${text}`;
const alertDanger = `alert-danger ${alert}`;
// Tooltip
const tooltip = `tooltip ${text}`;
const tooltipIcon = `tooltip-icon ${text}`;
const tooltipInner = `tooltip-inner ${text}`;
// Card
const card = `card ${text} ${backgroundColor}`;
// Table
const table = `table ${text} ${backgroundColor}`;
const tableRow = `table-row ${text} ${backgroundColor}`;
const tableCell = `table-cell ${text} ${backgroundColor}`;
const tableHead = `table-head`;
const tableHeadRow = `table-head-row ${text} ${backgroundColor}`;
const tableHeadCell = `table-head-cell ${tableCell}`;
const tableFoot = `table-foot`;
const tableFootRow = `table-foot-row ${text} ${backgroundColor}`;
const tableFootCell = `table-foot-cell ${tableCell}`;
const tableCellEven = `table-cell-even ${tableCell}`;
const tableCellOdd = `table-cell-odd ${tableCell}`;
const getAlternateTableCellPart = (index) => index % 2 ? tableCellEven : tableCellOdd;
const tableEmpty = `table-empty ${text} ${backgroundColor}`;
const tableError = `table-error ${text} ${backgroundColor}`;
// Pagination
const paginationButton = `pagination-button ${button}`;
const paginationButtonDisabled = `pagination-button-disabled ${buttonDisabled}`;
const paginationButtonText = `pagination-button-text ${text}`;
const paginationButtonIcon = `pagination-button-icon ${text}`;
const paginationButtonIconNext = `pagination-button-icon-next ${paginationButtonIcon}`;
const paginationButtonIconPrevious = `pagination-button-icon-previous ${paginationButtonIcon}`;
// Loading spinner
const loadingSpinner = `loading-spinner`;
// Badge
const badge = `badge ${fontFamily}`;
const badgePrimary = `${badge} badge-primary`;
const badgeSecondary = `${badge} badge-secondary`;
const badgeSuccess = `${badge} badge-success`;
const badgeDanger = `${badge} badge-danger`;
const badgeWarning = `${badge} badge-warning`;
const badgeInfo = `${badge} badge-info`;
const badgeLight = `${badge} badge-light`;
const badgeDark = `${badge} badge-dark`;
// Dropdown-menu
const dropdownMenu = `dropdown-menu ${text}`;
const dropdownMenuButton = `dropdown-menu-button ${buttonPrimary}`;
// Radio List Item
const radioListItem = `radio-list-item ${text}`;
// Skeleton
const skeleton = `skeleton`;
// Image
const image = `image`;
// Component specific
// This allows specific sections of a component to be hidden, for example
// ::part(billing-form) { display: none; }
const billingForm = `billing-form`;
const checkoutSummary = `checkout-summary`;
// Filters
const filterMenu = `filter-menu`;
const filterParam = `filter-param`;

exports.alert = alert;
exports.alertDanger = alertDanger;
exports.badge = badge;
exports.badgeDanger = badgeDanger;
exports.badgeDark = badgeDark;
exports.badgeInfo = badgeInfo;
exports.badgeLight = badgeLight;
exports.badgePrimary = badgePrimary;
exports.badgeSecondary = badgeSecondary;
exports.badgeSuccess = badgeSuccess;
exports.badgeWarning = badgeWarning;
exports.billingForm = billingForm;
exports.buttonDanger = buttonDanger;
exports.buttonDark = buttonDark;
exports.buttonInfo = buttonInfo;
exports.buttonLight = buttonLight;
exports.buttonLink = buttonLink;
exports.buttonLoading = buttonLoading;
exports.buttonOutlinePrimary = buttonOutlinePrimary;
exports.buttonOutlineSecondary = buttonOutlineSecondary;
exports.buttonPrimary = buttonPrimary;
exports.buttonSecondary = buttonSecondary;
exports.buttonSuccess = buttonSuccess;
exports.buttonWarning = buttonWarning;
exports.card = card;
exports.checkoutSummary = checkoutSummary;
exports.dropdownMenu = dropdownMenu;
exports.dropdownMenuButton = dropdownMenuButton;
exports.filterMenu = filterMenu;
exports.filterParam = filterParam;
exports.getAlternateTableCellPart = getAlternateTableCellPart;
exports.heading1 = heading1;
exports.heading2 = heading2;
exports.heading3 = heading3;
exports.heading4 = heading4;
exports.heading5 = heading5;
exports.image = image;
exports.input = input;
exports.inputAdornment = inputAdornment;
exports.inputCheckbox = inputCheckbox;
exports.inputCheckboxChecked = inputCheckboxChecked;
exports.inputCheckboxCheckedFocused = inputCheckboxCheckedFocused;
exports.inputCheckboxFocused = inputCheckboxFocused;
exports.inputCheckboxInvalid = inputCheckboxInvalid;
exports.inputDisabled = inputDisabled;
exports.inputFocused = inputFocused;
exports.inputGroup = inputGroup;
exports.inputInvalid = inputInvalid;
exports.inputInvalidAndFocused = inputInvalidAndFocused;
exports.inputRadio = inputRadio;
exports.inputRadioChecked = inputRadioChecked;
exports.inputRadioCheckedFocused = inputRadioCheckedFocused;
exports.inputRadioFocused = inputRadioFocused;
exports.inputRadioInvalid = inputRadioInvalid;
exports.label = label;
exports.link = link;
exports.loadingSpinner = loadingSpinner;
exports.paginationButton = paginationButton;
exports.paginationButtonDisabled = paginationButtonDisabled;
exports.paginationButtonIconNext = paginationButtonIconNext;
exports.paginationButtonIconPrevious = paginationButtonIconPrevious;
exports.paginationButtonText = paginationButtonText;
exports.radioListItem = radioListItem;
exports.skeleton = skeleton;
exports.table = table;
exports.tableCell = tableCell;
exports.tableEmpty = tableEmpty;
exports.tableError = tableError;
exports.tableFoot = tableFoot;
exports.tableFootCell = tableFootCell;
exports.tableFootRow = tableFootRow;
exports.tableHead = tableHead;
exports.tableHeadCell = tableHeadCell;
exports.tableHeadRow = tableHeadRow;
exports.tableRow = tableRow;
exports.text = text;
exports.textDanger = textDanger;
exports.tooltip = tooltip;
exports.tooltipIcon = tooltipIcon;
exports.tooltipInner = tooltipInner;
