@codegouvfr/react-dsfr
Version:
French State Design System React integration library
61 lines (47 loc) • 1.55 kB
JavaScript
/*! DSFR v1.13.2 | SPDX-License-Identifier: MIT | License-Filename: LICENSE.md | restricted use (see terms and conditions) */
const config = {
prefix: 'fr',
namespace: 'dsfr',
organisation: '@gouvfr',
version: '1.13.2'
};
const api = window[config.namespace];
const TagEvent = {
DISMISS: api.internals.ns.event('dismiss')
};
class TagDismissible extends api.core.Instance {
static get instanceClassName () {
return 'TagDismissible';
}
init () {
this.listenClick();
}
handleClick () {
this.focusClosest();
switch (api.mode) {
case api.Modes.ANGULAR:
case api.Modes.REACT:
case api.Modes.VUE:
this.request(this.verify.bind(this));
break;
default:
this.remove();
}
this.dispatch(TagEvent.DISMISS);
}
verify () {
if (document.body.contains(this.node)) this.warn(`a TagDismissible has just been dismissed and should be removed from the dom. In ${api.mode} mode, the api doesn't handle dom modification. An event ${TagEvent.DISMISS} is dispatched by the element to trigger the removal`);
}
}
const TagSelector = {
PRESSABLE: `${api.internals.ns.selector('tag')}[aria-pressed]`,
DISMISSIBLE: `${api.internals.ns.selector('tag--dismiss')}`
};
api.tag = {
TagDismissible: TagDismissible,
TagSelector: TagSelector,
TagEvent: TagEvent
};
api.internals.register(api.tag.TagSelector.PRESSABLE, api.core.Toggle);
api.internals.register(api.tag.TagSelector.DISMISSIBLE, api.tag.TagDismissible);
//# sourceMappingURL=tag.module.js.map