@seniorsistemas/angular-components 19.9.9 → 19.9.11

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.
Files changed (75) hide show
  1. package/button/lib/button/button.component.d.ts +3 -1
  2. package/esm2022/button/lib/button/button.component.mjs +7 -3
  3. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +1 -1
  4. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +2 -2
  5. package/esm2022/dynamic-form/dynamic-form/components/grid/row/row.component.mjs +2 -2
  6. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +2 -2
  7. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +2 -2
  8. package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +1 -1
  9. package/esm2022/dynamic-form/dynamic-form/form-field/fields/button-field/button-field.component.mjs +1 -1
  10. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +1 -1
  11. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +2 -2
  12. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +2 -2
  13. package/esm2022/dynamic-form/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +2 -2
  14. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +2 -2
  15. package/esm2022/editor/lib/editor/link-dialog/link-dialog.component.mjs +2 -2
  16. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +1 -1
  17. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +2 -2
  18. package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +2 -2
  19. package/esm2022/global-search/lib/global-search/global-search.component.mjs +2 -2
  20. package/esm2022/help-popover/lib/help-popover/help-popover/help-popover.component.mjs +1 -1
  21. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +1 -1
  22. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +2 -2
  23. package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +2 -2
  24. package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +1 -1
  25. package/esm2022/lib/locale/fallback.mjs +8 -1
  26. package/esm2022/object-card/lib/object-card/elements/field/object-card-field.component.mjs +1 -1
  27. package/esm2022/object-card/lib/object-card/elements/main/object-card-main.component.mjs +1 -1
  28. package/esm2022/picklist/lib/picklist/picklist.component.mjs +2 -2
  29. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +2 -2
  30. package/esm2022/select/lib/select/components/select-option/select-option.component.mjs +31 -3
  31. package/esm2022/select/lib/select/select.component.mjs +240 -23
  32. package/esm2022/spotlight/lib/spotlight/spotlight.component.mjs +2 -2
  33. package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +1 -1
  34. package/fesm2022/seniorsistemas-angular-components-button.mjs +6 -2
  35. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  36. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +1 -1
  37. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
  38. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +1 -1
  39. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  40. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +10 -10
  41. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  42. package/fesm2022/seniorsistemas-angular-components-editor.mjs +1 -1
  43. package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
  44. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +1 -1
  45. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  46. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +1 -1
  47. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  48. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +2 -2
  49. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  50. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +1 -1
  51. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  52. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +1 -1
  53. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  54. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +2 -2
  55. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  56. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +1 -1
  57. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  58. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
  59. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  60. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +1 -1
  61. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  62. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +1 -1
  63. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  64. package/fesm2022/seniorsistemas-angular-components-select.mjs +269 -24
  65. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  66. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs +1 -1
  67. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs.map +1 -1
  68. package/fesm2022/seniorsistemas-angular-components-table.mjs +1 -1
  69. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  70. package/fesm2022/seniorsistemas-angular-components.mjs +7 -0
  71. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  72. package/package.json +1 -1
  73. package/select/README.md +16 -3
  74. package/select/lib/select/components/select-option/select-option.component.d.ts +23 -1
  75. package/select/lib/select/select.component.d.ts +111 -17
@@ -55,7 +55,7 @@ class LinkDialogComponent {
55
55
  this.activeDialog.dismiss();
56
56
  }
57
57
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LinkDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
58
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LinkDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<s-dialog [header]=\"'platform.angular_components.editor_insert_link' | translate\">\n <ng-template sTemplate=\"body\">\n <s-dynamic-form [form]=\"form\" [configs]=\"configs\" />\n </ng-template>\n <ng-template sTemplate=\"footer\">\n <div style=\"display:flex; justify-content:flex-end; gap:8px; width:100%\">\n <s-button\n [label]=\"'platform.angular_components.cancel' | translate\"\n priority=\"secondary\"\n (clicked)=\"cancel()\"\n />\n <s-button\n [label]=\"'platform.angular_components.editor_confirm' | translate\"\n priority=\"primary\"\n (clicked)=\"confirm()\"\n />\n </div>\n </ng-template>\n</s-dialog>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: DialogComponent, selector: "s-dialog", inputs: ["header", "visible", "size", "contentClassName", "escapeOnEsc", "destroyClickOutside", "closeAriaLabel"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: DynamicFormModule }, { kind: "component", type: i2.DynamicFormComponent, selector: "s-dynamic-form", inputs: ["id", "configs", "fields", "form", "errorMessages"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked"] }, { kind: "ngmodule", type: TemplateModule }, { kind: "directive", type: i4.TemplateDirective, selector: "[sTemplate]", inputs: ["sTemplate"] }] });
58
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LinkDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<s-dialog [header]=\"'platform.angular_components.editor_insert_link' | translate\">\n <ng-template sTemplate=\"body\">\n <s-dynamic-form [form]=\"form\" [configs]=\"configs\" />\n </ng-template>\n <ng-template sTemplate=\"footer\">\n <div style=\"display:flex; justify-content:flex-end; gap:8px; width:100%\">\n <s-button\n [label]=\"'platform.angular_components.cancel' | translate\"\n priority=\"secondary\"\n (clicked)=\"cancel()\"\n />\n <s-button\n [label]=\"'platform.angular_components.editor_confirm' | translate\"\n priority=\"primary\"\n (clicked)=\"confirm()\"\n />\n </div>\n </ng-template>\n</s-dialog>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: DialogComponent, selector: "s-dialog", inputs: ["header", "visible", "size", "contentClassName", "escapeOnEsc", "destroyClickOutside", "closeAriaLabel"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: DynamicFormModule }, { kind: "component", type: i2.DynamicFormComponent, selector: "s-dynamic-form", inputs: ["id", "configs", "fields", "form", "errorMessages"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked", "tieredMenuOpened", "tieredMenuClosed"] }, { kind: "ngmodule", type: TemplateModule }, { kind: "directive", type: i4.TemplateDirective, selector: "[sTemplate]", inputs: ["sTemplate"] }] });
59
59
  }
