svantic
Version:
A set of Fomantic-UI components for Svelte framework
96 lines (71 loc) • 3.09 kB
JavaScript
import { writable } from 'svelte/store'
import { transitionLoader, dropdownLoader, modalLoader, progressLoader, dimmerLoader, toastLoader, tabLoader, sliderLoader, sidebarLoader, searchLoader, ratingLoader, checkboxLoader, calendarLoader, accordionLoader, embedLoader, popupLoader, load } from './loaders'
const getFunction = (type, selection) => (...args) => selection[type]?.(...args)
export function module(type, settings = {}, ...args) {
const { set, subscribe } = writable()
let _value
let _selection
let _module
let _settings = settings
let _resolve = (_) => { }
let _ready = new Promise((resolve) => {
_resolve = resolve
})
const init = new Promise(async resolve => {
if (!window?.['jQuery']?.[type]) {
await load(...args)
}
resolve()
})
return {
async set(value) {
await init
_module = getFunction(type, _selection = jQuery(value))
_module(_settings)
_value = value
_resolve()
set(value)
},
subscribe: subscribe,
get ready() {
return _ready
},
get selection() {
return _selection
}
,
module(...args) {
if (args.length) {
_module(...args)
}
return _module
},
async setSettings(settings) {
if (!_module) return
_module(_settings = settings)
},
settings(...args) {
if (args.length) {
_module?.(_settings = args[0])
}
return _settings
},
get value() {
return _value
}
}
}
export const dropdown = (settings) => module('dropdown', settings, transitionLoader, dropdownLoader)
export const modal = (settings) => module('modal', settings, transitionLoader, dimmerLoader, modalLoader)
export const progress = (settings) => module('progress', settings, progressLoader)
export const toast = (settings) => module('toast', settings, toastLoader)
export const tab = (settings) => module('tab', settings, tabLoader)
export const slider = (settings) => module('slider', settings, sliderLoader)
export const sidebar = (settings) => module('sidebar', settings, sidebarLoader)
export const search = (settings) => module('search', settings, searchLoader)
export const rating = (settings) => module('rating', settings, ratingLoader)
export const checkbox = (settings) => module('checkbox', settings, checkboxLoader)
export const calendar = (settings) => module('calendar', settings, dimmerLoader, popupLoader, transitionLoader, dropdownLoader, calendarLoader)
export const accordion = (settings) => module('accordion', settings, accordionLoader)
export const embed = (settings) => module('embed', settings, popupLoader, embedLoader)
export const popup = (settings) => module('popup', settings, transitionLoader, popupLoader)