@muxima-ui/core 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muxima-ui-core-editor.mjs","sources":["../../../projects/core/editor/editor.ts","../../../projects/core/editor/muxima-ui-core-editor.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Editor } from '@tiptap/core';\nimport StarterKit from '@tiptap/starter-kit';\nimport { CharacterCount, Placeholder } from '@tiptap/extensions';\nimport {\n MX_FORM_FIELD_CONTROL,\n MxFormField,\n MxFormFieldControl,\n mxUniqueId,\n} from '@muxima-ui/core/form-field';\n\n/** Botões possíveis da barra de formatação. `|` desenha um separador. */\nexport type MxEditorTool =\n | 'bold'\n | 'italic'\n | 'underline'\n | 'strike'\n | 'code'\n | 'heading2'\n | 'heading3'\n | 'paragraph'\n | 'bulletList'\n | 'orderedList'\n | 'blockquote'\n | 'link'\n | 'undo'\n | 'redo'\n | '|';\n\nexport const MX_EDITOR_DEFAULT_TOOLS: MxEditorTool[] = [\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n '|',\n 'heading2',\n 'heading3',\n '|',\n 'bulletList',\n 'orderedList',\n 'blockquote',\n '|',\n 'link',\n '|',\n 'undo',\n 'redo',\n];\n\ninterface ToolDef {\n label: string;\n shortcut?: string;\n icon: string;\n run: (e: Editor) => void;\n active?: (e: Editor) => boolean;\n enabled?: (e: Editor) => boolean;\n toggle?: boolean;\n}\n\nconst I = (d: string) =>\n `<svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${d}</svg>`;\n\nconst TOOLS: Record<Exclude<MxEditorTool, '|'>, ToolDef> = {\n bold: {\n label: 'Negrito',\n shortcut: 'Control+B',\n icon: I('<path d=\"M4.5 3h4.2a2.5 2.5 0 0 1 0 5H4.5zM4.5 8h4.8a2.5 2.5 0 0 1 0 5H4.5z\"/>'),\n run: (e) => e.chain().focus().toggleBold().run(),\n active: (e) => e.isActive('bold'),\n toggle: true,\n },\n italic: {\n label: 'Itálico',\n shortcut: 'Control+I',\n icon: I('<path d=\"M10 3H6.5M9.5 13H6M9 3l-2 10\"/>'),\n run: (e) => e.chain().focus().toggleItalic().run(),\n active: (e) => e.isActive('italic'),\n toggle: true,\n },\n underline: {\n label: 'Sublinhado',\n shortcut: 'Control+U',\n icon: I('<path d=\"M4.5 3v4.5a3.5 3.5 0 0 0 7 0V3M4 13.5h8\"/>'),\n run: (e) => e.chain().focus().toggleUnderline().run(),\n active: (e) => e.isActive('underline'),\n toggle: true,\n },\n strike: {\n label: 'Riscado',\n icon: I(\n '<path d=\"M3 8h10M10.5 4.5c-.5-1-1.5-1.5-2.7-1.5C6.2 3 5 3.9 5 5.2c0 .9.5 1.5 1.3 1.9M5.5 11.5c.5 1 1.6 1.5 2.9 1.5 1.7 0 2.9-.9 2.9-2.3 0-.5-.1-.9-.4-1.2\"/>',\n ),\n run: (e) => e.chain().focus().toggleStrike().run(),\n active: (e) => e.isActive('strike'),\n toggle: true,\n },\n code: {\n label: 'Código',\n icon: I('<path d=\"M6 4.5L2.5 8 6 11.5M10 4.5L13.5 8 10 11.5\"/>'),\n run: (e) => e.chain().focus().toggleCode().run(),\n active: (e) => e.isActive('code'),\n toggle: true,\n },\n heading2: {\n label: 'Título',\n icon: I(\n '<path d=\"M3 3.5v9M9 3.5v9M3 8h6M11.5 7.5c.3-.6.9-1 1.6-1 .9 0 1.4.6 1.4 1.3 0 1.3-3 2.4-3 4.7h3\"/>',\n ),\n run: (e) => e.chain().focus().toggleHeading({ level: 2 }).run(),\n active: (e) => e.isActive('heading', { level: 2 }),\n toggle: true,\n },\n heading3: {\n label: 'Subtítulo',\n icon: I(\n '<path d=\"M3 3.5v9M9 3.5v9M3 8h6M11.5 7c.3-.5.8-.7 1.4-.7.8 0 1.3.5 1.3 1.1 0 .7-.6 1.1-1.3 1.1.8 0 1.5.4 1.5 1.2 0 .8-.6 1.3-1.5 1.3-.6 0-1.1-.3-1.4-.8\"/>',\n ),\n run: (e) => e.chain().focus().toggleHeading({ level: 3 }).run(),\n active: (e) => e.isActive('heading', { level: 3 }),\n toggle: true,\n },\n paragraph: {\n label: 'Parágrafo',\n icon: I('<path d=\"M10 13V3M12.5 13V3M13.5 3H7.5a2.5 2.5 0 0 0 0 5H10\"/>'),\n run: (e) => e.chain().focus().setParagraph().run(),\n active: (e) => e.isActive('paragraph'),\n toggle: true,\n },\n bulletList: {\n label: 'Lista',\n icon: I(\n '<path d=\"M6.5 4h7M6.5 8h7M6.5 12h7\"/><circle cx=\"3\" cy=\"4\" r=\".6\" fill=\"currentColor\"/><circle cx=\"3\" cy=\"8\" r=\".6\" fill=\"currentColor\"/><circle cx=\"3\" cy=\"12\" r=\".6\" fill=\"currentColor\"/>',\n ),\n run: (e) => e.chain().focus().toggleBulletList().run(),\n active: (e) => e.isActive('bulletList'),\n toggle: true,\n },\n orderedList: {\n label: 'Lista numerada',\n icon: I(\n '<path d=\"M6.5 4h7M6.5 8h7M6.5 12h7M2.5 3l1-.5V6M2.5 9.5c.2-.5.6-.7 1-.7.5 0 .9.3.9.8 0 .8-1.9 1.3-1.9 2.4h1.9\"/>',\n ),\n run: (e) => e.chain().focus().toggleOrderedList().run(),\n active: (e) => e.isActive('orderedList'),\n toggle: true,\n },\n blockquote: {\n label: 'Citação',\n icon: I('<path d=\"M3 4.5h4v4H4.5L3 11.5zM9 4.5h4v4h-2.5L9 11.5z\"/>'),\n run: (e) => e.chain().focus().toggleBlockquote().run(),\n active: (e) => e.isActive('blockquote'),\n toggle: true,\n },\n link: {\n label: 'Ligação',\n shortcut: 'Control+K',\n icon: I(\n '<path d=\"M6.5 9.5l3-3M7 4.5l1-1a2.8 2.8 0 0 1 4 4l-1 1M9 11.5l-1 1a2.8 2.8 0 0 1-4-4l1-1\"/>',\n ),\n run: () => {},\n active: (e) => e.isActive('link'),\n toggle: true,\n },\n undo: {\n label: 'Anular',\n shortcut: 'Control+Z',\n icon: I('<path d=\"M5.5 3.5L2.5 6.5l3 3M2.5 6.5H10a3.5 3.5 0 0 1 0 7H7\"/>'),\n run: (e) => e.chain().focus().undo().run(),\n enabled: (e) => e.can().undo(),\n },\n redo: {\n label: 'Refazer',\n shortcut: 'Control+Shift+Z',\n icon: I('<path d=\"M10.5 3.5l3 3-3 3M13.5 6.5H6a3.5 3.5 0 0 0 0 7h3\"/>'),\n run: (e) => e.chain().focus().redo().run(),\n enabled: (e) => e.can().redo(),\n },\n};\n\n/**\n * Editor de texto com formatação, sobre o Tiptap (ProseMirror). O Tiptap é uma dependência\n * opcional: instala-o só se usares este ponto de entrada.\n *\n * ```bash\n * npm install @tiptap/core @tiptap/pm @tiptap/starter-kit @tiptap/extensions\n * ```\n * ```html\n * <mx-form-field>\n * <label mxLabel>Notas da factura</label>\n * <mx-editor formControlName=\"notas\" placeholder=\"Escreve aqui...\" [maxLength]=\"2000\" />\n * </mx-form-field>\n * ```\n *\n * O valor é HTML (string; vazio quando não há texto). A barra é um role=toolbar:\n * setas entre botões, Alt + F10 vai do texto para a barra e Esc volta ao texto.\n */\n@Component({\n selector: 'mx-editor',\n exportAs: 'mxEditor',\n providers: [{ provide: MX_FORM_FIELD_CONTROL, useExisting: MxEditor }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'mx-editor',\n '[attr.data-invalid]': 'errorState() ? \"\" : null',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n '[attr.data-readonly]': 'readonly() ? \"\" : null',\n '[attr.aria-label]': 'null',\n },\n template: `\n @if (!readonly()) {\n <div\n class=\"mx-editor-toolbar\"\n role=\"toolbar\"\n #toolbar\n [attr.aria-label]=\"toolbarLabel()\"\n [attr.aria-controls]=\"controlId()\"\n (keydown)=\"onToolbarKey($event)\"\n >\n @for (t of toolList(); track $index) {\n @if (t === '|') {\n <span class=\"mx-editor-sep\" role=\"separator\" aria-orientation=\"vertical\"></span>\n } @else {\n <button\n type=\"button\"\n class=\"mx-editor-tool\"\n [tabIndex]=\"$index === focusIndex() ? 0 : -1\"\n [attr.data-tool]=\"t\"\n [attr.aria-label]=\"tools[t].label\"\n [attr.aria-keyshortcuts]=\"tools[t].shortcut ?? null\"\n [attr.aria-pressed]=\"tools[t].toggle ? isActive(t) : null\"\n [disabled]=\"isDisabled() || !isEnabled(t)\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"runTool(t, $index)\"\n >\n <span class=\"mx-editor-icon\" [innerHTML]=\"icon(t)\"></span>\n </button>\n }\n }\n </div>\n @if (linkOpen()) {\n <div class=\"mx-editor-linkbar\" role=\"group\" [attr.aria-label]=\"linkLabel()\">\n <input\n #linkInput\n class=\"mx-input\"\n data-size=\"sm\"\n type=\"url\"\n placeholder=\"https://\"\n [attr.aria-label]=\"linkLabel()\"\n [value]=\"linkUrl()\"\n (input)=\"linkUrl.set($any($event.target).value)\"\n (keydown.enter)=\"$event.preventDefault(); applyLink()\"\n (keydown.escape)=\"$event.preventDefault(); closeLink()\"\n />\n <button type=\"button\" class=\"mx-editor-text-button\" (click)=\"applyLink()\">Aplicar</button>\n @if (linkActive()) {\n <button type=\"button\" class=\"mx-editor-text-button\" (click)=\"removeLink()\">\n Remover\n </button>\n }\n <button type=\"button\" class=\"mx-editor-text-button\" (click)=\"closeLink()\">\n Cancelar\n </button>\n </div>\n }\n }\n <div\n class=\"mx-editor-content\"\n #content\n [style.min-height]=\"minHeight()\"\n [style.max-height]=\"maxHeight()\"\n ></div>\n @if (maxLength()) {\n <div class=\"mx-editor-footer\">\n <span\n class=\"mx-editor-count\"\n [attr.data-over]=\"count() > maxLength()! ? '' : null\"\n [attr.aria-live]=\"count() >= maxLength()! * 0.9 ? 'polite' : null\"\n >\n {{ count() }} / {{ maxLength() }}<span class=\"mx-visually-hidden\"> caracteres</span>\n </span>\n </div>\n }\n `,\n})\nexport class MxEditor implements ControlValueAccessor, MxFormFieldControl {\n readonly value = model<string>('');\n readonly placeholder = input('');\n readonly tools = TOOLS;\n readonly toolbar = input<MxEditorTool[]>(MX_EDITOR_DEFAULT_TOOLS);\n /** Máximo de caracteres; mostra a contagem. */\n readonly maxLength = input<number | null, unknown>(null, {\n transform: (v: unknown) => (v == null || v === '' ? null : numberAttribute(v)),\n });\n readonly minHeight = input('140px');\n readonly maxHeight = input<string | null>('420px');\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly id = input<string | undefined>(undefined);\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n readonly toolbarLabel = input('Formatação');\n readonly linkLabel = input('Endereço da ligação');\n\n protected readonly field = inject(MxFormField, { optional: true });\n private readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly content = viewChild.required<ElementRef<HTMLElement>>('content');\n private readonly toolbarEl = viewChild<ElementRef<HTMLElement>>('toolbar');\n private readonly linkInput = viewChild<ElementRef<HTMLInputElement>>('linkInput');\n private readonly injector = inject(Injector);\n\n private readonly generatedId = mxUniqueId('mx-editor');\n readonly controlId = computed(() => this.id() ?? this.generatedId);\n private readonly formDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled());\n protected readonly toolList = computed(() => this.toolbar());\n protected readonly focusIndex = signal(0);\n /** Muda a cada transacção, para os botões reflectirem o estado. */\n private readonly tick = signal(0);\n protected readonly count = signal(0);\n protected readonly linkOpen = signal(false);\n protected readonly linkUrl = signal('');\n protected readonly linkActive = signal(false);\n /** O editor do Tiptap, para comandos próprios (editor()?.chain()...). */\n readonly editor = signal<Editor | null>(null);\n private writing = false;\n\n private onChange: (v: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n if (this.ngControl) this.ngControl.valueAccessor = this;\n afterNextRender(() => this.create());\n inject(DestroyRef).onDestroy(() => this.editor()?.destroy());\n effect(() => {\n const e = this.editor();\n const editable = !this.isDisabled() && !this.readonly();\n if (e && e.isEditable !== editable) e.setEditable(editable);\n });\n // aria do conteúdo acompanha o form field\n effect(() => {\n const e = this.editor();\n this.tick();\n if (!e) return;\n const el = e.view.dom as HTMLElement;\n const set = (k: string, v: string | null) =>\n v == null ? el.removeAttribute(k) : el.setAttribute(k, v);\n set('aria-labelledby', this.field?.labelId() ?? null);\n set('aria-label', this.field?.labelId() ? null : (this.ariaLabel() ?? null));\n set('aria-describedby', this.field?.describedBy() ?? null);\n set('aria-invalid', this.errorState() ? 'true' : null);\n set('aria-required', this.isRequired() ? 'true' : null);\n set('aria-readonly', this.readonly() || this.isDisabled() ? 'true' : null);\n });\n }\n\n private create(): void {\n const editor = new Editor({\n element: this.content().nativeElement,\n content: untracked(() => this.value()) || '',\n editable: !this.isDisabled() && !this.readonly(),\n extensions: [\n StarterKit.configure({\n heading: { levels: [2, 3, 4] },\n link: { openOnClick: false, autolink: true, defaultProtocol: 'https' },\n }),\n Placeholder.configure({ placeholder: () => this.placeholder() }),\n CharacterCount.configure({ limit: null }),\n ],\n editorProps: {\n attributes: {\n id: this.controlId(),\n role: 'textbox',\n 'aria-multiline': 'true',\n class: 'mx-editor-prose',\n },\n handleKeyDown: (_view, event) => {\n if (event.altKey && event.key === 'F10') {\n event.preventDefault();\n this.focusToolbar();\n return true;\n }\n if (\n (event.ctrlKey || event.metaKey) &&\n event.key.toLowerCase() === 'k' &&\n this.toolList().includes('link')\n ) {\n event.preventDefault();\n // dentro do texto, Ctrl + K é a ligação (não o atalho global da aplicação)\n event.stopPropagation();\n this.openLink();\n return true;\n }\n return false;\n },\n },\n onTransaction: () => this.tick.update((t) => t + 1),\n onUpdate: ({ editor: e }) => {\n this.count.set(e.storage.characterCount?.characters?.() ?? e.getText().length);\n if (this.writing) return;\n const html = e.isEmpty ? '' : e.getHTML();\n this.value.set(html);\n this.onChange(html);\n },\n onBlur: () => this.onTouched(),\n });\n this.count.set(editor.storage.characterCount?.characters?.() ?? editor.getText().length);\n this.editor.set(editor);\n }\n\n private readonly sanitizer = inject(DomSanitizer);\n private readonly icons = new Map<string, SafeHtml>();\n protected icon(t: Exclude<MxEditorTool, '|'>): SafeHtml {\n // os desenhos são constantes deste ficheiro, nunca texto de fora\n if (!this.icons.has(t))\n this.icons.set(t, this.sanitizer.bypassSecurityTrustHtml(TOOLS[t].icon));\n return this.icons.get(t)!;\n }\n protected isActive(t: Exclude<MxEditorTool, '|'>): boolean {\n this.tick();\n const e = this.editor();\n return !!e && !!TOOLS[t].active?.(e);\n }\n protected isEnabled(t: Exclude<MxEditorTool, '|'>): boolean {\n this.tick();\n const e = this.editor();\n return !!e && (TOOLS[t].enabled ? TOOLS[t].enabled!(e) : true);\n }\n protected runTool(t: Exclude<MxEditorTool, '|'>, index: number): void {\n this.focusIndex.set(index);\n const e = this.editor();\n if (!e) return;\n if (t === 'link') {\n this.openLink();\n return;\n }\n TOOLS[t].run(e);\n }\n\n // ---- ligações ----\n openLink(): void {\n const e = this.editor();\n if (!e) return;\n this.linkActive.set(e.isActive('link'));\n this.linkUrl.set(e.getAttributes('link')['href'] ?? '');\n this.linkOpen.set(true);\n afterNextRender(() => this.linkInput()?.nativeElement.focus(), { injector: this.injector });\n }\n protected applyLink(): void {\n const e = this.editor();\n const url = this.linkUrl().trim();\n if (!e) return;\n if (!url) this.removeLink();\n else {\n const href = /^(https?:|mailto:|tel:|\\/|#)/i.test(url) ? url : `https://${url}`;\n e.chain().focus().extendMarkRange('link').setLink({ href }).run();\n }\n this.linkOpen.set(false);\n }\n protected removeLink(): void {\n this.editor()?.chain().focus().extendMarkRange('link').unsetLink().run();\n this.linkOpen.set(false);\n }\n protected closeLink(): void {\n this.linkOpen.set(false);\n this.editor()?.commands.focus();\n }\n\n // ---- barra (roving tabindex) ----\n private buttons(): HTMLButtonElement[] {\n return Array.from(\n this.toolbarEl()?.nativeElement.querySelectorAll<HTMLButtonElement>(\n '.mx-editor-tool:not(:disabled)',\n ) ?? [],\n );\n }\n focusToolbar(): void {\n const b = this.buttons();\n const current = this.toolbarEl()?.nativeElement.querySelector<HTMLButtonElement>(\n '.mx-editor-tool[tabindex=\"0\"]:not(:disabled)',\n );\n (current ?? b[0])?.focus();\n }\n protected onToolbarKey(event: KeyboardEvent): void {\n const b = this.buttons();\n const i = b.indexOf(document.activeElement as HTMLButtonElement);\n let next = -1;\n if (event.key === 'ArrowRight') next = (i + 1) % b.length;\n else if (event.key === 'ArrowLeft') next = (i - 1 + b.length) % b.length;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = b.length - 1;\n else if (event.key === 'Escape') {\n event.preventDefault();\n this.editor()?.commands.focus();\n return;\n }\n if (next < 0 || !b[next]) return;\n event.preventDefault();\n const all = Array.from(\n this.toolbarEl()!.nativeElement.querySelectorAll<HTMLElement>(\n '.mx-editor-tool, .mx-editor-sep',\n ),\n );\n this.focusIndex.set(all.indexOf(b[next]));\n b[next].focus();\n }\n\n /** Põe o foco no texto. */\n focus(): void {\n this.editor()?.commands.focus();\n }\n\n // ---- MxFormFieldControl ----\n errorState(): boolean {\n if (this.invalid()) return true;\n const max = this.maxLength();\n if (max && this.count() > max) return true;\n const c = this.ngControl;\n return !!c && !!c.invalid && !!(c.touched || c.dirty);\n }\n isRequired(): boolean {\n return this.required() || !!this.ngControl?.control?.hasValidator?.(Validators.required);\n }\n\n // ---- ControlValueAccessor ----\n writeValue(value: string | null): void {\n const html = value ?? '';\n this.value.set(html);\n const e = this.editor();\n if (e && (e.isEmpty ? '' : e.getHTML()) !== html) {\n this.writing = true;\n e.commands.setContent(html, { emitUpdate: false });\n this.count.set(e.storage.characterCount?.characters?.() ?? e.getText().length);\n this.writing = false;\n }\n }\n registerOnChange(fn: (v: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}