60
60
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LinkDialogComponent, decorators: [{
61
61
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-editor.mjs","sources":["../../projects/angular-components/editor/src/lib/editor/link-dialog/link-dialog.component.ts","../../projects/angular-components/editor/src/lib/editor/link-dialog/link-dialog.component.html","../../projects/angular-components/editor/src/lib/editor/toolbar-button/editor-toolbar-button.component.ts","../../projects/angular-components/editor/src/lib/editor/toolbar-button/editor-toolbar-button.component.html","../../projects/angular-components/editor/src/lib/editor/editor.component.ts","../../projects/angular-components/editor/src/lib/editor/editor.component.html","../../projects/angular-components/editor/src/seniorsistemas-angular-components-editor.ts"],"sourcesContent":["import { Component, inject, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\nimport { ActiveDialog, DialogComponent } from '@seniorsistemas/angular-components/dialog';\nimport { DynamicFormModule, DynamicStructure } from '@seniorsistemas/angular-components/dynamic-form';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\n@Component({\n standalone: true,\n imports: [ReactiveFormsModule, TranslateModule, DialogComponent, DynamicFormModule, ButtonModule, TemplateModule],\n templateUrl: './link-dialog.component.html',\n})\nexport class LinkDialogComponent implements OnInit {\n private readonly activeDialog = inject(ActiveDialog);\n private readonly translateService = inject(TranslateService);\n\n initialUrl = '';\n\n form = new FormGroup({ url: new FormControl('') });\n\n configs: DynamicStructure[] = [];\n\n ngOnInit(): void {\n this.form.setValue({ url: this.initialUrl });\n this.configs = [\n {\n type: 'row',\n fields: [\n {\n type: 'string',\n name: 'url',\n label: this.translateService.instant('platform.angular_components.editor_link_url_label'),\n placeholder: this.translateService.instant(\n 'platform.angular_components.editor_link_url_placeholder',\n ),\n },\n ],\n },\n ];\n }\n\n confirm(): void {\n this.activeDialog.close(this.form.value.url?.trim() ?? '');\n }\n\n cancel(): void {\n this.activeDialog.dismiss();\n }\n}\n\n","<s-dialog [header]=\"'platform.angular_components.editor_insert_link' | translate\">\n <ng-template sTemplate=\"body\">\n <s-dynamic-form [form]=\"form\" [configs]=\"configs\" />\n </ng-template>\n <ng-template sTemplate=\"footer\">\n <div style=\"display:flex; justify-content:flex-end; gap:8px; width:100%\">\n <s-button\n [label]=\"'platform.angular_components.cancel' | translate\"\n priority=\"secondary\"\n (clicked)=\"cancel()\"\n />\n <s-button\n [label]=\"'platform.angular_components.editor_confirm' | translate\"\n priority=\"primary\"\n (clicked)=\"confirm()\"\n />\n </div>\n </ng-template>\n</s-dialog>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n@Component({\n selector: 's-editor-toolbar-button',\n standalone: true,\n imports: [NgClass],\n templateUrl: './editor-toolbar-button.component.html',\n host: { style: 'display: contents' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EditorToolbarButtonComponent {\n icon = input.required<string>();\n label = input.required<string>();\n active = input<boolean>(false);\n disabled = input<boolean>(false);\n clicked = output<void>();\n}\n\n","<button\n type=\"button\"\n class=\"inline-flex items-center justify-center w-7 h-7 p-0 border-0 bg-transparent rounded cursor-pointer text-base leading-none transition-colors duration-150 disabled:opacity-[.35] disabled:cursor-not-allowed focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n [ngClass]=\"{\n 'bg-[#ebebfa]': active(),\n 'text-[#5c5ce6]': active(),\n 'hover:bg-[#ddddf7]': active(),\n 'text-[#3d3d4d]': !active(),\n 'enabled:hover:bg-[#e8e8f0]': !active(),\n 'enabled:hover:text-[#1e1e2e]': !active()\n }\"\n [disabled]=\"disabled()\"\n [title]=\"label()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-pressed]=\"active()\"\n (click)=\"clicked.emit()\"\n>\n <i [class]=\"icon()\"></i>\n</button>\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n effect,\n forwardRef,\n inject,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { take } from 'rxjs/operators';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { DialogService } from '@seniorsistemas/angular-components/dialog';\nimport { Editor } from '@tiptap/core';\nimport { Color } from '@tiptap/extension-color';\nimport Highlight from '@tiptap/extension-highlight';\nimport Image from '@tiptap/extension-image';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Subscript from '@tiptap/extension-subscript';\nimport Superscript from '@tiptap/extension-superscript';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { TextStyle } from '@tiptap/extension-text-style';\nimport Underline from '@tiptap/extension-underline';\nimport StarterKit from '@tiptap/starter-kit';\n\nimport { LinkDialogComponent } from './link-dialog/link-dialog.component';\nimport { EditorFormat, EditorSelectionChangeEvent, EditorTextChangeEvent, Extension } from './models';\nimport { EditorToolbarButtonComponent } from './toolbar-button/editor-toolbar-button.component';\n\n/**\n * @description Componente de editor de texto rico (WYSIWYG) construído sobre o Tiptap/ProseMirror.\n * Substitui o `p-editor` do PrimeNG sem dependência externa de licença comercial.\n * Implementa {@link ControlValueAccessor} para integração com Angular Forms.\n *\n * @example\n * ```html\n * <s-editor\n * formControlName=\"descricao\"\n * [readonly]=\"false\"\n * (textChange)=\"onTextChange($event)\" />\n * ```\n */\n@Component({\n selector: 's-editor',\n standalone: true,\n imports: [NgClass, NgStyle, TranslateModule, EditorToolbarButtonComponent],\n templateUrl: './editor.component.html',\n styleUrls: ['./editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EditorComponent),\n multi: true,\n },\n ],\n})\nexport class EditorComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * @description Coloca o editor em modo somente leitura.\n * @default false\n */\n readonly = input<boolean>(false);\n\n /**\n * @description Lista de formatos habilitados na toolbar. Quando vazio, todos os formatos são exibidos.\n */\n formats = input<EditorFormat[]>();\n\n /**\n * @description Texto de dica exibido quando o editor está vazio.\n */\n placeholder = input<string>();\n\n /**\n * @description Estilos inline aplicados ao container do editor.\n */\n style = input<{ [klass: string]: unknown }>();\n\n /**\n * @description Classes CSS adicionais aplicadas ao container do editor.\n */\n styleClass = input<string>();\n\n /**\n * @description Extensões Tiptap adicionais para estender o comportamento padrão do editor.\n */\n extensions = input<Extension[]>([]);\n\n /**\n * @description Emitido quando o editor é inicializado e está pronto para uso.\n */\n editorInit = output<Editor>();\n\n /**\n * @description Emitido sempre que o conteúdo do editor é alterado.\n */\n textChange = output<EditorTextChangeEvent>();\n\n /**\n * @description Emitido quando a seleção de texto no editor muda.\n */\n selectionChange = output<EditorSelectionChangeEvent>();\n\n protected formDisabled = false;\n\n private editorContainer = viewChild.required<ElementRef<HTMLDivElement>>('editorContainer');\n private imageInput = viewChild.required<ElementRef<HTMLInputElement>>('imageInput');\n private editor?: Editor;\n private _currentPlaceholder = '';\n\n activeStates = {\n isBold: false,\n isItalic: false,\n isUnderline: false,\n isStrike: false,\n isBulletList: false,\n isOrderedList: false,\n isBlockquote: false,\n isCode: false,\n isSubscript: false,\n isSuperscript: false,\n isAlignLeft: false,\n isAlignCenter: false,\n isAlignRight: false,\n currentHeading: 0,\n currentColor: '#000000',\n currentHighlight: 'transparent',\n canUndo: false,\n canRedo: false,\n };\n\n private _value = '';\n private _onChange: (value: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n constructor() {\n effect(() => {\n if (this.editor) {\n this.editor.setEditable(!this.readonly() && !this.formDisabled, false);\n this.cdr.markForCheck();\n }\n });\n\n effect(() => {\n this._currentPlaceholder = this.placeholder() ?? '';\n this.editor?.view.dispatch(this.editor.state.tr);\n });\n }\n\n ngAfterViewInit(): void {\n this.initEditor();\n }\n\n ngOnDestroy(): void {\n this.editor?.destroy();\n }\n\n writeValue(value: string): void {\n this._value = value ?? '';\n if (this.editor) {\n this.editor.chain().setMeta('addToHistory', false).setContent(this._value, { emitUpdate: false }).run();\n this.cdr.markForCheck();\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled = isDisabled;\n this.editor?.setEditable(!isDisabled && !this.readonly(), false);\n this.cdr.markForCheck();\n }\n\n isFormatAllowed(format: EditorFormat): boolean {\n const formats = this.formats();\n return !formats?.length || formats.includes(format);\n }\n\n hasAnyFormatBeforeUndoRedo(): boolean {\n const formatsBeforeUndoRedo: EditorFormat[] = [\n 'header', 'bold', 'italic', 'underline', 'strike', 'subscript', 'superscript',\n 'color', 'highlight', 'list', 'align', 'blockquote', 'code-block', 'link', 'image',\n ];\n return formatsBeforeUndoRedo.some(f => this.isFormatAllowed(f));\n }\n\n toggleBold(): void {\n this.editor?.chain().focus().toggleBold().run();\n }\n\n toggleItalic(): void {\n this.editor?.chain().focus().toggleItalic().run();\n }\n\n toggleUnderline(): void {\n this.editor?.chain().focus().toggleUnderline().run();\n }\n\n toggleStrike(): void {\n this.editor?.chain().focus().toggleStrike().run();\n }\n\n toggleBulletList(): void {\n this.editor?.chain().focus().toggleBulletList().run();\n }\n\n toggleOrderedList(): void {\n this.editor?.chain().focus().toggleOrderedList().run();\n }\n\n toggleBlockquote(): void {\n this.editor?.chain().focus().toggleBlockquote().run();\n }\n\n toggleCode(): void {\n this.editor?.chain().focus().toggleCode().run();\n }\n\n toggleSubscript(): void {\n this.editor?.chain().focus().toggleSubscript().run();\n }\n\n toggleSuperscript(): void {\n this.editor?.chain().focus().toggleSuperscript().run();\n }\n\n setTextAlign(align: 'left' | 'center' | 'right'): void {\n this.editor?.chain().focus().setTextAlign(align).run();\n }\n\n setColor(color: string): void {\n this.editor?.chain().focus().setColor(color).run();\n }\n\n setHighlight(color: string): void {\n this.editor?.chain().focus().setHighlight({ color }).run();\n }\n\n clearFormatting(): void {\n this.editor?.chain().focus().clearNodes().unsetAllMarks().run();\n }\n\n onHeadingChange(event: Event): void {\n const level = parseInt((event.target as HTMLSelectElement).value) as 0 | 1 | 2 | 3;\n if (isNaN(level) || level === 0) {\n this.editor?.chain().focus().setParagraph().run();\n } else {\n this.editor?.chain().focus().setHeading({ level }).run();\n }\n }\n\n setLink(): void {\n const existingUrl = (this.editor?.getAttributes('link')['href'] as string) ?? '';\n const ref = this.dialogService.open(LinkDialogComponent, { size: 'sm' });\n ref.componentInstance.initialUrl = existingUrl;\n ref.closed\n .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n .subscribe((url: string) => {\n if (url === '') {\n this.editor?.chain().focus().extendMarkRange('link').unsetLink().run();\n } else {\n this.editor?.chain().focus().extendMarkRange('link').setLink({ href: url }).run();\n }\n });\n }\n\n setImage(): void {\n this.imageInput().nativeElement.click();\n }\n\n onImageFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n if (!file) return;\n\n const reader = new FileReader();\n reader.onload = (e) => {\n const src = e.target?.result as string;\n this.editor?.chain().focus().setImage({ src }).run();\n input.value = '';\n this.cdr.markForCheck();\n };\n reader.readAsDataURL(file);\n }\n\n undo(): void {\n this.editor?.chain().focus().undo().run();\n }\n\n redo(): void {\n this.editor?.chain().focus().redo().run();\n }\n\n onToolbarKeydown(event: KeyboardEvent): void {\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n event.preventDefault();\n\n const toolbar = event.currentTarget as HTMLElement;\n const focusable = this.getToolbarFocusable(toolbar);\n if (!focusable.length) return;\n\n const currentIndex = focusable.findIndex(el => el === document.activeElement);\n let nextIndex: number;\n\n switch (event.key) {\n case 'ArrowRight': nextIndex = (currentIndex + 1) % focusable.length; break;\n case 'ArrowLeft': nextIndex = (currentIndex - 1 + focusable.length) % focusable.length; break;\n case 'Home': nextIndex = 0; break;\n default: nextIndex = focusable.length - 1; break;\n }\n\n focusable.forEach((el, i) => el.setAttribute('tabindex', i === nextIndex ? '0' : '-1'));\n focusable[nextIndex].focus();\n }\n\n onToolbarFocusIn(event: FocusEvent): void {\n const target = event.target as HTMLElement;\n const toolbar = event.currentTarget as HTMLElement;\n const focusable = this.getToolbarFocusable(toolbar);\n if (focusable.includes(target)) {\n focusable.forEach(el => el.setAttribute('tabindex', el === target ? '0' : '-1'));\n }\n }\n\n private getToolbarFocusable(toolbar: HTMLElement): HTMLElement[] {\n return Array.from(\n toolbar.querySelectorAll<HTMLElement>('button:not([disabled]), select, label[tabindex]'),\n );\n }\n\n private initEditor(): void {\n this.editor = new Editor({\n element: this.editorContainer().nativeElement,\n extensions: [\n StarterKit.configure({\n link: { openOnClick: false },\n underline: false,\n }),\n Underline,\n Image.configure({ allowBase64: true }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n TextStyle,\n Color,\n Highlight.configure({ multicolor: true }),\n Placeholder.configure({ placeholder: () => this._currentPlaceholder }),\n Subscript,\n Superscript,\n ...this.extensions(),\n ],\n content: this._value,\n editable: !this.readonly(),\n editorProps: {\n attributes: {\n role: 'textbox',\n 'aria-multiline': 'true',\n 'aria-label': this.translateService.instant(\n 'platform.angular_components.editor_content_area',\n ),\n },\n },\n onUpdate: ({ editor }) => {\n const html = editor.isEmpty ? '' : editor.getHTML();\n const text = editor.getText();\n this._value = html;\n this._onChange(html);\n this.textChange.emit({ htmlValue: html, textValue: text });\n this.syncActiveStates();\n this.cdr.markForCheck();\n },\n onBlur: () => {\n this._onTouched();\n },\n onSelectionUpdate: ({ editor }) => {\n this.syncActiveStates();\n const { from, to, empty } = editor.state.selection;\n this.selectionChange.emit({ from, to, empty });\n this.cdr.markForCheck();\n },\n });\n\n this.syncActiveStates();\n this.cdr.markForCheck();\n this.editorInit.emit(this.editor);\n }\n\n private syncActiveStates(): void {\n if (!this.editor) return;\n\n const e = this.editor;\n this.activeStates = {\n isBold: e.isActive('bold'),\n isItalic: e.isActive('italic'),\n isUnderline: e.isActive('underline'),\n isStrike: e.isActive('strike'),\n isBulletList: e.isActive('bulletList'),\n isOrderedList: e.isActive('orderedList'),\n isBlockquote: e.isActive('blockquote'),\n isCode: e.isActive('code'),\n isSubscript: e.isActive('subscript'),\n isSuperscript: e.isActive('superscript'),\n isAlignLeft: e.isActive({ textAlign: 'left' }),\n isAlignCenter: e.isActive({ textAlign: 'center' }),\n isAlignRight: e.isActive({ textAlign: 'right' }),\n currentHeading: [1, 2, 3].find((level) => e.isActive('heading', { level })) ?? 0,\n currentColor: (e.getAttributes('textStyle')['color'] as string) || '#000000',\n currentHighlight: (e.getAttributes('highlight')['color'] as string) || 'transparent',\n canUndo: e.can().undo(),\n canRedo: e.can().redo(),\n };\n }\n}\n","<div\n class=\"rounded flex flex-col border transition-[border-color,box-shadow] duration-150 focus-within:outline focus-within:outline-2 focus-within:outline-offset-[-2px] focus-within:outline-[var(--s-focus-ring-color,#0090ff)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n [class.s-editor--disabled]=\"formDisabled\"\n [class.pointer-events-none]=\"formDisabled\"\n [class.border-grayscale-20]=\"formDisabled\"\n [class.bg-grayscale-5]=\"formDisabled\"\n [class.border-grayscale-30]=\"!formDisabled\"\n [class.bg-grayscale-0]=\"!formDisabled\"\n [attr.aria-disabled]=\"formDisabled\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)] disabled:cursor-not-allowed disabled:border-grayscale-20 disabled:bg-grayscale-5 disabled:text-grayscale-30\"\n (change)=\"onHeadingChange($event)\"\n [disabled]=\"formDisabled\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"editor-color-swatch relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n tabindex=\"-1\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentColor\"\n [disabled]=\"formDisabled\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"editor-color-swatch relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n tabindex=\"-1\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n [disabled]=\"formDisabled\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"formDisabled || !activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"formDisabled || !activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fas fa-eraser\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n [disabled]=\"formDisabled\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;MAca,mBAAmB,CAAA;AACX,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACpC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE7D,UAAU,GAAG,EAAE,CAAC;AAEhB,IAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEnD,OAAO,GAAuB,EAAE,CAAC;IAEjC,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG;AACX,YAAA;AACI,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,MAAM,EAAE;AACJ,oBAAA;AACI,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,mDAAmD,CAAC;wBACzF,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACtC,yDAAyD,CAC5D;AACJ,qBAAA;AACJ,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KAC9D;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;KAC/B;wGAnCQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,ECdhC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,mxBAmBA,EDRc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EAAE,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,EAAE,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,MAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,oYAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGvG,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AACM,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,mxBAAA,EAAA,CAAA;;;MEAxG,4BAA4B,CAAA;AACrC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAU,CAAC;AAChC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAU,CAAC;AACjC,IAAA,MAAM,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAC/B,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;IACjC,OAAO,GAAG,MAAM,EAAQ,CAAC;wGALhB,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXzC,82BAmBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDbc,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAKR,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBARxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EACvB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,OAAO,CAAC,EAAA,IAAA,EAEZ,EAAE,KAAK,EAAE,mBAAmB,EAAE,EACnB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,82BAAA,EAAA,CAAA;;;AE6BnD;;;;;;;;;;;;AAYG;MAgBU,eAAe,CAAA;AACP,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAChC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AACtC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAEjD;;;AAGG;AACH,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAEjC;;AAEG;IACH,OAAO,GAAG,KAAK,EAAkB,CAAC;AAElC;;AAEG;IACH,WAAW,GAAG,KAAK,EAAU,CAAC;AAE9B;;AAEG;IACH,KAAK,GAAG,KAAK,EAAgC,CAAC;AAE9C;;AAEG;IACH,UAAU,GAAG,KAAK,EAAU,CAAC;AAE7B;;AAEG;AACH,IAAA,UAAU,GAAG,KAAK,CAAc,EAAE,CAAC,CAAC;AAEpC;;AAEG;IACH,UAAU,GAAG,MAAM,EAAU,CAAC;AAE9B;;AAEG;IACH,UAAU,GAAG,MAAM,EAAyB,CAAC;AAE7C;;AAEG;IACH,eAAe,GAAG,MAAM,EAA8B,CAAC;IAE/C,YAAY,GAAG,KAAK,CAAC;AAErB,IAAA,eAAe,GAAG,SAAS,CAAC,QAAQ,CAA6B,iBAAiB,CAAC,CAAC;AACpF,IAAA,UAAU,GAAG,SAAS,CAAC,QAAQ,CAA+B,YAAY,CAAC,CAAC;AAC5E,IAAA,MAAM,CAAU;IAChB,mBAAmB,GAAG,EAAE,CAAC;AAEjC,IAAA,YAAY,GAAG;AACX,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,cAAc,EAAE,CAAC;AACjB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,gBAAgB,EAAE,aAAa;AAC/B,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,OAAO,EAAE,KAAK;KACjB,CAAC;IAEM,MAAM,GAAG,EAAE,CAAC;AACZ,IAAA,SAAS,GAA4B,MAAK,GAAG,CAAC;AAC9C,IAAA,UAAU,GAAe,MAAK,GAAG,CAAC;AAE1C,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACvE,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;aAC3B;AACL,SAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;KACN;IAED,eAAe,GAAA;QACX,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;KAC1B;AAED,IAAA,UAAU,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AACxG,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SAC3B;KACJ;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACxB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KAC3B;AAED,IAAA,eAAe,CAAC,MAAoB,EAAA;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KACvD;IAED,0BAA0B,GAAA;AACtB,QAAA,MAAM,qBAAqB,GAAmB;YAC1C,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa;AAC7E,YAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO;SACrF,CAAC;AACF,QAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;KACnE;IAED,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC;KACnD;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC;KACrD;IAED,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC;KACxD;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC;KACrD;IAED,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC;KACzD;IAED,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC;KAC1D;IAED,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC;KACzD;IAED,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC;KACnD;IAED,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC;KACxD;IAED,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC;KAC1D;AAED,IAAA,YAAY,CAAC,KAAkC,EAAA;AAC3C,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;KAC1D;AAED,IAAA,QAAQ,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;KACtD;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;KAC9D;IAED,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC;KACnE;AAED,IAAA,eAAe,CAAC,KAAY,EAAA;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAE,KAAK,CAAC,MAA4B,CAAC,KAAK,CAAkB,CAAC;QACnF,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC;SACrD;aAAM;AACH,YAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;SAC5D;KACJ;IAED,OAAO,GAAA;AACH,QAAA,MAAM,WAAW,GAAI,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAY,IAAI,EAAE,CAAC;AACjF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACzE,QAAA,GAAG,CAAC,iBAAiB,CAAC,UAAU,GAAG,WAAW,CAAC;AAC/C,QAAA,GAAG,CAAC,MAAM;AACL,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClD,aAAA,SAAS,CAAC,CAAC,GAAW,KAAI;AACvB,YAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACZ,gBAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC;aAC1E;iBAAM;gBACH,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;aACrF;AACL,SAAC,CAAC,CAAC;KACV;IAED,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KAC3C;AAED,IAAA,mBAAmB,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAElB,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAChC,QAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAI;AAClB,YAAA,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,MAAgB,CAAC;AACvC,YAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AACrD,YAAA,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC5B,SAAC,CAAC;AACF,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;KAC7C;IAED,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;KAC7C;AAED,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO;QAC5E,KAAK,CAAC,cAAc,EAAE,CAAC;AAEvB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAA4B,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO;AAE9B,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC9E,QAAA,IAAI,SAAiB,CAAC;AAEtB,QAAA,QAAQ,KAAK,CAAC,GAAG;AACb,YAAA,KAAK,YAAY;gBAAE,SAAS,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;gBAAC,MAAM;AAC5E,YAAA,KAAK,WAAW;AAAE,gBAAA,SAAS,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC;gBAAC,MAAM;AAC9F,YAAA,KAAK,MAAM;gBAAE,SAAS,GAAG,CAAC,CAAC;gBAAC,MAAM;AAClC,YAAA;AAAS,gBAAA,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBAAC,MAAM;SACpD;AAED,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,KAAK,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACxF,QAAA,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;KAChC;AAED,IAAA,gBAAgB,CAAC,KAAiB,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;AAC3C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,aAA4B,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACpD,QAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC5B,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,KAAK,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;SACpF;KACJ;AAEO,IAAA,mBAAmB,CAAC,OAAoB,EAAA;QAC5C,OAAO,KAAK,CAAC,IAAI,CACb,OAAO,CAAC,gBAAgB,CAAc,iDAAiD,CAAC,CAC3F,CAAC;KACL;IAEO,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;AACrB,YAAA,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,aAAa;AAC7C,YAAA,UAAU,EAAE;gBACR,UAAU,CAAC,SAAS,CAAC;AACjB,oBAAA,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;AAC5B,oBAAA,SAAS,EAAE,KAAK;iBACnB,CAAC;gBACF,SAAS;gBACT,KAAK,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACtC,gBAAA,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;gBACxD,SAAS;gBACT,KAAK;gBACL,SAAS,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACzC,gBAAA,WAAW,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACtE,SAAS;gBACT,WAAW;gBACX,GAAG,IAAI,CAAC,UAAU,EAAE;AACvB,aAAA;YACD,OAAO,EAAE,IAAI,CAAC,MAAM;AACpB,YAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC1B,YAAA,WAAW,EAAE;AACT,gBAAA,UAAU,EAAE;AACR,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,gBAAgB,EAAE,MAAM;oBACxB,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACvC,iDAAiD,CACpD;AACJ,iBAAA;AACJ,aAAA;AACD,YAAA,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;AACrB,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;AACpD,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;aAC3B;YACD,MAAM,EAAE,MAAK;gBACT,IAAI,CAAC,UAAU,EAAE,CAAC;aACrB;AACD,YAAA,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;gBAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,gBAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;AACnD,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;aAC3B;AACJ,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACrC;IAEO,gBAAgB,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AAEzB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG;AAChB,YAAA,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1B,YAAA,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC9B,YAAA,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;AACpC,YAAA,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC9B,YAAA,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;AACtC,YAAA,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;AACxC,YAAA,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;AACtC,YAAA,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1B,YAAA,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;AACpC,YAAA,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;YAC9C,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;YAClD,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChD,YAAA,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;YAChF,YAAY,EAAG,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,CAAY,IAAI,SAAS;YAC5E,gBAAgB,EAAG,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,CAAY,IAAI,aAAa;AACpF,YAAA,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE;AACvB,YAAA,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE;SAC1B,CAAC;KACL;wGA5WQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EARb,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC;AAC9C,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;SACJ,EChEL,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,kndA+SA,8zFDzPc,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAE,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,4FAAE,4BAA4B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAYhE,eAAe,EAAA,UAAA,EAAA,CAAA;kBAf3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,cACR,IAAI,EAAA,OAAA,EACP,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC,EAAA,eAAA,EAGzD,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,qBAAqB,CAAC;AAC9C,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA,EAAA,QAAA,EAAA,kndAAA,EAAA,MAAA,EAAA,CAAA,swFAAA,CAAA,EAAA,CAAA;;;AEhEL;;AAEG;;;;"}
1
+ {"version":3,"file":"seniorsistemas-angular-components-editor.mjs","sources":["../../projects/angular-components/editor/src/lib/editor/link-dialog/link-dialog.component.ts","../../projects/angular-components/editor/src/lib/editor/link-dialog/link-dialog.component.html","../../projects/angular-components/editor/src/lib/editor/toolbar-button/editor-toolbar-button.component.ts","../../projects/angular-components/editor/src/lib/editor/toolbar-button/editor-toolbar-button.component.html","../../projects/angular-components/editor/src/lib/editor/editor.component.ts","../../projects/angular-components/editor/src/lib/editor/editor.component.html","../../projects/angular-components/editor/src/seniorsistemas-angular-components-editor.ts"],"sourcesContent":["import { Component, inject, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\nimport { ActiveDialog, DialogComponent } from '@seniorsistemas/angular-components/dialog';\nimport { DynamicFormModule, DynamicStructure } from '@seniorsistemas/angular-components/dynamic-form';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\n@Component({\n standalone: true,\n imports: [ReactiveFormsModule, TranslateModule, DialogComponent, DynamicFormModule, ButtonModule, TemplateModule],\n templateUrl: './link-dialog.component.html',\n})\nexport class LinkDialogComponent implements OnInit {\n private readonly activeDialog = inject(ActiveDialog);\n private readonly translateService = inject(TranslateService);\n\n initialUrl = '';\n\n form = new FormGroup({ url: new FormControl('') });\n\n configs: DynamicStructure[] = [];\n\n ngOnInit(): void {\n this.form.setValue({ url: this.initialUrl });\n this.configs = [\n {\n type: 'row',\n fields: [\n {\n type: 'string',\n name: 'url',\n label: this.translateService.instant('platform.angular_components.editor_link_url_label'),\n placeholder: this.translateService.instant(\n 'platform.angular_components.editor_link_url_placeholder',\n ),\n },\n ],\n },\n ];\n }\n\n confirm(): void {\n this.activeDialog.close(this.form.value.url?.trim() ?? '');\n }\n\n cancel(): void {\n this.activeDialog.dismiss();\n }\n}\n\n","<s-dialog [header]=\"'platform.angular_components.editor_insert_link' | translate\">\n <ng-template sTemplate=\"body\">\n <s-dynamic-form [form]=\"form\" [configs]=\"configs\" />\n </ng-template>\n <ng-template sTemplate=\"footer\">\n <div style=\"display:flex; justify-content:flex-end; gap:8px; width:100%\">\n <s-button\n [label]=\"'platform.angular_components.cancel' | translate\"\n priority=\"secondary\"\n (clicked)=\"cancel()\"\n />\n <s-button\n [label]=\"'platform.angular_components.editor_confirm' | translate\"\n priority=\"primary\"\n (clicked)=\"confirm()\"\n />\n </div>\n </ng-template>\n</s-dialog>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n@Component({\n selector: 's-editor-toolbar-button',\n standalone: true,\n imports: [NgClass],\n templateUrl: './editor-toolbar-button.component.html',\n host: { style: 'display: contents' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EditorToolbarButtonComponent {\n icon = input.required<string>();\n label = input.required<string>();\n active = input<boolean>(false);\n disabled = input<boolean>(false);\n clicked = output<void>();\n}\n\n","<button\n type=\"button\"\n class=\"inline-flex items-center justify-center w-7 h-7 p-0 border-0 bg-transparent rounded cursor-pointer text-base leading-none transition-colors duration-150 disabled:opacity-[.35] disabled:cursor-not-allowed focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n [ngClass]=\"{\n 'bg-[#ebebfa]': active(),\n 'text-[#5c5ce6]': active(),\n 'hover:bg-[#ddddf7]': active(),\n 'text-[#3d3d4d]': !active(),\n 'enabled:hover:bg-[#e8e8f0]': !active(),\n 'enabled:hover:text-[#1e1e2e]': !active()\n }\"\n [disabled]=\"disabled()\"\n [title]=\"label()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-pressed]=\"active()\"\n (click)=\"clicked.emit()\"\n>\n <i [class]=\"icon()\"></i>\n</button>\n","import { NgClass, NgStyle } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n effect,\n forwardRef,\n inject,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { take } from 'rxjs/operators';\n\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { DialogService } from '@seniorsistemas/angular-components/dialog';\nimport { Editor } from '@tiptap/core';\nimport { Color } from '@tiptap/extension-color';\nimport Highlight from '@tiptap/extension-highlight';\nimport Image from '@tiptap/extension-image';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Subscript from '@tiptap/extension-subscript';\nimport Superscript from '@tiptap/extension-superscript';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { TextStyle } from '@tiptap/extension-text-style';\nimport Underline from '@tiptap/extension-underline';\nimport StarterKit from '@tiptap/starter-kit';\n\nimport { LinkDialogComponent } from './link-dialog/link-dialog.component';\nimport { EditorFormat, EditorSelectionChangeEvent, EditorTextChangeEvent, Extension } from './models';\nimport { EditorToolbarButtonComponent } from './toolbar-button/editor-toolbar-button.component';\n\n/**\n * @description Componente de editor de texto rico (WYSIWYG) construído sobre o Tiptap/ProseMirror.\n * Substitui o `p-editor` do PrimeNG sem dependência externa de licença comercial.\n * Implementa {@link ControlValueAccessor} para integração com Angular Forms.\n *\n * @example\n * ```html\n * <s-editor\n * formControlName=\"descricao\"\n * [readonly]=\"false\"\n * (textChange)=\"onTextChange($event)\" />\n * ```\n */\n@Component({\n selector: 's-editor',\n standalone: true,\n imports: [NgClass, NgStyle, TranslateModule, EditorToolbarButtonComponent],\n templateUrl: './editor.component.html',\n styleUrls: ['./editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EditorComponent),\n multi: true,\n },\n ],\n})\nexport class EditorComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly dialogService = inject(DialogService);\n private readonly translateService = inject(TranslateService);\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * @description Coloca o editor em modo somente leitura.\n * @default false\n */\n readonly = input<boolean>(false);\n\n /**\n * @description Lista de formatos habilitados na toolbar. Quando vazio, todos os formatos são exibidos.\n */\n formats = input<EditorFormat[]>();\n\n /**\n * @description Texto de dica exibido quando o editor está vazio.\n */\n placeholder = input<string>();\n\n /**\n * @description Estilos inline aplicados ao container do editor.\n */\n style = input<{ [klass: string]: unknown }>();\n\n /**\n * @description Classes CSS adicionais aplicadas ao container do editor.\n */\n styleClass = input<string>();\n\n /**\n * @description Extensões Tiptap adicionais para estender o comportamento padrão do editor.\n */\n extensions = input<Extension[]>([]);\n\n /**\n * @description Emitido quando o editor é inicializado e está pronto para uso.\n */\n editorInit = output<Editor>();\n\n /**\n * @description Emitido sempre que o conteúdo do editor é alterado.\n */\n textChange = output<EditorTextChangeEvent>();\n\n /**\n * @description Emitido quando a seleção de texto no editor muda.\n */\n selectionChange = output<EditorSelectionChangeEvent>();\n\n protected formDisabled = false;\n\n private editorContainer = viewChild.required<ElementRef<HTMLDivElement>>('editorContainer');\n private imageInput = viewChild.required<ElementRef<HTMLInputElement>>('imageInput');\n private editor?: Editor;\n private _currentPlaceholder = '';\n\n activeStates = {\n isBold: false,\n isItalic: false,\n isUnderline: false,\n isStrike: false,\n isBulletList: false,\n isOrderedList: false,\n isBlockquote: false,\n isCode: false,\n isSubscript: false,\n isSuperscript: false,\n isAlignLeft: false,\n isAlignCenter: false,\n isAlignRight: false,\n currentHeading: 0,\n currentColor: '#000000',\n currentHighlight: 'transparent',\n canUndo: false,\n canRedo: false,\n };\n\n private _value = '';\n private _onChange: (value: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n constructor() {\n effect(() => {\n if (this.editor) {\n this.editor.setEditable(!this.readonly() && !this.formDisabled, false);\n this.cdr.markForCheck();\n }\n });\n\n effect(() => {\n this._currentPlaceholder = this.placeholder() ?? '';\n this.editor?.view.dispatch(this.editor.state.tr);\n });\n }\n\n ngAfterViewInit(): void {\n this.initEditor();\n }\n\n ngOnDestroy(): void {\n this.editor?.destroy();\n }\n\n writeValue(value: string): void {\n this._value = value ?? '';\n if (this.editor) {\n this.editor.chain().setMeta('addToHistory', false).setContent(this._value, { emitUpdate: false }).run();\n this.cdr.markForCheck();\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled = isDisabled;\n this.editor?.setEditable(!isDisabled && !this.readonly(), false);\n this.cdr.markForCheck();\n }\n\n isFormatAllowed(format: EditorFormat): boolean {\n const formats = this.formats();\n return !formats?.length || formats.includes(format);\n }\n\n hasAnyFormatBeforeUndoRedo(): boolean {\n const formatsBeforeUndoRedo: EditorFormat[] = [\n 'header', 'bold', 'italic', 'underline', 'strike', 'subscript', 'superscript',\n 'color', 'highlight', 'list', 'align', 'blockquote', 'code-block', 'link', 'image',\n ];\n return formatsBeforeUndoRedo.some(f => this.isFormatAllowed(f));\n }\n\n toggleBold(): void {\n this.editor?.chain().focus().toggleBold().run();\n }\n\n toggleItalic(): void {\n this.editor?.chain().focus().toggleItalic().run();\n }\n\n toggleUnderline(): void {\n this.editor?.chain().focus().toggleUnderline().run();\n }\n\n toggleStrike(): void {\n this.editor?.chain().focus().toggleStrike().run();\n }\n\n toggleBulletList(): void {\n this.editor?.chain().focus().toggleBulletList().run();\n }\n\n toggleOrderedList(): void {\n this.editor?.chain().focus().toggleOrderedList().run();\n }\n\n toggleBlockquote(): void {\n this.editor?.chain().focus().toggleBlockquote().run();\n }\n\n toggleCode(): void {\n this.editor?.chain().focus().toggleCode().run();\n }\n\n toggleSubscript(): void {\n this.editor?.chain().focus().toggleSubscript().run();\n }\n\n toggleSuperscript(): void {\n this.editor?.chain().focus().toggleSuperscript().run();\n }\n\n setTextAlign(align: 'left' | 'center' | 'right'): void {\n this.editor?.chain().focus().setTextAlign(align).run();\n }\n\n setColor(color: string): void {\n this.editor?.chain().focus().setColor(color).run();\n }\n\n setHighlight(color: string): void {\n this.editor?.chain().focus().setHighlight({ color }).run();\n }\n\n clearFormatting(): void {\n this.editor?.chain().focus().clearNodes().unsetAllMarks().run();\n }\n\n onHeadingChange(event: Event): void {\n const level = parseInt((event.target as HTMLSelectElement).value) as 0 | 1 | 2 | 3;\n if (isNaN(level) || level === 0) {\n this.editor?.chain().focus().setParagraph().run();\n } else {\n this.editor?.chain().focus().setHeading({ level }).run();\n }\n }\n\n setLink(): void {\n const existingUrl = (this.editor?.getAttributes('link')['href'] as string) ?? '';\n const ref = this.dialogService.open(LinkDialogComponent, { size: 'sm' });\n ref.componentInstance.initialUrl = existingUrl;\n ref.closed\n .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n .subscribe((url: string) => {\n if (url === '') {\n this.editor?.chain().focus().extendMarkRange('link').unsetLink().run();\n } else {\n this.editor?.chain().focus().extendMarkRange('link').setLink({ href: url }).run();\n }\n });\n }\n\n setImage(): void {\n this.imageInput().nativeElement.click();\n }\n\n onImageFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n if (!file) return;\n\n const reader = new FileReader();\n reader.onload = (e) => {\n const src = e.target?.result as string;\n this.editor?.chain().focus().setImage({ src }).run();\n input.value = '';\n this.cdr.markForCheck();\n };\n reader.readAsDataURL(file);\n }\n\n undo(): void {\n this.editor?.chain().focus().undo().run();\n }\n\n redo(): void {\n this.editor?.chain().focus().redo().run();\n }\n\n onToolbarKeydown(event: KeyboardEvent): void {\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n event.preventDefault();\n\n const toolbar = event.currentTarget as HTMLElement;\n const focusable = this.getToolbarFocusable(toolbar);\n if (!focusable.length) return;\n\n const currentIndex = focusable.findIndex(el => el === document.activeElement);\n let nextIndex: number;\n\n switch (event.key) {\n case 'ArrowRight': nextIndex = (currentIndex + 1) % focusable.length; break;\n case 'ArrowLeft': nextIndex = (currentIndex - 1 + focusable.length) % focusable.length; break;\n case 'Home': nextIndex = 0; break;\n default: nextIndex = focusable.length - 1; break;\n }\n\n focusable.forEach((el, i) => el.setAttribute('tabindex', i === nextIndex ? '0' : '-1'));\n focusable[nextIndex].focus();\n }\n\n onToolbarFocusIn(event: FocusEvent): void {\n const target = event.target as HTMLElement;\n const toolbar = event.currentTarget as HTMLElement;\n const focusable = this.getToolbarFocusable(toolbar);\n if (focusable.includes(target)) {\n focusable.forEach(el => el.setAttribute('tabindex', el === target ? '0' : '-1'));\n }\n }\n\n private getToolbarFocusable(toolbar: HTMLElement): HTMLElement[] {\n return Array.from(\n toolbar.querySelectorAll<HTMLElement>('button:not([disabled]), select, label[tabindex]'),\n );\n }\n\n private initEditor(): void {\n this.editor = new Editor({\n element: this.editorContainer().nativeElement,\n extensions: [\n StarterKit.configure({\n link: { openOnClick: false },\n underline: false,\n }),\n Underline,\n Image.configure({ allowBase64: true }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n TextStyle,\n Color,\n Highlight.configure({ multicolor: true }),\n Placeholder.configure({ placeholder: () => this._currentPlaceholder }),\n Subscript,\n Superscript,\n ...this.extensions(),\n ],\n content: this._value,\n editable: !this.readonly(),\n editorProps: {\n attributes: {\n role: 'textbox',\n 'aria-multiline': 'true',\n 'aria-label': this.translateService.instant(\n 'platform.angular_components.editor_content_area',\n ),\n },\n },\n onUpdate: ({ editor }) => {\n const html = editor.isEmpty ? '' : editor.getHTML();\n const text = editor.getText();\n this._value = html;\n this._onChange(html);\n this.textChange.emit({ htmlValue: html, textValue: text });\n this.syncActiveStates();\n this.cdr.markForCheck();\n },\n onBlur: () => {\n this._onTouched();\n },\n onSelectionUpdate: ({ editor }) => {\n this.syncActiveStates();\n const { from, to, empty } = editor.state.selection;\n this.selectionChange.emit({ from, to, empty });\n this.cdr.markForCheck();\n },\n });\n\n this.syncActiveStates();\n this.cdr.markForCheck();\n this.editorInit.emit(this.editor);\n }\n\n private syncActiveStates(): void {\n if (!this.editor) return;\n\n const e = this.editor;\n this.activeStates = {\n isBold: e.isActive('bold'),\n isItalic: e.isActive('italic'),\n isUnderline: e.isActive('underline'),\n isStrike: e.isActive('strike'),\n isBulletList: e.isActive('bulletList'),\n isOrderedList: e.isActive('orderedList'),\n isBlockquote: e.isActive('blockquote'),\n isCode: e.isActive('code'),\n isSubscript: e.isActive('subscript'),\n isSuperscript: e.isActive('superscript'),\n isAlignLeft: e.isActive({ textAlign: 'left' }),\n isAlignCenter: e.isActive({ textAlign: 'center' }),\n isAlignRight: e.isActive({ textAlign: 'right' }),\n currentHeading: [1, 2, 3].find((level) => e.isActive('heading', { level })) ?? 0,\n currentColor: (e.getAttributes('textStyle')['color'] as string) || '#000000',\n currentHighlight: (e.getAttributes('highlight')['color'] as string) || 'transparent',\n canUndo: e.can().undo(),\n canRedo: e.can().redo(),\n };\n }\n}\n","<div\n class=\"rounded flex flex-col border transition-[border-color,box-shadow] duration-150 focus-within:outline focus-within:outline-2 focus-within:outline-offset-[-2px] focus-within:outline-[var(--s-focus-ring-color,#0090ff)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n [class.s-editor--disabled]=\"formDisabled\"\n [class.pointer-events-none]=\"formDisabled\"\n [class.border-grayscale-20]=\"formDisabled\"\n [class.bg-grayscale-5]=\"formDisabled\"\n [class.border-grayscale-30]=\"!formDisabled\"\n [class.bg-grayscale-0]=\"!formDisabled\"\n [attr.aria-disabled]=\"formDisabled\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)] disabled:cursor-not-allowed disabled:border-grayscale-20 disabled:bg-grayscale-5 disabled:text-grayscale-30\"\n (change)=\"onHeadingChange($event)\"\n [disabled]=\"formDisabled\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"editor-color-swatch relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n tabindex=\"-1\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentColor\"\n [disabled]=\"formDisabled\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"editor-color-swatch relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n tabindex=\"-1\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n [disabled]=\"formDisabled\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"formDisabled || !activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"formDisabled || !activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fas fa-eraser\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n [disabled]=\"formDisabled\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -80,7 +80,7 @@ class EmptyStateComponent {
80
80
  */
81
81
  secondaryAction = new EventEmitter();
82
82
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
83
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: EmptyStateComponent, isStandalone: true, selector: "s-empty-state", inputs: { id: "id", title: "title", iconClass: "iconClass", description: "description", showPrimaryAction: "showPrimaryAction", showSecondaryAction: "showSecondaryAction", primaryActionLabel: "primaryActionLabel", secondaryActionLabel: "secondaryActionLabel", primaryModel: "primaryModel" }, outputs: { primaryAction: "primaryAction", secondaryAction: "secondaryAction" }, ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"w-full text-center\"\n>\n <div\n [id]=\"id + '-icon'\"\n class=\"text-[#d8d8d8] text-[6em]\"\n >\n <i\n [attr.class]=\"iconClass ? iconClass : 'fa fa-cogs'\"\n aria-hidden=\"true\"\n ></i>\n </div>\n <div\n [id]=\"id + '-title'\"\n class=\"font-bold mb-[10px]\"\n >\n {{ title }}\n </div>\n\n @if (description) {\n <div\n [id]=\"id + '-description'\"\n class=\"mb-[15px] text-[#999999] px-5 text-center\"\n >\n <p class=\"mx-auto max-w-[400px] max-h-[80px] overflow-hidden\">{{ description }}</p>\n </div>\n }\n @if (showPrimaryAction && primaryActionLabel) {\n <div\n [id]=\"id + '-actions'\"\n class=\"text-center w-full\"\n >\n <s-button\n [id]=\"id + '-primary-action'\"\n type=\"button\"\n [label]=\"primaryActionLabel\"\n [menuOptions]=\"primaryModel\"\n (clicked)=\"primaryAction.next()\"\n ></s-button>\n @if (showSecondaryAction && secondaryActionLabel) {\n <s-button\n [id]=\"id + '-secondary-action'\"\n id=\"secondaryAction\"\n type=\"button\"\n [label]=\"secondaryActionLabel\"\n priority=\"link\"\n (clicked)=\"secondaryAction.next()\"\n ></s-button>\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked"] }] });
83
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: EmptyStateComponent, isStandalone: true, selector: "s-empty-state", inputs: { id: "id", title: "title", iconClass: "iconClass", description: "description", showPrimaryAction: "showPrimaryAction", showSecondaryAction: "showSecondaryAction", primaryActionLabel: "primaryActionLabel", secondaryActionLabel: "secondaryActionLabel", primaryModel: "primaryModel" }, outputs: { primaryAction: "primaryAction", secondaryAction: "secondaryAction" }, ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"w-full text-center\"\n>\n <div\n [id]=\"id + '-icon'\"\n class=\"text-[#d8d8d8] text-[6em]\"\n >\n <i\n [attr.class]=\"iconClass ? iconClass : 'fa fa-cogs'\"\n aria-hidden=\"true\"\n ></i>\n </div>\n <div\n [id]=\"id + '-title'\"\n class=\"font-bold mb-[10px]\"\n >\n {{ title }}\n </div>\n\n @if (description) {\n <div\n [id]=\"id + '-description'\"\n class=\"mb-[15px] text-[#999999] px-5 text-center\"\n >\n <p class=\"mx-auto max-w-[400px] max-h-[80px] overflow-hidden\">{{ description }}</p>\n </div>\n }\n @if (showPrimaryAction && primaryActionLabel) {\n <div\n [id]=\"id + '-actions'\"\n class=\"text-center w-full\"\n >\n <s-button\n [id]=\"id + '-primary-action'\"\n type=\"button\"\n [label]=\"primaryActionLabel\"\n [menuOptions]=\"primaryModel\"\n (clicked)=\"primaryAction.next()\"\n ></s-button>\n @if (showSecondaryAction && secondaryActionLabel) {\n <s-button\n [id]=\"id + '-secondary-action'\"\n id=\"secondaryAction\"\n type=\"button\"\n [label]=\"secondaryActionLabel\"\n priority=\"link\"\n (clicked)=\"secondaryAction.next()\"\n ></s-button>\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked", "tieredMenuOpened", "tieredMenuClosed"] }] });
84
84
  }
