@agnos-ui/core-bootstrap
Version:
Styles and component interface extensions necessary to use AgnosUI with Bootstrap.
89 lines (88 loc) • 3.04 kB
JavaScript
"use strict";
const baseTransitions = require("@agnos-ui/core/services/transitions/baseTransitions");
const stores = require("@agnos-ui/core/utils/stores");
const directive = require("@agnos-ui/core/utils/directive");
const writables = require("@agnos-ui/core/utils/writables");
const collapse = require("./collapse-sUYbZqEx.cjs");
const tansu = require("@amadeus-it-group/tansu");
const func = require("@agnos-ui/core/utils/func");
const widget = require("@agnos-ui/core/utils/widget");
const defaultCollapseConfig = {
visible: true,
horizontal: false,
onVisibleChange: func.noop,
onShown: func.noop,
onHidden: func.noop,
animated: true,
animatedOnInit: false,
className: "",
id: ""
};
function getCollapseDefaultConfig() {
return { ...defaultCollapseConfig };
}
const commonCollapseConfigValidator = {
horizontal: writables.typeBoolean,
onVisibleChange: writables.typeFunction,
onHidden: writables.typeFunction,
onShown: writables.typeFunction,
animatedOnInit: writables.typeBoolean,
animated: writables.typeBoolean,
className: writables.typeString,
visible: writables.typeBoolean,
id: writables.typeString
};
const createCollapse = widget.createWidgetFactory("collapse", (config) => {
const [
{ animatedOnInit$, animated$, visible$: requestedVisible$, onVisibleChange$, onHidden$, onShown$, horizontal$, id$: _dirtyId$, ...stateProps },
patch
] = stores.writablesForProps(defaultCollapseConfig, config, commonCollapseConfigValidator);
const id$ = stores.idWithDefault(_dirtyId$);
const currentTransitionFn$ = tansu.asWritable(tansu.computed(() => horizontal$() ? collapse.collapseHorizontalTransition : collapse.collapseVerticalTransition));
const transition = baseTransitions.createTransition({
props: {
transition: currentTransitionFn$,
visible: requestedVisible$,
animated: animated$,
animatedOnInit: animatedOnInit$,
onVisibleChange: onVisibleChange$,
onHidden: onHidden$,
onShown: onShown$
}
});
const visible$ = transition.stores.visible$;
const hidden$ = transition.stores.hidden$;
return {
...stores.stateStores({ ...stateProps, visible$, hidden$, horizontal$ }),
patch,
api: {
open: transition.api.show,
close: transition.api.hide,
toggle: transition.api.toggle
},
directives: {
collapseDirective: directive.mergeDirectives(
transition.directives.directive,
directive.createAttributesDirective(() => ({
attributes: {
id: id$
},
classNames: {
"au-collapse": stores.true$
}
}))
),
triggerDirective: directive.createAttributesDirective(() => ({
attributes: {
"aria-expanded": tansu.computed(() => `${visible$()}`),
"aria-controls": id$
},
events: {
click: () => transition.api.toggle()
}
}))
}
};
});
exports.createCollapse = createCollapse;
exports.getCollapseDefaultConfig = getCollapseDefaultConfig;