UNPKG

@agnos-ui/core

Version:

Framework-agnostic headless component library.

83 lines (82 loc) 2.53 kB
import { createTransition } from "./services/transitions/baseTransitions.js"; import { writablesForProps, idWithDefault, stateStores } from "./utils/stores.js"; import { g as createAttributesDirective, s as mergeDirectives } from "./dom-Bb5ZCr_a.js"; import { e as typeFunction, j as typeString, b as typeBoolean } from "./writables-DYGjj5T3.js"; import { computed } from "@amadeus-it-group/tansu"; import { noop } from "./utils/func.js"; import { createWidgetFactory } from "./utils/widget.js"; const defaultCollapseConfig = { visible: false, onVisibleChange: noop, onShown: noop, onHidden: noop, animated: true, animatedOnInit: false, id: "", transition: noop }; function getCollapseDefaultConfig() { return { ...defaultCollapseConfig }; } const commonCollapseConfigValidator = { onVisibleChange: typeFunction, onHidden: typeFunction, onShown: typeFunction, animatedOnInit: typeBoolean, animated: typeBoolean, visible: typeBoolean, id: typeString, transition: typeFunction }; const createCollapse = createWidgetFactory("collapse", (config) => { const [ { transition$, animatedOnInit$, animated$, visible$: requestedVisible$, onVisibleChange$, onHidden$, onShown$, id$: _dirtyId$, ...stateProps }, patch ] = writablesForProps(defaultCollapseConfig, config, commonCollapseConfigValidator); const id$ = idWithDefault(_dirtyId$); const transition = createTransition({ props: { transition: transition$, visible: requestedVisible$, animated: animated$, animatedOnInit: animatedOnInit$, onVisibleChange: onVisibleChange$, onHidden: onHidden$, onShown: onShown$ } }); const visible$ = transition.stores.visible$; const hidden$ = transition.stores.hidden$; return { ...stateStores({ ...stateProps, visible$, hidden$ }), patch, api: { open: transition.api.show, close: transition.api.hide, toggle: transition.api.toggle }, directives: { collapseDirective: mergeDirectives( transition.directives.directive, createAttributesDirective(() => ({ attributes: { id: id$ } })) ), triggerDirective: createAttributesDirective(() => ({ attributes: { "aria-expanded": computed(() => `${visible$()}`), "aria-controls": id$ }, events: { click: () => transition.api.toggle() } })) } }; }); export { createCollapse as c, getCollapseDefaultConfig as g };