@acorex/cdk 22.1.8 → 22.2.0-next.1
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.
- package/auto-follow-scroll/README.md +9 -0
- package/fesm2022/acorex-cdk-accordion.mjs +19 -19
- package/fesm2022/acorex-cdk-accordion.mjs.map +1 -1
- package/fesm2022/acorex-cdk-auto-follow-scroll.mjs +187 -0
- package/fesm2022/acorex-cdk-auto-follow-scroll.mjs.map +1 -0
- package/fesm2022/acorex-cdk-carousel.mjs +25 -7
- package/fesm2022/acorex-cdk-carousel.mjs.map +1 -1
- package/fesm2022/acorex-cdk-clipboard.mjs +6 -6
- package/fesm2022/acorex-cdk-clipboard.mjs.map +1 -1
- package/fesm2022/acorex-cdk-common.mjs +223 -108
- package/fesm2022/acorex-cdk-common.mjs.map +1 -1
- package/fesm2022/acorex-cdk-dom.mjs +3 -3
- package/fesm2022/acorex-cdk-dom.mjs.map +1 -1
- package/fesm2022/acorex-cdk-drag-drop.mjs +158 -68
- package/fesm2022/acorex-cdk-drag-drop.mjs.map +1 -1
- package/fesm2022/acorex-cdk-drawer.mjs +15 -13
- package/fesm2022/acorex-cdk-drawer.mjs.map +1 -1
- package/fesm2022/acorex-cdk-focus-trap.mjs +3 -3
- package/fesm2022/acorex-cdk-focus-trap.mjs.map +1 -1
- package/fesm2022/acorex-cdk-full-screen.mjs +26 -147
- package/fesm2022/acorex-cdk-full-screen.mjs.map +1 -1
- package/fesm2022/acorex-cdk-gesture.mjs +30 -4
- package/fesm2022/acorex-cdk-gesture.mjs.map +1 -1
- package/fesm2022/acorex-cdk-highlight.mjs +8 -78
- package/fesm2022/acorex-cdk-highlight.mjs.map +1 -1
- package/fesm2022/acorex-cdk-horizontal-scroll.mjs +37 -14
- package/fesm2022/acorex-cdk-horizontal-scroll.mjs.map +1 -1
- package/fesm2022/acorex-cdk-input-mask.mjs +3 -3
- package/fesm2022/acorex-cdk-input-mask.mjs.map +1 -1
- package/fesm2022/acorex-cdk-list-navigation.mjs +21 -10
- package/fesm2022/acorex-cdk-list-navigation.mjs.map +1 -1
- package/fesm2022/acorex-cdk-outline.mjs +277 -74
- package/fesm2022/acorex-cdk-outline.mjs.map +1 -1
- package/fesm2022/acorex-cdk-overlay-scrollbar.mjs +903 -0
- package/fesm2022/acorex-cdk-overlay-scrollbar.mjs.map +1 -0
- package/fesm2022/acorex-cdk-overlay.mjs +259 -25
- package/fesm2022/acorex-cdk-overlay.mjs.map +1 -1
- package/fesm2022/acorex-cdk-pan-view.mjs +3 -3
- package/fesm2022/acorex-cdk-pan-view.mjs.map +1 -1
- package/fesm2022/acorex-cdk-qrcode.mjs.map +1 -1
- package/fesm2022/acorex-cdk-resizable.mjs +483 -200
- package/fesm2022/acorex-cdk-resizable.mjs.map +1 -1
- package/fesm2022/acorex-cdk-selection.mjs +10 -10
- package/fesm2022/acorex-cdk-selection.mjs.map +1 -1
- package/fesm2022/acorex-cdk-shimmer.mjs +220 -0
- package/fesm2022/acorex-cdk-shimmer.mjs.map +1 -0
- package/fesm2022/acorex-cdk-sliding-item.mjs +3 -3
- package/fesm2022/acorex-cdk-sliding-item.mjs.map +1 -1
- package/fesm2022/acorex-cdk-sticky.mjs +3 -3
- package/fesm2022/acorex-cdk-sticky.mjs.map +1 -1
- package/fesm2022/acorex-cdk-text-editor.mjs +942 -0
- package/fesm2022/acorex-cdk-text-editor.mjs.map +1 -0
- package/fesm2022/acorex-cdk-uploader.mjs +9 -9
- package/fesm2022/acorex-cdk-uploader.mjs.map +1 -1
- package/fesm2022/acorex-cdk-viewport-guard.mjs +616 -0
- package/fesm2022/acorex-cdk-viewport-guard.mjs.map +1 -0
- package/fesm2022/acorex-cdk-virtual-scroll.mjs +10 -10
- package/fesm2022/acorex-cdk-virtual-scroll.mjs.map +1 -1
- package/fesm2022/acorex-cdk-wysiwyg.mjs +694 -37
- package/fesm2022/acorex-cdk-wysiwyg.mjs.map +1 -1
- package/fesm2022/acorex-cdk-z-index.mjs +3 -3
- package/fesm2022/acorex-cdk-z-index.mjs.map +1 -1
- package/fesm2022/acorex-cdk.mjs.map +1 -1
- package/overlay-scrollbar/README.md +54 -0
- package/package.json +33 -7
- package/shimmer/README.md +11 -0
- package/text-editor/README.md +5 -0
- package/types/acorex-cdk-auto-follow-scroll.d.ts +72 -0
- package/types/acorex-cdk-carousel.d.ts +2 -0
- package/types/acorex-cdk-clipboard.d.ts +1 -1
- package/types/acorex-cdk-common.d.ts +46 -19
- package/types/acorex-cdk-drag-drop.d.ts +43 -17
- package/types/acorex-cdk-full-screen.d.ts +18 -43
- package/types/acorex-cdk-gesture.d.ts +11 -1
- package/types/acorex-cdk-highlight.d.ts +1 -28
- package/types/acorex-cdk-horizontal-scroll.d.ts +3 -0
- package/types/acorex-cdk-list-navigation.d.ts +5 -0
- package/types/acorex-cdk-outline.d.ts +20 -0
- package/types/acorex-cdk-overlay-scrollbar.d.ts +155 -0
- package/types/acorex-cdk-overlay.d.ts +60 -4
- package/types/acorex-cdk-resizable.d.ts +80 -38
- package/types/acorex-cdk-shimmer.d.ts +68 -0
- package/types/acorex-cdk-text-editor.d.ts +156 -0
- package/types/acorex-cdk-uploader.d.ts +1 -1
- package/types/acorex-cdk-viewport-guard.d.ts +99 -0
- package/types/acorex-cdk-wysiwyg.d.ts +121 -14
- package/wysiwyg/README.md +3 -1
- package/fesm2022/acorex-cdk-double-click.mjs +0 -178
- package/fesm2022/acorex-cdk-double-click.mjs.map +0 -1
- package/types/acorex-cdk-double-click.d.ts +0 -66
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-cdk-text-editor.mjs","sources":["../../../../packages/cdk/text-editor/src/lib/text-editor.types.ts","../../../../packages/cdk/text-editor/src/lib/text-editor.class.ts","../../../../packages/cdk/text-editor/src/lib/text-editor.commands.ts","../../../../packages/cdk/text-editor/src/lib/text-editor.extensions.ts","../../../../packages/cdk/text-editor/src/acorex-cdk-text-editor.ts"],"sourcesContent":["import type { Content, Editor, Extensions, JSONContent } from '@tiptap/core';\n\nexport type AXTextEditorTiptapEditor = Editor;\nexport type AXTextEditorTiptapContent = Content;\nexport type AXTextEditorTiptapJSON = JSONContent;\nexport type AXTextEditorTiptapChain = ReturnType<Editor['chain']>;\n\nexport type AXTextEditorHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\nexport type AXTextEditorTextAlign = 'left' | 'center' | 'right' | 'justify';\nexport type AXTextEditorTextDirection = 'rtl' | 'ltr';\nexport type AXTextEditorFontSizeToken = 'small' | 'large' | 'huge';\n\nexport const AX_TEXT_EDITOR_FONT_SIZE_TOKEN_VALUES: Record<AXTextEditorFontSizeToken, string> = {\n small: '0.75em',\n large: '1.5em',\n huge: '2.5em',\n};\n\nexport type AXTextEditorCommandAttrs = Record<string, unknown>;\n\nexport const AX_TEXT_EDITOR_ZOOM_PRESETS = [40, 50, 75, 90, 100, 125, 150, 175, 200] as const;\nexport const AX_TEXT_EDITOR_ZOOM_MIN = 40;\nexport const AX_TEXT_EDITOR_ZOOM_MAX = 200;\n\nexport const AX_TEXT_EDITOR_FONT_SIZES = [8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 28, 32, 36, 48, 72] as const;\nexport type AXTextEditorFontSize = (typeof AX_TEXT_EDITOR_FONT_SIZES)[number];\n\nexport const AX_TEXT_EDITOR_DEFAULT_TEXT_COLORS = [\n '#f59e0b',\n '#eab308',\n '#22c55e',\n '#06b6d4',\n '#3b82f6',\n '#a855f7',\n '#ec4899',\n '#ef4444',\n];\n\nexport const AX_TEXT_EDITOR_DEFAULT_BACKGROUND_COLORS = [\n '#ffffff',\n '#f5e6c8',\n '#fde68a',\n '#f9a8d4',\n '#bbf7d0',\n '#ddd6fe',\n '#fbcfe8',\n '#fdba74',\n];\n\nexport interface AXTextEditorRecentColor {\n color: string;\n kind: 'text' | 'background';\n}\n\nexport type AXTextEditorCommandType =\n | 'undo'\n | 'redo'\n | 'bold'\n | 'italic'\n | 'underline'\n | 'strike'\n | 'heading'\n | 'paragraph'\n | 'align'\n | 'direction'\n | 'color'\n | 'highlight'\n | 'fontSize'\n | 'bulletList'\n | 'orderedList'\n | 'superscript'\n | 'subscript'\n | 'link'\n | 'unlink'\n | 'blockquote'\n | 'code'\n | 'codeBlock'\n | 'horizontalRule'\n | 'image'\n | 'video'\n | 'insertTable'\n | 'addColumnBefore'\n | 'addColumnAfter'\n | 'deleteColumn'\n | 'addRowBefore'\n | 'addRowAfter'\n | 'deleteRow'\n | 'toggleHeaderRow'\n | 'deleteTable';\n\nexport interface AXTextEditorFeatures {\n table?: boolean;\n image?: boolean;\n video?: boolean;\n superscript?: boolean;\n subscript?: boolean;\n keepSelection?: boolean;\n placeholder?: boolean;\n}\n\nexport const AX_DEFAULT_TEXT_EDITOR_FEATURES: AXTextEditorFeatures = {\n table: true,\n image: true,\n video: true,\n superscript: true,\n subscript: true,\n keepSelection: true,\n placeholder: true,\n};\n\nexport interface AXTextEditorLoadExtensionsOptions {\n placeholder?: string | (() => string);\n features?: AXTextEditorFeatures;\n headingLevels?: AXTextEditorHeadingLevel[];\n extensions?: Extensions;\n}\n\nexport interface AXTextEditorState {\n bold: boolean;\n italic: boolean;\n underline: boolean;\n strike: boolean;\n code: boolean;\n codeBlock: boolean;\n headingLevel: AXTextEditorHeadingLevel | null;\n bulletList: boolean;\n orderedList: boolean;\n blockquote: boolean;\n superscript: boolean;\n subscript: boolean;\n textAlign: AXTextEditorTextAlign | null;\n textColor: string | null;\n highlightColor: string | null;\n linkHref: string | null;\n fontSize: string | null;\n textDirection: AXTextEditorTextDirection | null;\n table: boolean;\n canUndo: boolean;\n canRedo: boolean;\n isEmpty: boolean;\n isFocused: boolean;\n}\n\nexport const AX_EMPTY_TEXT_EDITOR_STATE: AXTextEditorState = {\n bold: false,\n italic: false,\n underline: false,\n strike: false,\n code: false,\n codeBlock: false,\n headingLevel: null,\n bulletList: false,\n orderedList: false,\n blockquote: false,\n superscript: false,\n subscript: false,\n textAlign: null,\n textColor: null,\n highlightColor: null,\n linkHref: null,\n fontSize: null,\n textDirection: null,\n table: false,\n canUndo: false,\n canRedo: false,\n isEmpty: true,\n isFocused: false,\n};\n\nexport interface AXTextEditorInitOptions {\n content?: AXTextEditorTiptapContent;\n editable?: boolean;\n placeholder?: string | (() => string);\n features?: AXTextEditorFeatures;\n headingLevels?: AXTextEditorHeadingLevel[];\n extensions?: Extensions;\n editorProps?: import('@tiptap/core').EditorOptions['editorProps'];\n /** @deprecated Use `editable: false` instead. */\n readOnly?: boolean;\n onUpdate?: (editor: AXTextEditorTiptapEditor) => void;\n onFocus?: (editor: AXTextEditorTiptapEditor, event?: FocusEvent) => void;\n onBlur?: (editor: AXTextEditorTiptapEditor, event?: FocusEvent) => void;\n onSelectionUpdate?: (editor: AXTextEditorTiptapEditor) => void;\n onTransaction?: (editor: AXTextEditorTiptapEditor) => void;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n superscript: {\n toggleSuperscript: () => ReturnType;\n };\n subscript: {\n toggleSubscript: () => ReturnType;\n };\n axTextEditorFontSize: {\n setFontSize: (size: string | null) => ReturnType;\n };\n axTextEditorVideo: {\n setVideo: (options: { src: string }) => ReturnType;\n };\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport {\n AX_EMPTY_TEXT_EDITOR_STATE,\n type AXTextEditorCommandAttrs,\n type AXTextEditorCommandType,\n type AXTextEditorHeadingLevel,\n type AXTextEditorInitOptions,\n type AXTextEditorState,\n type AXTextEditorTextAlign,\n type AXTextEditorTextDirection,\n type AXTextEditorTiptapChain,\n type AXTextEditorTiptapContent,\n type AXTextEditorTiptapEditor,\n type AXTextEditorTiptapJSON,\n} from './text-editor.types';\n\n@Injectable()\nexport class AXTextEditor {\n readonly editor = signal<AXTextEditorTiptapEditor | null>(null);\n readonly state = signal<AXTextEditorState>(AX_EMPTY_TEXT_EDITOR_STATE);\n readonly ready = signal(false);\n readonly version = signal(0);\n\n private readonly platformId = inject(PLATFORM_ID);\n private destroyed = false;\n private applyingContent = false;\n\n async init(container: HTMLElement | string, options: AXTextEditorInitOptions = {}): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n const element =\n typeof container === 'string' ? (document.querySelector(container) as HTMLElement | null) : container;\n if (!element) {\n return;\n }\n\n this.destroyed = false;\n const editable = options.readOnly === true ? false : (options.editable ?? true);\n\n const [{ createTextEditorExtensions }, commandsApi, { Editor }] = await Promise.all([\n import('./text-editor.extensions'),\n import('./text-editor.commands'),\n import('@tiptap/core'),\n ]);\n this.commandsApi = commandsApi;\n\n const extensions = await createTextEditorExtensions({\n placeholder: options.placeholder,\n features: options.features,\n headingLevels: options.headingLevels,\n extensions: options.extensions,\n });\n\n if (this.destroyed) {\n return;\n }\n\n const editor = new Editor({\n element,\n extensions,\n content: options.content ?? '',\n editable,\n editorProps: {\n ...options.editorProps,\n attributes: {\n class: 'ax-text-editor-prose',\n ...(typeof options.editorProps?.attributes === 'object' ? options.editorProps.attributes : {}),\n },\n handleDOMEvents: {\n ...options.editorProps?.handleDOMEvents,\n },\n },\n onUpdate: ({ editor: ed }) => {\n this.refreshState(ed);\n if (!this.applyingContent) {\n options.onUpdate?.(ed);\n }\n },\n onSelectionUpdate: ({ editor: ed }) => {\n this.refreshState(ed);\n options.onSelectionUpdate?.(ed);\n },\n onTransaction: ({ editor: ed }) => {\n this.refreshState(ed);\n options.onTransaction?.(ed);\n },\n onFocus: ({ editor: ed, event }) => {\n this.refreshState(ed);\n options.onFocus?.(ed, event);\n },\n onBlur: ({ editor: ed, event }) => {\n this.refreshState(ed);\n options.onBlur?.(ed, event);\n },\n });\n\n this.editor.set(editor);\n this.ready.set(true);\n this.refreshState(editor);\n }\n\n destroy(): void {\n this.destroyed = true;\n const ed = this.editor();\n ed?.destroy();\n this.editor.set(null);\n this.ready.set(false);\n this.state.set(AX_EMPTY_TEXT_EDITOR_STATE);\n this.version.set(0);\n this.commandsApi = null;\n }\n\n refresh(): void {\n const ed = this.editor();\n if (ed) {\n this.refreshState(ed);\n }\n }\n\n setContent(value: AXTextEditorTiptapContent | null | undefined, emit = false): void {\n const ed = this.editor();\n if (!ed) {\n return;\n }\n\n const content = value == null || value === '' ? '' : value;\n this.applyingContent = true;\n try {\n ed.commands.setContent(content, { emitUpdate: emit });\n this.refreshState(ed);\n } finally {\n this.applyingContent = false;\n }\n }\n\n getHTML(): string {\n return this.editor()?.getHTML() ?? '';\n }\n\n getJSON(): AXTextEditorTiptapJSON | null {\n return this.editor()?.getJSON() ?? null;\n }\n\n getText(options?: { blockSeparator?: string }): string {\n return this.editor()?.getText(options) ?? '';\n }\n\n isEmpty(): boolean {\n return this.editor()?.isEmpty ?? true;\n }\n\n isFocused(): boolean {\n return this.editor()?.isFocused ?? false;\n }\n\n isEditable(): boolean {\n return this.editor()?.isEditable ?? false;\n }\n\n setEditable(editable: boolean): void {\n const ed = this.editor();\n if (!ed || ed.isEditable === editable) {\n return;\n }\n ed.setEditable(editable, false);\n this.refreshState(ed);\n }\n\n focus(): void {\n this.editor()?.commands.focus();\n }\n\n blur(): void {\n this.editor()?.commands.blur();\n }\n\n chain(): AXTextEditorTiptapChain | null {\n return this.editor()?.chain() ?? null;\n }\n\n get commands(): AXTextEditorTiptapEditor['commands'] | undefined {\n return this.editor()?.commands;\n }\n\n isActive(command: AXTextEditorCommandType, attrs?: AXTextEditorCommandAttrs): boolean {\n this.version();\n const ed = this.editor();\n if (!ed) {\n return false;\n }\n return this.getCommandsApi().isTextEditorCommandActive(ed, command, attrs);\n }\n\n can(command: AXTextEditorCommandType, attrs?: AXTextEditorCommandAttrs): boolean {\n this.version();\n const ed = this.editor();\n if (!ed || !ed.isEditable) {\n return false;\n }\n return this.getCommandsApi().canRunTextEditorCommand(ed, command, attrs);\n }\n\n run(command: AXTextEditorCommandType, attrs?: AXTextEditorCommandAttrs): boolean {\n const ed = this.editor();\n if (!ed || !ed.isEditable) {\n return false;\n }\n const result = this.getCommandsApi().runTextEditorCommand(ed, command, attrs);\n this.refreshState(ed);\n return result;\n }\n\n private commandsApi: typeof import('./text-editor.commands') | null = null;\n\n private getCommandsApi(): typeof import('./text-editor.commands') {\n if (!this.commandsApi) {\n throw new Error('AXTextEditor commands are not loaded. Call init() first.');\n }\n return this.commandsApi;\n }\n\n insertContent(value: AXTextEditorTiptapContent): boolean {\n const result = this.editor()?.chain().focus().insertContent(value).run() ?? false;\n this.refresh();\n return result;\n }\n\n clearContent(): boolean {\n const result = this.editor()?.commands.clearContent() ?? false;\n this.refresh();\n return result;\n }\n\n insertImage(src: string, alt?: string): void {\n this.run('image', { src, alt });\n }\n\n insertVideo(src: string): void {\n this.run('video', { src });\n }\n\n setLink(href: string): void {\n this.run('link', { href });\n }\n\n unsetLink(): void {\n this.run('unlink');\n }\n\n clearFormatting(): void {\n this.editor()?.chain().focus().clearNodes().unsetAllMarks().run();\n this.refresh();\n }\n\n toggleHeading(level: AXTextEditorHeadingLevel): void {\n this.run('heading', { level });\n }\n\n setTextAlign(align: AXTextEditorTextAlign): void {\n this.run('align', { align });\n }\n\n setTextDirection(direction: AXTextEditorTextDirection): void {\n this.run('direction', { direction });\n }\n\n private refreshState(editor: AXTextEditorTiptapEditor): void {\n this.version.update((value) => value + 1);\n\n const textColor = editor.getAttributes('textStyle')['color'] as string | undefined;\n const fontSizeCss = editor.getAttributes('textStyle')['fontSize'] as string | undefined;\n const highlightColor = editor.getAttributes('highlight')['color'] as string | undefined;\n const linkHref = editor.getAttributes('link')['href'] as string | undefined;\n const dir = (editor.getAttributes('paragraph')['dir'] || editor.getAttributes('heading')['dir']) as\n | AXTextEditorTextDirection\n | undefined;\n\n let headingLevel: AXTextEditorHeadingLevel | null = null;\n for (let level = 1; level <= 6; level++) {\n if (editor.isActive('heading', { level })) {\n headingLevel = level as AXTextEditorHeadingLevel;\n break;\n }\n }\n\n let textAlign: AXTextEditorTextAlign | null = null;\n for (const align of ['left', 'center', 'right', 'justify'] as AXTextEditorTextAlign[]) {\n if (editor.isActive({ textAlign: align })) {\n textAlign = align;\n break;\n }\n }\n\n this.state.set({\n bold: editor.isActive('bold'),\n italic: editor.isActive('italic'),\n underline: editor.isActive('underline'),\n strike: editor.isActive('strike'),\n code: editor.isActive('code'),\n codeBlock: editor.isActive('codeBlock'),\n headingLevel,\n bulletList: editor.isActive('bulletList'),\n orderedList: editor.isActive('orderedList'),\n blockquote: editor.isActive('blockquote'),\n superscript: editor.isActive('superscript'),\n subscript: editor.isActive('subscript'),\n textAlign,\n textColor: textColor ?? null,\n highlightColor: highlightColor ?? null,\n linkHref: linkHref ?? null,\n fontSize: fontSizeCss ?? null,\n textDirection: dir ?? null,\n table: editor.isActive('table'),\n canUndo: editor.can().undo(),\n canRedo: editor.can().redo(),\n isEmpty: editor.isEmpty,\n isFocused: editor.isFocused,\n });\n }\n}\n","import {\n AX_TEXT_EDITOR_FONT_SIZE_TOKEN_VALUES,\n type AXTextEditorCommandAttrs,\n type AXTextEditorCommandType,\n type AXTextEditorFontSizeToken,\n type AXTextEditorHeadingLevel,\n type AXTextEditorTiptapEditor,\n} from './text-editor.types';\n\nfunction escapeHtml(value: string): string {\n return value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('\"', '"');\n}\n\nfunction normalizeHref(value: string): string {\n const href = value.trim();\n if (!href) return '';\n if (/^(https?:|mailto:|tel:|#|\\/)/i.test(href)) return href;\n return `https://${href}`;\n}\n\nfunction headingLevel(attrs?: AXTextEditorCommandAttrs): AXTextEditorHeadingLevel | undefined {\n const level = Number(attrs?.['level']);\n if (level >= 1 && level <= 6) {\n return level as AXTextEditorHeadingLevel;\n }\n return undefined;\n}\n\nfunction resolveFontSize(attrs?: AXTextEditorCommandAttrs): string | null {\n const raw = attrs?.['size'];\n if (raw == null || raw === '') {\n return null;\n }\n const size = String(raw);\n if (size === 'small' || size === 'large' || size === 'huge') {\n return AX_TEXT_EDITOR_FONT_SIZE_TOKEN_VALUES[size as AXTextEditorFontSizeToken];\n }\n return size;\n}\n\nexport function isTextEditorCommandActive(\n editor: AXTextEditorTiptapEditor,\n command: AXTextEditorCommandType,\n attrs?: AXTextEditorCommandAttrs,\n): boolean {\n switch (command) {\n case 'heading': {\n const level = headingLevel(attrs);\n return level ? editor.isActive('heading', { level }) : editor.isActive('heading');\n }\n case 'paragraph':\n return editor.isActive('paragraph');\n case 'align':\n return editor.isActive({ textAlign: attrs?.['align'] });\n case 'direction':\n return editor.isActive({ dir: attrs?.['direction'] });\n case 'link':\n return editor.isActive('link');\n case 'image':\n return editor.isActive('image');\n case 'video':\n return editor.isActive('video');\n case 'fontSize':\n return Boolean(editor.getAttributes('textStyle')?.['fontSize']);\n case 'insertTable':\n return editor.isActive('table');\n case 'unlink':\n case 'color':\n case 'highlight':\n case 'undo':\n case 'redo':\n case 'horizontalRule':\n return false;\n default:\n return editor.isActive(command);\n }\n}\n\nexport function canRunTextEditorCommand(\n editor: AXTextEditorTiptapEditor,\n command: AXTextEditorCommandType,\n attrs?: AXTextEditorCommandAttrs,\n): boolean {\n switch (command) {\n case 'undo':\n return editor.can().undo();\n case 'redo':\n return editor.can().redo();\n case 'heading': {\n const level = headingLevel(attrs);\n return level ? editor.can().setHeading({ level }) : editor.can().setParagraph();\n }\n case 'paragraph':\n return editor.can().setParagraph();\n case 'align':\n return editor.can().setTextAlign(String(attrs?.['align'] ?? 'left'));\n case 'direction':\n return true;\n case 'color':\n return attrs?.['color'] ? editor.can().setColor(String(attrs['color'])) : editor.can().unsetColor();\n case 'highlight':\n return attrs?.['color']\n ? editor.can().setHighlight({ color: String(attrs['color']) })\n : editor.can().unsetHighlight();\n case 'fontSize':\n return editor.isEditable;\n case 'link':\n return editor.isEditable;\n case 'unlink':\n return editor.isEditable && editor.can().unsetLink();\n case 'image':\n case 'video':\n return editor.isEditable;\n case 'insertTable':\n return editor.can().insertTable({\n rows: Number(attrs?.['rows'] ?? 3),\n cols: Number(attrs?.['cols'] ?? 3),\n withHeaderRow: Boolean(attrs?.['withHeaderRow'] ?? false),\n });\n case 'addColumnBefore':\n return editor.can().addColumnBefore();\n case 'addColumnAfter':\n return editor.can().addColumnAfter();\n case 'deleteColumn':\n return editor.can().deleteColumn();\n case 'addRowBefore':\n return editor.can().addRowBefore();\n case 'addRowAfter':\n return editor.can().addRowAfter();\n case 'deleteRow':\n return editor.can().deleteRow();\n case 'toggleHeaderRow':\n return editor.can().toggleHeaderRow();\n case 'deleteTable':\n return editor.can().deleteTable();\n case 'blockquote':\n return editor.can().toggleBlockquote();\n case 'code':\n return editor.can().toggleCode();\n case 'codeBlock':\n return editor.can().toggleCodeBlock();\n case 'horizontalRule':\n return editor.can().setHorizontalRule();\n case 'bulletList':\n return editor.isEditable && Boolean(editor.schema.nodes['bulletList']);\n case 'orderedList':\n return editor.isEditable && Boolean(editor.schema.nodes['orderedList']);\n case 'superscript':\n return editor.can().toggleSuperscript();\n case 'subscript':\n return editor.can().toggleSubscript();\n case 'bold':\n return editor.can().toggleBold();\n case 'italic':\n return editor.can().toggleItalic();\n case 'underline':\n return editor.can().toggleUnderline();\n case 'strike':\n return editor.can().toggleStrike();\n default:\n return false;\n }\n}\n\nexport function runTextEditorCommand(\n editor: AXTextEditorTiptapEditor,\n command: AXTextEditorCommandType,\n attrs?: AXTextEditorCommandAttrs,\n): boolean {\n const chain = editor.chain().focus();\n switch (command) {\n case 'undo':\n return chain.undo().run();\n case 'redo':\n return chain.redo().run();\n case 'heading': {\n const level = headingLevel(attrs);\n return level ? chain.setHeading({ level }).run() : chain.setParagraph().run();\n }\n case 'paragraph':\n return chain.setParagraph().run();\n case 'align':\n return chain.setTextAlign(String(attrs?.['align'] ?? 'left')).run();\n case 'direction': {\n const direction = attrs?.['direction'] === 'rtl' ? 'rtl' : 'ltr';\n return chain\n .updateAttributes('paragraph', { dir: direction })\n .updateAttributes('heading', { dir: direction })\n .run();\n }\n case 'color':\n return attrs?.['color'] ? chain.setColor(String(attrs['color'])).run() : chain.unsetColor().run();\n case 'highlight':\n return attrs?.['color']\n ? chain.setHighlight({ color: String(attrs['color']) }).run()\n : chain.unsetHighlight().run();\n case 'fontSize':\n return chain.setFontSize(resolveFontSize(attrs)).run();\n case 'link': {\n const href = normalizeHref(String(attrs?.['href'] ?? ''));\n if (!href) {\n return chain.extendMarkRange('link').unsetLink().run();\n }\n if (editor.state.selection.empty) {\n const safeHref = escapeHtml(href);\n return chain.insertContent(`<a href=\"${safeHref}\">${safeHref}</a>`).run();\n }\n return chain.extendMarkRange('link').setLink({ href }).run();\n }\n case 'unlink':\n return chain.extendMarkRange('link').unsetLink().run();\n case 'image': {\n const src = String(attrs?.['src'] ?? '').trim();\n if (!src) return false;\n return chain.setImage({ src, alt: String(attrs?.['alt'] ?? '') }).run();\n }\n case 'video': {\n const src = String(attrs?.['src'] ?? '').trim();\n if (!src) return false;\n return chain.setVideo({ src }).run();\n }\n case 'insertTable':\n return chain\n .insertTable({\n rows: Number(attrs?.['rows'] ?? 3),\n cols: Number(attrs?.['cols'] ?? 3),\n withHeaderRow: Boolean(attrs?.['withHeaderRow'] ?? false),\n })\n .run();\n case 'addColumnBefore':\n return chain.addColumnBefore().run();\n case 'addColumnAfter':\n return chain.addColumnAfter().run();\n case 'deleteColumn':\n return chain.deleteColumn().run();\n case 'addRowBefore':\n return chain.addRowBefore().run();\n case 'addRowAfter':\n return chain.addRowAfter().run();\n case 'deleteRow':\n return chain.deleteRow().run();\n case 'toggleHeaderRow':\n return chain.toggleHeaderRow().run();\n case 'deleteTable':\n return chain.deleteTable().run();\n case 'blockquote':\n return chain.toggleBlockquote().run();\n case 'code':\n return chain.toggleCode().run();\n case 'codeBlock':\n return chain.toggleCodeBlock().run();\n case 'horizontalRule':\n return chain.setHorizontalRule().run();\n case 'bulletList':\n return chain.toggleBulletList().run();\n case 'orderedList':\n return chain.toggleOrderedList().run();\n case 'superscript':\n return chain.toggleSuperscript().run();\n case 'subscript':\n return chain.toggleSubscript().run();\n case 'bold':\n return chain.toggleBold().run();\n case 'italic':\n return chain.toggleItalic().run();\n case 'underline':\n return chain.toggleUnderline().run();\n case 'strike':\n return chain.toggleStrike().run();\n default:\n return false;\n }\n}\n","import {\n AX_DEFAULT_TEXT_EDITOR_FEATURES,\n type AXTextEditorFeatures,\n type AXTextEditorHeadingLevel,\n type AXTextEditorLoadExtensionsOptions,\n} from './text-editor.types';\n\ntype AXTextEditorCore = typeof import('@tiptap/core');\n\nfunction createSuperscript(core: AXTextEditorCore) {\n return core.Mark.create({\n name: 'superscript',\n excludes: 'subscript',\n parseHTML() {\n return [{ tag: 'sup' }];\n },\n renderHTML({ HTMLAttributes }) {\n return ['sup', core.mergeAttributes(HTMLAttributes), 0];\n },\n addCommands() {\n return {\n toggleSuperscript:\n () =>\n ({ commands }) =>\n commands.toggleMark(this.name),\n };\n },\n });\n}\n\nfunction createSubscript(core: AXTextEditorCore) {\n return core.Mark.create({\n name: 'subscript',\n excludes: 'superscript',\n parseHTML() {\n return [{ tag: 'sub' }];\n },\n renderHTML({ HTMLAttributes }) {\n return ['sub', core.mergeAttributes(HTMLAttributes), 0];\n },\n addCommands() {\n return {\n toggleSubscript:\n () =>\n ({ commands }) =>\n commands.toggleMark(this.name),\n };\n },\n });\n}\n\nfunction createKeepSelection(\n core: AXTextEditorCore,\n pmState: typeof import('@tiptap/pm/state'),\n pmView: typeof import('@tiptap/pm/view'),\n) {\n const keepSelectionKey = new pmState.PluginKey('axKeepSelection');\n return core.Extension.create({\n name: 'keepSelection',\n addProseMirrorPlugins() {\n return [\n new pmState.Plugin({\n key: keepSelectionKey,\n state: {\n init() {\n return pmView.DecorationSet.empty;\n },\n apply(tr, set) {\n const meta = tr.getMeta(keepSelectionKey) as { from: number; to: number } | 'clear' | undefined;\n if (meta === 'clear') return pmView.DecorationSet.empty;\n if (meta && meta.from !== meta.to) {\n return pmView.DecorationSet.create(tr.doc, [\n pmView.Decoration.inline(meta.from, meta.to, { class: 'ax-text-editor-kept-selection' }),\n ]);\n }\n return set.map(tr.mapping, tr.doc);\n },\n },\n props: {\n decorations(state) {\n return keepSelectionKey.getState(state);\n },\n handleDOMEvents: {\n blur(view) {\n const { from, to } = view.state.selection;\n if (from !== to) {\n view.dispatch(view.state.tr.setMeta(keepSelectionKey, { from, to }));\n }\n return false;\n },\n focus(view) {\n const decorations = keepSelectionKey.getState(view.state) as\n | import('@tiptap/pm/view').DecorationSet\n | undefined;\n if (decorations?.find().length) {\n view.dispatch(view.state.tr.setMeta(keepSelectionKey, 'clear'));\n }\n return false;\n },\n },\n },\n }),\n ];\n },\n });\n}\n\nfunction createTextDirection(core: AXTextEditorCore) {\n return core.Extension.create({\n name: 'textDirection',\n addGlobalAttributes() {\n return [\n {\n types: ['paragraph', 'heading'],\n attributes: {\n dir: {\n default: null,\n parseHTML: (element) => element.getAttribute('dir'),\n renderHTML: (attributes) => (attributes['dir'] ? { dir: attributes['dir'] } : {}),\n },\n },\n },\n ];\n },\n });\n}\n\nfunction createFontSize(core: AXTextEditorCore) {\n return core.Extension.create({\n name: 'axTextEditorFontSize',\n addGlobalAttributes() {\n return [\n {\n types: ['textStyle'],\n attributes: {\n fontSize: {\n default: null,\n parseHTML: (element) => element.style.fontSize?.replace(/['\"]+/g, '') || null,\n renderHTML: (attributes) =>\n attributes['fontSize'] ? { style: `font-size: ${attributes['fontSize']}` } : {},\n },\n },\n },\n ];\n },\n addCommands() {\n return {\n setFontSize:\n (size: string | null) =>\n ({ chain }) => {\n if (!size) {\n return chain().focus().setMark('textStyle', { fontSize: null }).removeEmptyTextStyle().run();\n }\n return chain().focus().setMark('textStyle', { fontSize: size }).run();\n },\n };\n },\n });\n}\n\nfunction createVideo(core: AXTextEditorCore) {\n return core.Node.create({\n name: 'video',\n group: 'block',\n atom: true,\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n addAttributes() {\n return {\n src: {\n default: null,\n },\n };\n },\n parseHTML() {\n return [\n { tag: 'video[src]' },\n { tag: 'div[data-text-editor-video] video' },\n { tag: 'div[data-wysiwyg-video] iframe' },\n { tag: 'iframe[src]' },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n const src = String(HTMLAttributes['src'] ?? '');\n if (isEmbedSrc(src)) {\n return [\n 'div',\n core.mergeAttributes(this.options.HTMLAttributes, { 'data-text-editor-video': '' }),\n [\n 'iframe',\n core.mergeAttributes({\n src,\n frameborder: '0',\n allowfullscreen: 'true',\n allow: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',\n }),\n ],\n ];\n }\n return [\n 'video',\n core.mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n class: 'ax-text-editor-video',\n controls: 'true',\n }),\n ];\n },\n addCommands() {\n return {\n setVideo:\n ({ src }) =>\n ({ commands }) =>\n commands.insertContent({\n type: this.name,\n attrs: { src: toVideoSrc(src) },\n }),\n };\n },\n });\n}\n\nfunction isEmbedSrc(src: string): boolean {\n return /youtube\\.com\\/embed\\/|youtu\\.be\\//i.test(src);\n}\n\nfunction toVideoSrc(src: string): string {\n const trimmed = src.trim();\n if (!trimmed) return trimmed;\n try {\n const url = new URL(trimmed);\n if (url.hostname.includes('youtube.com') && url.searchParams.get('v')) {\n return `https://www.youtube.com/embed/${url.searchParams.get('v')}`;\n }\n if (url.hostname === 'youtu.be') {\n return `https://www.youtube.com/embed/${url.pathname.slice(1)}`;\n }\n } catch {\n return trimmed;\n }\n return trimmed;\n}\n\nconst DEFAULT_HEADING_LEVELS: AXTextEditorHeadingLevel[] = [1, 2, 3];\n\nfunction resolvePlaceholder(placeholder?: string | (() => string)): string {\n if (typeof placeholder === 'function') {\n return placeholder();\n }\n return placeholder ?? '';\n}\n\nexport async function createTextEditorExtensions(\n placeholderOrOptions: string | (() => string) | AXTextEditorLoadExtensionsOptions = '',\n): Promise<import('@tiptap/core').AnyExtension[]> {\n const options: AXTextEditorLoadExtensionsOptions =\n typeof placeholderOrOptions === 'function' || typeof placeholderOrOptions === 'string'\n ? { placeholder: placeholderOrOptions }\n : placeholderOrOptions;\n\n const features: AXTextEditorFeatures = { ...AX_DEFAULT_TEXT_EDITOR_FEATURES, ...options.features };\n const headingLevels = options.headingLevels ?? DEFAULT_HEADING_LEVELS;\n\n const [core, pmState, pmView, starterKitMod, textStyleMod, highlightMod, textAlignMod, extensionsMod, tableMod, imageMod] =\n await Promise.all([\n import('@tiptap/core'),\n import('@tiptap/pm/state'),\n import('@tiptap/pm/view'),\n import('@tiptap/starter-kit'),\n import('@tiptap/extension-text-style'),\n import('@tiptap/extension-highlight'),\n import('@tiptap/extension-text-align'),\n import('@tiptap/extensions'),\n import('@tiptap/extension-table/kit'),\n import('@tiptap/extension-image'),\n ]);\n\n const Image = imageMod.default ?? imageMod.Image;\n const Highlight = highlightMod.default ?? highlightMod.Highlight;\n\n const extensions: import('@tiptap/core').AnyExtension[] = [\n starterKitMod.StarterKit.configure({\n heading: {\n levels: headingLevels,\n HTMLAttributes: {\n class: 'ax-text-editor-heading',\n },\n },\n link: {\n openOnClick: false,\n HTMLAttributes: {\n class: 'ax-text-editor-link',\n },\n },\n code: {\n HTMLAttributes: {\n class: 'ax-text-editor-code',\n },\n },\n codeBlock: {\n HTMLAttributes: {\n class: 'ax-text-editor-code-block',\n },\n },\n bulletList: {\n HTMLAttributes: {\n class: 'ax-text-editor-bullet-list',\n },\n },\n orderedList: {\n HTMLAttributes: {\n class: 'ax-text-editor-ordered-list',\n },\n },\n listItem: {\n HTMLAttributes: {\n class: 'ax-text-editor-list-item',\n },\n },\n }),\n textStyleMod.TextStyle,\n textStyleMod.Color,\n createFontSize(core),\n Highlight.configure({ multicolor: true }),\n textAlignMod.TextAlign.configure({\n types: ['heading', 'paragraph'],\n }),\n createTextDirection(core),\n ];\n\n if (features.superscript) {\n extensions.push(createSuperscript(core));\n }\n if (features.subscript) {\n extensions.push(createSubscript(core));\n }\n if (features.keepSelection) {\n extensions.push(createKeepSelection(core, pmState, pmView));\n }\n if (features.table) {\n extensions.push(\n tableMod.TableKit.configure({\n table: {\n resizable: true,\n lastColumnResizable: true,\n cellMinWidth: 64,\n HTMLAttributes: {\n class: 'ax-text-editor-table',\n },\n },\n }),\n );\n }\n if (features.image) {\n extensions.push(\n Image.configure({\n inline: true,\n allowBase64: true,\n HTMLAttributes: {\n class: 'ax-text-editor-image',\n },\n }),\n );\n }\n if (features.video) {\n extensions.push(createVideo(core));\n }\n if (features.placeholder) {\n extensions.push(\n extensionsMod.Placeholder.configure({\n placeholder: () => resolvePlaceholder(options.placeholder),\n showOnlyCurrent: true,\n }),\n );\n }\n\n if (options.extensions?.length) {\n extensions.push(...options.extensions);\n }\n\n return extensions;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -344,10 +344,10 @@ class AXUploaderService {
|
|
|
344
344
|
}
|
|
345
345
|
return requests;
|
|
346
346
|
}
|
|
347
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
348
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.
|
|
347
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXUploaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
348
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXUploaderService, providedIn: 'root' }); }
|
|
349
349
|
}
|
|
350
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
350
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXUploaderService, decorators: [{
|
|
351
351
|
type: Injectable,
|
|
352
352
|
args: [{ providedIn: 'root' }]
|
|
353
353
|
}] });
|
|
@@ -798,10 +798,10 @@ class AXUploaderZoneDirective {
|
|
|
798
798
|
});
|
|
799
799
|
}
|
|
800
800
|
}
|
|
801
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
802
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.
|
|
801
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXUploaderZoneDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
802
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: AXUploaderZoneDirective, isStandalone: true, selector: "[axUploaderZone]", inputs: { multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, fileType: { classPropertyName: "fileType", publicName: "fileType", isSignal: true, isRequired: false, transformFunction: null }, overlayTemplate: { classPropertyName: "overlayTemplate", publicName: "overlayTemplate", isSignal: true, isRequired: false, transformFunction: null }, disableBrowse: { classPropertyName: "disableBrowse", publicName: "disableBrowse", isSignal: true, isRequired: false, transformFunction: null }, disableDragDrop: { classPropertyName: "disableDragDrop", publicName: "disableDragDrop", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fileChange: "fileChange", onChanged: "onChanged", dragEnter: "dragEnter", dragLeave: "dragLeave", dragOver: "dragOver", onFileUploadComplete: "onFileUploadComplete", onFilesUploadComplete: "onFilesUploadComplete" }, host: { classAttribute: "ax-drop-zone" }, providers: [AXUnsubscriber], ngImport: i0 }); }
|
|
803
803
|
}
|
|
804
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
804
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXUploaderZoneDirective, decorators: [{
|
|
805
805
|
type: Directive,
|
|
806
806
|
args: [{
|
|
807
807
|
selector: '[axUploaderZone]',
|
|
@@ -858,10 +858,10 @@ class AXUploaderBrowseDirective {
|
|
|
858
858
|
}
|
|
859
859
|
await zone.browser();
|
|
860
860
|
}
|
|
861
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
862
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.
|
|
861
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXUploaderBrowseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
862
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.6", type: AXUploaderBrowseDirective, isStandalone: true, selector: "[axUploaderBrowseHandle]", ngImport: i0 }); }
|
|
863
863
|
}
|
|
864
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
864
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXUploaderBrowseDirective, decorators: [{
|
|
865
865
|
type: Directive,
|
|
866
866
|
args: [{ selector: '[axUploaderBrowseHandle]' }]
|
|
867
867
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-cdk-uploader.mjs","sources":["../../../../packages/cdk/uploader/src/lib/uploader-zone-host.ts","../../../../packages/cdk/uploader/src/lib/uploader.models.ts","../../../../packages/cdk/uploader/src/lib/uploader.service.ts","../../../../packages/cdk/uploader/src/lib/uploader-zone.directive.ts","../../../../packages/cdk/uploader/src/lib/uploader-browse-handle.directive.ts","../../../../packages/cdk/uploader/src/acorex-cdk-uploader.ts"],"sourcesContent":["import type { AXUploaderZoneDirective } from './uploader-zone.directive';\n\n/** DOM marker so browse handles can find a zone across content projection. */\nexport const AX_UPLOADER_ZONE_HOST = Symbol('AX_UPLOADER_ZONE_HOST');\n\nexport type AXUploaderZoneHostElement = HTMLElement & {\n [AX_UPLOADER_ZONE_HOST]?: AXUploaderZoneDirective;\n};\n\nexport function bindUploaderZoneHost(element: HTMLElement, zone: AXUploaderZoneDirective): void {\n (element as AXUploaderZoneHostElement)[AX_UPLOADER_ZONE_HOST] = zone;\n}\n\nexport function unbindUploaderZoneHost(element: HTMLElement): void {\n delete (element as AXUploaderZoneHostElement)[AX_UPLOADER_ZONE_HOST];\n}\n\n/** Walk ancestors to resolve the zone (works with projected browse handles). */\nexport function findUploaderZoneFromDom(start: HTMLElement): AXUploaderZoneDirective | undefined {\n let el: HTMLElement | null = start;\n while (el) {\n const zone = (el as AXUploaderZoneHostElement)[AX_UPLOADER_ZONE_HOST];\n if (zone) {\n return zone;\n }\n el = el.parentElement;\n }\n return undefined;\n}\n","import { AXEvent } from '@acorex/cdk/common';\nimport type { AXValidationRuleResult } from '@acorex/core/validation';\nimport { computed, signal } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nexport interface AXUploaderChooseFilesResult {\n accepted: File[];\n rejected: { file: File; errors: AXValidationRuleResult[] }[];\n}\n\nexport interface AXUploaderFileChangeEvent {\n event: Event;\n files: File[];\n rejected?: { file: File; errors: AXValidationRuleResult[] }[];\n}\n\nexport type AXUploadStatus = 'new' | 'inprogress' | 'completed' | 'failed' | 'canceled';\n\nexport interface AXUploaderChangedEvent extends AXEvent {\n requests: AXUploadRequest[];\n}\n\nexport interface AXUploaderFileStartEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\nexport interface AXUploaderFileCompleteEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\n\nexport interface AXUploaderFilesCompleteEvent extends AXEvent {\n uploadedFiles: AXUploadRequest[];\n data?: any;\n}\n\nexport interface AXUploaderFileCancelEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\n\nexport class AXUploadRequest {\n get name(): string {\n return this.file.name;\n }\n\n get ext(): string {\n const parts = this.name.split('.');\n if (parts.length > 1) {\n return parts[parts.length - 1];\n } else {\n // No extension found\n return '';\n }\n }\n\n get size(): number {\n return this.file.size;\n }\n\n get file(): File {\n return this.uploadFile;\n }\n\n private readonly _progress = signal(0);\n progress = computed(() => this._progress());\n\n private readonly _estimateTime = signal(0);\n estimateTime = computed(() => this._estimateTime());\n\n private readonly _status = signal<AXUploadStatus>('new');\n status = computed(() => this._status());\n\n private readonly _message = signal<string | null>(null);\n message = computed(() => this._message());\n\n private readonly _isDetermined = signal<boolean>(false);\n isDetermined = computed(() => this._isDetermined());\n\n private startTime: number;\n private bytesTransferred = 0;\n\n public metaData: any;\n\n public onCancel = new Subject<void>();\n public onStart = new Subject<void>();\n public onFailed = new Subject<void>();\n public onComplete = new BehaviorSubject<void>(null);\n\n constructor(private uploadFile: File) {}\n\n private estimateTimeRemaining(bytesTransferred: number): number | null {\n const now = Date.now();\n const elapsed = now - this.startTime; // Time in milliseconds\n\n if (isNaN(elapsed) || elapsed === 0) {\n return null; // Avoid division by zero\n }\n\n const speed = (bytesTransferred || 1) / elapsed; // Bytes per millisecond\n const remainingBytes = this.size - bytesTransferred;\n const estimatedTime = Math.ceil(remainingBytes / speed); // Time in milliseconds\n return estimatedTime; // Return the estimated time in milliseconds\n }\n\n public setTransferredBytes(value: number) {\n this.bytesTransferred = value;\n if (value > 0 && !this._isDetermined() && (this.status() == 'new' || this.status() == 'inprogress')) {\n this._isDetermined.set(true);\n }\n this.updateEstimateTime();\n }\n\n private updateEstimateTime() {\n this._estimateTime.set(this.estimateTimeRemaining(this.bytesTransferred));\n const progress = Math.floor((this.bytesTransferred / this.size) * 100);\n this._progress.set(progress);\n }\n\n public async upload(): Promise<void> {\n this.startTime = Date.now();\n this._progress.set(0);\n this._status.set('inprogress');\n this.onStart.next();\n }\n\n public cancel(): void {\n this._status.set('canceled');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n this.onCancel.next();\n }\n\n public redo(): void {\n // this.startTime = Date.now();\n this._progress.set(0);\n this._status.set('inprogress');\n this._message.set(null);\n this.onStart.next();\n }\n\n public error(message: string): void {\n this._status.set('failed');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n this._message.set(message);\n this.onFailed.next();\n }\n\n public finish(data?: any): void {\n this._status.set('completed');\n this.bytesTransferred = this.size;\n this._estimateTime.set(0);\n this._progress.set(100);\n this.onComplete.next(data);\n }\n}\n","import { AXEvent } from '@acorex/cdk/common';\nimport { AXFileService } from '@acorex/core/file';\nimport type { AXValidationRuleResult } from '@acorex/core/validation';\nimport { Injectable, inject } from '@angular/core';\nimport { sumBy } from 'lodash-es';\nimport { BehaviorSubject, Subject, map } from 'rxjs';\nimport {\n AXUploadRequest,\n AXUploaderFileCancelEvent,\n AXUploaderFileCompleteEvent,\n AXUploaderFileStartEvent,\n AXUploaderFilesCompleteEvent,\n type AXUploaderChooseFilesResult,\n} from './uploader.models';\n\n/** Reference to stored file/media (url and/or mediaId). */\nexport interface AXUploadReference {\n url?: string;\n mediaId?: string;\n mimeType?: string;\n size?: number;\n expiresAt?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface AXFileUploadOptions {\n source: File | Blob;\n fileName?: string;\n mimeType?: string;\n metadata?: Record<string, unknown>;\n onProgress?: (percent: number) => void;\n signal?: AbortSignal;\n}\n\nexport interface AXUploadResult {\n url: string;\n thumbnailUrl?: string;\n mediaId?: string;\n size: number;\n mimeType: string;\n metadata?: Record<string, unknown>;\n}\n\n/** Emitted when {@link AXUploaderService.upload} is called. */\nexport interface AXUploaderUploadEvent extends AXEvent {\n options: AXFileUploadOptions;\n resolve: (result: AXUploadResult) => void;\n reject: (reason: unknown) => void;\n}\n\n/** Emitted when {@link AXUploaderService.resolveUrl} is called. */\nexport interface AXUploaderResolveUrlEvent extends AXEvent {\n reference: AXUploadReference;\n signal?: AbortSignal;\n resolve: (url: string) => void;\n reject: (reason: unknown) => void;\n}\n\n/** Emitted when {@link AXUploaderService.deleteMedia} is called. */\nexport interface AXUploaderDeleteMediaEvent extends AXEvent {\n reference: AXUploadReference;\n resolve: () => void;\n reject: (reason: unknown) => void;\n}\n\nexport interface AXUploaderBrowseOptions {\n multiple?: boolean;\n accept?: string;\n /** Logical file type name(s) registered in {@link AXFileService}. */\n fileType?: string | string[];\n}\n\nexport interface AXUploaderAddOptions {\n fileType?: string | string[];\n}\n\n/**\n * File upload queue and validation via {@link AXFileService}.\n * Storage is implemented by subscribing to upload/resolve/delete events.\n * @category Services\n */\n@Injectable({ providedIn: 'root' })\nexport class AXUploaderService {\n private readonly fileService = inject(AXFileService);\n\n private readonly _files$ = new BehaviorSubject<AXUploadRequest[]>([]);\n\n public readonly files = this._files$.asObservable();\n\n public readonly onFileUploadStart = new Subject<AXUploaderFileStartEvent>();\n\n public readonly onFileUploadComplete = new Subject<AXUploaderFileCompleteEvent>();\n\n public readonly onFilesUploadComplete = new Subject<AXUploaderFilesCompleteEvent>();\n\n public readonly onFileUploadCanceled = new Subject<AXUploaderFileCancelEvent>();\n\n /** Subscribe to perform uploads (e.g. HTTP, IndexedDB). */\n public readonly onUpload = new Subject<AXUploaderUploadEvent>();\n\n /** Subscribe to resolve a stored reference to a playback URL. */\n public readonly onResolveUrl = new Subject<AXUploaderResolveUrlEvent>();\n\n /** Subscribe to delete stored media. */\n public readonly onDeleteMedia = new Subject<AXUploaderDeleteMediaEvent>();\n\n public readonly totalEstimateTime = this._files$.pipe(\n map((files) => sumBy(files, (file) => (file.status() === 'inprogress' ? file.estimateTime() : 0))),\n );\n\n isAnyDetermined(): boolean {\n return this._files$.value.some((file) => file.isDetermined());\n }\n\n validateFiles(\n files: File[],\n fileType: string,\n ): Promise<{ accepted: File[]; rejected: { file: File; errors: AXValidationRuleResult[] }[] }> {\n return this.fileService.validateMany(files, fileType);\n }\n\n async getAcceptAttribute(fileType: string | string[]): Promise<string> {\n return this.fileService.getAcceptAttribute(fileType);\n }\n\n upload(options: AXFileUploadOptions): Promise<AXUploadResult> {\n return new Promise<AXUploadResult>((resolve, reject) => {\n if (!this.hasUploadHandler()) {\n reject(\n new Error(\n 'No upload handler subscribed to AXUploaderService.onUpload. Provide a service that handles upload events.',\n ),\n );\n return;\n }\n this.onUpload.next({\n component: this,\n options,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n\n resolveUrl(reference: AXUploadReference, signal?: AbortSignal): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n if (!this.hasResolveUrlHandler()) {\n reject(\n new Error(\n 'No handler subscribed to AXUploaderService.onResolveUrl. Provide a service that handles resolve events.',\n ),\n );\n return;\n }\n this.onResolveUrl.next({\n component: this,\n reference,\n signal,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n\n async resolvePlaybackUrl(reference: AXUploadReference, signal?: AbortSignal): Promise<string> {\n const direct = reference.url?.trim();\n if (direct && !reference.mediaId) {\n return direct;\n }\n if (direct && reference.mediaId) {\n try {\n return await this.resolveUrl(reference, signal);\n } catch {\n return direct;\n }\n }\n if (reference.mediaId) {\n return this.resolveUrl(reference, signal);\n }\n if (direct) {\n return direct;\n }\n throw new Error('Upload reference has no url or mediaId');\n }\n\n deleteMedia(reference: AXUploadReference): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (!this.hasDeleteMediaHandler()) {\n reject(\n new Error(\n 'No handler subscribed to AXUploaderService.onDeleteMedia. Provide a service that handles delete events.',\n ),\n );\n return;\n }\n this.onDeleteMedia.next({\n component: this,\n reference,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n\n private hasUploadHandler(): boolean {\n return this.onUpload.observers.length > 0;\n }\n\n private hasResolveUrlHandler(): boolean {\n return this.onResolveUrl.observers.length > 0;\n }\n\n private hasDeleteMediaHandler(): boolean {\n return this.onDeleteMedia.observers.length > 0;\n }\n\n async add(files: FileList | File[], options?: AXUploaderAddOptions): Promise<AXUploadRequest[]> {\n const list = Array.from(files).map((f) => new AXUploadRequest(f));\n await this.applyFileTypeValidation(list, options?.fileType);\n\n const newFiles = [...this._files$.value, ...list];\n this._files$.next(newFiles);\n void this.startUpload();\n return list;\n }\n\n /**\n * Opens the file dialog and returns selected files without enqueueing uploads.\n * With `fileType`, applies catalog validation; otherwise uses legacy accept-only selection.\n */\n async chooseFiles(options: AXUploaderBrowseOptions = {}): Promise<AXUploaderChooseFilesResult> {\n try {\n if (options.fileType) {\n const accept = options.accept ?? (await this.fileService.getAcceptAttribute(options.fileType));\n\n return this.fileService.chooseValidated({\n fileType: options.fileType,\n multiple: options.multiple ?? false,\n accept,\n });\n }\n\n const accepted = await this.fileService.choose({\n accept: options.accept,\n multiple: options.multiple ?? false,\n });\n\n return { accepted, rejected: [] };\n } catch (error) {\n console.error('File choose failed:', error);\n return { accepted: [], rejected: [] };\n }\n }\n\n async browse(options: AXUploaderBrowseOptions = { multiple: false }): Promise<AXUploadRequest[]> {\n const { accepted } = await this.chooseFiles(options);\n if (!accepted.length) {\n return [];\n }\n return this.add(accepted, { fileType: options.fileType });\n }\n\n async cancelAll(): Promise<void> {\n await Promise.all(this._files$.value.filter((c) => c.status() !== 'completed').map((c) => c.cancel()));\n }\n\n clearAll(): void {\n const remainingFiles = this._files$.value.filter((c) => c.status() === 'inprogress');\n this._files$.next(remainingFiles);\n }\n\n remove(item: AXUploadRequest): void {\n const updatedFiles = this._files$.value.filter((c) => c !== item);\n this._files$.next(updatedFiles);\n }\n\n private async startUpload(): Promise<void> {\n const newFiles = this._files$.value.filter((c) => c.status() === 'new');\n for (const file of newFiles) {\n await this.bindEvents(file);\n }\n }\n\n private async bindEvents(c: AXUploadRequest): Promise<void> {\n c.onStart.subscribe(() => {\n this.onFileUploadStart.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n });\n\n c.onComplete.subscribe((data) => {\n Object.assign(c, { metaData: data });\n this.onFileUploadComplete.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n\n const isAllDone = this._files$.value.every(\n (f) => f.status() === 'completed' || f.status() === 'canceled' || f.status() === 'failed',\n );\n\n if (isAllDone) {\n this.onFilesUploadComplete.next({\n component: this,\n uploadedFiles: this._files$.value,\n isUserInteraction: false,\n });\n }\n });\n\n c.onCancel.subscribe(() => {\n this.onFileUploadCanceled.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n });\n }\n\n private async applyFileTypeValidation(\n requests: AXUploadRequest[],\n fileType?: string | string[],\n ): Promise<AXUploadRequest[]> {\n if (!fileType) {\n return requests;\n }\n\n for (const request of requests) {\n const errors = await this.fileService.validate(request.file, fileType);\n if (errors.length > 0) {\n request.error(errors[0]?.message ?? 'Invalid file');\n }\n }\n\n return requests;\n }\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectorRef,\n DOCUMENT,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n OnDestroy,\n PLATFORM_ID,\n TemplateRef,\n ViewContainerRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n AXUploaderChangedEvent,\n AXUploaderFileChangeEvent,\n AXUploaderFileCompleteEvent,\n AXUploaderFilesCompleteEvent,\n} from './uploader.models';\nimport { bindUploaderZoneHost, unbindUploaderZoneHost } from './uploader-zone-host';\nimport { AXUploaderService } from './uploader.service';\n\n/**\n * A directive that provides drag-and-drop and file upload functionality.\n * When applied to an element, it enables drag-and-drop file uploads and file browsing.\n * @category Directives\n */\n@Directive({\n selector: '[axUploaderZone]',\n providers: [AXUnsubscriber],\n host: {\n class: 'ax-drop-zone',\n },\n})\nexport class AXUploaderZoneDirective implements OnDestroy {\n /**\n * The element reference for the directive host.\n * @ignore\n */\n private elementRef = inject(ElementRef);\n\n /**\n * View container reference for rendering custom templates.\n * @ignore\n */\n private viewContainerRef = inject(ViewContainerRef);\n\n /**\n * Whether multiple files can be selected.\n * @defaultValue true\n */\n multiple = input(true);\n\n /**\n * File types that are accepted for upload.\n * @defaultValue null\n */\n accept = input<string | null>(null);\n\n /**\n * Logical file type name from {@link AXFileService} (e.g. `conversation-image`).\n * Required for browse handles and validated selection.\n */\n fileType = input<string | null>(null);\n\n /**\n * Custom template for the drag overlay. If provided, this will be used instead of the default overlay.\n */\n overlayTemplate = input<TemplateRef<unknown>>();\n\n /**\n * Whether browsing files by clicking on the container is disabled.\n * @defaultValue false\n */\n disableBrowse = input(false);\n\n /**\n * Whether drag and drop functionality is disabled.\n * @defaultValue false\n */\n disableDragDrop = input(false);\n\n /**\n * Change detector reference.\n * @ignore\n */\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Document reference.\n * @ignore\n */\n private document = inject(DOCUMENT);\n\n /**\n * Platform ID for browser detection.\n * @ignore\n */\n private platformID = inject(PLATFORM_ID);\n\n /**\n * Upload service instance.\n * @ignore\n */\n private uploadService = inject(AXUploaderService);\n\n /**\n * Unsubscriber service instance.\n * @ignore\n */\n private unsubscriber = inject(AXUnsubscriber);\n\n /**\n * Translation service instance.\n * @ignore\n */\n private translateService = inject(AXTranslationService);\n\n /**\n * The host element.\n * @ignore\n */\n private element: HTMLElement;\n\n /**\n * Embedded view reference for custom template.\n * @ignore\n */\n private templateViewRef: EmbeddedViewRef<unknown> | null = null;\n\n /**\n * Emitted when files are selected or dropped (like HTML file input).\n * Emits an event with files property containing the selected files.\n */\n fileChange = output<AXUploaderFileChangeEvent>();\n\n /**\n * Emitted when files are changed (added, removed, etc.).\n * @deprecated Use fileChange instead for simpler file input-like behavior\n */\n onChanged = output<AXUploaderChangedEvent>();\n\n /**\n * Emitted on drag enter event.\n */\n dragEnter = output<DragEvent>();\n\n /**\n * Emitted on drag leave event.\n */\n dragLeave = output<DragEvent>();\n\n /**\n * Emitted on drag over event.\n */\n dragOver = output<DragEvent>();\n\n /**\n * Emitted when a single file upload is completed.\n */\n onFileUploadComplete = output<AXUploaderFileCompleteEvent>();\n\n /**\n * Emitted when all files upload is completed.\n */\n onFilesUploadComplete = output<AXUploaderFilesCompleteEvent>();\n\n /**\n * CSS class for the overlay state.\n * @ignore\n */\n stateClass = 'ax-uploader-overlay-state';\n\n /**\n * The overlay element for drag and drop visual feedback.\n * @ignore\n */\n overlayElement: HTMLDivElement | null = null;\n\n /**\n * Flag to track if dragOver has been emitted for the current drag session.\n * @ignore\n */\n private dragOverEmitted = signal(false);\n\n /**\n * Counter to track drag enter/leave depth to prevent false dragleave events.\n * When moving from parent to child, dragleave fires even though we're still inside.\n * @ignore\n */\n private dragDepth = signal(0);\n\n /**\n * Animation end handler for cleanup.\n * @ignore\n */\n private animationEndHandler: ((e: AnimationEvent) => void) | null = null;\n\n /**\n * Initializes the directive with event listeners and service subscriptions.\n */\n constructor() {\n this.element = this.elementRef.nativeElement as HTMLElement;\n this.element.style.position = 'relative';\n bindUploaderZoneHost(this.element, this);\n\n //\n this.uploadService.onFileUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onFileUploadComplete.emit(c);\n });\n\n this.uploadService.onFilesUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onFilesUploadComplete.emit(c);\n });\n //\n setTimeout(() => {\n const browseHandlers = this.element.querySelectorAll('[data-ax-uploader-browse-handle=\"true\"]');\n if (browseHandlers.length <= 0 && !this.disableBrowse()) {\n this.element.addEventListener('click', this.browser.bind(this), true);\n }\n });\n\n if (!this.disableDragDrop()) {\n this.element.addEventListener('dragenter', this.handleDragEnter.bind(this), true);\n this.element.addEventListener('dragover', this.handleDragOver.bind(this), true);\n this.element.addEventListener('drop', this.handleOnDrop.bind(this), true);\n this.element.addEventListener('dragleave', (e) => this.removeZone(e as DragEvent), true);\n }\n }\n\n /**\n * Cleans up event listeners when the directive is destroyed.\n */\n ngOnDestroy(): void {\n unbindUploaderZoneHost(this.element);\n this.element.removeEventListener('click', this.browser.bind(this));\n\n this.element.removeEventListener('dragenter', this.handleDragEnter.bind(this));\n this.element.removeEventListener('drop', this.handleOnDrop.bind(this));\n this.element.removeEventListener('dragover', this.handleDragOver.bind(this));\n this.element.removeEventListener('dragleave', this.removeZone.bind(this));\n }\n\n /**\n * Handles drag enter events to show the upload overlay.\n * @private\n */\n private async handleDragEnter(event: DragEvent) {\n if (this.disableDragDrop()) return;\n this.dragOverEmitted.set(false); // Reset flag when entering\n this.dragDepth.update((depth) => depth + 1); // Increment depth counter\n\n // Only create overlay on first enter (when depth is 1)\n if (this.dragDepth() === 1) {\n // Cancel any pending exit animation\n this.cancelExitAnimation();\n await this.createZone();\n this.dragEnter.emit(event);\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n /**\n * Handles drop events to process dropped files.\n * @private\n */\n private async handleOnDrop(event: DragEvent) {\n if (this.disableDragDrop()) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n\n // Reset drag depth on drop\n this.dragDepth.set(0);\n\n if (event.dataTransfer?.files && event.dataTransfer.files.length > 0) {\n let files = Array.from(event.dataTransfer.files);\n let rejected: AXUploaderFileChangeEvent['rejected'];\n const catalog = this.fileType();\n\n if (catalog) {\n const result = await this.uploadService.validateFiles(files, catalog);\n files = result.accepted;\n rejected = result.rejected;\n }\n\n this.fileChange.emit({ event, files, rejected });\n\n if (!this.disableBrowse()) {\n const requests = await this.uploadService.add(files, { fileType: catalog ?? undefined });\n if (requests.length > 0) {\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true,\n });\n }\n }\n }\n\n this.removeZone();\n this.cdr.detectChanges();\n }\n\n /**\n * Handles drag over events to allow dropping.\n * @private\n */\n private handleDragOver(event: DragEvent) {\n if (this.disableDragDrop()) return;\n // Only emit dragOver once per drag session to avoid spam\n if (!this.dragOverEmitted()) {\n this.dragOverEmitted.set(true);\n this.dragOver.emit(event);\n }\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n /**\n * Creates the visual overlay for drag and drop feedback.\n * @private\n */\n private async createZone() {\n if (isPlatformBrowser(this.platformID)) {\n // Check if overlay already exists (might be exiting)\n let existingOverlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n\n // Verify the overlay is actually in the DOM (not removed after animation)\n if (existingOverlay && existingOverlay.parentNode === this.element) {\n // Remove exiting class to cancel exit animation and show overlay again\n existingOverlay.classList.remove('ax-uploader-overlay-exiting');\n // Clean up any pending animation handler\n if (this.animationEndHandler) {\n existingOverlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n }\n // Reset overlayElement reference if it was cleared\n if (!this.overlayElement && existingOverlay) {\n this.overlayElement = existingOverlay as HTMLDivElement;\n }\n return;\n } else if (existingOverlay && existingOverlay.parentNode !== this.element) {\n // Overlay exists but is not in the DOM, clear the reference\n this.overlayElement = null;\n existingOverlay = null;\n }\n\n // Check if custom template is provided\n const template = this.overlayTemplate();\n if (template) {\n // Create container for template\n this.overlayElement = this.document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state', '-ax-z-1');\n this.overlayElement.id = 'ax-uploader-overlay-state';\n\n // Create embedded view from template (will be inserted at directive anchor)\n this.viewContainerRef.clear();\n this.templateViewRef = this.viewContainerRef.createEmbeddedView(template);\n this.templateViewRef.detectChanges();\n\n // Get root nodes and move them to overlay element\n const rootNodes = this.templateViewRef.rootNodes;\n for (const node of rootNodes) {\n // Remove from current location if it has a parent\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n this.overlayElement.appendChild(node);\n }\n\n // Detach the view since we've moved the nodes\n this.templateViewRef.detach();\n\n this.element.appendChild(this.overlayElement);\n this.cdr.detectChanges();\n return;\n }\n\n // Use default overlay\n this.overlayElement = this.document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state', '-ax-z-1');\n this.overlayElement.id = 'ax-uploader-overlay-state';\n\n const icon: HTMLSpanElement = this.document.createElement('span');\n icon.classList.add('ax-icon', 'ax-icon-upload');\n\n const text = this.document.createElement('span');\n text.innerText = await this.translateService.translateAsync('@acorex:uploader.zone.text');\n\n this.overlayElement.appendChild(icon);\n this.overlayElement.appendChild(text);\n\n this.element.appendChild(this.overlayElement);\n }\n }\n\n /**\n * Cancels any pending exit animation and cleans up handlers.\n * @private\n */\n private cancelExitAnimation() {\n if (isPlatformBrowser(this.platformID)) {\n const overlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n\n if (overlay && this.animationEndHandler) {\n // Remove exiting class to cancel animation\n overlay.classList.remove('ax-uploader-overlay-exiting');\n // Clean up the handler\n overlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n }\n }\n }\n\n /**\n * Removes the visual overlay for drag and drop feedback.\n * @private\n */\n private removeZone(event?: DragEvent) {\n if (this.disableDragDrop()) return;\n this.dragDepth.update((depth) => Math.max(0, depth - 1)); // Decrement depth counter, ensure non-negative\n\n // Only remove overlay when we've truly left the drop zone (depth reaches 0)\n if (this.dragDepth() <= 0) {\n this.dragDepth.set(0); // Ensure it's exactly 0\n this.dragOverEmitted.set(false); // Reset flag when leaving\n\n if (event) {\n this.dragLeave.emit(event);\n }\n\n if (isPlatformBrowser(this.platformID)) {\n const overlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n\n if (overlay) {\n // Clean up any existing handler first\n if (this.animationEndHandler) {\n overlay.removeEventListener('animationend', this.animationEndHandler);\n }\n\n // Add exiting class to trigger CSS animation\n overlay.classList.add('ax-uploader-overlay-exiting');\n\n // Wait for CSS animation to complete\n this.animationEndHandler = (e: AnimationEvent) => {\n if (e.target === overlay && e.animationName === 'fadeOutScale') {\n overlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n\n if (overlay.parentNode === this.element) {\n this.element.removeChild(overlay);\n }\n if (this.overlayElement && this.overlayElement.parentNode) {\n this.overlayElement.remove();\n }\n\n // Clear the overlay element reference\n this.overlayElement = null;\n\n // Remove custom template view if it exists\n if (this.templateViewRef) {\n this.viewContainerRef.clear();\n this.templateViewRef = null;\n }\n }\n };\n\n overlay.addEventListener('animationend', this.animationEndHandler);\n } else {\n // If overlay doesn't exist, just clean up template view\n if (this.templateViewRef) {\n this.viewContainerRef.clear();\n this.templateViewRef = null;\n }\n }\n }\n }\n }\n\n /**\n * Opens the file browser dialog and processes selected files.\n * @returns Promise that resolves when files are processed\n */\n public async browser(): Promise<void> {\n const catalog = this.fileType();\n let selected: File[] = [];\n let rejected: AXUploaderFileChangeEvent['rejected'];\n\n if (catalog) {\n const accept = this.accept() ?? (await this.uploadService.getAcceptAttribute(catalog));\n const result = await this.uploadService.chooseFiles({\n fileType: catalog,\n multiple: this.multiple(),\n accept,\n });\n selected = result.accepted;\n rejected = result.rejected;\n } else if (!this.disableBrowse()) {\n const requests = await this.uploadService.browse({\n accept: this.accept() ?? undefined,\n multiple: this.multiple(),\n });\n selected = requests.map((r) => r.file);\n } else {\n console.warn(\n 'AXUploaderZone.browser: fileType is required when disableBrowse is enabled (use axUploaderBrowseHandle).',\n );\n return;\n }\n\n if (selected.length === 0 && !(rejected?.length ?? 0)) {\n return;\n }\n\n const syntheticEvent = new Event('change');\n const target = Object.create(EventTarget.prototype) as EventTarget & { files: File[] };\n target.files = selected;\n Object.defineProperty(syntheticEvent, 'target', { value: target, writable: false });\n\n this.fileChange.emit({\n event: syntheticEvent,\n files: selected,\n rejected,\n });\n\n if (this.disableBrowse()) {\n return;\n }\n\n const requests = catalog\n ? await this.uploadService.add(selected, { fileType: catalog })\n : await this.uploadService.add(selected);\n\n if (requests.length > 0) {\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true,\n });\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, ElementRef, OnDestroy, OnInit, PLATFORM_ID, inject } from '@angular/core';\nimport { findUploaderZoneFromDom } from './uploader-zone-host';\nimport { AXUploaderZoneDirective } from './uploader-zone.directive';\n\n/**\n * Triggers the nearest {@link AXUploaderZoneDirective} file dialog on click.\n * Resolves the zone via DI when possible, otherwise walks the DOM (supports content projection).\n * @category Directives\n */\n@Directive({ selector: '[axUploaderBrowseHandle]' })\nexport class AXUploaderBrowseDirective implements OnInit, OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly platformID = inject(PLATFORM_ID);\n /** When browse + zone share the same host element. */\n private readonly zoneFromInjector = inject(AXUploaderZoneDirective, { optional: true, self: true });\n\n private readonly onClick = (): void => {\n void this.handleClick();\n };\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.platformID)) {\n return;\n }\n const element = this.elementRef.nativeElement;\n element.addEventListener('click', this.onClick);\n if (element.dataset) {\n element.dataset['axUploaderBrowseHandle'] = 'true';\n } else {\n element.setAttribute('data-ax-uploader-browse-handle', 'true');\n }\n }\n\n ngOnDestroy(): void {\n if (isPlatformBrowser(this.platformID)) {\n this.elementRef.nativeElement.removeEventListener('click', this.onClick);\n }\n }\n\n private resolveZone(): AXUploaderZoneDirective | undefined {\n return (\n this.zoneFromInjector ??\n findUploaderZoneFromDom(this.elementRef.nativeElement) ??\n undefined\n );\n }\n\n private async handleClick(): Promise<void> {\n const zone = this.resolveZone();\n if (!zone) {\n console.warn(\n '[axUploaderBrowseHandle] No axUploaderZone found. Place axUploaderBrowseHandle inside an axUploaderZone.',\n );\n return;\n }\n await zone.browser();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-cdk-uploader.mjs","sources":["../../../../packages/cdk/uploader/src/lib/uploader-zone-host.ts","../../../../packages/cdk/uploader/src/lib/uploader.models.ts","../../../../packages/cdk/uploader/src/lib/uploader.service.ts","../../../../packages/cdk/uploader/src/lib/uploader-zone.directive.ts","../../../../packages/cdk/uploader/src/lib/uploader-browse-handle.directive.ts","../../../../packages/cdk/uploader/src/acorex-cdk-uploader.ts"],"sourcesContent":["import type { AXUploaderZoneDirective } from './uploader-zone.directive';\n\n/** DOM marker so browse handles can find a zone across content projection. */\nexport const AX_UPLOADER_ZONE_HOST = Symbol('AX_UPLOADER_ZONE_HOST');\n\nexport type AXUploaderZoneHostElement = HTMLElement & {\n [AX_UPLOADER_ZONE_HOST]?: AXUploaderZoneDirective;\n};\n\nexport function bindUploaderZoneHost(element: HTMLElement, zone: AXUploaderZoneDirective): void {\n (element as AXUploaderZoneHostElement)[AX_UPLOADER_ZONE_HOST] = zone;\n}\n\nexport function unbindUploaderZoneHost(element: HTMLElement): void {\n delete (element as AXUploaderZoneHostElement)[AX_UPLOADER_ZONE_HOST];\n}\n\n/** Walk ancestors to resolve the zone (works with projected browse handles). */\nexport function findUploaderZoneFromDom(start: HTMLElement): AXUploaderZoneDirective | undefined {\n let el: HTMLElement | null = start;\n while (el) {\n const zone = (el as AXUploaderZoneHostElement)[AX_UPLOADER_ZONE_HOST];\n if (zone) {\n return zone;\n }\n el = el.parentElement;\n }\n return undefined;\n}\n","import { AXEvent } from '@acorex/cdk/common';\nimport type { AXValidationRuleResult } from '@acorex/core/validation';\nimport { computed, signal } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nexport interface AXUploaderChooseFilesResult {\n accepted: File[];\n rejected: { file: File; errors: AXValidationRuleResult[] }[];\n}\n\nexport interface AXUploaderFileChangeEvent {\n event: Event;\n files: File[];\n rejected?: { file: File; errors: AXValidationRuleResult[] }[];\n}\n\nexport type AXUploadStatus = 'new' | 'inprogress' | 'completed' | 'failed' | 'canceled';\n\nexport interface AXUploaderChangedEvent extends AXEvent {\n requests: AXUploadRequest[];\n}\n\nexport interface AXUploaderFileStartEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\nexport interface AXUploaderFileCompleteEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\n\nexport interface AXUploaderFilesCompleteEvent extends AXEvent {\n uploadedFiles: AXUploadRequest[];\n data?: any;\n}\n\nexport interface AXUploaderFileCancelEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\n\nexport class AXUploadRequest {\n get name(): string {\n return this.file.name;\n }\n\n get ext(): string {\n const parts = this.name.split('.');\n if (parts.length > 1) {\n return parts[parts.length - 1];\n } else {\n // No extension found\n return '';\n }\n }\n\n get size(): number {\n return this.file.size;\n }\n\n get file(): File {\n return this.uploadFile;\n }\n\n private readonly _progress = signal(0);\n progress = computed(() => this._progress());\n\n private readonly _estimateTime = signal(0);\n estimateTime = computed(() => this._estimateTime());\n\n private readonly _status = signal<AXUploadStatus>('new');\n status = computed(() => this._status());\n\n private readonly _message = signal<string | null>(null);\n message = computed(() => this._message());\n\n private readonly _isDetermined = signal<boolean>(false);\n isDetermined = computed(() => this._isDetermined());\n\n private startTime: number;\n private bytesTransferred = 0;\n\n public metaData: any;\n\n public onCancel = new Subject<void>();\n public onStart = new Subject<void>();\n public onFailed = new Subject<void>();\n public onComplete = new BehaviorSubject<void>(null);\n\n constructor(private uploadFile: File) {}\n\n private estimateTimeRemaining(bytesTransferred: number): number | null {\n const now = Date.now();\n const elapsed = now - this.startTime; // Time in milliseconds\n\n if (isNaN(elapsed) || elapsed === 0) {\n return null; // Avoid division by zero\n }\n\n const speed = (bytesTransferred || 1) / elapsed; // Bytes per millisecond\n const remainingBytes = this.size - bytesTransferred;\n const estimatedTime = Math.ceil(remainingBytes / speed); // Time in milliseconds\n return estimatedTime; // Return the estimated time in milliseconds\n }\n\n public setTransferredBytes(value: number) {\n this.bytesTransferred = value;\n if (value > 0 && !this._isDetermined() && (this.status() == 'new' || this.status() == 'inprogress')) {\n this._isDetermined.set(true);\n }\n this.updateEstimateTime();\n }\n\n private updateEstimateTime() {\n this._estimateTime.set(this.estimateTimeRemaining(this.bytesTransferred));\n const progress = Math.floor((this.bytesTransferred / this.size) * 100);\n this._progress.set(progress);\n }\n\n public async upload(): Promise<void> {\n this.startTime = Date.now();\n this._progress.set(0);\n this._status.set('inprogress');\n this.onStart.next();\n }\n\n public cancel(): void {\n this._status.set('canceled');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n this.onCancel.next();\n }\n\n public redo(): void {\n // this.startTime = Date.now();\n this._progress.set(0);\n this._status.set('inprogress');\n this._message.set(null);\n this.onStart.next();\n }\n\n public error(message: string): void {\n this._status.set('failed');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n this._message.set(message);\n this.onFailed.next();\n }\n\n public finish(data?: any): void {\n this._status.set('completed');\n this.bytesTransferred = this.size;\n this._estimateTime.set(0);\n this._progress.set(100);\n this.onComplete.next(data);\n }\n}\n","import { AXEvent } from '@acorex/cdk/common';\nimport { AXFileService } from '@acorex/core/file';\nimport type { AXValidationRuleResult } from '@acorex/core/validation';\nimport { Injectable, inject } from '@angular/core';\nimport { sumBy } from 'lodash-es';\nimport { BehaviorSubject, Subject, map } from 'rxjs';\nimport {\n AXUploadRequest,\n AXUploaderFileCancelEvent,\n AXUploaderFileCompleteEvent,\n AXUploaderFileStartEvent,\n AXUploaderFilesCompleteEvent,\n type AXUploaderChooseFilesResult,\n} from './uploader.models';\n\n/** Reference to stored file/media (url and/or mediaId). */\nexport interface AXUploadReference {\n url?: string;\n mediaId?: string;\n mimeType?: string;\n size?: number;\n expiresAt?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface AXFileUploadOptions {\n source: File | Blob;\n fileName?: string;\n mimeType?: string;\n metadata?: Record<string, unknown>;\n onProgress?: (percent: number) => void;\n signal?: AbortSignal;\n}\n\nexport interface AXUploadResult {\n url: string;\n thumbnailUrl?: string;\n mediaId?: string;\n size: number;\n mimeType: string;\n metadata?: Record<string, unknown>;\n}\n\n/** Emitted when {@link AXUploaderService.upload} is called. */\nexport interface AXUploaderUploadEvent extends AXEvent {\n options: AXFileUploadOptions;\n resolve: (result: AXUploadResult) => void;\n reject: (reason: unknown) => void;\n}\n\n/** Emitted when {@link AXUploaderService.resolveUrl} is called. */\nexport interface AXUploaderResolveUrlEvent extends AXEvent {\n reference: AXUploadReference;\n signal?: AbortSignal;\n resolve: (url: string) => void;\n reject: (reason: unknown) => void;\n}\n\n/** Emitted when {@link AXUploaderService.deleteMedia} is called. */\nexport interface AXUploaderDeleteMediaEvent extends AXEvent {\n reference: AXUploadReference;\n resolve: () => void;\n reject: (reason: unknown) => void;\n}\n\nexport interface AXUploaderBrowseOptions {\n multiple?: boolean;\n accept?: string;\n /** Logical file type name(s) registered in {@link AXFileService}. */\n fileType?: string | string[];\n}\n\nexport interface AXUploaderAddOptions {\n fileType?: string | string[];\n}\n\n/**\n * File upload queue and validation via {@link AXFileService}.\n * Storage is implemented by subscribing to upload/resolve/delete events.\n * @category Services\n */\n@Injectable({ providedIn: 'root' })\nexport class AXUploaderService {\n private readonly fileService = inject(AXFileService);\n\n private readonly _files$ = new BehaviorSubject<AXUploadRequest[]>([]);\n\n public readonly files = this._files$.asObservable();\n\n public readonly onFileUploadStart = new Subject<AXUploaderFileStartEvent>();\n\n public readonly onFileUploadComplete = new Subject<AXUploaderFileCompleteEvent>();\n\n public readonly onFilesUploadComplete = new Subject<AXUploaderFilesCompleteEvent>();\n\n public readonly onFileUploadCanceled = new Subject<AXUploaderFileCancelEvent>();\n\n /** Subscribe to perform uploads (e.g. HTTP, IndexedDB). */\n public readonly onUpload = new Subject<AXUploaderUploadEvent>();\n\n /** Subscribe to resolve a stored reference to a playback URL. */\n public readonly onResolveUrl = new Subject<AXUploaderResolveUrlEvent>();\n\n /** Subscribe to delete stored media. */\n public readonly onDeleteMedia = new Subject<AXUploaderDeleteMediaEvent>();\n\n public readonly totalEstimateTime = this._files$.pipe(\n map((files) => sumBy(files, (file) => (file.status() === 'inprogress' ? file.estimateTime() : 0))),\n );\n\n isAnyDetermined(): boolean {\n return this._files$.value.some((file) => file.isDetermined());\n }\n\n validateFiles(\n files: File[],\n fileType: string,\n ): Promise<{ accepted: File[]; rejected: { file: File; errors: AXValidationRuleResult[] }[] }> {\n return this.fileService.validateMany(files, fileType);\n }\n\n async getAcceptAttribute(fileType: string | string[]): Promise<string> {\n return this.fileService.getAcceptAttribute(fileType);\n }\n\n upload(options: AXFileUploadOptions): Promise<AXUploadResult> {\n return new Promise<AXUploadResult>((resolve, reject) => {\n if (!this.hasUploadHandler()) {\n reject(\n new Error(\n 'No upload handler subscribed to AXUploaderService.onUpload. Provide a service that handles upload events.',\n ),\n );\n return;\n }\n this.onUpload.next({\n component: this,\n options,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n\n resolveUrl(reference: AXUploadReference, signal?: AbortSignal): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n if (!this.hasResolveUrlHandler()) {\n reject(\n new Error(\n 'No handler subscribed to AXUploaderService.onResolveUrl. Provide a service that handles resolve events.',\n ),\n );\n return;\n }\n this.onResolveUrl.next({\n component: this,\n reference,\n signal,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n\n async resolvePlaybackUrl(reference: AXUploadReference, signal?: AbortSignal): Promise<string> {\n const direct = reference.url?.trim();\n if (direct && !reference.mediaId) {\n return direct;\n }\n if (direct && reference.mediaId) {\n try {\n return await this.resolveUrl(reference, signal);\n } catch {\n return direct;\n }\n }\n if (reference.mediaId) {\n return this.resolveUrl(reference, signal);\n }\n if (direct) {\n return direct;\n }\n throw new Error('Upload reference has no url or mediaId');\n }\n\n deleteMedia(reference: AXUploadReference): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (!this.hasDeleteMediaHandler()) {\n reject(\n new Error(\n 'No handler subscribed to AXUploaderService.onDeleteMedia. Provide a service that handles delete events.',\n ),\n );\n return;\n }\n this.onDeleteMedia.next({\n component: this,\n reference,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n\n private hasUploadHandler(): boolean {\n return this.onUpload.observers.length > 0;\n }\n\n private hasResolveUrlHandler(): boolean {\n return this.onResolveUrl.observers.length > 0;\n }\n\n private hasDeleteMediaHandler(): boolean {\n return this.onDeleteMedia.observers.length > 0;\n }\n\n async add(files: FileList | File[], options?: AXUploaderAddOptions): Promise<AXUploadRequest[]> {\n const list = Array.from(files).map((f) => new AXUploadRequest(f));\n await this.applyFileTypeValidation(list, options?.fileType);\n\n const newFiles = [...this._files$.value, ...list];\n this._files$.next(newFiles);\n void this.startUpload();\n return list;\n }\n\n /**\n * Opens the file dialog and returns selected files without enqueueing uploads.\n * With `fileType`, applies catalog validation; otherwise uses legacy accept-only selection.\n */\n async chooseFiles(options: AXUploaderBrowseOptions = {}): Promise<AXUploaderChooseFilesResult> {\n try {\n if (options.fileType) {\n const accept = options.accept ?? (await this.fileService.getAcceptAttribute(options.fileType));\n\n return this.fileService.chooseValidated({\n fileType: options.fileType,\n multiple: options.multiple ?? false,\n accept,\n });\n }\n\n const accepted = await this.fileService.choose({\n accept: options.accept,\n multiple: options.multiple ?? false,\n });\n\n return { accepted, rejected: [] };\n } catch (error) {\n console.error('File choose failed:', error);\n return { accepted: [], rejected: [] };\n }\n }\n\n async browse(options: AXUploaderBrowseOptions = { multiple: false }): Promise<AXUploadRequest[]> {\n const { accepted } = await this.chooseFiles(options);\n if (!accepted.length) {\n return [];\n }\n return this.add(accepted, { fileType: options.fileType });\n }\n\n async cancelAll(): Promise<void> {\n await Promise.all(this._files$.value.filter((c) => c.status() !== 'completed').map((c) => c.cancel()));\n }\n\n clearAll(): void {\n const remainingFiles = this._files$.value.filter((c) => c.status() === 'inprogress');\n this._files$.next(remainingFiles);\n }\n\n remove(item: AXUploadRequest): void {\n const updatedFiles = this._files$.value.filter((c) => c !== item);\n this._files$.next(updatedFiles);\n }\n\n private async startUpload(): Promise<void> {\n const newFiles = this._files$.value.filter((c) => c.status() === 'new');\n for (const file of newFiles) {\n await this.bindEvents(file);\n }\n }\n\n private async bindEvents(c: AXUploadRequest): Promise<void> {\n c.onStart.subscribe(() => {\n this.onFileUploadStart.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n });\n\n c.onComplete.subscribe((data) => {\n Object.assign(c, { metaData: data });\n this.onFileUploadComplete.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n\n const isAllDone = this._files$.value.every(\n (f) => f.status() === 'completed' || f.status() === 'canceled' || f.status() === 'failed',\n );\n\n if (isAllDone) {\n this.onFilesUploadComplete.next({\n component: this,\n uploadedFiles: this._files$.value,\n isUserInteraction: false,\n });\n }\n });\n\n c.onCancel.subscribe(() => {\n this.onFileUploadCanceled.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n });\n }\n\n private async applyFileTypeValidation(\n requests: AXUploadRequest[],\n fileType?: string | string[],\n ): Promise<AXUploadRequest[]> {\n if (!fileType) {\n return requests;\n }\n\n for (const request of requests) {\n const errors = await this.fileService.validate(request.file, fileType);\n if (errors.length > 0) {\n request.error(errors[0]?.message ?? 'Invalid file');\n }\n }\n\n return requests;\n }\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectorRef,\n DOCUMENT,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n OnDestroy,\n PLATFORM_ID,\n TemplateRef,\n ViewContainerRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n AXUploaderChangedEvent,\n AXUploaderFileChangeEvent,\n AXUploaderFileCompleteEvent,\n AXUploaderFilesCompleteEvent,\n} from './uploader.models';\nimport { bindUploaderZoneHost, unbindUploaderZoneHost } from './uploader-zone-host';\nimport { AXUploaderService } from './uploader.service';\n\n/**\n * A directive that provides drag-and-drop and file upload functionality.\n * When applied to an element, it enables drag-and-drop file uploads and file browsing.\n * @category Directives\n */\n@Directive({\n selector: '[axUploaderZone]',\n providers: [AXUnsubscriber],\n host: {\n class: 'ax-drop-zone',\n },\n})\nexport class AXUploaderZoneDirective implements OnDestroy {\n /**\n * The element reference for the directive host.\n * @ignore\n */\n private elementRef = inject(ElementRef);\n\n /**\n * View container reference for rendering custom templates.\n * @ignore\n */\n private viewContainerRef = inject(ViewContainerRef);\n\n /**\n * Whether multiple files can be selected.\n * @defaultValue true\n */\n multiple = input(true);\n\n /**\n * File types that are accepted for upload.\n * @defaultValue null\n */\n accept = input<string | null>(null);\n\n /**\n * Logical file type name from {@link AXFileService} (e.g. `conversation-image`).\n * Required for browse handles and validated selection.\n */\n fileType = input<string | null>(null);\n\n /**\n * Custom template for the drag overlay. If provided, this will be used instead of the default overlay.\n */\n overlayTemplate = input<TemplateRef<unknown>>();\n\n /**\n * Whether browsing files by clicking on the container is disabled.\n * @defaultValue false\n */\n disableBrowse = input(false);\n\n /**\n * Whether drag and drop functionality is disabled.\n * @defaultValue false\n */\n disableDragDrop = input(false);\n\n /**\n * Change detector reference.\n * @ignore\n */\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Document reference.\n * @ignore\n */\n private document = inject(DOCUMENT);\n\n /**\n * Platform ID for browser detection.\n * @ignore\n */\n private platformID = inject(PLATFORM_ID);\n\n /**\n * Upload service instance.\n * @ignore\n */\n private uploadService = inject(AXUploaderService);\n\n /**\n * Unsubscriber service instance.\n * @ignore\n */\n private unsubscriber = inject(AXUnsubscriber);\n\n /**\n * Translation service instance.\n * @ignore\n */\n private translateService = inject(AXTranslationService);\n\n /**\n * The host element.\n * @ignore\n */\n private element: HTMLElement;\n\n /**\n * Embedded view reference for custom template.\n * @ignore\n */\n private templateViewRef: EmbeddedViewRef<unknown> | null = null;\n\n /**\n * Emitted when files are selected or dropped (like HTML file input).\n * Emits an event with files property containing the selected files.\n */\n fileChange = output<AXUploaderFileChangeEvent>();\n\n /**\n * Emitted when files are changed (added, removed, etc.).\n * @deprecated Use fileChange instead for simpler file input-like behavior\n */\n onChanged = output<AXUploaderChangedEvent>();\n\n /**\n * Emitted on drag enter event.\n */\n dragEnter = output<DragEvent>();\n\n /**\n * Emitted on drag leave event.\n */\n dragLeave = output<DragEvent>();\n\n /**\n * Emitted on drag over event.\n */\n dragOver = output<DragEvent>();\n\n /**\n * Emitted when a single file upload is completed.\n */\n onFileUploadComplete = output<AXUploaderFileCompleteEvent>();\n\n /**\n * Emitted when all files upload is completed.\n */\n onFilesUploadComplete = output<AXUploaderFilesCompleteEvent>();\n\n /**\n * CSS class for the overlay state.\n * @ignore\n */\n stateClass = 'ax-uploader-overlay-state';\n\n /**\n * The overlay element for drag and drop visual feedback.\n * @ignore\n */\n overlayElement: HTMLDivElement | null = null;\n\n /**\n * Flag to track if dragOver has been emitted for the current drag session.\n * @ignore\n */\n private dragOverEmitted = signal(false);\n\n /**\n * Counter to track drag enter/leave depth to prevent false dragleave events.\n * When moving from parent to child, dragleave fires even though we're still inside.\n * @ignore\n */\n private dragDepth = signal(0);\n\n /**\n * Animation end handler for cleanup.\n * @ignore\n */\n private animationEndHandler: ((e: AnimationEvent) => void) | null = null;\n\n /**\n * Initializes the directive with event listeners and service subscriptions.\n */\n constructor() {\n this.element = this.elementRef.nativeElement as HTMLElement;\n this.element.style.position = 'relative';\n bindUploaderZoneHost(this.element, this);\n\n //\n this.uploadService.onFileUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onFileUploadComplete.emit(c);\n });\n\n this.uploadService.onFilesUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onFilesUploadComplete.emit(c);\n });\n //\n setTimeout(() => {\n const browseHandlers = this.element.querySelectorAll('[data-ax-uploader-browse-handle=\"true\"]');\n if (browseHandlers.length <= 0 && !this.disableBrowse()) {\n this.element.addEventListener('click', this.browser.bind(this), true);\n }\n });\n\n if (!this.disableDragDrop()) {\n this.element.addEventListener('dragenter', this.handleDragEnter.bind(this), true);\n this.element.addEventListener('dragover', this.handleDragOver.bind(this), true);\n this.element.addEventListener('drop', this.handleOnDrop.bind(this), true);\n this.element.addEventListener('dragleave', (e) => this.removeZone(e as DragEvent), true);\n }\n }\n\n /**\n * Cleans up event listeners when the directive is destroyed.\n */\n ngOnDestroy(): void {\n unbindUploaderZoneHost(this.element);\n this.element.removeEventListener('click', this.browser.bind(this));\n\n this.element.removeEventListener('dragenter', this.handleDragEnter.bind(this));\n this.element.removeEventListener('drop', this.handleOnDrop.bind(this));\n this.element.removeEventListener('dragover', this.handleDragOver.bind(this));\n this.element.removeEventListener('dragleave', this.removeZone.bind(this));\n }\n\n /**\n * Handles drag enter events to show the upload overlay.\n * @private\n */\n private async handleDragEnter(event: DragEvent) {\n if (this.disableDragDrop()) return;\n this.dragOverEmitted.set(false); // Reset flag when entering\n this.dragDepth.update((depth) => depth + 1); // Increment depth counter\n\n // Only create overlay on first enter (when depth is 1)\n if (this.dragDepth() === 1) {\n // Cancel any pending exit animation\n this.cancelExitAnimation();\n await this.createZone();\n this.dragEnter.emit(event);\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n /**\n * Handles drop events to process dropped files.\n * @private\n */\n private async handleOnDrop(event: DragEvent) {\n if (this.disableDragDrop()) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n\n // Reset drag depth on drop\n this.dragDepth.set(0);\n\n if (event.dataTransfer?.files && event.dataTransfer.files.length > 0) {\n let files = Array.from(event.dataTransfer.files);\n let rejected: AXUploaderFileChangeEvent['rejected'];\n const catalog = this.fileType();\n\n if (catalog) {\n const result = await this.uploadService.validateFiles(files, catalog);\n files = result.accepted;\n rejected = result.rejected;\n }\n\n this.fileChange.emit({ event, files, rejected });\n\n if (!this.disableBrowse()) {\n const requests = await this.uploadService.add(files, { fileType: catalog ?? undefined });\n if (requests.length > 0) {\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true,\n });\n }\n }\n }\n\n this.removeZone();\n this.cdr.detectChanges();\n }\n\n /**\n * Handles drag over events to allow dropping.\n * @private\n */\n private handleDragOver(event: DragEvent) {\n if (this.disableDragDrop()) return;\n // Only emit dragOver once per drag session to avoid spam\n if (!this.dragOverEmitted()) {\n this.dragOverEmitted.set(true);\n this.dragOver.emit(event);\n }\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n /**\n * Creates the visual overlay for drag and drop feedback.\n * @private\n */\n private async createZone() {\n if (isPlatformBrowser(this.platformID)) {\n // Check if overlay already exists (might be exiting)\n let existingOverlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n\n // Verify the overlay is actually in the DOM (not removed after animation)\n if (existingOverlay && existingOverlay.parentNode === this.element) {\n // Remove exiting class to cancel exit animation and show overlay again\n existingOverlay.classList.remove('ax-uploader-overlay-exiting');\n // Clean up any pending animation handler\n if (this.animationEndHandler) {\n existingOverlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n }\n // Reset overlayElement reference if it was cleared\n if (!this.overlayElement && existingOverlay) {\n this.overlayElement = existingOverlay as HTMLDivElement;\n }\n return;\n } else if (existingOverlay && existingOverlay.parentNode !== this.element) {\n // Overlay exists but is not in the DOM, clear the reference\n this.overlayElement = null;\n existingOverlay = null;\n }\n\n // Check if custom template is provided\n const template = this.overlayTemplate();\n if (template) {\n // Create container for template\n this.overlayElement = this.document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state', '-ax-z-1');\n this.overlayElement.id = 'ax-uploader-overlay-state';\n\n // Create embedded view from template (will be inserted at directive anchor)\n this.viewContainerRef.clear();\n this.templateViewRef = this.viewContainerRef.createEmbeddedView(template);\n this.templateViewRef.detectChanges();\n\n // Get root nodes and move them to overlay element\n const rootNodes = this.templateViewRef.rootNodes;\n for (const node of rootNodes) {\n // Remove from current location if it has a parent\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n this.overlayElement.appendChild(node);\n }\n\n // Detach the view since we've moved the nodes\n this.templateViewRef.detach();\n\n this.element.appendChild(this.overlayElement);\n this.cdr.detectChanges();\n return;\n }\n\n // Use default overlay\n this.overlayElement = this.document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state', '-ax-z-1');\n this.overlayElement.id = 'ax-uploader-overlay-state';\n\n const icon: HTMLSpanElement = this.document.createElement('span');\n icon.classList.add('ax-icon', 'ax-icon-upload');\n\n const text = this.document.createElement('span');\n text.innerText = await this.translateService.translateAsync('@acorex:uploader.zone.text');\n\n this.overlayElement.appendChild(icon);\n this.overlayElement.appendChild(text);\n\n this.element.appendChild(this.overlayElement);\n }\n }\n\n /**\n * Cancels any pending exit animation and cleans up handlers.\n * @private\n */\n private cancelExitAnimation() {\n if (isPlatformBrowser(this.platformID)) {\n const overlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n\n if (overlay && this.animationEndHandler) {\n // Remove exiting class to cancel animation\n overlay.classList.remove('ax-uploader-overlay-exiting');\n // Clean up the handler\n overlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n }\n }\n }\n\n /**\n * Removes the visual overlay for drag and drop feedback.\n * @private\n */\n private removeZone(event?: DragEvent) {\n if (this.disableDragDrop()) return;\n this.dragDepth.update((depth) => Math.max(0, depth - 1)); // Decrement depth counter, ensure non-negative\n\n // Only remove overlay when we've truly left the drop zone (depth reaches 0)\n if (this.dragDepth() <= 0) {\n this.dragDepth.set(0); // Ensure it's exactly 0\n this.dragOverEmitted.set(false); // Reset flag when leaving\n\n if (event) {\n this.dragLeave.emit(event);\n }\n\n if (isPlatformBrowser(this.platformID)) {\n const overlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n\n if (overlay) {\n // Clean up any existing handler first\n if (this.animationEndHandler) {\n overlay.removeEventListener('animationend', this.animationEndHandler);\n }\n\n // Add exiting class to trigger CSS animation\n overlay.classList.add('ax-uploader-overlay-exiting');\n\n // Wait for CSS animation to complete\n this.animationEndHandler = (e: AnimationEvent) => {\n if (e.target === overlay && e.animationName === 'fadeOutScale') {\n overlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n\n if (overlay.parentNode === this.element) {\n this.element.removeChild(overlay);\n }\n if (this.overlayElement && this.overlayElement.parentNode) {\n this.overlayElement.remove();\n }\n\n // Clear the overlay element reference\n this.overlayElement = null;\n\n // Remove custom template view if it exists\n if (this.templateViewRef) {\n this.viewContainerRef.clear();\n this.templateViewRef = null;\n }\n }\n };\n\n overlay.addEventListener('animationend', this.animationEndHandler);\n } else {\n // If overlay doesn't exist, just clean up template view\n if (this.templateViewRef) {\n this.viewContainerRef.clear();\n this.templateViewRef = null;\n }\n }\n }\n }\n }\n\n /**\n * Opens the file browser dialog and processes selected files.\n * @returns Promise that resolves when files are processed\n */\n public async browser(): Promise<void> {\n const catalog = this.fileType();\n let selected: File[] = [];\n let rejected: AXUploaderFileChangeEvent['rejected'];\n\n if (catalog) {\n const accept = this.accept() ?? (await this.uploadService.getAcceptAttribute(catalog));\n const result = await this.uploadService.chooseFiles({\n fileType: catalog,\n multiple: this.multiple(),\n accept,\n });\n selected = result.accepted;\n rejected = result.rejected;\n } else if (!this.disableBrowse()) {\n const requests = await this.uploadService.browse({\n accept: this.accept() ?? undefined,\n multiple: this.multiple(),\n });\n selected = requests.map((r) => r.file);\n } else {\n console.warn(\n 'AXUploaderZone.browser: fileType is required when disableBrowse is enabled (use axUploaderBrowseHandle).',\n );\n return;\n }\n\n if (selected.length === 0 && !(rejected?.length ?? 0)) {\n return;\n }\n\n const syntheticEvent = new Event('change');\n const target = Object.create(EventTarget.prototype) as EventTarget & { files: File[] };\n target.files = selected;\n Object.defineProperty(syntheticEvent, 'target', { value: target, writable: false });\n\n this.fileChange.emit({\n event: syntheticEvent,\n files: selected,\n rejected,\n });\n\n if (this.disableBrowse()) {\n return;\n }\n\n const requests = catalog\n ? await this.uploadService.add(selected, { fileType: catalog })\n : await this.uploadService.add(selected);\n\n if (requests.length > 0) {\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true,\n });\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, ElementRef, OnDestroy, OnInit, PLATFORM_ID, inject } from '@angular/core';\nimport { findUploaderZoneFromDom } from './uploader-zone-host';\nimport { AXUploaderZoneDirective } from './uploader-zone.directive';\n\n/**\n * Triggers the nearest {@link AXUploaderZoneDirective} file dialog on click.\n * Resolves the zone via DI when possible, otherwise walks the DOM (supports content projection).\n * @category Directives\n */\n@Directive({ selector: '[axUploaderBrowseHandle]' })\nexport class AXUploaderBrowseDirective implements OnInit, OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly platformID = inject(PLATFORM_ID);\n /** When browse + zone share the same host element. */\n private readonly zoneFromInjector = inject(AXUploaderZoneDirective, { optional: true, self: true });\n\n private readonly onClick = (): void => {\n void this.handleClick();\n };\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.platformID)) {\n return;\n }\n const element = this.elementRef.nativeElement;\n element.addEventListener('click', this.onClick);\n if (element.dataset) {\n element.dataset['axUploaderBrowseHandle'] = 'true';\n } else {\n element.setAttribute('data-ax-uploader-browse-handle', 'true');\n }\n }\n\n ngOnDestroy(): void {\n if (isPlatformBrowser(this.platformID)) {\n this.elementRef.nativeElement.removeEventListener('click', this.onClick);\n }\n }\n\n private resolveZone(): AXUploaderZoneDirective | undefined {\n return (\n this.zoneFromInjector ??\n findUploaderZoneFromDom(this.elementRef.nativeElement) ??\n undefined\n );\n }\n\n private async handleClick(): Promise<void> {\n const zone = this.resolveZone();\n if (!zone) {\n console.warn(\n '[axUploaderBrowseHandle] No axUploaderZone found. Place axUploaderBrowseHandle inside an axUploaderZone.',\n );\n return;\n }\n await zone.browser();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|