preline
Version:
Preline UI is an open-source set of prebuilt UI components based on the utility-first Tailwind CSS framework.
182 lines (164 loc) • 5.6 kB
text/typescript
import { afterTransition, getClassProperty } from '../utils';
import HSCopyMarkup from '../plugins/copy-markup/core';
import HSAccordion from '../plugins/accordion/core';
import HSCarousel from '../plugins/carousel/core';
import HSCollapse from '../plugins/collapse/core';
import HSComboBox from '../plugins/combobox/core';
import HSDataTable from '../plugins/datatable/core';
import HSDatepicker from '../plugins/datepicker/core';
import HSDropdown from '../plugins/dropdown/core';
import HSFileUpload from '../plugins/file-upload/core';
import HSInputNumber from '../plugins/input-number/core';
import HSLayoutSplitter from '../plugins/layout-splitter/core';
import HSOverlay from '../plugins/overlay/core';
import HSPinInput from '../plugins/pin-input/core';
import HSRangeSlider from '../plugins/range-slider/core';
import HSRemoveElement from '../plugins/remove-element/core';
import HSScrollNav from '../plugins/scroll-nav/core';
import HSScrollspy from '../plugins/scrollspy/core';
import HSSelect from '../plugins/select/core';
import HSStepper from '../plugins/stepper/core';
import HSStrongPassword from '../plugins/strong-password/core';
import HSTabs from '../plugins/tabs/core';
import HSTextareaAutoHeight from '../plugins/textarea-auto-height/core';
import HSThemeSwitch from '../plugins/theme-switch/core';
import HSToggleCount from '../plugins/toggle-count/core';
import HSTogglePassword from '../plugins/toggle-password/core';
import HSTooltip from '../plugins/tooltip/core';
import HSTreeView from '../plugins/tree-view/core';
import { TCollectionItem } from './types';
const getGlobal = () => globalThis as any;
const isDataTableAvailable = () => {
const g = getGlobal();
return typeof g.DataTable !== 'undefined' && typeof g.jQuery !== 'undefined';
};
const isFileUploadAvailable = () => {
const g = getGlobal();
return typeof g._ !== 'undefined' && typeof g.Dropzone !== 'undefined';
};
const isRangeSliderAvailable = () => {
const g = getGlobal();
return typeof g.noUiSlider !== 'undefined';
};
const isDatepickerAvailable = () => {
const g = getGlobal();
return typeof g.VanillaCalendarPro !== 'undefined';
};
export const COLLECTIONS: TCollectionItem[] = [
{
key: 'copy-markup',
fn: HSCopyMarkup,
collection: '$hsCopyMarkupCollection',
},
{ key: 'accordion', fn: HSAccordion, collection: '$hsAccordionCollection' },
{ key: 'carousel', fn: HSCarousel, collection: '$hsCarouselCollection' },
{ key: 'collapse', fn: HSCollapse, collection: '$hsCollapseCollection' },
{ key: 'combobox', fn: HSComboBox, collection: '$hsComboBoxCollection' },
{
key: 'datatable',
fn: isDataTableAvailable() ? HSDataTable : null,
collection: '$hsDataTableCollection',
},
{
key: 'datepicker',
fn: isDatepickerAvailable() ? HSDatepicker : null,
collection: '$hsDatepickerCollection',
},
{ key: 'dropdown', fn: HSDropdown, collection: '$hsDropdownCollection' },
{
key: 'file-upload',
fn: isFileUploadAvailable() ? HSFileUpload : null,
collection: '$hsFileUploadCollection',
},
{
key: 'input-number',
fn: HSInputNumber,
collection: '$hsInputNumberCollection',
},
{
key: 'layout-splitter',
fn: HSLayoutSplitter,
collection: '$hsLayoutSplitterCollection',
},
{ key: 'overlay', fn: HSOverlay, collection: '$hsOverlayCollection' },
{ key: 'pin-input', fn: HSPinInput, collection: '$hsPinInputCollection' },
{
key: 'range-slider',
fn: isRangeSliderAvailable() ? HSRangeSlider : null,
collection: '$hsRangeSliderCollection',
},
{
key: 'remove-element',
fn: HSRemoveElement,
collection: '$hsRemoveElementCollection',
},
{ key: 'scroll-nav', fn: HSScrollNav, collection: '$hsScrollNavCollection' },
{ key: 'scrollspy', fn: HSScrollspy, collection: '$hsScrollspyCollection' },
{ key: 'select', fn: HSSelect, collection: '$hsSelectCollection' },
{ key: 'stepper', fn: HSStepper, collection: '$hsStepperCollection' },
{
key: 'strong-password',
fn: HSStrongPassword,
collection: '$hsStrongPasswordCollection',
},
{ key: 'tabs', fn: HSTabs, collection: '$hsTabsCollection' },
{
key: 'textarea-auto-height',
fn: HSTextareaAutoHeight,
collection: '$hsTextareaAutoHeightCollection',
},
{
key: 'theme-switch',
fn: HSThemeSwitch,
collection: '$hsThemeSwitchCollection',
},
{
key: 'toggle-count',
fn: HSToggleCount,
collection: '$hsToggleCountCollection',
},
{
key: 'toggle-password',
fn: HSTogglePassword,
collection: '$hsTogglePasswordCollection',
},
{ key: 'tooltip', fn: HSTooltip, collection: '$hsTooltipCollection' },
{ key: 'tree-view', fn: HSTreeView, collection: '$hsTreeViewCollection' },
];
export const HSStaticMethods = {
getClassProperty,
afterTransition,
autoInit(collection: string | string[] = 'all') {
if (collection === 'all') {
COLLECTIONS.forEach(({ fn }) => {
fn?.autoInit?.();
});
return;
}
const target = Array.isArray(collection) ? collection : [collection];
COLLECTIONS.forEach(({ key, fn }) => {
if (target.includes(key)) fn?.autoInit?.();
});
},
cleanCollection(name: string | string[] = 'all') {
if (typeof window === 'undefined') return;
if (name === 'all') {
COLLECTIONS.forEach(({ collection }) => {
if ((window as any)[collection] instanceof Array) {
(window as any)[collection] = [];
}
});
return;
}
const target = Array.isArray(name) ? name : [name];
COLLECTIONS.forEach(({ key, collection }) => {
if (
target.includes(key) &&
(window as any)[collection] instanceof Array
) {
(window as any)[collection] = [];
}
});
},
};
export default HSStaticMethods;