@shival99/z-ui 1.9.27 → 2.0.2
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/README.md +1 -1
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-avatar.mjs +187 -0
- package/fesm2022/shival99-z-ui-components-z-avatar.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs +7 -3
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-editor.mjs +649 -154
- package/fesm2022/shival99-z-ui-components-z-editor.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-gallery.mjs +242 -18
- package/fesm2022/shival99-z-ui-components-z-gallery.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-input.mjs +9 -5
- package/fesm2022/shival99-z-ui-components-z-input.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-kanban.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-kanban.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-marquee.mjs +70 -0
- package/fesm2022/shival99-z-ui-components-z-marquee.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-menu.mjs +12 -6
- package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-metric-card.mjs +128 -0
- package/fesm2022/shival99-z-ui-components-z-metric-card.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-select.mjs +16 -2
- package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-i18n.mjs +14 -0
- package/fesm2022/shival99-z-ui-i18n.mjs.map +1 -1
- package/package.json +38 -23
- package/types/shival99-z-ui-components-z-autocomplete.d.ts +1 -1
- package/types/shival99-z-ui-components-z-avatar.d.ts +90 -0
- package/types/shival99-z-ui-components-z-calendar.d.ts +4 -4
- package/types/shival99-z-ui-components-z-editor.d.ts +97 -37
- package/types/shival99-z-ui-components-z-gallery.d.ts +14 -1
- package/types/shival99-z-ui-components-z-input.d.ts +1 -0
- package/types/shival99-z-ui-components-z-marquee.d.ts +35 -0
- package/types/shival99-z-ui-components-z-metric-card.d.ts +67 -0
- package/types/shival99-z-ui-components-z-select.d.ts +1 -1
- package/types/shival99-z-ui-components-z-table.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-editor.mjs","sources":["../../../../libs/core-ui/components/z-editor/z-editor.variants.ts","../../../../libs/core-ui/components/z-editor/z-editor.component.ts","../../../../libs/core-ui/components/z-editor/shival99-z-ui-components-z-editor.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zEditorVariants = cva(\n [\n 'z-editor block w-full rounded-[0.375rem] border border-input bg-white shadow-xs',\n 'transition-[border-color,box-shadow,background-color,color,opacity] duration-200',\n 'dark:bg-input/30 dark:border-input',\n 'outline-none',\n ],\n {\n variants: {\n zSize: {\n sm: '[&_.ql-editor]:min-h-24 [&_.ql-editor]:text-sm',\n default: '[&_.ql-editor]:min-h-40 [&_.ql-editor]:text-sm',\n lg: '[&_.ql-editor]:min-h-60 [&_.ql-editor]:text-base',\n },\n zStatus: {\n default: 'focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]',\n error:\n 'border-destructive! ring-destructive/20 ring-[3px] focus-within:border-destructive! focus-within:ring-destructive/30',\n disabled: 'opacity-50 cursor-not-allowed bg-muted! text-muted-foreground',\n readonly: 'bg-muted/50! text-muted-foreground cursor-default',\n },\n },\n defaultVariants: {\n zSize: 'default',\n zStatus: 'default',\n },\n }\n);\n\nexport type ZEditorVariants = VariantProps<typeof zEditorVariants>;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n forwardRef,\n inject,\n Injector,\n input,\n type OnInit,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n type AbstractControl,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NgControl,\n NgModel,\n PristineChangeEvent,\n ReactiveFormsModule,\n TouchedChangeEvent,\n} from '@angular/forms';\nimport { FormsModule } from '@angular/forms';\nimport { ZTranslateService } from '@shival99/z-ui/services';\nimport { zUuid, zMergeClasses, zTransform, zCreateEvent, type ZEvent } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { ContentChange, QuillEditorComponent, QuillModule, type QuillModules } from 'ngx-quill';\nimport Quill from 'quill';\nimport QuillResizeImage from 'quill-resize-image';\nimport { filter, merge } from 'rxjs';\nimport type { ZEditorControl, ZEditorSize, ZEditorValidator } from './z-editor.types';\nimport { zEditorVariants } from './z-editor.variants';\n\nQuill.register('modules/resize', QuillResizeImage);\nconst DEFAULT_TOOLBAR = [\n ['bold', 'italic', 'underline', 'strike'],\n ['blockquote', 'code-block'],\n [{ header: 1 }, { header: 2 }],\n [{ list: 'ordered' }, { list: 'bullet' }],\n [{ indent: '-1' }, { indent: '+1' }],\n [{ align: [] }],\n [{ color: [] }, { background: [] }],\n ['link', 'image'],\n ['clean'],\n];\n\n@Component({\n selector: 'z-editor',\n imports: [QuillModule, ReactiveFormsModule, FormsModule],\n standalone: true,\n template: `\n <div [class]=\"wrapperClasses()\" [class.z-editor-disabled]=\"isDisabled()\" [class.z-editor-readonly]=\"zReadonly()\">\n @if (zLabel()) {\n <label [for]=\"editorId\" class=\"text-xs leading-none font-medium\" [class]=\"zLabelClass()\">\n {{ zLabel() }}\n @if (zRequired()) {\n <span class=\"text-destructive! ml-0.5\">*</span>\n }\n </label>\n }\n\n <quill-editor\n [id]=\"editorId\"\n [class]=\"editorClasses()\"\n [modules]=\"effectiveModules()\"\n [placeholder]=\"effectivePlaceholder()\"\n [readOnly]=\"isDisabled() || zReadonly()\"\n [formats]=\"zFormats()\"\n [bounds]=\"zBounds()\"\n [theme]=\"zTheme()\"\n [ngModel]=\"_value()\"\n (onContentChanged)=\"onContentChange($event)\"\n (onFocus)=\"onFocus()\"\n (onBlur)=\"onBlur()\"\n />\n\n @if (hasError()) {\n <p class=\"text-destructive animate-in fade-in slide-in-from-top-1 m-0 text-xs duration-200\">\n {{ errorMessage() }}\n </p>\n }\n </div>\n `,\n styleUrl: './z-editor.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ZEditorComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'zEditor',\n})\nexport class ZEditorComponent implements OnInit, ControlValueAccessor {\n private readonly _injector = inject(Injector);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _zTranslate = inject(ZTranslateService);\n\n public readonly zOnChange = output<string>();\n public readonly zOnFocus = output<FocusEvent>();\n public readonly zOnBlur = output<FocusEvent>();\n public readonly zControl = output<ZEditorControl>();\n public readonly zEvent = output<ZEvent>();\n\n public readonly class = input<ClassValue>('');\n public readonly zSize = input<ZEditorSize>('default');\n public readonly zLabel = input<string>('');\n public readonly zLabelClass = input<string>('');\n public readonly zPlaceholder = input<string>('');\n public readonly zRequired = input(false, { transform: zTransform });\n public readonly zDisabled = input(false, { transform: zTransform });\n public readonly zReadonly = input(false, { transform: zTransform });\n public readonly zModules = input<QuillModules | null>(null);\n public readonly zFormats = input<string[] | null>(null);\n public readonly zBounds = input<string | HTMLElement>('document.body');\n public readonly zTheme = input<'snow' | 'bubble'>('snow');\n public readonly zValidators = input<ZEditorValidator[]>([]);\n\n protected readonly editorId = zUuid('z-editor');\n\n protected readonly _value = signal<string>('');\n private readonly _disabled = signal(false);\n private readonly _formControl = signal<AbstractControl | null>(null);\n private readonly _formStateVersion = signal(0);\n private readonly _isNgModel = signal(false);\n\n protected readonly uiState = signal({\n touched: false,\n dirty: false,\n });\n\n private readonly _customError = signal<string | null>(null);\n\n private _onChange: (value: string) => void = () => void 0;\n private _onTouched: () => void = () => void 0;\n private _ngControl: NgControl | null = null;\n private _editorInstance: QuillEditorComponent | null = null;\n\n protected readonly isDisabled = computed(() => this._disabled() || this.zDisabled());\n protected readonly effectivePlaceholder = computed(() => {\n this._zTranslate.currentLang();\n return this.zPlaceholder() || this._zTranslate.instant('i18n_z_ui_editor_placeholder');\n });\n\n protected readonly effectiveModules = computed<QuillModules>(() => {\n const customModules = this.zModules();\n if (customModules) {\n return customModules;\n }\n\n return {\n toolbar: DEFAULT_TOOLBAR,\n resize: {\n locale: {},\n },\n history: {\n delay: 1000,\n maxStack: 50,\n userOnly: true,\n },\n };\n });\n\n private readonly _shouldShowValidation = computed(() => {\n const control = this._formControl();\n this._formStateVersion();\n\n if (this._isNgModel()) {\n return this.uiState().dirty || this.uiState().touched;\n }\n\n if (control) {\n return control.dirty;\n }\n\n return this.uiState().dirty || this.uiState().touched;\n });\n\n private _getValidationErrors(): string[] {\n const errors: string[] = [];\n const value = this._value();\n const validators = this.zValidators();\n\n if (!this._shouldShowValidation()) {\n return errors;\n }\n\n // Check zRequired independently (works with ngModel without formControlName)\n const isRequired = this.zRequired() || this._formControl()?.errors?.['required'];\n if (isRequired && (!value || value.trim() === '' || value === '<p><br></p>')) {\n this._zTranslate.currentLang();\n errors.push(this._zTranslate.instant('i18n_z_ui_editor_required'));\n }\n\n for (const validator of validators) {\n // Skip required check here since we already checked above\n if (validator.error === 'required') {\n continue;\n }\n\n if (validator.minLength && value.length < validator.minLength) {\n errors.push(validator.message);\n continue;\n }\n\n if (validator.maxLength && value.length > validator.maxLength) {\n errors.push(validator.message);\n continue;\n }\n\n if (validator.pattern && !validator.pattern.test(value)) {\n errors.push(validator.message);\n }\n }\n\n return errors;\n }\n\n protected readonly hasError = computed(() => {\n // Custom error from setErrorMessage takes priority\n if (this._customError()) {\n return true;\n }\n\n const customErrors = this._getValidationErrors();\n if (customErrors.length > 0) {\n return true;\n }\n\n const control = this._formControl();\n this._formStateVersion();\n\n if (!control) {\n return false;\n }\n\n return control.invalid && this._shouldShowValidation();\n });\n\n protected readonly errorMessage = computed(() => {\n // Custom error from setErrorMessage takes priority\n const customError = this._customError();\n if (customError) {\n return customError;\n }\n\n const customErrors = this._getValidationErrors();\n if (customErrors.length > 0) {\n return customErrors[0];\n }\n\n const control = this._formControl();\n const errors = control?.errors;\n\n if (!errors) {\n return '';\n }\n\n this._zTranslate.currentLang();\n if (errors['required']) {\n return this._zTranslate.instant('i18n_z_ui_editor_required');\n }\n\n if (errors['minlength']) {\n return this._zTranslate.instant('i18n_z_ui_editor_min_length', {\n min: errors['minlength'].requiredLength,\n });\n }\n\n if (errors['maxlength']) {\n return this._zTranslate.instant('i18n_z_ui_editor_max_length', {\n max: errors['maxlength'].requiredLength,\n });\n }\n\n return this._zTranslate.instant('i18n_z_ui_editor_invalid');\n });\n\n protected readonly currentStatus = computed(() => {\n if (this.isDisabled()) {\n return 'disabled';\n }\n\n if (this.zReadonly()) {\n return 'readonly';\n }\n\n if (this.hasError()) {\n return 'error';\n }\n\n return 'default';\n });\n\n protected readonly wrapperClasses = computed(() => 'z-editor-wrapper flex w-full flex-col gap-2');\n\n protected readonly labelClasses = computed(() =>\n zMergeClasses('mb-1.5 block text-sm font-medium text-foreground', this.zLabelClass())\n );\n\n protected readonly editorClasses = computed(() =>\n zMergeClasses(\n zEditorVariants({\n zSize: this.zSize(),\n zStatus: this.currentStatus(),\n }),\n this.class()\n )\n );\n\n ngOnInit(): void {\n queueMicrotask(() => {\n try {\n this._ngControl = this._injector.get(NgControl, null);\n this._isNgModel.set(this._ngControl instanceof NgModel);\n\n if (this._ngControl?.control) {\n const { control } = this._ngControl;\n this._formControl.set(control);\n merge(\n control.statusChanges,\n control.valueChanges,\n control.events.pipe(\n filter(event => event instanceof PristineChangeEvent || event instanceof TouchedChangeEvent)\n )\n )\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._formStateVersion.update(v => v + 1);\n });\n }\n } catch {\n this._ngControl = null;\n }\n });\n\n setTimeout(() => this._emitControl());\n }\n\n public writeValue(value: string): void {\n this._value.set(value || '');\n }\n\n public registerOnChange(fn: (value: string) => void): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n\n protected onContentChange(event: ContentChange): void {\n const html = event.html || '';\n this._value.set(html);\n this.uiState.update(s => ({ ...s, dirty: true }));\n this._onChange(html);\n this.zOnChange.emit(html);\n }\n\n protected onFocus(): void {\n const focusEvent = new FocusEvent('focus');\n this.zOnFocus.emit(focusEvent);\n this.zEvent.emit(zCreateEvent('focus', focusEvent));\n }\n\n protected onBlur(): void {\n if (this.uiState().dirty) {\n this.uiState.update(s => ({ ...s, touched: true }));\n }\n\n this._onTouched();\n const blurEvent = new FocusEvent('blur');\n this.zOnBlur.emit(blurEvent);\n this.zEvent.emit(zCreateEvent('blur', blurEvent));\n }\n\n public focus(): void {\n this._editorInstance?.quillEditor?.focus();\n }\n\n public blur(): void {\n this._editorInstance?.quillEditor?.blur();\n }\n\n public clear(): void {\n this._value.set('');\n this._onChange('');\n }\n\n public setContent(content: string): void {\n this._value.set(content);\n this._onChange(content);\n }\n\n public getContent(): string {\n return this._value();\n }\n\n public getText(): string {\n return this._editorInstance?.quillEditor?.getText() || '';\n }\n\n public getLength(): number {\n return this._editorInstance?.quillEditor?.getLength() || 0;\n }\n\n public setErrorMessage(message: string | null): void {\n this._customError.set(message);\n }\n\n public setValue(content: string): void {\n this.setContent(content);\n }\n\n /** @deprecated Use `valid()` for boolean form-submit checks. */\n public validate(): boolean {\n this.uiState.update(s => ({ ...s, touched: true, dirty: true }));\n this._onTouched();\n\n if (this._ngControl?.control) {\n this._ngControl.control.markAsDirty();\n this._ngControl.control.markAsTouched();\n }\n\n return this.hasError();\n }\n\n public valid(): boolean {\n return !this.validate();\n }\n\n public reset(): void {\n this._value.set('');\n this.uiState.update(s => ({ ...s, touched: false, dirty: false }));\n this._customError.set(null);\n this._onChange('');\n\n if (this._ngControl?.control) {\n this._ngControl.control.markAsPristine();\n this._ngControl.control.markAsUntouched();\n }\n }\n\n private _emitControl(): void {\n this.zControl.emit({\n focus: () => this.focus(),\n blur: () => this.blur(),\n clear: () => this.clear(),\n setContent: (content: string) => this.setContent(content),\n getContent: () => this.getContent(),\n getText: () => this.getText(),\n getLength: () => this.getLength(),\n valid: () => this.valid(),\n validate: () => this.validate(),\n reset: () => this.reset(),\n setValue: (content: string) => this.setValue(content),\n setErrorMessage: (message: string | null) => this.setErrorMessage(message),\n hasError: this.hasError,\n value: this._value.asReadonly(),\n errorMessage: this.errorMessage,\n });\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":"shival99-z-ui-components-z-editor.mjs","sources":["../../../../libs/core-ui/components/z-editor/z-editor.define.ts","../../../../libs/core-ui/components/z-editor/z-editor.variants.ts","../../../../libs/core-ui/components/z-editor/z-editor.component.ts","../../../../libs/core-ui/components/z-editor/shival99-z-ui-components-z-editor.ts"],"sourcesContent":["import type { ZEditorToolbarItem } from './z-editor.types';\n\nexport const Z_EDITOR_DEFAULT_TOOLBAR: readonly ZEditorToolbarItem[] = [\n { id: 'undo', icon: 'lucideUndo', label: 'Undo' },\n { id: 'redo', icon: 'lucideRedo', label: 'Redo' },\n { id: 'bold', icon: 'lucideBold', label: 'Bold' },\n { id: 'italic', icon: 'lucideItalic', label: 'Italic' },\n { id: 'underline', icon: 'lucideUnderline', label: 'Underline' },\n { id: 'strike', icon: 'lucideStrikethrough', label: 'Strike' },\n { id: 'code', icon: 'lucideCode', label: 'Code' },\n { id: 'heading1', icon: 'lucideHeading1', label: 'Heading 1' },\n { id: 'heading2', icon: 'lucideHeading2', label: 'Heading 2' },\n { id: 'bulletList', icon: 'lucideList', label: 'Bullet list' },\n { id: 'orderedList', icon: 'lucideListOrdered', label: 'Ordered list' },\n { id: 'blockquote', icon: 'lucideQuote', label: 'Blockquote' },\n { id: 'codeBlock', icon: 'lucideFileCode', label: 'Code block' },\n { id: 'link', icon: 'lucideLink', label: 'Link' },\n { id: 'image', icon: 'lucideImage', label: 'Image' },\n { id: 'horizontalRule', icon: 'lucideMinus', label: 'Horizontal rule' },\n { id: 'clearFormatting', icon: 'lucideRemoveFormatting', label: 'Clear formatting' },\n];\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zEditorVariants = cva(\n [\n 'z-editor block w-full rounded-[0.375rem] border border-input bg-white shadow-xs',\n 'transition-[border-color,box-shadow,background-color,color,opacity] duration-200',\n 'dark:bg-input/30 dark:border-input',\n 'outline-none',\n ],\n {\n variants: {\n zSize: {\n sm: '[&_.z-editor-prosemirror]:min-h-24 [&_.z-editor-prosemirror]:text-sm',\n default: '[&_.z-editor-prosemirror]:min-h-40 [&_.z-editor-prosemirror]:text-sm',\n lg: '[&_.z-editor-prosemirror]:min-h-60 [&_.z-editor-prosemirror]:text-base',\n },\n zStatus: {\n default: 'focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]',\n error:\n 'border-destructive! ring-destructive/20 ring-[3px] focus-within:border-destructive! focus-within:ring-destructive/30',\n disabled: 'opacity-50 cursor-not-allowed bg-muted! text-muted-foreground',\n readonly: 'bg-muted/50! text-muted-foreground cursor-default',\n },\n zPlaceholderMode: {\n firstLine: 'z-editor-placeholder-first-line',\n everyLine: '',\n },\n },\n defaultVariants: {\n zSize: 'default',\n zStatus: 'default',\n zPlaceholderMode: 'everyLine',\n },\n }\n);\n\nexport type ZEditorVariants = VariantProps<typeof zEditorVariants>;\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n type OnInit,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n type AbstractControl,\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n NgControl,\n NgModel,\n PristineChangeEvent,\n ReactiveFormsModule,\n TouchedChangeEvent,\n} from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport type { ZInputValidator } from '@shival99/z-ui/components/z-input';\nimport { ZModalComponent, ZModalContentDirective } from '@shival99/z-ui/components/z-modal';\nimport { ZTranslateService } from '@shival99/z-ui/services';\nimport { zCreateEvent, type ZEvent, zMergeClasses, zTransform, zUuid } from '@shival99/z-ui/utils';\nimport { Editor, type Content } from '@tiptap/core';\nimport Code from '@tiptap/extension-code';\nimport HorizontalRule from '@tiptap/extension-horizontal-rule';\nimport Image from '@tiptap/extension-image';\nimport Link from '@tiptap/extension-link';\nimport Mention from '@tiptap/extension-mention';\nimport Placeholder, { type PlaceholderOptions } from '@tiptap/extension-placeholder';\nimport TextAlign from '@tiptap/extension-text-align';\nimport Underline from '@tiptap/extension-underline';\nimport { Markdown } from '@tiptap/markdown';\nimport StarterKit from '@tiptap/starter-kit';\nimport type { ClassValue } from 'clsx';\nimport { filter, merge } from 'rxjs';\nimport { Z_EDITOR_DEFAULT_TOOLBAR } from './z-editor.define';\nimport type {\n ZEditorContentType,\n ZEditorControl,\n ZEditorMarkdownCapable,\n ZEditorResolvedToolbarItem,\n ZEditorSize,\n ZEditorTipTapOptions,\n ZEditorToolbarCommand,\n ZEditorToolbarItem,\n ZEditorValidator,\n} from './z-editor.types';\nimport { zEditorVariants } from './z-editor.variants';\n\n@Component({\n selector: 'z-editor',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n ZButtonComponent,\n ZIconComponent,\n ZInputComponent,\n ZModalComponent,\n ZModalContentDirective,\n TranslatePipe,\n ],\n standalone: true,\n template: `\n <div [class]=\"wrapperClasses()\" [class.z-editor-disabled]=\"isDisabled()\" [class.z-editor-readonly]=\"zReadonly()\">\n @if (zLabel()) {\n <label [for]=\"editorId\" class=\"text-xs leading-none font-medium\" [class]=\"zLabelClass()\">\n {{ zLabel() }}\n @if (zRequired()) {\n <span class=\"text-destructive! ml-0.5\">*</span>\n }\n </label>\n }\n\n <div [class]=\"editorClasses()\">\n @if (showToolbar()) {\n <div class=\"z-editor-toolbar\" role=\"toolbar\" [attr.aria-controls]=\"editorId\">\n @for (item of toolbarItems(); track item.id) {\n <button\n type=\"button\"\n class=\"z-editor-toolbar-button\"\n [class.z-editor-toolbar-button-active]=\"item.active\"\n [disabled]=\"item.disabled\"\n [attr.aria-label]=\"item.label\"\n [attr.title]=\"item.label\"\n (click)=\"onToolbarClick(item.id)\"\n >\n <i z-icon [zType]=\"item.icon\" zSize=\"16\"></i>\n </button>\n }\n </div>\n }\n\n <div\n #editorHost\n [id]=\"editorId\"\n class=\"z-editor-content\"\n role=\"textbox\"\n [attr.aria-multiline]=\"true\"\n [attr.aria-readonly]=\"isDisabled() || zReadonly()\"\n ></div>\n </div>\n\n @if (hasError()) {\n <p class=\"text-destructive animate-in fade-in slide-in-from-top-1 m-0 text-xs duration-200\">\n {{ errorMessage() }}\n </p>\n }\n\n <z-modal\n [(zVisible)]=\"linkModalVisible\"\n class=\"z-editor-link-modal\"\n zWidth=\"360px\"\n [zClosable]=\"false\"\n [zHideHeader]=\"true\"\n [zHideFooter]=\"true\"\n >\n <ng-template z-modal-content>\n <div class=\"space-y-4\">\n <z-input\n zType=\"url\"\n zLabel=\"URL\"\n zPlaceholder=\"https://example.com\"\n [zRequired]=\"true\"\n [zValidators]=\"linkValidators\"\n [ngModel]=\"linkUrl()\"\n (ngModelChange)=\"onLinkUrlChange($event)\"\n (zOnEnter)=\"applyLink()\"\n />\n\n <div class=\"mt-4 flex items-center justify-between gap-2\">\n <button\n type=\"button\"\n z-button\n zType=\"ghost\"\n zSize=\"sm\"\n [zDisabled]=\"!activeLinkHref()\"\n (click)=\"removeLink()\"\n >\n {{ 'i18n_z_ui_common_remove' | translate }}\n </button>\n <div class=\"flex items-center gap-2\">\n <button type=\"button\" z-button zType=\"outline\" zSize=\"sm\" (click)=\"closeLinkModal()\">\n {{ 'i18n_z_ui_common_cancel' | translate }}\n </button>\n <button type=\"button\" z-button zSize=\"sm\" [zDisabled]=\"!canApplyLink()\" (click)=\"applyLink()\">\n {{ 'i18n_z_ui_common_apply' | translate }}\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </z-modal>\n </div>\n `,\n styleUrl: './z-editor.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ZEditorComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'zEditor',\n})\nexport class ZEditorComponent implements OnInit, ControlValueAccessor {\n private readonly _injector = inject(Injector);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _zTranslate = inject(ZTranslateService);\n private readonly _editorHost = viewChild.required<ElementRef<HTMLElement>>('editorHost');\n\n public readonly zOnChange = output<string | Content>();\n public readonly zOnFocus = output<FocusEvent>();\n public readonly zOnBlur = output<FocusEvent>();\n public readonly zControl = output<ZEditorControl>();\n public readonly zEvent = output<ZEvent>();\n\n public readonly class = input<ClassValue>('');\n public readonly zSize = input<ZEditorSize>('default');\n public readonly zLabel = input<string>('');\n public readonly zLabelClass = input<string>('');\n public readonly zPlaceholder = input<string>('');\n public readonly zRequired = input(false, { transform: zTransform });\n public readonly zDisabled = input(false, { transform: zTransform });\n public readonly zReadonly = input(false, { transform: zTransform });\n public readonly zContentType = input<ZEditorContentType>('html');\n public readonly zToolbar = input<readonly ZEditorToolbarItem[] | false>(Z_EDITOR_DEFAULT_TOOLBAR);\n public readonly zTipTap = input<ZEditorTipTapOptions>({});\n public readonly zValidators = input<ZEditorValidator[]>([]);\n\n protected readonly editorId = zUuid('z-editor');\n protected readonly linkInputId = zUuid('z-editor-link');\n\n protected readonly _value = signal<string | Content>('');\n private readonly _disabled = signal(false);\n private readonly _formControl = signal<AbstractControl | null>(null);\n private readonly _formStateVersion = signal(0);\n private readonly _isNgModel = signal(false);\n private readonly _selectionVersion = signal(0);\n private readonly _plainText = signal('');\n protected readonly linkModalVisible = signal(false);\n protected readonly linkUrl = signal('');\n protected readonly activeLinkHref = signal('');\n protected readonly linkValidators: ZInputValidator[] = [\n {\n error: 'url',\n message: 'i18n_z_ui_editor_invalid_url',\n validate: value => this._normalizeUrl(String(value ?? '')) !== '',\n },\n ];\n\n protected readonly uiState = signal({\n touched: false,\n dirty: false,\n });\n\n private readonly _customError = signal<string | null>(null);\n\n private _onChange: (value: string | Content) => void = () => void 0;\n private _onTouched: () => void = () => void 0;\n private _ngControl: NgControl | null = null;\n private _editor: Editor | null = null;\n private _pendingValue: Content = '';\n private _linkSelection: { from: number; to: number } | null = null;\n\n protected readonly isDisabled = computed(() => this._disabled() || this.zDisabled());\n protected readonly showToolbar = computed(() => this.zToolbar() !== false && !this.zReadonly() && !this.isDisabled());\n protected readonly normalizedLinkUrl = computed(() => this._normalizeUrl(this.linkUrl()));\n\n protected readonly canApplyLink = computed(() => !!this.normalizedLinkUrl());\n protected readonly effectivePlaceholder = computed(() => {\n this._zTranslate.currentLang();\n return this.zPlaceholder() || this._zTranslate.instant('i18n_z_ui_editor_placeholder');\n });\n\n protected readonly toolbarItems = computed<ZEditorResolvedToolbarItem[]>(() => {\n this._selectionVersion();\n const toolbar = this.zToolbar();\n\n if (toolbar === false) {\n return [];\n }\n\n return toolbar.map(item => ({\n ...item,\n active: this._isToolbarCommandActive(item.id),\n disabled: this._isToolbarCommandDisabled(item.id),\n }));\n });\n\n private readonly _shouldShowValidation = computed(() => {\n const control = this._formControl();\n this._formStateVersion();\n\n if (this._isNgModel()) {\n return this.uiState().dirty || this.uiState().touched;\n }\n\n if (control) {\n return control.dirty;\n }\n\n return this.uiState().dirty || this.uiState().touched;\n });\n\n private _getValidationErrors(): string[] {\n const errors: string[] = [];\n const plainText = this._plainText().trim();\n const valueText = this._serializeValueAsText();\n const validators = this.zValidators();\n\n if (!this._shouldShowValidation()) {\n return errors;\n }\n\n const isRequired = this.zRequired() || this._formControl()?.errors?.['required'];\n if (isRequired && !plainText && this._isEditorEmpty()) {\n this._zTranslate.currentLang();\n errors.push(this._zTranslate.instant('i18n_z_ui_editor_required'));\n }\n\n for (const validator of validators) {\n if (validator.error === 'required') {\n continue;\n }\n\n if (validator.minLength && valueText.length < validator.minLength) {\n errors.push(validator.message);\n continue;\n }\n\n if (validator.maxLength && valueText.length > validator.maxLength) {\n errors.push(validator.message);\n continue;\n }\n\n if (validator.pattern && !validator.pattern.test(valueText)) {\n errors.push(validator.message);\n }\n }\n\n return errors;\n }\n\n protected readonly hasError = computed(() => {\n if (this._customError()) {\n return true;\n }\n\n const customErrors = this._getValidationErrors();\n if (customErrors.length > 0) {\n return true;\n }\n\n const control = this._formControl();\n this._formStateVersion();\n\n if (!control) {\n return false;\n }\n\n return control.invalid && this._shouldShowValidation();\n });\n\n protected readonly errorMessage = computed(() => {\n const customError = this._customError();\n if (customError) {\n return customError;\n }\n\n const customErrors = this._getValidationErrors();\n if (customErrors.length > 0) {\n return customErrors[0];\n }\n\n const control = this._formControl();\n const errors = control?.errors;\n\n if (!errors) {\n return '';\n }\n\n this._zTranslate.currentLang();\n if (errors['required']) {\n return this._zTranslate.instant('i18n_z_ui_editor_required');\n }\n\n if (errors['minlength']) {\n return this._zTranslate.instant('i18n_z_ui_editor_min_length', {\n min: errors['minlength'].requiredLength,\n });\n }\n\n if (errors['maxlength']) {\n return this._zTranslate.instant('i18n_z_ui_editor_max_length', {\n max: errors['maxlength'].requiredLength,\n });\n }\n\n return this._zTranslate.instant('i18n_z_ui_editor_invalid');\n });\n\n protected readonly currentStatus = computed(() => {\n if (this.isDisabled()) {\n return 'disabled';\n }\n\n if (this.zReadonly()) {\n return 'readonly';\n }\n\n if (this.hasError()) {\n return 'error';\n }\n\n return 'default';\n });\n\n protected readonly wrapperClasses = computed(() => 'z-editor-wrapper flex w-full flex-col gap-2');\n\n protected readonly editorClasses = computed(() =>\n zMergeClasses(\n zEditorVariants({\n zSize: this.zSize(),\n zStatus: this.currentStatus(),\n zPlaceholderMode: this._placeholderMode(),\n }),\n this.class()\n )\n );\n\n constructor() {\n afterNextRender(() => {\n this._createEditor();\n });\n\n effect(() => {\n const editor = this._editor;\n const editable = !this.isDisabled() && !this.zReadonly();\n\n if (!editor || editor.isEditable === editable) {\n return;\n }\n\n editor.setEditable(editable);\n this._selectionVersion.update(v => v + 1);\n });\n\n this._destroyRef.onDestroy(() => {\n this._editor?.destroy();\n this._editor = null;\n });\n }\n\n ngOnInit(): void {\n queueMicrotask(() => {\n try {\n this._ngControl = this._injector.get(NgControl, null);\n this._isNgModel.set(this._ngControl instanceof NgModel);\n\n if (this._ngControl?.control) {\n const { control } = this._ngControl;\n this._formControl.set(control);\n merge(\n control.statusChanges,\n control.valueChanges,\n control.events.pipe(\n filter(event => event instanceof PristineChangeEvent || event instanceof TouchedChangeEvent)\n )\n )\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._formStateVersion.update(v => v + 1);\n });\n }\n } catch {\n this._ngControl = null;\n }\n });\n }\n\n public writeValue(value: string | Content): void {\n const nextValue = value || '';\n this._pendingValue = nextValue;\n this._value.set(nextValue);\n\n if (!this._editor || this._isCurrentEditorContent(nextValue)) {\n return;\n }\n\n this._editor.commands.setContent(nextValue, { emitUpdate: false });\n this._refreshEditorState();\n }\n\n public registerOnChange(fn: (value: string | Content) => void): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n this._editor?.setEditable(!isDisabled && !this.zReadonly());\n }\n\n protected onToolbarClick(command: ZEditorToolbarCommand): void {\n const editor = this._editor;\n\n if (!editor || this._isToolbarCommandDisabled(command)) {\n return;\n }\n\n switch (command) {\n case 'bold':\n editor.chain().focus().toggleBold().run();\n break;\n case 'italic':\n editor.chain().focus().toggleItalic().run();\n break;\n case 'underline':\n editor.chain().focus().toggleUnderline().run();\n break;\n case 'strike':\n editor.chain().focus().toggleStrike().run();\n break;\n case 'code':\n editor.chain().focus().toggleCode().run();\n break;\n case 'heading1':\n editor.chain().focus().toggleHeading({ level: 1 }).run();\n break;\n case 'heading2':\n editor.chain().focus().toggleHeading({ level: 2 }).run();\n break;\n case 'paragraph':\n editor.chain().focus().setParagraph().run();\n break;\n case 'bulletList':\n editor.chain().focus().toggleBulletList().run();\n break;\n case 'orderedList':\n editor.chain().focus().toggleOrderedList().run();\n break;\n case 'blockquote':\n editor.chain().focus().toggleBlockquote().run();\n break;\n case 'codeBlock':\n editor.chain().focus().toggleCodeBlock().run();\n break;\n case 'horizontalRule':\n editor.chain().focus().setHorizontalRule().run();\n break;\n case 'link':\n this._toggleLink();\n break;\n case 'image':\n this._insertImage();\n break;\n case 'undo':\n editor.chain().focus().undo().run();\n break;\n case 'redo':\n editor.chain().focus().redo().run();\n break;\n case 'clearFormatting':\n editor.chain().focus().clearNodes().unsetAllMarks().run();\n break;\n }\n\n this._refreshEditorState();\n }\n\n private _createEditor(): void {\n if (this._editor) {\n return;\n }\n\n const host = this._editorHost().nativeElement;\n const tiptapOptions = this.zTipTap();\n const placeholderConfig = this._placeholderConfig();\n\n this._editor = new Editor({\n element: host,\n content: this._pendingValue,\n editable: !this.isDisabled() && !this.zReadonly(),\n extensions: [\n this.zContentType() === 'markdown' &&\n Markdown.configure({\n markedOptions: {\n gfm: true,\n },\n }),\n StarterKit.configure({\n code: false,\n horizontalRule: false,\n link: false,\n dropcursor: {\n color: 'var(--primary)',\n width: 2,\n },\n ...tiptapOptions.starterKit,\n }),\n Code.extend({\n excludes: 'code',\n }),\n Underline,\n TextAlign.configure({\n types: ['heading', 'paragraph'],\n }),\n Link.configure({\n openOnClick: false,\n ...tiptapOptions.link,\n }),\n HorizontalRule,\n tiptapOptions.image !== false &&\n Image.configure(typeof tiptapOptions.image === 'boolean' ? {} : tiptapOptions.image),\n tiptapOptions.mention !== false &&\n Mention.configure({\n HTMLAttributes: {\n class: 'mention',\n },\n ...(typeof tiptapOptions.mention === 'boolean' ? {} : tiptapOptions.mention),\n }),\n Placeholder.configure({\n placeholder: this.effectivePlaceholder(),\n showOnlyWhenEditable: false,\n showOnlyCurrent: true,\n ...placeholderConfig,\n }),\n ...(tiptapOptions.extensions ?? []),\n ].filter(extension => !!extension),\n editorProps: {\n attributes: {\n class: 'z-editor-prosemirror',\n autocomplete: 'off',\n autocorrect: 'off',\n autocapitalize: 'off',\n translate: 'no',\n },\n },\n onUpdate: () => this._handleEditorUpdate(),\n onSelectionUpdate: () => this._refreshEditorState(),\n onTransaction: () => this._refreshEditorState(),\n onFocus: () => this._handleFocus(),\n onBlur: () => this._handleBlur(),\n });\n\n this._refreshEditorState();\n this._emitControl();\n }\n\n private _handleEditorUpdate(): void {\n const value = this._getSerializedContent();\n this._value.set(value);\n this.uiState.update(s => ({ ...s, dirty: true }));\n this._onChange(value);\n this.zOnChange.emit(value);\n this._refreshEditorState();\n }\n\n private _handleFocus(): void {\n const focusEvent = new FocusEvent('focus');\n this.zOnFocus.emit(focusEvent);\n this.zEvent.emit(zCreateEvent('focus', focusEvent));\n }\n\n private _handleBlur(): void {\n if (this.uiState().dirty) {\n this.uiState.update(s => ({ ...s, touched: true }));\n }\n\n this._onTouched();\n const blurEvent = new FocusEvent('blur');\n this.zOnBlur.emit(blurEvent);\n this.zEvent.emit(zCreateEvent('blur', blurEvent));\n }\n\n private _emitControl(): void {\n const control: ZEditorControl = {\n focus: () => this._editor?.commands.focus(),\n blur: () => this._editor?.commands.blur(),\n clear: () => this._setEditorContent(''),\n setContent: content => this._setEditorContent(content),\n getContent: () => this._getSerializedContent(),\n getHTML: () => this._editor?.getHTML() ?? '',\n getJSON: () => this._editor?.getJSON() ?? { type: 'doc', content: [] },\n getMarkdown: () => this._getMarkdown(),\n getText: () => this._editor?.getText() ?? '',\n getLength: () => this._editor?.state.doc.content.size ?? 0,\n getEditor: () => this._editor,\n valid: () => this._validateControl(),\n validate: () => !this._validateControl(),\n reset: () => {\n this._customError.set(null);\n this.uiState.set({ touched: false, dirty: false });\n this._setEditorContent('');\n },\n setValue: content => this._setEditorContent(content),\n setErrorMessage: message => {\n this._customError.set(message);\n this._formStateVersion.update(v => v + 1);\n },\n hasError: this.hasError,\n value: this._value.asReadonly(),\n errorMessage: this.errorMessage,\n };\n\n this.zControl.emit(control);\n }\n\n private _setEditorContent(content: Content): void {\n this._pendingValue = content;\n this._editor?.commands.setContent(content, { emitUpdate: false });\n const value = this._getSerializedContent();\n this._value.set(value);\n this._plainText.set(this._editor?.getText() ?? '');\n this._onChange(value);\n this.zOnChange.emit(value);\n this._refreshEditorState();\n }\n\n private _validateControl(): boolean {\n this.uiState.set({ touched: true, dirty: true });\n this._formControl()?.markAsDirty();\n this._formControl()?.markAsTouched();\n this._formControl()?.updateValueAndValidity({ onlySelf: true });\n this._formStateVersion.update(v => v + 1);\n return !this.hasError();\n }\n\n private _getSerializedContent(): string | Content {\n const editor = this._editor;\n\n if (!editor) {\n return this._value();\n }\n\n if (this.zContentType() === 'json') {\n return editor.getJSON();\n }\n\n if (this.zContentType() === 'markdown') {\n return this._getMarkdown();\n }\n\n return editor.getHTML();\n }\n\n private _getMarkdown(): string {\n const editor = this._editor as (Editor & ZEditorMarkdownCapable) | null;\n return editor?.getMarkdown?.() ?? this._editor?.getText() ?? '';\n }\n\n private _serializeValueAsText(): string {\n const value = this._value();\n\n if (typeof value === 'string') {\n return value;\n }\n\n return JSON.stringify(value);\n }\n\n private _refreshEditorState(): void {\n this._plainText.set(this._editor?.getText() ?? '');\n this._selectionVersion.update(v => v + 1);\n this._formStateVersion.update(v => v + 1);\n }\n\n private _isEditorEmpty(): boolean {\n const editor = this._editor;\n\n if (editor) {\n return editor.isEmpty;\n }\n\n const value = this._value();\n if (typeof value === 'string') {\n return !value || value === '<p></p>' || value === '<p><br></p>';\n }\n\n return false;\n }\n\n private _isCurrentEditorContent(content: Content): boolean {\n const editor = this._editor;\n\n if (!editor) {\n return false;\n }\n\n if (this.zContentType() === 'json') {\n return JSON.stringify(editor.getJSON()) === JSON.stringify(content);\n }\n\n return editor.getHTML() === String(content);\n }\n\n private _isToolbarCommandActive(command: ZEditorToolbarCommand): boolean {\n const editor = this._editor;\n\n if (!editor || !editor.isEditable) {\n return false;\n }\n\n switch (command) {\n case 'bold':\n case 'italic':\n case 'underline':\n case 'strike':\n case 'code':\n case 'bulletList':\n case 'orderedList':\n case 'blockquote':\n case 'codeBlock':\n case 'link':\n return editor.isActive(command);\n case 'heading1':\n return editor.isActive('heading', { level: 1 });\n case 'heading2':\n return editor.isActive('heading', { level: 2 });\n case 'paragraph':\n return editor.isActive('paragraph');\n default:\n return false;\n }\n }\n\n private _isToolbarCommandDisabled(command: ZEditorToolbarCommand): boolean {\n const editor = this._editor;\n\n if (!editor || !editor.isEditable || this.isDisabled() || this.zReadonly()) {\n return true;\n }\n\n switch (command) {\n case 'undo':\n return !editor.can().undo();\n case 'redo':\n return !editor.can().redo();\n case 'link':\n return editor.state.selection.empty && !editor.isActive('link');\n default:\n return false;\n }\n }\n\n private _toggleLink(): void {\n const editor = this._editor;\n\n if (!editor) {\n return;\n }\n\n const { from, to } = editor.state.selection;\n this._linkSelection = { from, to };\n const href = String(editor.getAttributes('link')['href'] ?? '');\n this.activeLinkHref.set(href);\n this.linkUrl.set(href);\n this.linkModalVisible.set(true);\n }\n\n protected closeLinkModal(): void {\n this.linkModalVisible.set(false);\n }\n\n protected onLinkUrlChange(value: string | number | null): void {\n this.linkUrl.set(String(value ?? ''));\n }\n\n protected applyLink(): void {\n const editor = this._editor;\n const href = this.normalizedLinkUrl();\n const selection = this._linkSelection;\n\n if (!editor || !href || !selection) {\n return;\n }\n\n editor.chain().focus().setTextSelection(selection).extendMarkRange('link').setLink({ href }).run();\n this.closeLinkModal();\n this._refreshEditorState();\n }\n\n private _normalizeUrl(value: string): string {\n const trimmed = value.trim();\n\n if (!trimmed) {\n return '';\n }\n\n try {\n const url = new URL(trimmed);\n return url.protocol === 'http:' || url.protocol === 'https:' ? url.toString() : '';\n } catch {\n return '';\n }\n }\n\n protected removeLink(): void {\n const editor = this._editor;\n const selection = this._linkSelection;\n\n if (!editor || !selection) {\n this.closeLinkModal();\n return;\n }\n\n editor.chain().focus().setTextSelection(selection).extendMarkRange('link').unsetLink().run();\n this.closeLinkModal();\n this._refreshEditorState();\n }\n\n private _insertImage(): void {\n const editor = this._editor;\n\n if (!editor) {\n return;\n }\n\n const selectionFrom = editor.state.selection.from;\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n input.style.display = 'none';\n\n const removeInput = (): void => {\n input.remove();\n };\n\n input.addEventListener(\n 'change',\n () => {\n const file = input.files?.[0];\n if (!file) {\n removeInput();\n return;\n }\n\n const reader = new FileReader();\n reader.addEventListener('load', () => {\n const src = typeof reader.result === 'string' ? reader.result : '';\n if (src) {\n editor.chain().focus().setTextSelection(selectionFrom).setImage({ src, alt: file.name }).run();\n }\n\n removeInput();\n });\n reader.addEventListener('error', removeInput);\n reader.readAsDataURL(file);\n },\n { once: true }\n );\n\n document.body.appendChild(input);\n input.click();\n }\n\n private _placeholderConfig(): Partial<PlaceholderOptions> {\n const { placeholder } = this.zTipTap();\n\n if (!placeholder || typeof placeholder === 'string') {\n return {};\n }\n\n const { mode: _mode, ...config } = placeholder;\n return config;\n }\n\n private _placeholderMode(): 'firstLine' | 'everyLine' {\n const { placeholder } = this.zTipTap();\n return typeof placeholder === 'object' && placeholder.mode === 'firstLine' ? 'firstLine' : 'everyLine';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, output, signal, computed, ViewEncapsulation, ChangeDetectionStrategy, Component, effect, model, EventEmitter,
|
|
2
|
+
import { input, output, signal, computed, ViewEncapsulation, ChangeDetectionStrategy, Component, inject, effect, model, EventEmitter, Injector, PLATFORM_ID, Injectable } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/forms';
|
|
4
4
|
import { FormsModule } from '@angular/forms';
|
|
5
5
|
import { TranslatePipe } from '@ngx-translate/core';
|
|
@@ -12,6 +12,7 @@ import { ZInputComponent } from '@shival99/z-ui/components/z-input';
|
|
|
12
12
|
import { zMergeClasses } from '@shival99/z-ui/utils';
|
|
13
13
|
import { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';
|
|
14
14
|
import { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';
|
|
15
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
15
16
|
import { ZSafeResourceUrlPipe } from '@shival99/z-ui/pipes';
|
|
16
17
|
import { cva } from 'class-variance-authority';
|
|
17
18
|
import { Overlay, OverlayConfig } from '@angular/cdk/overlay';
|
|
@@ -169,7 +170,13 @@ const formatFileSize = (bytes) => {
|
|
|
169
170
|
};
|
|
170
171
|
const isPreviewable = (file) => {
|
|
171
172
|
const category = getFileCategory(file);
|
|
172
|
-
return category === 'image' ||
|
|
173
|
+
return (category === 'image' ||
|
|
174
|
+
category === 'pdf' ||
|
|
175
|
+
category === 'video' ||
|
|
176
|
+
category === 'word' ||
|
|
177
|
+
category === 'excel' ||
|
|
178
|
+
category === 'text' ||
|
|
179
|
+
category === 'code');
|
|
173
180
|
};
|
|
174
181
|
const isImage = (file) => getFileCategory(file) === 'image';
|
|
175
182
|
|
|
@@ -267,7 +274,7 @@ class ZGalleryItemComponent {
|
|
|
267
274
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: ZGalleryItemComponent, isStandalone: true, selector: "z-gallery-item", inputs: { file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: true, transformFunction: null }, zMode: { classPropertyName: "zMode", publicName: "zMode", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zShowDownload: { classPropertyName: "zShowDownload", publicName: "zShowDownload", isSignal: true, isRequired: false, transformFunction: null }, zShowPreview: { classPropertyName: "zShowPreview", publicName: "zShowPreview", isSignal: true, isRequired: false, transformFunction: null }, zShowRemove: { classPropertyName: "zShowRemove", publicName: "zShowRemove", isSignal: true, isRequired: false, transformFunction: null }, zSelectable: { classPropertyName: "zSelectable", publicName: "zSelectable", isSignal: true, isRequired: false, transformFunction: null }, zSelected: { classPropertyName: "zSelected", publicName: "zSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zOnDownload: "zOnDownload", zOnPreview: "zOnPreview", zOnRemove: "zOnRemove", zOnSelect: "zOnSelect" }, host: { classAttribute: "z-gallery-item block" }, ngImport: i0, template: `
|
|
268
275
|
@if (zMode() === 'grid') {
|
|
269
276
|
<div
|
|
270
|
-
class="group border-border bg-card hover:border-primary/30 relative cursor-pointer overflow-hidden rounded-
|
|
277
|
+
class="group border-border bg-card hover:border-primary/30 relative cursor-pointer overflow-hidden rounded-md border shadow-sm transition-all duration-300 hover:shadow-lg"
|
|
271
278
|
[class.border-primary]="zSelected()"
|
|
272
279
|
[class.ring-1]="zSelected()"
|
|
273
280
|
[class.ring-primary/35]="zSelected()"
|
|
@@ -492,7 +499,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
|
|
|
492
499
|
template: `
|
|
493
500
|
@if (zMode() === 'grid') {
|
|
494
501
|
<div
|
|
495
|
-
class="group border-border bg-card hover:border-primary/30 relative cursor-pointer overflow-hidden rounded-
|
|
502
|
+
class="group border-border bg-card hover:border-primary/30 relative cursor-pointer overflow-hidden rounded-md border shadow-sm transition-all duration-300 hover:shadow-lg"
|
|
496
503
|
[class.border-primary]="zSelected()"
|
|
497
504
|
[class.ring-1]="zSelected()"
|
|
498
505
|
[class.ring-primary/35]="zSelected()"
|
|
@@ -716,6 +723,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
|
|
|
716
723
|
}], propDecorators: { file: [{ type: i0.Input, args: [{ isSignal: true, alias: "file", required: true }] }], zMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "zMode", required: false }] }], zSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSize", required: false }] }], zShowDownload: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShowDownload", required: false }] }], zShowPreview: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShowPreview", required: false }] }], zShowRemove: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShowRemove", required: false }] }], zSelectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSelectable", required: false }] }], zSelected: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSelected", required: false }] }], zOnDownload: [{ type: i0.Output, args: ["zOnDownload"] }], zOnPreview: [{ type: i0.Output, args: ["zOnPreview"] }], zOnRemove: [{ type: i0.Output, args: ["zOnRemove"] }], zOnSelect: [{ type: i0.Output, args: ["zOnSelect"] }] } });
|
|
717
724
|
|
|
718
725
|
class ZGalleryPreviewComponent {
|
|
726
|
+
_sanitizer = inject(DomSanitizer);
|
|
719
727
|
file = input.required(...(ngDevMode ? [{ debugName: "file" }] : []));
|
|
720
728
|
files = input([], ...(ngDevMode ? [{ debugName: "files" }] : []));
|
|
721
729
|
zShowRemove = input(false, ...(ngDevMode ? [{ debugName: "zShowRemove" }] : []));
|
|
@@ -726,21 +734,82 @@ class ZGalleryPreviewComponent {
|
|
|
726
734
|
zoomed = signal(false, ...(ngDevMode ? [{ debugName: "zoomed" }] : []));
|
|
727
735
|
isLoading = signal(true, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
728
736
|
rotation = signal(0, ...(ngDevMode ? [{ debugName: "rotation" }] : []));
|
|
737
|
+
isConverting = signal(false, ...(ngDevMode ? [{ debugName: "isConverting" }] : []));
|
|
738
|
+
conversionError = signal(null, ...(ngDevMode ? [{ debugName: "conversionError" }] : []));
|
|
739
|
+
docHtmlContent = signal(null, ...(ngDevMode ? [{ debugName: "docHtmlContent" }] : []));
|
|
740
|
+
textContent = signal('', ...(ngDevMode ? [{ debugName: "textContent" }] : []));
|
|
729
741
|
_mediaLoaded = signal(false, ...(ngDevMode ? [{ debugName: "_mediaLoaded" }] : []));
|
|
730
742
|
_loadingStartTime = 0;
|
|
731
743
|
_minLoadingTime = 300;
|
|
732
744
|
constructor() {
|
|
733
745
|
effect(() => {
|
|
734
746
|
const currentFile = this.file();
|
|
735
|
-
if (currentFile) {
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
747
|
+
if (!currentFile) {
|
|
748
|
+
return;
|
|
749
|
+
}
|
|
750
|
+
this.isLoading.set(true);
|
|
751
|
+
this._mediaLoaded.set(false);
|
|
752
|
+
this._loadingStartTime = Date.now();
|
|
753
|
+
this.zoomed.set(false);
|
|
754
|
+
this.rotation.set(0);
|
|
755
|
+
this.isConverting.set(false);
|
|
756
|
+
this.conversionError.set(null);
|
|
757
|
+
this.docHtmlContent.set(null);
|
|
758
|
+
this.textContent.set('');
|
|
759
|
+
const category = getFileCategory(currentFile);
|
|
760
|
+
if (category === 'word' || category === 'excel' || category === 'text' || category === 'code') {
|
|
761
|
+
void this._loadFileContent(currentFile, category);
|
|
741
762
|
}
|
|
742
763
|
});
|
|
743
764
|
}
|
|
765
|
+
async _loadFileContent(file, category) {
|
|
766
|
+
const url = file.url || file.downloadUrl;
|
|
767
|
+
if (!url) {
|
|
768
|
+
this.conversionError.set('No URL available for preview');
|
|
769
|
+
this._completeLoading();
|
|
770
|
+
return;
|
|
771
|
+
}
|
|
772
|
+
this.isConverting.set(true);
|
|
773
|
+
try {
|
|
774
|
+
if (category === 'word') {
|
|
775
|
+
await this._loadDocx(url);
|
|
776
|
+
}
|
|
777
|
+
else if (category === 'excel') {
|
|
778
|
+
await this._loadExcel(url);
|
|
779
|
+
}
|
|
780
|
+
else {
|
|
781
|
+
await this._loadText(url);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
catch {
|
|
785
|
+
this.conversionError.set('Failed to load file content');
|
|
786
|
+
}
|
|
787
|
+
finally {
|
|
788
|
+
this.isConverting.set(false);
|
|
789
|
+
this._completeLoading();
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
async _loadDocx(url) {
|
|
793
|
+
const response = await fetch(url);
|
|
794
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
795
|
+
const mammoth = await import('mammoth');
|
|
796
|
+
const result = await mammoth.convertToHtml({ arrayBuffer });
|
|
797
|
+
this.docHtmlContent.set(this._sanitizer.bypassSecurityTrustHtml(result.value));
|
|
798
|
+
}
|
|
799
|
+
async _loadExcel(url) {
|
|
800
|
+
const response = await fetch(url);
|
|
801
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
802
|
+
const XLSX = await import('xlsx');
|
|
803
|
+
const workbook = XLSX.read(arrayBuffer);
|
|
804
|
+
const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
|
|
805
|
+
const html = XLSX.utils.sheet_to_html(firstSheet);
|
|
806
|
+
this.docHtmlContent.set(this._sanitizer.bypassSecurityTrustHtml(html));
|
|
807
|
+
}
|
|
808
|
+
async _loadText(url) {
|
|
809
|
+
const response = await fetch(url);
|
|
810
|
+
const text = await response.text();
|
|
811
|
+
this.textContent.set(text);
|
|
812
|
+
}
|
|
744
813
|
_completeLoading() {
|
|
745
814
|
const elapsed = Date.now() - this._loadingStartTime;
|
|
746
815
|
const remaining = this._minLoadingTime - elapsed;
|
|
@@ -760,6 +829,12 @@ class ZGalleryPreviewComponent {
|
|
|
760
829
|
isImageFile = computed(() => isImage(this.file()), ...(ngDevMode ? [{ debugName: "isImageFile" }] : []));
|
|
761
830
|
isPdf = computed(() => getFileCategory(this.file()) === 'pdf', ...(ngDevMode ? [{ debugName: "isPdf" }] : []));
|
|
762
831
|
isVideo = computed(() => getFileCategory(this.file()) === 'video', ...(ngDevMode ? [{ debugName: "isVideo" }] : []));
|
|
832
|
+
isWordFile = computed(() => getFileCategory(this.file()) === 'word', ...(ngDevMode ? [{ debugName: "isWordFile" }] : []));
|
|
833
|
+
isExcelFile = computed(() => getFileCategory(this.file()) === 'excel', ...(ngDevMode ? [{ debugName: "isExcelFile" }] : []));
|
|
834
|
+
isTextFile = computed(() => {
|
|
835
|
+
const category = getFileCategory(this.file());
|
|
836
|
+
return category === 'text' || category === 'code';
|
|
837
|
+
}, ...(ngDevMode ? [{ debugName: "isTextFile" }] : []));
|
|
763
838
|
canPreview = computed(() => isPreviewable(this.file()), ...(ngDevMode ? [{ debugName: "canPreview" }] : []));
|
|
764
839
|
formattedSize = computed(() => formatFileSize(this.file().size), ...(ngDevMode ? [{ debugName: "formattedSize" }] : []));
|
|
765
840
|
imageTransform = computed(() => {
|
|
@@ -855,7 +930,7 @@ class ZGalleryPreviewComponent {
|
|
|
855
930
|
}
|
|
856
931
|
}
|
|
857
932
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: ZGalleryPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
858
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: ZGalleryPreviewComponent, isStandalone: true, selector: "z-gallery-preview", inputs: { file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: true, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null }, zShowRemove: { classPropertyName: "zShowRemove", publicName: "zShowRemove", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zOnClose: "zOnClose", zOnDownload: "zOnDownload", zOnNavigate: "zOnNavigate", zOnRemove: "zOnRemove" }, host: { listeners: { "document:keydown": "onKeyDown($event)" }, classAttribute: "z-gallery-preview" }, ngImport: i0, template: `
|
|
933
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: ZGalleryPreviewComponent, isStandalone: true, selector: "z-gallery-preview", inputs: { file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: true, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null }, zShowRemove: { classPropertyName: "zShowRemove", publicName: "zShowRemove", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zOnClose: "zOnClose", zOnDownload: "zOnDownload", zOnNavigate: "zOnNavigate", zOnRemove: "zOnRemove" }, host: { listeners: { "document:keydown": "onKeyDown($event)" }, classAttribute: "z-gallery-preview z-[9999]" }, ngImport: i0, template: `
|
|
859
934
|
<div
|
|
860
935
|
class="animate-in fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm duration-200"
|
|
861
936
|
(click)="onBackdropClick($event)"
|
|
@@ -1017,6 +1092,73 @@ class ZGalleryPreviewComponent {
|
|
|
1017
1092
|
Your browser does not support the video tag.
|
|
1018
1093
|
</video>
|
|
1019
1094
|
</div>
|
|
1095
|
+
} @else if (isWordFile()) {
|
|
1096
|
+
<div class="relative h-[75vh] w-[85vw]">
|
|
1097
|
+
@if (isLoading() || isConverting()) {
|
|
1098
|
+
<z-skeleton class="absolute inset-0 rounded-lg" />
|
|
1099
|
+
}
|
|
1100
|
+
@if (conversionError()) {
|
|
1101
|
+
<div class="bg-card flex size-full flex-col items-center justify-center rounded-lg p-12 shadow-2xl">
|
|
1102
|
+
<div class="bg-muted mb-4 flex size-24 items-center justify-center rounded-xl">
|
|
1103
|
+
<i z-icon [zType]="fileIcon()" zSize="40" class="text-muted-foreground"></i>
|
|
1104
|
+
</div>
|
|
1105
|
+
<span class="text-foreground mb-2 text-lg font-medium">{{ file().name }}</span>
|
|
1106
|
+
<span class="text-muted-foreground rounded-md bg-red-100 px-3 py-1.5 text-xs dark:bg-red-900/30">
|
|
1107
|
+
<span class="text-red-700 dark:text-red-300">{{ conversionError() }}</span>
|
|
1108
|
+
</span>
|
|
1109
|
+
</div>
|
|
1110
|
+
} @else if (docHtmlContent()) {
|
|
1111
|
+
<div
|
|
1112
|
+
class="absolute inset-0 overflow-auto rounded-lg bg-white p-8 shadow-2xl"
|
|
1113
|
+
[innerHTML]="docHtmlContent()"
|
|
1114
|
+
></div>
|
|
1115
|
+
}
|
|
1116
|
+
</div>
|
|
1117
|
+
} @else if (isExcelFile()) {
|
|
1118
|
+
<div class="relative h-[75vh] w-[85vw]">
|
|
1119
|
+
@if (isLoading() || isConverting()) {
|
|
1120
|
+
<z-skeleton class="absolute inset-0 rounded-lg" />
|
|
1121
|
+
}
|
|
1122
|
+
@if (conversionError()) {
|
|
1123
|
+
<div class="bg-card flex size-full flex-col items-center justify-center rounded-lg p-12 shadow-2xl">
|
|
1124
|
+
<div class="bg-muted mb-4 flex size-24 items-center justify-center rounded-xl">
|
|
1125
|
+
<i z-icon [zType]="fileIcon()" zSize="40" class="text-muted-foreground"></i>
|
|
1126
|
+
</div>
|
|
1127
|
+
<span class="text-foreground mb-2 text-lg font-medium">{{ file().name }}</span>
|
|
1128
|
+
<span class="text-muted-foreground rounded-md bg-red-100 px-3 py-1.5 text-xs dark:bg-red-900/30">
|
|
1129
|
+
<span class="text-red-700 dark:text-red-300">{{ conversionError() }}</span>
|
|
1130
|
+
</span>
|
|
1131
|
+
</div>
|
|
1132
|
+
} @else if (docHtmlContent()) {
|
|
1133
|
+
<div
|
|
1134
|
+
class="absolute inset-0 overflow-auto rounded-lg bg-white p-4 shadow-2xl"
|
|
1135
|
+
[innerHTML]="docHtmlContent()"
|
|
1136
|
+
></div>
|
|
1137
|
+
}
|
|
1138
|
+
</div>
|
|
1139
|
+
} @else if (isTextFile()) {
|
|
1140
|
+
<div class="relative h-[75vh] w-[85vw]">
|
|
1141
|
+
@if (isLoading() || isConverting()) {
|
|
1142
|
+
<z-skeleton class="absolute inset-0 rounded-lg" />
|
|
1143
|
+
}
|
|
1144
|
+
@if (conversionError()) {
|
|
1145
|
+
<div class="bg-card flex size-full flex-col items-center justify-center rounded-lg p-12 shadow-2xl">
|
|
1146
|
+
<div class="bg-muted mb-4 flex size-24 items-center justify-center rounded-xl">
|
|
1147
|
+
<i z-icon [zType]="fileIcon()" zSize="40" class="text-muted-foreground"></i>
|
|
1148
|
+
</div>
|
|
1149
|
+
<span class="text-foreground mb-2 text-lg font-medium">{{ file().name }}</span>
|
|
1150
|
+
<span class="text-muted-foreground rounded-md bg-red-100 px-3 py-1.5 text-xs dark:bg-red-900/30">
|
|
1151
|
+
<span class="text-red-700 dark:text-red-300">{{ conversionError() }}</span>
|
|
1152
|
+
</span>
|
|
1153
|
+
</div>
|
|
1154
|
+
} @else if (textContent()) {
|
|
1155
|
+
<div class="absolute inset-0 overflow-auto rounded-lg bg-gray-950 p-6 shadow-2xl">
|
|
1156
|
+
<pre class="font-mono text-sm leading-relaxed whitespace-pre-wrap text-gray-100">{{
|
|
1157
|
+
textContent()
|
|
1158
|
+
}}</pre>
|
|
1159
|
+
</div>
|
|
1160
|
+
}
|
|
1161
|
+
</div>
|
|
1020
1162
|
} @else {
|
|
1021
1163
|
<div class="bg-card flex flex-col items-center justify-center rounded-lg p-12 shadow-2xl">
|
|
1022
1164
|
<div class="bg-muted mb-4 flex size-24 items-center justify-center rounded-xl">
|
|
@@ -1217,6 +1359,73 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
|
|
|
1217
1359
|
Your browser does not support the video tag.
|
|
1218
1360
|
</video>
|
|
1219
1361
|
</div>
|
|
1362
|
+
} @else if (isWordFile()) {
|
|
1363
|
+
<div class="relative h-[75vh] w-[85vw]">
|
|
1364
|
+
@if (isLoading() || isConverting()) {
|
|
1365
|
+
<z-skeleton class="absolute inset-0 rounded-lg" />
|
|
1366
|
+
}
|
|
1367
|
+
@if (conversionError()) {
|
|
1368
|
+
<div class="bg-card flex size-full flex-col items-center justify-center rounded-lg p-12 shadow-2xl">
|
|
1369
|
+
<div class="bg-muted mb-4 flex size-24 items-center justify-center rounded-xl">
|
|
1370
|
+
<i z-icon [zType]="fileIcon()" zSize="40" class="text-muted-foreground"></i>
|
|
1371
|
+
</div>
|
|
1372
|
+
<span class="text-foreground mb-2 text-lg font-medium">{{ file().name }}</span>
|
|
1373
|
+
<span class="text-muted-foreground rounded-md bg-red-100 px-3 py-1.5 text-xs dark:bg-red-900/30">
|
|
1374
|
+
<span class="text-red-700 dark:text-red-300">{{ conversionError() }}</span>
|
|
1375
|
+
</span>
|
|
1376
|
+
</div>
|
|
1377
|
+
} @else if (docHtmlContent()) {
|
|
1378
|
+
<div
|
|
1379
|
+
class="absolute inset-0 overflow-auto rounded-lg bg-white p-8 shadow-2xl"
|
|
1380
|
+
[innerHTML]="docHtmlContent()"
|
|
1381
|
+
></div>
|
|
1382
|
+
}
|
|
1383
|
+
</div>
|
|
1384
|
+
} @else if (isExcelFile()) {
|
|
1385
|
+
<div class="relative h-[75vh] w-[85vw]">
|
|
1386
|
+
@if (isLoading() || isConverting()) {
|
|
1387
|
+
<z-skeleton class="absolute inset-0 rounded-lg" />
|
|
1388
|
+
}
|
|
1389
|
+
@if (conversionError()) {
|
|
1390
|
+
<div class="bg-card flex size-full flex-col items-center justify-center rounded-lg p-12 shadow-2xl">
|
|
1391
|
+
<div class="bg-muted mb-4 flex size-24 items-center justify-center rounded-xl">
|
|
1392
|
+
<i z-icon [zType]="fileIcon()" zSize="40" class="text-muted-foreground"></i>
|
|
1393
|
+
</div>
|
|
1394
|
+
<span class="text-foreground mb-2 text-lg font-medium">{{ file().name }}</span>
|
|
1395
|
+
<span class="text-muted-foreground rounded-md bg-red-100 px-3 py-1.5 text-xs dark:bg-red-900/30">
|
|
1396
|
+
<span class="text-red-700 dark:text-red-300">{{ conversionError() }}</span>
|
|
1397
|
+
</span>
|
|
1398
|
+
</div>
|
|
1399
|
+
} @else if (docHtmlContent()) {
|
|
1400
|
+
<div
|
|
1401
|
+
class="absolute inset-0 overflow-auto rounded-lg bg-white p-4 shadow-2xl"
|
|
1402
|
+
[innerHTML]="docHtmlContent()"
|
|
1403
|
+
></div>
|
|
1404
|
+
}
|
|
1405
|
+
</div>
|
|
1406
|
+
} @else if (isTextFile()) {
|
|
1407
|
+
<div class="relative h-[75vh] w-[85vw]">
|
|
1408
|
+
@if (isLoading() || isConverting()) {
|
|
1409
|
+
<z-skeleton class="absolute inset-0 rounded-lg" />
|
|
1410
|
+
}
|
|
1411
|
+
@if (conversionError()) {
|
|
1412
|
+
<div class="bg-card flex size-full flex-col items-center justify-center rounded-lg p-12 shadow-2xl">
|
|
1413
|
+
<div class="bg-muted mb-4 flex size-24 items-center justify-center rounded-xl">
|
|
1414
|
+
<i z-icon [zType]="fileIcon()" zSize="40" class="text-muted-foreground"></i>
|
|
1415
|
+
</div>
|
|
1416
|
+
<span class="text-foreground mb-2 text-lg font-medium">{{ file().name }}</span>
|
|
1417
|
+
<span class="text-muted-foreground rounded-md bg-red-100 px-3 py-1.5 text-xs dark:bg-red-900/30">
|
|
1418
|
+
<span class="text-red-700 dark:text-red-300">{{ conversionError() }}</span>
|
|
1419
|
+
</span>
|
|
1420
|
+
</div>
|
|
1421
|
+
} @else if (textContent()) {
|
|
1422
|
+
<div class="absolute inset-0 overflow-auto rounded-lg bg-gray-950 p-6 shadow-2xl">
|
|
1423
|
+
<pre class="font-mono text-sm leading-relaxed whitespace-pre-wrap text-gray-100">{{
|
|
1424
|
+
textContent()
|
|
1425
|
+
}}</pre>
|
|
1426
|
+
</div>
|
|
1427
|
+
}
|
|
1428
|
+
</div>
|
|
1220
1429
|
} @else {
|
|
1221
1430
|
<div class="bg-card flex flex-col items-center justify-center rounded-lg p-12 shadow-2xl">
|
|
1222
1431
|
<div class="bg-muted mb-4 flex size-24 items-center justify-center rounded-xl">
|
|
@@ -1244,7 +1453,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
|
|
|
1244
1453
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1245
1454
|
encapsulation: ViewEncapsulation.None,
|
|
1246
1455
|
host: {
|
|
1247
|
-
class: 'z-gallery-preview',
|
|
1456
|
+
class: 'z-gallery-preview z-[9999]',
|
|
1248
1457
|
'(document:keydown)': 'onKeyDown($event)',
|
|
1249
1458
|
},
|
|
1250
1459
|
}]
|
|
@@ -1326,7 +1535,7 @@ class ZGalleryComponent {
|
|
|
1326
1535
|
zShowSearch = input(false, ...(ngDevMode ? [{ debugName: "zShowSearch" }] : []));
|
|
1327
1536
|
zServerSearch = input(false, ...(ngDevMode ? [{ debugName: "zServerSearch" }] : []));
|
|
1328
1537
|
zSearchPlaceholder = input('Search files...', ...(ngDevMode ? [{ debugName: "zSearchPlaceholder" }] : []));
|
|
1329
|
-
zToggleSize = input('
|
|
1538
|
+
zToggleSize = input('default', ...(ngDevMode ? [{ debugName: "zToggleSize" }] : []));
|
|
1330
1539
|
zTitle = input('', ...(ngDevMode ? [{ debugName: "zTitle" }] : []));
|
|
1331
1540
|
zEmptyText = input('No files', ...(ngDevMode ? [{ debugName: "zEmptyText" }] : []));
|
|
1332
1541
|
zEmptyIcon = input('lucideImage', ...(ngDevMode ? [{ debugName: "zEmptyIcon" }] : []));
|
|
@@ -1348,10 +1557,25 @@ class ZGalleryComponent {
|
|
|
1348
1557
|
const index = this.modeIndex();
|
|
1349
1558
|
return index === 1 ? 'list' : 'grid';
|
|
1350
1559
|
}, ...(ngDevMode ? [{ debugName: "currentMode" }] : []));
|
|
1351
|
-
|
|
1560
|
+
gridColumnsClass = computed(() => {
|
|
1352
1561
|
const cols = this.zColumns();
|
|
1353
|
-
|
|
1354
|
-
|
|
1562
|
+
switch (cols) {
|
|
1563
|
+
case 1:
|
|
1564
|
+
return 'grid-cols-1';
|
|
1565
|
+
case 2:
|
|
1566
|
+
return 'grid-cols-1 sm:grid-cols-2';
|
|
1567
|
+
case 3:
|
|
1568
|
+
return 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3';
|
|
1569
|
+
case 4:
|
|
1570
|
+
return 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-4';
|
|
1571
|
+
case 5:
|
|
1572
|
+
return 'grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5';
|
|
1573
|
+
case 6:
|
|
1574
|
+
return 'grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6';
|
|
1575
|
+
default:
|
|
1576
|
+
return `grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-${cols}`;
|
|
1577
|
+
}
|
|
1578
|
+
}, ...(ngDevMode ? [{ debugName: "gridColumnsClass" }] : []));
|
|
1355
1579
|
containerClasses = computed(() => zMergeClasses(zGalleryVariants({ zSize: this.zSize() }), this.zClass()), ...(ngDevMode ? [{ debugName: "containerClasses" }] : []));
|
|
1356
1580
|
showHeader = computed(() => this.zTitle() || this.zShowSearch() || (this.zShowModeToggle() && this.zFiles().length > 0), ...(ngDevMode ? [{ debugName: "showHeader" }] : []));
|
|
1357
1581
|
toggleIconSize = computed(() => {
|
|
@@ -1596,7 +1820,7 @@ class ZGalleryComponent {
|
|
|
1596
1820
|
|
|
1597
1821
|
@if (filteredFiles().length > 0) {
|
|
1598
1822
|
@if (currentMode() === 'grid') {
|
|
1599
|
-
<div class="grid gap-4" [
|
|
1823
|
+
<div class="grid gap-4" [class]="gridColumnsClass()">
|
|
1600
1824
|
@for (file of filteredFiles(); track file.id) {
|
|
1601
1825
|
<z-gallery-item
|
|
1602
1826
|
[file]="file"
|
|
@@ -1766,7 +1990,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
|
|
|
1766
1990
|
|
|
1767
1991
|
@if (filteredFiles().length > 0) {
|
|
1768
1992
|
@if (currentMode() === 'grid') {
|
|
1769
|
-
<div class="grid gap-4" [
|
|
1993
|
+
<div class="grid gap-4" [class]="gridColumnsClass()">
|
|
1770
1994
|
@for (file of filteredFiles(); track file.id) {
|
|
1771
1995
|
<z-gallery-item
|
|
1772
1996
|
[file]="file"
|