UNPKG

@edugouvfr/ngx-dsfr-ext

Version:

NgxDsfrExt est une extension au package @edugouvfr/ngx-dsfr (portage Angular des éléments DSFR)

627 lines (621 loc) 22.5 kB
import * as i0 from '@angular/core'; import { OnInit, OnDestroy, ElementRef, EventEmitter } from '@angular/core'; import { DsfrSelectOption, DefaultValueAccessorComponent, DsfrSeverity } from '@edugouvfr/ngx-dsfr'; /** * Constantes des identifiants d'actions de formatage supportés. */ declare enum FormatConst { ALIGN = "align", BACKGROUND = "background", BLOCKQUOTE = "blockquote", BOLD = "bold", CLEAN = "clean", CODE_BLOCK = "code-block", COLOR = "color", DIRECTION = "direction", HEADER = "header", IMAGE = "image", INDENT = "indent", ITALIC = "italic", LINK = "link", LIST = "list", SCRIPT = "script", SIZE = "size", STRIKE = "strike", UNDERLINE = "underline" } /** * Type correspondant aux identifiants d'actions de formatage supportés. */ type Format = `${FormatConst}`; /** * Mapping des clés d'internationalisation des libellés des actions de formatage. * * Selon le contexte, le libellé sera utilisé comme tooltip, libellé de champ ou transcription accessible. */ declare const FORMAT_I18N_KEYS: Record<Format, string | Record<string, string>>; /** * Mapping des icônes par défaut correspondant aux actions de formatage supportées. * * Note de conception (RPA+KGE) pour l'instant on décide de maintenir les icônes dans une structure à part afin de * verrouiller le modèle. Si demain on souhaite donner à l'utilisateur la possibilité de surcharger les icônes des * actions de formatage alors on pourra réintégrer les icônes au modèle en augmentant l'interface `BaseFormatControl` * d'une propriété `icon` (rétrocompatible car la propriété aura une valeur par défaut dans le modèle par défaut) */ declare const FORMAT_ICON: Record<Format, string | Record<string, string> | undefined>; /** * Les différents mode supportés par les contrôles de formatage à valeur unique. */ declare enum ControlMode { /** * Active/désactive le format. */ TOGGLE = "toggle", /** * Le format dépend de la capture d'un paramètre utilisateur. */ PROMPT = "prompt", /** * Action issue d'une des options d'une action multivaluée érigée en action unique autonome. * Ex. je veux un bouton permettant de formater en Titre de niveau 1 (H1) */ CUSTOM = "custom", /** * Permet de représenter l'une des options d'une action multivaluée. */ VALUE = "valued", /** * Dénote une action de formatage multivaluée à afficher sous forme de selecteur. */ SELECT = "select", /** * Dénote une action de formatage multivaluée à afficher sous de groupe de bouton exclusif. */ RADIO = "radio", /** * Mode spécial dénotant le contrôle de réinitialisation. */ CLEAN = "clean" } /** * Les valeurs possibles pour le format 'size'. */ declare enum SizeValue { SMALL = "small", NORMAL = "normal", LARGE = "large", HUGE = "huge" } /** * Les valeurs possibles pour le format 'header'. */ declare enum HeaderValue { NORMAL = 0, H1 = 1, H2 = 2, H3 = 3, H4 = 4, H5 = 5, H6 = 6 } /** * Les valeurs possibles pour le format 'align'. */ declare enum AlignValue { LEFT = "normal", CENTER = "center", RIGHT = "right", JUSTIFY = "justify" } /** * Les valeurs possibles pour le format 'list'. */ declare enum ListValue { ORDERED = "ordered", BULLET = "bullet", CHECKBOX = "unchecked" } /** * Les valeurs possibles pour le format 'script'. */ declare enum ScriptValue { /** * Subscript. */ SUBSCRIPT = "sub", /** * Superscript. */ SUPERSCRIPT = "super" } /** * Les valeurs possibles pour le format 'indent'. */ declare enum IndentValue { /** * Decrease indent. */ DECREASE = "-1", /** * Increase indent. */ INCREASE = "+1" } /** * Les valeurs possibles pour le format 'direction'. */ declare enum DirectionValue { /** * De gauche à droite. */ NORMAL = "normal", /** * De droite à gauche. */ RTL = "rtl" } /** * Représente une tâche de formatage de base. */ interface DsfrBaseFormatControl { /** * L'identifiant Quill du format. */ name: Format; /** * Le mode du contrôle de format. */ mode: ControlMode; } /** * Représente une action simple (bouton). */ interface DsfrSingleFormatControl extends DsfrBaseFormatControl { /** * Optionnel : permet de surcharger l'icône illustrative. * Doit être une classe CSS Remix wrappée DSFR. Ex. 'fr-icon-bold'. */ icon?: string; } /** * Permet de sortir une des options de formatage d'une action multivaluée et de l'ériger en action unique autonome. */ declare class DsfrCustomFormatControl implements DsfrSingleFormatControl { name: Format; value: string | number | false; /** * Le mode d'une action avec valeur prédéfinie est forcément 'valued'. */ mode: ControlMode; /** * Construit une action de formatage valuée. * * @param name le format de cette action * @param value la valeur spécifique de cette action de formatage */ constructor(name: Format, value: string | number | false); } /** * Action de type interrupteur on/off avec valeur booléenne. */ declare class DsfrToggleFormatControl implements DsfrSingleFormatControl { name: Format; /** * Le mode d'une action avec valeur prédéfinie est forcément 'toggle'. */ mode: ControlMode; constructor(name: Format); } /** * */ declare class DsfrPromptFormatControl implements DsfrSingleFormatControl { name: Format; /** * Le mode d'une action avec valeur prédéfinie est forcément 'prompt'. */ mode: ControlMode; constructor(name: Format); } /** * Représente une des actions possibles d'une méta-action multi-valuée. */ declare class DsfrValueFormatControl implements Omit<DsfrSingleFormatControl, 'name'> { value: string | number | false; /** * Le mode d'une action avec valeur prédéfinie est forcément 'valued'. */ mode: ControlMode; /** * Construit une action de formatage valuée. * * @param value la valeur spécifique de cette action de formatage */ constructor(value: string | number | false); } /** * Représente une méta-tâche qui s'applique à travers la sélection d'une valeur concrète au sein d'une liste de valeurs. */ interface DsfrMultivaluedFormatControl extends DsfrBaseFormatControl { /** * Permet d'indiquer si le contrôle multivalué doit s'afficher au sein d'un groupe dans la toolbar. */ group: boolean; /** * Valeurs possibles pour cette action de formatage. */ values: DsfrValueFormatControl[]; } /** * Représente une action multi-valuée en mode radio. */ declare class RadioFormatControl implements DsfrMultivaluedFormatControl { name: Format; values: DsfrValueFormatControl[]; group: boolean; mode: ControlMode; /** * Construit un control de type radio. * * @param values les différentes valeurs possibles pour le control de type radio */ constructor(name: Format, values: DsfrValueFormatControl[], group: boolean); } /** * Représente une action multi-valuée en mode select. */ declare class SelectFormatControl implements DsfrMultivaluedFormatControl { name: Format; values: DsfrValueFormatControl[]; mode: ControlMode; group: boolean; /** * Construit un control de type select. * * @param values les différentes valeurs possibles pour le control de type select. */ constructor(name: Format, values: DsfrValueFormatControl[]); } /** * Représente un groupe d'actions. */ declare class DsfrGroupFormatControl { i18nLabelKey: string; controls: DsfrSingleFormatControl[]; group: boolean; /** * Construit un control de type radio. * * @param values les différentes valeurs possibles pour le control de type radio */ constructor(i18nLabelKey: string, controls: DsfrSingleFormatControl[]); } /** * Type générique encapsulant toutes les types de tâches de formatage. */ type FormatControl = DsfrSingleFormatControl | DsfrMultivaluedFormatControl; /** * Tableau permettant de regrouper des contrôles uniques avec un libellé accessible. */ declare class ControlArray extends Array<DsfrSingleFormatControl> { name: string; constructor(name: string, ...items: DsfrSingleFormatControl[]); } /** * Type décrivant un élément de la barre d'outil qui peut être soit une tâche unitaire soit un regroupement de tâches. */ type ToolbarControl = FormatControl | ControlArray; /** * Options par défaut de la toolbar. */ declare const DEFAULT_TOOLBAR_OPTIONS: ToolbarControl[]; /** * Les quatre modalités de présentation supportées par la toolbar pour afficher les contrôles de format. */ type ControlViewType = 'btn' | 'array' | 'radio' | 'select'; declare class EduEditorToolbarComponent implements OnInit, OnDestroy { /** * L'identifiant du tag hôte pour le composant éditeur. */ editorId: string; /** * Active la lecure seule. */ /** * Options de la toolbar. */ toolbarOptions: ToolbarControl[]; /** @internal */ toolbar: ElementRef; /** * Modèle de présentation spécifique pour les select (header+size). * RPA: je passe par un modèle de présentation spécifique et je n'utilise pas directement un binding sur * currentSelectionFormats car j'ai besoin de reflêter l'état de sélection utilisateur sinon voici ce qui ce passe : * l'utilisateur sélectionne une portion de texte et sélectionnz un niveau de titre H2, puis il place le curseur dans * un paragraphe quelconque, le select reste sur H2 car la propriété interne 'value' n'est pas mise à jour lors de * la sélection utilisateur (binding non bi-directionnel). C'est pourquoi il est nécessaire de passer par un modèle * de présentation dédié à la gestion des select. */ protected selectModel: any; /** * Permet de gérer la valeur tabindex de la toolbar. */ protected focusable: boolean; /** * Pointeur sur le dernier élément de contrôle actif, permet de restaurer le focus directement sur celui-ci au * SHIFT+TAB. */ protected lastActiveControlElement?: HTMLElement; /** * Modèle de présentation interne exposant les formats de la sélection courante. */ private _currentSelectionFormats; private _unlistenFn; private _sub; private readonly ngZone; private readonly renderer2; private readonly elementRef; private readonly i18n; private readonly editorService; private focusMonitor; private el; ngOnInit(): void; ngOnDestroy(): void; /** * Retourne la clé du libellé internationalisé. * @param control le contôle de formatage */ getI18nKey(format: Format, value?: any): string; /** * Construit la clé i18n correspondant au nom du tableau de contrôles passé en paramètre. */ protected getArrayI18nKey(controlArray: ControlArray): string; /** * Construit la clé i18n correspondant au groupe de contrôles multivalués passé en paramètre. */ protected getGroupI18nKey(format: Format): string; /** * Handler sur l'input file associé à une inserion d'image. */ protected onImageInputFileChange(event: Event): void; /** * Permet de conditionner la structure HTML selon le type contrôle. */ protected getButtonType(control: FormatControl | FormatControl[]): ControlViewType; /** * Retourne l'icône correspondant au format passé en paramètre. * * @param format le format à considérer * @param value la vaaleur à prendre en compte le cas échéant * @returns la classe css correspondant à l'icône */ protected getIcon(format: Format, value?: undefined): string | undefined; /** * Détermine si l'option de format doit être activée ou pas. * * @param format le nom de contrôle de format * @param value la valeur de l'option considérée * @returns vrai si le couple format/value fait partie des formats de la sélection courante, faux sinon */ protected isValueActive(format: Format, value: string): boolean; /** * Retourne la liste des optiosn à affichier au sein du contrôle multivalué (select). * * @param control le contrôle multivalué à considéré */ protected getSelectOptions(control: DsfrMultivaluedFormatControl): DsfrSelectOption[]; /** * Permet d'indiquer si le contrôle de ce format doit être activé au niveau de la barre d'outils. * * @param format le format à considérer vis-à-vis des formats de la sélection courante * @returns vrai si ce format doit être actif, faux sinon */ protected isFormatActive(format: Format): boolean; /** * Permet de réagir aux actions utilisateur sur la toolbar. */ protected onToolbarControlPerform(event: Event, format: FormatControl, value?: string): void; /** * Permet d'écouter la capture d'une couleur par l'utilisateur. */ protected onColorPickerChange(event: Event, action: string): void; /** * Permet d'écouter les changement sur le format "list". * * @param action * @param event */ protected onListSelect(action: string, event: Event): void; /** * Permet de forcer la prise de focus sur le premier élément focusable de la barre d'outil lorsque le conteneur de * la toolbar reçoit le focus. */ protected onToolbarFocus(event: FocusEvent): void; /** * Handler sur la prise de focus d'un élément de la toolbar (gestion du tabindex de la toolbar). */ protected onToolbarFocusIn(event: FocusEvent): void; /** * Handler sur la perte de focus d'un élément de la toolbar (gestion du tabindex de la toolbar). */ protected onToolbarFocusOut(event: FocusEvent): void; /** * Permet de se mettre à l'écoute des actions utilisateur sur la barre d'outils. */ protected onToolbarKeydown(event: KeyboardEvent): void; /** * Retourne vrai si le format correspond à un contrôle d'action multivaluée, faux sinon. * * @param format le descripteur de format à considérer */ private isMultiValuedControl; private getOptionLabel; private performAction; /** * Détecte le clic en dehors du composant pour retirer le marqueur de focus custom sur la toolbar. */ private clickOutside; private _buildSelectOption; private findNextSiblingControl; private findPrevSiblingControl; /** * Recherche l'élément de contrôle focusable adjaçant à l'élément de contrôle actif. * * Cette fonction est utilisée pour pouvoir déplacer le focus lors de la navigation au clavier. * * @param siblingProperty La propriété permettant de récupérer le voisin suivant ou précédent (selon) * @param failoverFunction La fonction permettant de récupérer un élément focusable lorsqu'il n'y plus de suivant * @returns Une élément HTML sur lequel il sera possible de prendre le focus */ private findSiblingControl; /** * Recherche du conteneur de contrôle suivant. */ private findSiblingControlParent; private getRootContainer; /** * Search focusable control (depth first traversal). */ private getFocusableControl; private getFirstToolbarControl; private getLastToolbarControl; /** * Répercute les formats actifs de la sélection courante vers la toolbar. */ private _updateToolbar; /** * Retourne la valeur à sélectionner dans le cas de contôle multivalué (select). * * @internal */ private _getSelectedOption; /** * Supprime toutes les mises en forme sur la sélection courante. */ private _removeSelectionFormats; /** * Applique le format défini par l'utilisateur via la toolbar sur la sélection courante de l'éditeur. */ private _applyFormat; /** * Permet de capturer une couleur depuis un color-picker natif. * * @param selector le sélecteur permettant de requêter l'élément de contrôle complémentaire */ private _displayPromptElement; /** * Positionne l'image Base64 dans l'editeur. */ private _uploadImage; static ɵfac: i0.ɵɵFactoryDeclaration<EduEditorToolbarComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<EduEditorToolbarComponent, "edu-editor-toolbar", never, { "editorId": { "alias": "editorId"; "required": false; }; "toolbarOptions": { "alias": "toolbarOptions"; "required": false; }; }, {}, never, never, true, never>; } declare class DsfrEditorComponent extends DefaultValueAccessorComponent<string> implements OnInit, OnDestroy { /** * Options de la toolbar. */ toolbarOptions: ToolbarControl[]; /** * Permet de spécifier l'identifiant à utiliser pour le composant d'édition. * C'est utile si vous souhaitez disposer de plusieurs éditeurs sur un même écran. * * Attention : cet input est statique et doit être connu à l'initialisation du composant. */ editorId: string; /** * Libellé du champ de saisie riche. * * Obligatoire si vous ne gérez pas un libellé accessible via aria-Labelledby. * * Il est possible de masquer visuellement ce libellé via la propriété `labelSrOnly`. */ label?: string; /** * Permet de masquer visuellement le libellé en le réservant aux dispositifs de restitution. */ labelSrOnly: boolean; /** * Renseigner cette propriété si vous souhaitez utiliser le texte d'un élément tiers comme légende du composant * d'édition riche. */ ariaLabelledBy?: string; /** * Optionnel : permet de surcharger le texte de description additionnel. * * - La valeur `undefined` permet d'obtenir la description par défaut * - La valeur `null` permet de supprimer complètement la description * - Toute autre valeur sera utilisée pour valoriser la description */ hint?: string | null; /** * Permet de masquer visuellement le texte de description additionnel pour la réserver aux dispositifs de restitution. */ hintSrOnly: boolean; /** * Permet de masquer visuellement la légende de l'éditeur pour la réserver aux dispositifs de restitution. */ editorLegendSrOnly: boolean; /** * Active la lecture seule. */ /** Ajoute une validation comme étant un champs required */ /** Utilise DomSanitizer. Uniquement pour le format `html`. */ /** Ajoute une valeur maximale de caractère pour validation. */ /** Ajoute une valeur minimal de caractère pour validation. */ /** * Message d'information associé au composant. */ message?: string; /** * Représente la sévérité du message. 🔥 Le niveau `WARNING` n'est pas géré dans cette version. */ messageSeverity?: DsfrSeverity; /** * Id de l'élément affichant les messages associé à l'éditeur. A renseigner si vous souhaitez positionner un attribut * `aria-describedby` référençant votre message au niveau de l'élément hôte de l'éditeur. * * Attention : cet input est statique et doit être connu à l'initialisation du composant. */ messagesGroupId?: string; /** * Dev/debug : permet d'afficher le code HTML interne de l'éditeur (i.e. celui qui sert pour l'affichage WYSIWYG). */ showEditorHtmlDebugPanel: boolean; /** * Dev/debug : permet d'afficher le code HTML qui sera récupéré en sortie. */ showSemanticHtmlDebugPanel: boolean; /** * Signale les changements sur le contenu HTML. */ valueChange: EventEmitter<string>; /** @internal */ toolbar: EduEditorToolbarComponent; /** @internal */ announcer: ElementRef; /** * Gestion de l'identifiant du libellé accessible. */ protected labelId: string; /** * Permet de vocaliser un feedback post-action de formatage. */ protected announce: string | undefined; private _sub; private readonly i18n; private readonly editorService; constructor(); ngOnInit(): void; ngOnDestroy(): void; /** @internal */ writeValue(value: string | undefined): void; /** * Retourne l’entrée complète de l’enum (clé + valeur) * correspondant à la valeur passée en paramètre. */ private getEnumEntryByValue; static ɵfac: i0.ɵɵFactoryDeclaration<DsfrEditorComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<DsfrEditorComponent, "dsfr-ext-editor, dsfrx-editor", never, { "toolbarOptions": { "alias": "toolbarOptions"; "required": false; }; "editorId": { "alias": "editorId"; "required": false; }; "label": { "alias": "label"; "required": false; }; "labelSrOnly": { "alias": "labelSrOnly"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "hintSrOnly": { "alias": "hintSrOnly"; "required": false; }; "editorLegendSrOnly": { "alias": "editorLegendSrOnly"; "required": false; }; "message": { "alias": "message"; "required": false; }; "messageSeverity": { "alias": "messageSeverity"; "required": false; }; "messagesGroupId": { "alias": "messagesGroupId"; "required": false; }; "showEditorHtmlDebugPanel": { "alias": "showEditorHtmlDebugPanel"; "required": false; }; "showSemanticHtmlDebugPanel": { "alias": "showSemanticHtmlDebugPanel"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>; } export { AlignValue, ControlArray, ControlMode, DEFAULT_TOOLBAR_OPTIONS, DirectionValue, DsfrCustomFormatControl, DsfrEditorComponent, DsfrGroupFormatControl, DsfrPromptFormatControl, DsfrToggleFormatControl, DsfrValueFormatControl, FORMAT_I18N_KEYS, FORMAT_ICON, FormatConst, HeaderValue, IndentValue, ListValue, RadioFormatControl, ScriptValue, SelectFormatControl, SizeValue }; export type { DsfrBaseFormatControl, DsfrMultivaluedFormatControl, DsfrSingleFormatControl, Format, FormatControl, ToolbarControl };