85
85
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyStateComponent, decorators: [{
86
86
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-empty-state.mjs","sources":["../../projects/angular-components/empty-state/src/lib/empty-state/empty-state.component.ts","../../projects/angular-components/empty-state/src/lib/empty-state/empty-state.component.html","../../projects/angular-components/empty-state/src/lib/empty-state/go-back/go-back.component.ts","../../projects/angular-components/empty-state/src/lib/empty-state/go-back/go-back.component.html","../../projects/angular-components/empty-state/src/lib/empty-state/empty-state.module.ts","../../projects/angular-components/empty-state/src/seniorsistemas-angular-components-empty-state.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { TieredMenuItemData } from '@seniorsistemas/angular-components/tiered-menu';\r\nimport { ButtonComponent } from '@seniorsistemas/angular-components/button';\r\n\r\n/**\r\n * @description Componente de estado vazio exibido quando não há conteúdo para mostrar.\r\n * Apresenta um ícone, título, descrição e até duas ações configuráveis\r\n * (primária com suporte a tiered menu e secundária simples).\r\n *\r\n * @example\r\n * ```html\r\n * <s-empty-state\r\n * title=\"Nenhum resultado encontrado\"\r\n * description=\"Tente ajustar os filtros da busca.\"\r\n * primaryActionLabel=\"Criar novo\"\r\n * (primaryAction)=\"onCreate()\"\r\n * />\r\n * ```\r\n *\r\n * @category Feedback\r\n */\r\n@Component({\r\n selector: 's-empty-state',\r\n templateUrl: './empty-state.component.html',\r\n standalone: true,\r\n imports: [ButtonComponent],\r\n})\r\nexport class EmptyStateComponent {\r\n public static readonly nextIdSeed = 0;\r\n private static _nextId = EmptyStateComponent.nextIdSeed;\r\n\r\n public static getNextId(): number {\r\n return this._nextId++;\r\n }\r\n\r\n /**\r\n * @description Identificador único do componente. Gerado automaticamente se não informado.\r\n */\r\n @Input()\r\n public id = `s-empty-state-${EmptyStateComponent.getNextId()}`;\r\n\r\n /**\r\n * @description Título principal exibido no estado vazio. Campo obrigatório.\r\n */\r\n @Input({ required: true })\r\n public title!: string;\r\n\r\n /**\r\n * @description Classe CSS do ícone exibido no estado vazio.\r\n * Aceita classes de bibliotecas de ícones como Font Awesome.\r\n *\r\n * @default 'fa fa-inbox'\r\n */\r\n @Input()\r\n public iconClass = 'fa fa-inbox';\r\n\r\n /**\r\n * @description Texto descritivo exibido abaixo do título, explicando o motivo do estado vazio\r\n * ou orientando o usuário sobre as próximas ações.\r\n */\r\n @Input()\r\n public description?: string;\r\n\r\n /**\r\n * @description Controla a visibilidade do botão de ação primária.\r\n *\r\n * @default true\r\n */\r\n @Input()\r\n public showPrimaryAction = true;\r\n\r\n /**\r\n * @description Controla a visibilidade do botão de ação secundária.\r\n *\r\n * @default true\r\n */\r\n @Input()\r\n public showSecondaryAction = true;\r\n\r\n /**\r\n * @description Texto do botão de ação primária.\r\n * Quando `primaryModel` possui itens, o botão exibe um tiered menu ao clicar.\r\n */\r\n @Input()\r\n public primaryActionLabel?: string;\r\n\r\n /** @description Texto do botão de ação secundária. */\r\n @Input()\r\n public secondaryActionLabel?: string;\r\n\r\n /**\r\n * @description Lista de itens para o tiered menu da ação primária.\r\n * Quando informado com itens, o botão primário exibe um menu de opções\r\n * ao invés de emitir o evento `primaryAction` diretamente.\r\n */\r\n @Input()\r\n public primaryModel: TieredMenuItemData[] = [];\r\n\r\n /**\r\n * @description Emitido quando o usuário clica no botão de ação primária e `primaryModel` está vazio.\r\n */\r\n @Output()\r\n public primaryAction = new EventEmitter<void>();\r\n\r\n /**\r\n * @description Emitido quando o usuário clica no botão de ação secundária.\r\n */\r\n @Output()\r\n public secondaryAction = new EventEmitter<void>();\r\n}\r\n","<div\n [id]=\"id\"\n class=\"w-full text-center\"\n>\n <div\n [id]=\"id + '-icon'\"\n class=\"text-[#d8d8d8] text-[6em]\"\n >\n <i\n [attr.class]=\"iconClass ? iconClass : 'fa fa-cogs'\"\n aria-hidden=\"true\"\n ></i>\n </div>\n <div\n [id]=\"id + '-title'\"\n class=\"font-bold mb-[10px]\"\n >\n {{ title }}\n </div>\n\n @if (description) {\n <div\n [id]=\"id + '-description'\"\n class=\"mb-[15px] text-[#999999] px-5 text-center\"\n >\n <p class=\"mx-auto max-w-[400px] max-h-[80px] overflow-hidden\">{{ description }}</p>\n </div>\n }\n @if (showPrimaryAction && primaryActionLabel) {\n <div\n [id]=\"id + '-actions'\"\n class=\"text-center w-full\"\n >\n <s-button\n [id]=\"id + '-primary-action'\"\n type=\"button\"\n [label]=\"primaryActionLabel\"\n [menuOptions]=\"primaryModel\"\n (clicked)=\"primaryAction.next()\"\n ></s-button>\n @if (showSecondaryAction && secondaryActionLabel) {\n <s-button\n [id]=\"id + '-secondary-action'\"\n id=\"secondaryAction\"\n type=\"button\"\n [label]=\"secondaryActionLabel\"\n priority=\"link\"\n (clicked)=\"secondaryAction.next()\"\n ></s-button>\n }\n </div>\n }\n</div>\n","import { Component, Input, inject } from '@angular/core';\r\n\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { EmptyStateComponent } from '../empty-state.component';\r\n\r\n@Component({\r\n selector: 's-empty-state-go-back',\r\n templateUrl: './go-back.component.html',\r\n styleUrls: [],\r\n standalone: true,\r\n imports: [EmptyStateComponent],\r\n})\r\nexport class EmptyStateGoBackComponent {\r\n private readonly _cookieService = inject(CookieService);\r\n\r\n @Input()\r\n public iconClass = 'fa fa-exclamation-triangle';\r\n\r\n @Input({ required: true })\r\n public title!: string;\r\n\r\n @Input()\r\n public description?: string;\r\n\r\n @Input()\r\n public primaryActionLabel?: string;\r\n\r\n public goBack() {\r\n const portalUrl = this._cookieService.get('com.senior.portal.url');\r\n window.open(portalUrl, '_top');\r\n }\r\n}\r\n","<s-empty-state \n [iconClass]=\"iconClass\" \n [title]=\"title\" \n [description]=\"description\" \n (primaryAction)=\"goBack()\"\n [primaryActionLabel]=\"primaryActionLabel\">\n</s-empty-state>","import { NgModule } from '@angular/core';\r\n\r\nimport { CookieService } from 'ngx-cookie-service';\r\n\r\nimport { EmptyStateComponent } from './empty-state.component';\r\nimport { EmptyStateGoBackComponent } from './go-back/go-back.component';\r\n\r\n@NgModule({\r\n imports: [EmptyStateComponent, EmptyStateGoBackComponent],\r\n providers: [CookieService],\r\n exports: [EmptyStateComponent, EmptyStateGoBackComponent],\r\n})\r\nexport class EmptyStateModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAIA;;;;;;;;;;;;;;;;AAgBG;MAOU,mBAAmB,CAAA;AACrB,IAAA,OAAgB,UAAU,GAAG,CAAC,CAAC;AAC9B,IAAA,OAAO,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC;AAEjD,IAAA,OAAO,SAAS,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;KACzB;AAED;;AAEG;AAEI,IAAA,EAAE,GAAG,CAAiB,cAAA,EAAA,mBAAmB,CAAC,SAAS,EAAE,EAAE,CAAC;AAE/D;;AAEG;AAEI,IAAA,KAAK,CAAU;AAEtB;;;;;AAKG;IAEI,SAAS,GAAG,aAAa,CAAC;AAEjC;;;AAGG;AAEI,IAAA,WAAW,CAAU;AAE5B;;;;AAIG;IAEI,iBAAiB,GAAG,IAAI,CAAC;AAEhC;;;;AAIG;IAEI,mBAAmB,GAAG,IAAI,CAAC;AAElC;;;AAGG;AAEI,IAAA,kBAAkB,CAAU;;AAI5B,IAAA,oBAAoB,CAAU;AAErC;;;;AAIG;IAEI,YAAY,GAAyB,EAAE,CAAC;AAE/C;;AAEG;AAEI,IAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEhD;;AAEG;AAEI,IAAA,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;wGAjFzC,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BhC,qjDAqDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5Bc,eAAe,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEhB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAEb,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,eAAe,CAAC,EAAA,QAAA,EAAA,qjDAAA,EAAA,CAAA;8BAcnB,EAAE,EAAA,CAAA;sBADR,KAAK;gBAOC,KAAK,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAUlB,SAAS,EAAA,CAAA;sBADf,KAAK;gBAQC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBASC,iBAAiB,EAAA,CAAA;sBADvB,KAAK;gBASC,mBAAmB,EAAA,CAAA;sBADzB,KAAK;gBAQC,kBAAkB,EAAA,CAAA;sBADxB,KAAK;gBAKC,oBAAoB,EAAA,CAAA;sBAD1B,KAAK;gBASC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAOC,aAAa,EAAA,CAAA;sBADnB,MAAM;gBAOA,eAAe,EAAA,CAAA;sBADrB,MAAM;;;ME/FE,yBAAyB,CAAA;AACjB,IAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAGjD,SAAS,GAAG,4BAA4B,CAAC;AAGzC,IAAA,KAAK,CAAU;AAGf,IAAA,WAAW,CAAU;AAGrB,IAAA,kBAAkB,CAAU;IAE5B,MAAM,GAAA;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AACnE,QAAA,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;KAClC;wGAlBQ,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZtC,mNAMgB,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIF,mBAAmB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEpB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAGrB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,mBAAmB,CAAC,EAAA,QAAA,EAAA,mNAAA,EAAA,CAAA;8BAMvB,SAAS,EAAA,CAAA;sBADf,KAAK;gBAIC,KAAK,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAIlB,WAAW,EAAA,CAAA;sBADjB,KAAK;gBAIC,kBAAkB,EAAA,CAAA;sBADxB,KAAK;;;MEZG,gBAAgB,CAAA;wGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAJf,mBAAmB,EAAE,yBAAyB,CAE9C,EAAA,OAAA,EAAA,CAAA,mBAAmB,EAAE,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAE/C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,aAHd,CAAC,aAAa,CAAC,EADhB,OAAA,EAAA,CAAA,mBAAmB,EAAE,yBAAyB,CAAA,EAAA,CAAA,CAAA;;4FAI/C,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;oBACzD,SAAS,EAAE,CAAC,aAAa,CAAC;AAC1B,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;AAC5D,iBAAA,CAAA;;;ACXD;;AAEG;;;;"}
1
+ {"version":3,"file":"seniorsistemas-angular-components-empty-state.mjs","sources":["../../projects/angular-components/empty-state/src/lib/empty-state/empty-state.component.ts","../../projects/angular-components/empty-state/src/lib/empty-state/empty-state.component.html","../../projects/angular-components/empty-state/src/lib/empty-state/go-back/go-back.component.ts","../../projects/angular-components/empty-state/src/lib/empty-state/go-back/go-back.component.html","../../projects/angular-components/empty-state/src/lib/empty-state/empty-state.module.ts","../../projects/angular-components/empty-state/src/seniorsistemas-angular-components-empty-state.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { TieredMenuItemData } from '@seniorsistemas/angular-components/tiered-menu';\r\nimport { ButtonComponent } from '@seniorsistemas/angular-components/button';\r\n\r\n/**\r\n * @description Componente de estado vazio exibido quando não há conteúdo para mostrar.\r\n * Apresenta um ícone, título, descrição e até duas ações configuráveis\r\n * (primária com suporte a tiered menu e secundária simples).\r\n *\r\n * @example\r\n * ```html\r\n * <s-empty-state\r\n * title=\"Nenhum resultado encontrado\"\r\n * description=\"Tente ajustar os filtros da busca.\"\r\n * primaryActionLabel=\"Criar novo\"\r\n * (primaryAction)=\"onCreate()\"\r\n * />\r\n * ```\r\n *\r\n * @category Feedback\r\n */\r\n@Component({\r\n selector: 's-empty-state',\r\n templateUrl: './empty-state.component.html',\r\n standalone: true,\r\n imports: [ButtonComponent],\r\n})\r\nexport class EmptyStateComponent {\r\n public static readonly nextIdSeed = 0;\r\n private static _nextId = EmptyStateComponent.nextIdSeed;\r\n\r\n public static getNextId(): number {\r\n return this._nextId++;\r\n }\r\n\r\n /**\r\n * @description Identificador único do componente. Gerado automaticamente se não informado.\r\n */\r\n @Input()\r\n public id = `s-empty-state-${EmptyStateComponent.getNextId()}`;\r\n\r\n /**\r\n * @description Título principal exibido no estado vazio. Campo obrigatório.\r\n */\r\n @Input({ required: true })\r\n public title!: string;\r\n\r\n /**\r\n * @description Classe CSS do ícone exibido no estado vazio.\r\n * Aceita classes de bibliotecas de ícones como Font Awesome.\r\n *\r\n * @default 'fa fa-inbox'\r\n */\r\n @Input()\r\n public iconClass = 'fa fa-inbox';\r\n\r\n /**\r\n * @description Texto descritivo exibido abaixo do título, explicando o motivo do estado vazio\r\n * ou orientando o usuário sobre as próximas ações.\r\n */\r\n @Input()\r\n public description?: string;\r\n\r\n /**\r\n * @description Controla a visibilidade do botão de ação primária.\r\n *\r\n * @default true\r\n */\r\n @Input()\r\n public showPrimaryAction = true;\r\n\r\n /**\r\n * @description Controla a visibilidade do botão de ação secundária.\r\n *\r\n * @default true\r\n */\r\n @Input()\r\n public showSecondaryAction = true;\r\n\r\n /**\r\n * @description Texto do botão de ação primária.\r\n * Quando `primaryModel` possui itens, o botão exibe um tiered menu ao clicar.\r\n */\r\n @Input()\r\n public primaryActionLabel?: string;\r\n\r\n /** @description Texto do botão de ação secundária. */\r\n @Input()\r\n public secondaryActionLabel?: string;\r\n\r\n /**\r\n * @description Lista de itens para o tiered menu da ação primária.\r\n * Quando informado com itens, o botão primário exibe um menu de opções\r\n * ao invés de emitir o evento `primaryAction` diretamente.\r\n */\r\n @Input()\r\n public primaryModel: TieredMenuItemData[] = [];\r\n\r\n /**\r\n * @description Emitido quando o usuário clica no botão de ação primária e `primaryModel` está vazio.\r\n */\r\n @Output()\r\n public primaryAction = new EventEmitter<void>();\r\n\r\n /**\r\n * @description Emitido quando o usuário clica no botão de ação secundária.\r\n */\r\n @Output()\r\n public secondaryAction = new EventEmitter<void>();\r\n}\r\n","<div\n [id]=\"id\"\n class=\"w-full text-center\"\n>\n <div\n [id]=\"id + '-icon'\"\n class=\"text-[#d8d8d8] text-[6em]\"\n >\n <i\n [attr.class]=\"iconClass ? iconClass : 'fa fa-cogs'\"\n aria-hidden=\"true\"\n ></i>\n </div>\n <div\n [id]=\"id + '-title'\"\n class=\"font-bold mb-[10px]\"\n >\n {{ title }}\n </div>\n\n @if (description) {\n <div\n [id]=\"id + '-description'\"\n class=\"mb-[15px] text-[#999999] px-5 text-center\"\n >\n <p class=\"mx-auto max-w-[400px] max-h-[80px] overflow-hidden\">{{ description }}</p>\n </div>\n }\n @if (showPrimaryAction && primaryActionLabel) {\n <div\n [id]=\"id + '-actions'\"\n class=\"text-center w-full\"\n >\n <s-button\n [id]=\"id + '-primary-action'\"\n type=\"button\"\n [label]=\"primaryActionLabel\"\n [menuOptions]=\"primaryModel\"\n (clicked)=\"primaryAction.next()\"\n ></s-button>\n @if (showSecondaryAction && secondaryActionLabel) {\n <s-button\n [id]=\"id + '-secondary-action'\"\n id=\"secondaryAction\"\n type=\"button\"\n [label]=\"secondaryActionLabel\"\n priority=\"link\"\n (clicked)=\"secondaryAction.next()\"\n ></s-button>\n }\n </div>\n }\n</div>\n","import { Component, Input, inject } from '@angular/core';\r\n\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { EmptyStateComponent } from '../empty-state.component';\r\n\r\n@Component({\r\n selector: 's-empty-state-go-back',\r\n templateUrl: './go-back.component.html',\r\n styleUrls: [],\r\n standalone: true,\r\n imports: [EmptyStateComponent],\r\n})\r\nexport class EmptyStateGoBackComponent {\r\n private readonly _cookieService = inject(CookieService);\r\n\r\n @Input()\r\n public iconClass = 'fa fa-exclamation-triangle';\r\n\r\n @Input({ required: true })\r\n public title!: string;\r\n\r\n @Input()\r\n public description?: string;\r\n\r\n @Input()\r\n public primaryActionLabel?: string;\r\n\r\n public goBack() {\r\n const portalUrl = this._cookieService.get('com.senior.portal.url');\r\n window.open(portalUrl, '_top');\r\n }\r\n}\r\n","<s-empty-state \n [iconClass]=\"iconClass\" \n [title]=\"title\" \n [description]=\"description\" \n (primaryAction)=\"goBack()\"\n [primaryActionLabel]=\"primaryActionLabel\">\n</s-empty-state>","import { NgModule } from '@angular/core';\r\n\r\nimport { CookieService } from 'ngx-cookie-service';\r\n\r\nimport { EmptyStateComponent } from './empty-state.component';\r\nimport { EmptyStateGoBackComponent } from './go-back/go-back.component';\r\n\r\n@NgModule({\r\n imports: [EmptyStateComponent, EmptyStateGoBackComponent],\r\n providers: [CookieService],\r\n exports: [EmptyStateComponent, EmptyStateGoBackComponent],\r\n})\r\nexport class EmptyStateModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -297,7 +297,7 @@ class FilePickerComponent {
297
297
  removalVersion: '20.0.0',
298
298
  },
299
299
  },
300
- ], viewQueries: [{ propertyName: "inputUpload", first: true, predicate: ["inputUpload"], descendants: true }, { propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true }], hostDirectives: [{ directive: i1.DeprecatedSelectorDirective }], ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"file-picker\"\n>\n <div class=\"file-picker-choose\">\n <input\n #inputUpload\n [id]=\"id + 'input-upload'\"\n type=\"file\"\n name=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"_onInputFileSelect($event)\"\n />\n @if (permissions.includes(ADD_PERMISSION)) {\n <s-button\n [id]=\"id + 'upload-button'\"\n [label]=\"chooseLabel || 'platform.angular_components.attach_files' | translate\"\n (clicked)=\"inputUpload.click()\"\n priority=\"primary\"\n [disabled]=\"disabled || !!formControl?.disabled || fileLimit === files.length\"\n [auxiliary]=\"false\"\n >\n </s-button>\n }\n </div>\n\n @if (files.length) {\n <section\n [id]=\"id + 'fileupload-list'\"\n class=\"file-picker-list\"\n role=\"grid\"\n >\n @for (file of files; track file; let i = $index) {\n <div\n class=\"file-picker-list-file\"\n role=\"row\"\n >\n <div\n [id]=\"id + '-file-' + i + '-name'\"\n class=\"flex flex-grow items-center justify-between overflow-hidden text-ellipsis text-nowrap\"\n role=\"gridcell\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (permissions.includes(READ_PERMISSION) && file.savedFile) || file.progress === 100\n ? descriptionUrl\n : description;\n context: {\n $implicit: file,\n index: i,\n }\n \"\n >\n </ng-container>\n\n <span>{{ formatFileSize(file.size) }}</span>\n\n @if (modifiedDate) {\n <span class=\"file-picker-list-file-name-date\">{{ modifiedDate }}</span>\n }\n </div>\n <div\n class=\"file-picker-list-file-status\"\n role=\"gridcell\"\n >\n @if (file.isUploading && !isSmallDevice) {\n <div class=\"w-64\">\n <s-progressbar\n [value]=\"file.progress ?? 0\"\n [showValue]=\"false\"\n activeColor=\"blue\"\n ></s-progressbar>\n </div>\n }\n\n @if (file.isUploading && isSmallDevice) {\n <span\n [id]=\"id + '-file-' + i + '-spin'\"\n class=\"fas fa-circle-notch fa-spin\"\n [attr.aria-label]=\"\n ariaLabelProgress || 'platform.angular_components.loading_file' | translate\n \"\n >\n </span>\n }\n\n @if (!file.isUploading && !file.error && file.progress === 100) {\n <span\n [id]=\"id + '-file-' + i + '-check'\"\n class=\"fas fa-check\"\n role=\"alert\"\n [attr.aria-label]=\"\n ariaLabelSuccess ||\n successTooltip ||\n 'platform.angular_components.file_attached_successfully' | translate\n \"\n [sTooltip]=\"\n successTooltip || 'platform.angular_components.file_attached_successfully'\n | translate\n \"\n tooltipPosition=\"top\"\n [showDelay]=\"500\"\n [escape]=\"true\"\n >\n </span>\n }\n\n @if (file.error?.message) {\n <span\n [id]=\"id + '-file-' + i + '-error'\"\n class=\"fas fa-times\"\n role=\"alert\"\n [sTooltip]=\"file.error?.message\"\n tooltipPosition=\"top\"\n [showDelay]=\"500\"\n [escape]=\"true\"\n >\n </span>\n }\n </div>\n <div\n class=\"file-picker-list-file-actions\"\n role=\"gridcell\"\n >\n @if (file.isUploading) {\n <a\n [id]=\"id + '-file-' + i + '-cancel'\"\n class=\"file-picker-list-file-actions-action\"\n (click)=\"onCancelUpload(i)\"\n >\n {{ cancelLabel || 'platform.angular_components.cancel' | translate }}\n </a>\n }\n\n @if (\n permissions.includes(REMOVE_PERMISSION) &&\n !file.isUploading &&\n !(disabled || !!formControl?.disabled)\n ) {\n <a\n role=\"button\"\n tabindex=\"0\"\n [id]=\"id + '-file-' + i + '-remove'\"\n class=\"file-picker-list-file-actions-action\"\n (click)=\"onRemoveFile(file)\"\n [attr.aria-label]=\"\n ariaLabelRemove || removeLabel || 'platform.angular_components.remove' | translate\n \"\n >\n {{ removeLabel || 'platform.angular_components.remove' | translate }}\n </a>\n }\n </div>\n </div>\n }\n </section>\n }\n</div>\n\n<ng-template\n #descriptionUrl\n let-file\n let-i=\"index\"\n>\n <div class=\"flex justify-between\">\n <div>\n <a\n [id]=\"id + '-file-' + i + '-name-link'\"\n tabindex=\"0\"\n (click)=\"onDowloadFile(i)\"\n [attr.aria-label]=\"ariaLabelFileName || file.name\"\n class=\"break-words focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n >{{ file.name }}\n </a>\n <a\n style=\"display: none\"\n [href]=\"file.objectURL\"\n target=\"_blank\"\n download\n #anchor\n >\n </a>\n </div>\n </div>\n</ng-template>\n\n<ng-template\n #description\n let-file\n>\n <div class=\"flex justify-between\">\n <span\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabelFileName || file.name\"\n class=\"focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n >\n {{ file.name }}\n </span>\n </div>\n</ng-template>\n\n", styles: [".file-picker .file-picker-choose{position:relative;margin:15px 0;width:max-content}.file-picker input[type=file]{display:none}.file-picker-list{border:1px solid #ccc}.file-picker-list-file:not(:first-child){border-top:1px solid #ccc}.file-picker-list .file-picker-list-file{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;padding:15px}.file-picker-list .file-picker-list-file .file-picker-list-file-name{display:flex;flex-direction:column;align-self:center;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-picker-list .file-picker-list-file .file-picker-list-file-name .file-picker-list-file-name-date{font-size:.75rem;color:#999}.file-picker-list .file-picker-list-file .file-picker-list-file-name>a{cursor:pointer;text-decoration:none}.file-picker-list .file-picker-list-file .file-picker-list-file-status{align-self:center}.file-picker-list .file-picker-list-file .fas.fa-circle-notch{color:#d8d8d8;font-size:12px}.file-picker-list .file-picker-list-file .fas.fa-check{color:#0c9348;font-size:12px}.file-picker-list .file-picker-list-file .fas.fa-times{color:#c13018;font-size:12px}.file-picker-list .file-picker-list-file .file-picker-list-file-actions{margin-top:15px;align-self:center;width:100%}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action{text-decoration:none;color:#428bca}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action:hover,.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action :focus,.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action :visited{text-decoration:none}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action:focus-visible{border-radius:2px;outline:2px solid var(--s-focus-ring-color);outline-offset:3px}@media (min-width: 768px){.file-picker-list .file-picker-list-file{flex-wrap:nowrap}.file-picker-list .file-picker-list-file .file-picker-list-file-name{width:auto;flex-grow:2}.file-picker-list .file-picker-list-file .file-picker-list-file-status{margin:0 15px}.file-picker-list .file-picker-list-file .file-picker-list-file-actions{margin:0;width:auto}}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ProgressBarComponent, selector: "s-progressbar", inputs: ["value", "activeColor", "numberFormatOptions", "targetValue", "label", "targetLabel", "showValue", "mode"] }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
300
+ ], viewQueries: [{ propertyName: "inputUpload", first: true, predicate: ["inputUpload"], descendants: true }, { propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true }], hostDirectives: [{ directive: i1.DeprecatedSelectorDirective }], ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"file-picker\"\n>\n <div class=\"file-picker-choose\">\n <input\n #inputUpload\n [id]=\"id + 'input-upload'\"\n type=\"file\"\n name=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n (change)=\"_onInputFileSelect($event)\"\n />\n @if (permissions.includes(ADD_PERMISSION)) {\n <s-button\n [id]=\"id + 'upload-button'\"\n [label]=\"chooseLabel || 'platform.angular_components.attach_files' | translate\"\n (clicked)=\"inputUpload.click()\"\n priority=\"primary\"\n [disabled]=\"disabled || !!formControl?.disabled || fileLimit === files.length\"\n [auxiliary]=\"false\"\n >\n </s-button>\n }\n </div>\n\n @if (files.length) {\n <section\n [id]=\"id + 'fileupload-list'\"\n class=\"file-picker-list\"\n role=\"grid\"\n >\n @for (file of files; track file; let i = $index) {\n <div\n class=\"file-picker-list-file\"\n role=\"row\"\n >\n <div\n [id]=\"id + '-file-' + i + '-name'\"\n class=\"flex flex-grow items-center justify-between overflow-hidden text-ellipsis text-nowrap\"\n role=\"gridcell\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (permissions.includes(READ_PERMISSION) && file.savedFile) || file.progress === 100\n ? descriptionUrl\n : description;\n context: {\n $implicit: file,\n index: i,\n }\n \"\n >\n </ng-container>\n\n <span>{{ formatFileSize(file.size) }}</span>\n\n @if (modifiedDate) {\n <span class=\"file-picker-list-file-name-date\">{{ modifiedDate }}</span>\n }\n </div>\n <div\n class=\"file-picker-list-file-status\"\n role=\"gridcell\"\n >\n @if (file.isUploading && !isSmallDevice) {\n <div class=\"w-64\">\n <s-progressbar\n [value]=\"file.progress ?? 0\"\n [showValue]=\"false\"\n activeColor=\"blue\"\n ></s-progressbar>\n </div>\n }\n\n @if (file.isUploading && isSmallDevice) {\n <span\n [id]=\"id + '-file-' + i + '-spin'\"\n class=\"fas fa-circle-notch fa-spin\"\n [attr.aria-label]=\"\n ariaLabelProgress || 'platform.angular_components.loading_file' | translate\n \"\n >\n </span>\n }\n\n @if (!file.isUploading && !file.error && file.progress === 100) {\n <span\n [id]=\"id + '-file-' + i + '-check'\"\n class=\"fas fa-check\"\n role=\"alert\"\n [attr.aria-label]=\"\n ariaLabelSuccess ||\n successTooltip ||\n 'platform.angular_components.file_attached_successfully' | translate\n \"\n [sTooltip]=\"\n successTooltip || 'platform.angular_components.file_attached_successfully'\n | translate\n \"\n tooltipPosition=\"top\"\n [showDelay]=\"500\"\n [escape]=\"true\"\n >\n </span>\n }\n\n @if (file.error?.message) {\n <span\n [id]=\"id + '-file-' + i + '-error'\"\n class=\"fas fa-times\"\n role=\"alert\"\n [sTooltip]=\"file.error?.message\"\n tooltipPosition=\"top\"\n [showDelay]=\"500\"\n [escape]=\"true\"\n >\n </span>\n }\n </div>\n <div\n class=\"file-picker-list-file-actions\"\n role=\"gridcell\"\n >\n @if (file.isUploading) {\n <a\n [id]=\"id + '-file-' + i + '-cancel'\"\n class=\"file-picker-list-file-actions-action\"\n (click)=\"onCancelUpload(i)\"\n >\n {{ cancelLabel || 'platform.angular_components.cancel' | translate }}\n </a>\n }\n\n @if (\n permissions.includes(REMOVE_PERMISSION) &&\n !file.isUploading &&\n !(disabled || !!formControl?.disabled)\n ) {\n <a\n role=\"button\"\n tabindex=\"0\"\n [id]=\"id + '-file-' + i + '-remove'\"\n class=\"file-picker-list-file-actions-action\"\n (click)=\"onRemoveFile(file)\"\n [attr.aria-label]=\"\n ariaLabelRemove || removeLabel || 'platform.angular_components.remove' | translate\n \"\n >\n {{ removeLabel || 'platform.angular_components.remove' | translate }}\n </a>\n }\n </div>\n </div>\n }\n </section>\n }\n</div>\n\n<ng-template\n #descriptionUrl\n let-file\n let-i=\"index\"\n>\n <div class=\"flex justify-between\">\n <div>\n <a\n [id]=\"id + '-file-' + i + '-name-link'\"\n tabindex=\"0\"\n (click)=\"onDowloadFile(i)\"\n [attr.aria-label]=\"ariaLabelFileName || file.name\"\n class=\"break-words focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n >{{ file.name }}\n </a>\n <a\n style=\"display: none\"\n [href]=\"file.objectURL\"\n target=\"_blank\"\n download\n #anchor\n >\n </a>\n </div>\n </div>\n</ng-template>\n\n<ng-template\n #description\n let-file\n>\n <div class=\"flex justify-between\">\n <span\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabelFileName || file.name\"\n class=\"focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n >\n {{ file.name }}\n </span>\n </div>\n</ng-template>\n\n", styles: [".file-picker .file-picker-choose{position:relative;margin:15px 0;width:max-content}.file-picker input[type=file]{display:none}.file-picker-list{border:1px solid #ccc}.file-picker-list-file:not(:first-child){border-top:1px solid #ccc}.file-picker-list .file-picker-list-file{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;padding:15px}.file-picker-list .file-picker-list-file .file-picker-list-file-name{display:flex;flex-direction:column;align-self:center;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-picker-list .file-picker-list-file .file-picker-list-file-name .file-picker-list-file-name-date{font-size:.75rem;color:#999}.file-picker-list .file-picker-list-file .file-picker-list-file-name>a{cursor:pointer;text-decoration:none}.file-picker-list .file-picker-list-file .file-picker-list-file-status{align-self:center}.file-picker-list .file-picker-list-file .fas.fa-circle-notch{color:#d8d8d8;font-size:12px}.file-picker-list .file-picker-list-file .fas.fa-check{color:#0c9348;font-size:12px}.file-picker-list .file-picker-list-file .fas.fa-times{color:#c13018;font-size:12px}.file-picker-list .file-picker-list-file .file-picker-list-file-actions{margin-top:15px;align-self:center;width:100%}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action{text-decoration:none;color:#428bca}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action:hover,.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action :focus,.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action :visited{text-decoration:none}.file-picker-list .file-picker-list-file .file-picker-list-file-actions a.file-picker-list-file-actions-action:focus-visible{border-radius:2px;outline:2px solid var(--s-focus-ring-color);outline-offset:3px}@media (min-width: 768px){.file-picker-list .file-picker-list-file{flex-wrap:nowrap}.file-picker-list .file-picker-list-file .file-picker-list-file-name{width:auto;flex-grow:2}.file-picker-list .file-picker-list-file .file-picker-list-file-status{margin:0 15px}.file-picker-list .file-picker-list-file .file-picker-list-file-actions{margin:0;width:auto}}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked", "tieredMenuOpened", "tieredMenuClosed"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ProgressBarComponent, selector: "s-progressbar", inputs: ["value", "activeColor", "numberFormatOptions", "targetValue", "label", "targetLabel", "showValue", "mode"] }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
301
301
  }
302
302
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilePickerComponent, decorators: [{
303
303
  type: Component,