@yoozsoft/yoozsoft-ng 6.2.0 → 7.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +206 -94
  2. package/fesm2022/yoozsoft-yoozsoft-ng-autocomplete.mjs +70 -38
  3. package/fesm2022/yoozsoft-yoozsoft-ng-autocomplete.mjs.map +1 -1
  4. package/fesm2022/yoozsoft-yoozsoft-ng-datepicker.mjs +194 -109
  5. package/fesm2022/yoozsoft-yoozsoft-ng-datepicker.mjs.map +1 -1
  6. package/fesm2022/yoozsoft-yoozsoft-ng-dropdown.mjs +70 -55
  7. package/fesm2022/yoozsoft-yoozsoft-ng-dropdown.mjs.map +1 -1
  8. package/fesm2022/yoozsoft-yoozsoft-ng-file-upload.mjs +55 -33
  9. package/fesm2022/yoozsoft-yoozsoft-ng-file-upload.mjs.map +1 -1
  10. package/fesm2022/yoozsoft-yoozsoft-ng-footer.mjs +13 -11
  11. package/fesm2022/yoozsoft-yoozsoft-ng-footer.mjs.map +1 -1
  12. package/fesm2022/yoozsoft-yoozsoft-ng-loading.mjs +17 -11
  13. package/fesm2022/yoozsoft-yoozsoft-ng-loading.mjs.map +1 -1
  14. package/fesm2022/yoozsoft-yoozsoft-ng-navbar.mjs +37 -28
  15. package/fesm2022/yoozsoft-yoozsoft-ng-navbar.mjs.map +1 -1
  16. package/fesm2022/yoozsoft-yoozsoft-ng-overlay.mjs +7 -6
  17. package/fesm2022/yoozsoft-yoozsoft-ng-overlay.mjs.map +1 -1
  18. package/fesm2022/yoozsoft-yoozsoft-ng-pagination.mjs +39 -28
  19. package/fesm2022/yoozsoft-yoozsoft-ng-pagination.mjs.map +1 -1
  20. package/fesm2022/yoozsoft-yoozsoft-ng-password-strength.mjs +65 -39
  21. package/fesm2022/yoozsoft-yoozsoft-ng-password-strength.mjs.map +1 -1
  22. package/fesm2022/yoozsoft-yoozsoft-ng-pipes.mjs +3 -3
  23. package/fesm2022/yoozsoft-yoozsoft-ng-pipes.mjs.map +1 -1
  24. package/fesm2022/yoozsoft-yoozsoft-ng-progress.mjs +26 -17
  25. package/fesm2022/yoozsoft-yoozsoft-ng-progress.mjs.map +1 -1
  26. package/fesm2022/yoozsoft-yoozsoft-ng-rating.mjs +155 -0
  27. package/fesm2022/yoozsoft-yoozsoft-ng-rating.mjs.map +1 -0
  28. package/fesm2022/yoozsoft-yoozsoft-ng-select.mjs +47 -33
  29. package/fesm2022/yoozsoft-yoozsoft-ng-select.mjs.map +1 -1
  30. package/fesm2022/yoozsoft-yoozsoft-ng-sidebar.mjs +30 -29
  31. package/fesm2022/yoozsoft-yoozsoft-ng-sidebar.mjs.map +1 -1
  32. package/fesm2022/yoozsoft-yoozsoft-ng-table.mjs +93 -84
  33. package/fesm2022/yoozsoft-yoozsoft-ng-table.mjs.map +1 -1
  34. package/fesm2022/yoozsoft-yoozsoft-ng-tiff-viewer.mjs +41 -27
  35. package/fesm2022/yoozsoft-yoozsoft-ng-tiff-viewer.mjs.map +1 -1
  36. package/fesm2022/yoozsoft-yoozsoft-ng-toast.mjs +20 -18
  37. package/fesm2022/yoozsoft-yoozsoft-ng-toast.mjs.map +1 -1
  38. package/package.json +12 -4
  39. package/rating/package.json +4 -0
  40. package/types/yoozsoft-yoozsoft-ng-rating.d.ts +56 -0
@@ -1 +1 @@
1
- {"version":3,"file":"yoozsoft-yoozsoft-ng-table.mjs","sources":["../../../../projects/yoozsoft/yoozsoft-ng/table/src/ys-table/ys-table.ts","../../../../projects/yoozsoft/yoozsoft-ng/table/src/ys-table/ys-table.html","../../../../projects/yoozsoft/yoozsoft-ng/table/public-api.ts","../../../../projects/yoozsoft/yoozsoft-ng/table/yoozsoft-yoozsoft-ng-table.ts"],"sourcesContent":["import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, effect, input, model, output, PipeTransform, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgbDropdownModule, NgbPagination, NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\nimport { ActionButton, RowIndicator, TableColumn, ToolbarButton, ValueOrFn } from '../models';\n\n@Component({\n selector: 'ys-table',\n imports: [\n NgClass,\n FormsModule,\n NgTemplateOutlet,\n NgbDropdownModule,\n NgbPagination,\n NgbTooltip\n ],\n templateUrl: './ys-table.html',\n styleUrl: './ys-table.scss',\n})\nexport class YsTable {\n\n items = input<any[]>([]);\n columns = input<TableColumn[]>([]);\n actionButtons = input<ActionButton[]>([]);\n\n toolbarButtons = input<ToolbarButton[]>([]);\n\n rowStyleClass = input<string | ((row: any) => string)>();\n\n rowIndicators = input<RowIndicator[]>([]);\n\n serverSide = input<boolean>(false); // <--- حالت سروری\n isPagination = input<boolean>(true);\n rowsPerPage = input<number[]>([10, 25, 50]);\n pageReportTemplate = input<string>('Showing {first} to {last} of {totalRecords} items');\n\n page = model<number>(1);\n pageSize = model<number>(this.rowsPerPage()[0] || 10);\n collectionSize = model<number>(0); // <--- از سرور می‌گیریم\n\n hasSearch = input<boolean>(false);\n searchPlaceholder = input<string>('search...');\n searchStyleClass = input<string>();\n\n styleClass = input<string>();\n toolbarStyleClass = input<string>();\n tableStyleClass = input<string>();\n\n /** Selectable rows checkbox */\n selectableRows = input<boolean>(false);\n /** Condition for each row's checkbox to be active */\n isRowSelectable = input<(row: any) => boolean>();\n\n rowKey = input<string>('id');\n\n pageChanged = output<{ page: number, pageSize: number }>();\n search = output<string>();\n\n /** checkbox */\n selectedItemsChange = output<any[]>();\n\n searchTerm = signal<string>('');\n sortedColumn = signal<string | null>(null);\n sortDirection = signal<'asc' | 'desc'>('asc');\n\n readonly filteredItems = computed(() => {\n\n let items = [...this.items()];\n\n const search = this.searchTerm().trim().toLowerCase();\n\n if (search) {\n items = items.filter(item =>\n this.columns().some(col => {\n let value = '';\n\n if (col.template) {\n value = this.applyTemplate(col.template, item);\n } else if (col.field) {\n value = this.resolveFieldPath(item, col.field);\n }\n\n return value?.toString().toLowerCase().includes(search);\n })\n );\n }\n\n const sortField = this.sortedColumn();\n\n if (sortField) {\n\n items.sort((a, b) => {\n\n const aVal = this.resolveFieldPath(a, sortField);\n const bVal = this.resolveFieldPath(b, sortField);\n\n if (aVal == null) return this.sortDirection() === 'asc' ? -1 : 1;\n if (bVal == null) return this.sortDirection() === 'asc' ? 1 : -1;\n\n return this.sortDirection() === 'asc'\n ? String(aVal).localeCompare(String(bVal))\n : String(bVal).localeCompare(String(aVal));\n\n });\n\n }\n\n return items;\n\n });\n\n readonly paginatedItems = computed(() => {\n\n if (this.serverSide()) {\n return this.items();\n }\n\n if (!this.isPagination()) {\n return this.filteredItems();\n }\n\n const start = (this.page() - 1) * this.pageSize();\n\n return this.filteredItems().slice(\n start,\n start + this.pageSize()\n );\n\n });\n\n selectedItems = signal<any[]>([])\n\n totalPages = computed<number>(() => {\n return Math.ceil(this.collectionSize() / this.pageSize()) || 1;\n });\n\n firstIndex = computed<number>(() => {\n return (this.page() - 1) * this.pageSize();\n });\n\n lastIndex = computed<number>(() => {\n return Math.min(this.firstIndex() + this.pageSize(), this.collectionSize());\n })\n\n constructor() {\n effect(() => {\n\n this.columns();\n this.checkUniqueColumnKeys();\n\n });\n\n effect(() => {\n\n if (!this.serverSide()) {\n this.collectionSize.set(this.filteredItems().length);\n }\n\n });\n\n }\n\n onSort(field: string): void {\n\n if (this.sortedColumn() === field) {\n this.sortDirection.update(v => v === 'asc' ? 'desc' : 'asc');\n } else {\n this.sortedColumn.set(field);\n this.sortDirection.set('asc');\n }\n\n }\n\n changePage(page: number): void {\n\n if (page < 1 || page > this.totalPages()) {\n return;\n }\n\n this.page.set(page);\n\n if (this.serverSide()) {\n this.pageChanged.emit({\n page,\n pageSize: this.pageSize()\n });\n }\n\n }\n\n changePageSize(size: number): void {\n\n this.pageSize.set(+size);\n this.page.set(1);\n\n if (this.serverSide()) {\n this.pageChanged.emit({\n page: 1,\n pageSize: +size\n });\n }\n\n }\n\n onSearch(target: EventTarget | null): void {\n\n this.searchTerm.set(\n (target as HTMLInputElement).value\n );\n\n this.page.set(1);\n\n if (this.serverSide()) {\n this.search.emit(this.searchTerm());\n }\n\n }\n\n applyPipe(pipe: PipeTransform, value: unknown, args: unknown[] = []): any {\n return pipe?.transform(value, ...args);\n }\n\n resolveFieldPath(obj: any, path: string): any {\n return path.split('.').reduce((acc, part) => acc?.[part], obj);\n }\n\n applyTemplate(template: string, item: any): string {\n return template.replace(/\\{([^}]+)\\}/g, (_, path) => {\n const val = this.resolveFieldPath(item, path.trim());\n return val !== undefined && val !== null ? val : '';\n });\n }\n\n private checkUniqueColumnKeys(): void {\n const seen = new Set<number>();\n const duplicates: number[] = [];\n\n this.columns().forEach(col => {\n if (!col.key) {\n throw new Error(`Column with header \"${col.header}\" is missing a unique \"key\"`);\n }\n if (seen.has(col.key)) {\n duplicates.push(col.key);\n } else {\n seen.add(col.key);\n }\n });\n\n if (duplicates.length > 0) {\n throw new Error(`Duplicate column keys found: ${duplicates.join(', ')}`);\n }\n }\n\n getLabel(action: ActionButton, item: any): string {\n return typeof action.label === 'function'\n ? action.label(item)\n : action.label ?? 'Label';\n }\n\n getIconClass(action: ActionButton, item: any): string {\n return typeof action.iconClass === 'function'\n ? action.iconClass(item)\n : action.iconClass ?? '';\n }\n\n getTooltipText(tooltip?: string | (() => string)): string {\n if (!tooltip) return '';\n\n return typeof tooltip === 'function' ? tooltip() : tooltip;\n }\n\n getLabelText(label?: string | (() => string)): string {\n if (!label) return '';\n\n return typeof label === 'function' ? label() : label;\n }\n\n itemKey(item: any): string {\n return String(item[this.rowKey()]);\n }\n\n onSelectionChange(item: any, checked: boolean) {\n\n if (checked) {\n\n this.selectedItems.update(items => [\n ...items,\n item\n ]);\n\n } else {\n\n this.selectedItems.update(items =>\n items.filter(\n x => this.itemKey(x) !== this.itemKey(item)\n )\n );\n\n }\n\n this.selectedItemsChange.emit(this.selectedItems());\n }\n\n isSelected(item: any): boolean {\n return this.selectedItems().some(\n x => this.itemKey(x) === this.itemKey(item)\n );\n }\n\n toggleSelection(item: any, event: Event): void {\n\n const checked = (event.target as HTMLInputElement).checked;\n\n if (checked) {\n this.selectedItems.update(items => [...items, item]);\n } else {\n this.selectedItems.update(items =>\n items.filter(x => this.itemKey(x) !== this.itemKey(item))\n );\n }\n\n this.selectedItemsChange.emit(this.selectedItems());\n\n }\n\n allSelected(): boolean {\n const selectable = this.paginatedItems().filter(i => this.isSelectable(i));\n\n return selectable.length > 0 &&\n selectable.every(i => this.isSelected(i));\n }\n\n toggleSelectAll(event: Event): void {\n\n const checked = (event.target as HTMLInputElement).checked;\n\n if (checked) {\n\n const itemsToAdd = this.paginatedItems().filter(item =>\n this.isSelectable(item) &&\n !this.selectedItems().some(\n x => this.itemKey(x) === this.itemKey(item)\n )\n );\n\n this.selectedItems.update(items => [\n ...items,\n ...itemsToAdd\n ]);\n\n } else {\n\n this.selectedItems.update(items =>\n items.filter(item =>\n !this.paginatedItems().some(\n p => this.itemKey(p) === this.itemKey(item)\n )\n )\n );\n\n }\n\n this.selectedItemsChange.emit(this.selectedItems());\n\n }\n\n getRowClass(row: any): string {\n const styleClass = this.rowStyleClass();\n\n if (!styleClass) {\n return '';\n }\n\n return typeof styleClass === 'function'\n ? styleClass(row)\n : styleClass;\n }\n\n getColumnClass(col: TableColumn, row: any): string {\n if (!col.styleClass) return '';\n return typeof col.styleClass === 'function'\n ? col.styleClass(row)\n : col.styleClass;\n }\n\n isSortable(col: TableColumn): col is TableColumn & { field: string } {\n return !!col.sortable && !!col.field;\n }\n\n isSelectable(row: any): boolean {\n if (!this.selectableRows()) {\n return false;\n }\n\n const predicate = this.isRowSelectable();\n\n return predicate ? predicate(row) : true;\n }\n\n resolveValue<T>(value: ValueOrFn<T> | undefined, row: any): T | undefined {\n return typeof value === 'function'\n ? (value as (row: any) => T)(row)\n : value;\n }\n\n getVisibleIndicators(row: any): RowIndicator[] {\n return this.rowIndicators().filter(ind => {\n if (ind.visible === undefined) return true;\n return this.resolveValue(ind.visible, row);\n });\n }\n\n readonly firstRecord = computed(() =>\n this.collectionSize() === 0\n ? 0\n : this.firstIndex() + 1\n );\n\n readonly pageReportText = computed(() =>\n this.pageReportTemplate()\n .replace('{first}', this.firstRecord() + '')\n .replace('{last}', this.lastIndex() + '')\n .replace('{totalRecords}', this.collectionSize() + '')\n );\n\n}\n","<div class=\"ys-table-container card shadow-sm\" [class]=\"styleClass()\">\n <div class=\"card-body\">\n <div class=\"table-responsive\">\n <div class=\"ys-table-toolbar d-flex justify-content-between\" [class]=\"toolbarStyleClass()\">\n\n @if (toolbarButtons() && toolbarButtons().length) {\n <div class=\"mb-2 d-flex gap-2 w-100\">\n\n @for (btn of toolbarButtons(); track $index) {\n\n @if (!btn.visible || btn.visible()) {\n <button class=\"btn btn-primary btn-sm\" [class]=\"btn.styleClass\" (click)=\"btn.onClick?.()\"\n [disabled]=\"btn.disabled?.()\" [ngbTooltip]=\"getTooltipText(btn.tooltip)\">\n\n @if (btn.iconClass) {\n <i [class]=\"btn.iconClass\"></i>\n }\n\n {{ getLabelText(btn.label) }}\n\n </button>\n }\n\n }\n\n </div>\n }\n\n @if (hasSearch()){\n\n <input type=\"text\" class=\"form-control w-auto mb-2\" [class]=\"searchStyleClass()\"\n [placeholder]=\"searchPlaceholder()\" (input)=\"onSearch($event.target)\" />\n\n }\n </div>\n\n <table class=\"ys-table table table-striped table-hover align-middle\" [class]=\"tableStyleClass()\">\n <thead class=\"table-light\">\n <tr>\n <th class=\"number-col\">#</th>\n\n @if (selectableRows()) {\n <th class=\"select-col\">\n <input type=\"checkbox\" [checked]=\"allSelected()\" (change)=\"toggleSelectAll($event)\"\n id=\"allSelect\" />\n </th>\n }\n\n @if (rowIndicators().length) {\n <th class=\"indicator-col\"></th>\n }\n\n @if(actionButtons().length){\n <th></th>\n }\n\n @for (col of columns(); track col.key) {\n <th [class.cursor-pointer]=\"isSortable(col)\" (click)=\"isSortable(col) && onSort(col.field)\"\n [class]=\"col.headerStyleClass\">\n {{ col.header }}\n\n @if (isSortable(col)) {\n <i class=\"fa\" [ngClass]=\"{\n 'fa-sort': sortedColumn() !== col.field,\n 'fa-sort-up': sortedColumn() === col.field && sortDirection() === 'asc',\n 'fa-sort-down': sortedColumn() === col.field && sortDirection() === 'desc'\n }\"></i>\n }\n\n </th>\n }\n\n </tr>\n </thead>\n\n <tbody>\n @for (item of paginatedItems(); track $index; let i = $index) {\n <tr [class]=\"getRowClass(item)\">\n <td class=\"number-col\">{{ (page() - 1) * pageSize() + i + 1 }}</td>\n\n @if (selectableRows()) {\n <td class=\"select-col\">\n <input #checkbox type=\"checkbox\" [checked]=\"isSelected(item)\"\n (change)=\"toggleSelection(item, $event)\" [disabled]=\"!isSelectable(item)\"\n [class.opacity-50]=\"!isSelectable(item)\" id=\"{{'select' + $index}}\" />\n </td>\n }\n\n @if (rowIndicators().length) {\n <td class=\"indicator-col text-center\">\n <div class=\"d-flex justify-content-center align-items-center gap-1\">\n\n @for (ind of getVisibleIndicators(item); track $index) {\n\n @if ((ind.type || 'icon') === 'icon') {\n <i [class.cursor-pointer]=\"ind.onClick\"\n [class]=\"resolveValue(ind.iconClass, item) + ' ' + (resolveValue(ind.styleClass, item) || '')\"\n [ngbTooltip]=\"resolveValue(ind.tooltip, item)\" (click)=\"ind.onClick?.(item)\">\n </i>\n }@else if (ind.type === 'badge') {\n\n <span class=\"badge rounded-pill position-relative\"\n [class]=\"resolveValue(ind.styleClass, item)\"\n [ngbTooltip]=\"resolveValue(ind.tooltip, item)\" (click)=\"ind.onClick?.(item)\">\n\n @if(resolveValue(ind.iconClass, item)){\n <i [class]=\"resolveValue(ind.iconClass, item)\"></i>\n }\n\n @if(resolveValue(ind.badgeLabel, item)){\n {{ resolveValue(ind.badgeLabel, item) }}\n }\n\n @if(resolveValue(ind.badgeValue, item)){\n <span class=\"position-absolute top-0 start-100 translate-middle badge rounded-pill\"\n [class]=\"resolveValue(ind.badgeValueClass, item)\">\n {{ resolveValue(ind.badgeValue, item) }}\n </span>\n }\n\n </span>\n\n }\n\n }\n\n </div>\n </td>\n }\n\n\n @if (actionButtons().length) {\n <td>\n <div class=\"dropdown\">\n <button class=\"btn btn-light btn-sm btn-menu\" type=\"button\" data-bs-toggle=\"dropdown\">\n <i class=\"fa fa-bars\"></i>\n </button>\n <ul class=\"dropdown-menu\">\n\n @for (action of actionButtons(); track $index) {\n\n @if (!action.visible || action.visible(item)) {\n\n @if (action.isDivider) {\n <li>\n <hr class=\"dropdown-divider\" />\n </li>\n } @else {\n <li>\n <button class=\"dropdown-item d-flex align-items-center gap-2\" type=\"button\"\n [class]=\"action.styleClass\" (click)=\"action.onClick?.(item)\"\n [disabled]=\"action.disabled?.(item)\">\n @if (action.iconClass) {\n <i [class]=\"getIconClass(action, item)\"></i>\n }\n {{ getLabel( action,item) }}\n </button>\n </li>\n }\n\n }\n\n }\n\n </ul>\n </div>\n </td>\n }\n\n @for (col of columns(); track col.key) {\n <td [class]=\"getColumnClass(col, item)\">\n @if (!col.visible || col.visible(item)) {\n\n @if (col.cellTemplate) {\n\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\">\n </ng-container>\n\n }\n @else if (col.template) {\n\n {{ applyTemplate(col.template, item) }}\n\n } @else if (col.field && col.pipe) {\n\n {{ applyPipe(col.pipe, resolveFieldPath(item, col.field), col.pipeArgs || []) }}\n\n } @else if(col.field) {\n\n {{ resolveFieldPath(item, col.field) }}\n\n }\n\n }\n </td>\n }\n </tr>\n }\n </tbody>\n\n <caption>\n @if (isPagination()) {\n <div class=\"ys-table-pagination d-flex flex-wrap justify-content-between align-items-center gap-2\">\n\n <!-- صفحه‌بندی -->\n <ngb-pagination [collectionSize]=\"collectionSize()\" [page]=\"page()\" [pageSize]=\"pageSize()\"\n [maxSize]=\"5\" [rotate]=\"true\" [ellipses]=\"false\" [boundaryLinks]=\"true\"\n (pageChange)=\"changePage($event)\" />\n\n <!-- انتخاب تعداد در هر صفحه -->\n <select class=\"pagination-select form-select form-select-sm w-auto\" [(ngModel)]=\"pageSize\"\n (change)=\"changePageSize(pageSize())\" id=\"pagination\">\n @for (opt of rowsPerPage(); track opt) {\n <option [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n\n <!-- گزارش -->\n <small class=\"pagination-report text-muted ms-auto\">\n {{ pageReportText() }}\n </small>\n </div>\n }\n </caption>\n\n </table>\n\n </div>\n </div>\n</div>","/*\r\n * Public API Surface of ys-tiff-viewer\r\n */\r\n\r\nexport * from './src/models';\r\nexport * from './src/ys-table/ys-table';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yoozsoft-yoozsoft-ng-table.mjs","sources":["../../../../projects/yoozsoft/yoozsoft-ng/table/src/ys-table/ys-table.ts","../../../../projects/yoozsoft/yoozsoft-ng/table/src/ys-table/ys-table.html","../../../../projects/yoozsoft/yoozsoft-ng/table/public-api.ts","../../../../projects/yoozsoft/yoozsoft-ng/table/yoozsoft-yoozsoft-ng-table.ts"],"sourcesContent":["import { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n PipeTransform,\r\n signal,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NgbDropdownModule, NgbPagination, NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ActionButton, RowIndicator, TableColumn, ToolbarButton, ValueOrFn } from '../models';\r\n\r\n@Component({\r\n selector: 'ys-table',\r\n imports: [NgClass, FormsModule, NgTemplateOutlet, NgbDropdownModule, NgbPagination, NgbTooltip],\r\n templateUrl: './ys-table.html',\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n styleUrl: './ys-table.scss',\r\n})\r\nexport class YsTable {\r\n items = input<any[]>([]);\r\n columns = input<TableColumn[]>([]);\r\n actionButtons = input<ActionButton[]>([]);\r\n\r\n toolbarButtons = input<ToolbarButton[]>([]);\r\n\r\n rowStyleClass = input<string | ((row: any) => string)>();\r\n\r\n rowIndicators = input<RowIndicator[]>([]);\r\n\r\n serverSide = input<boolean>(false); // <--- حالت سروری\r\n isPagination = input<boolean>(true);\r\n rowsPerPage = input<number[]>([10, 25, 50]);\r\n pageReportTemplate = input<string>('Showing {first} to {last} of {totalRecords} items');\r\n\r\n page = model<number>(1);\r\n pageSize = model<number>(this.rowsPerPage()[0] || 10);\r\n collectionSize = model<number>(0); // <--- از سرور می‌گیریم\r\n\r\n hasSearch = input<boolean>(false);\r\n searchPlaceholder = input<string>('search...');\r\n searchStyleClass = input<string>();\r\n\r\n styleClass = input<string>();\r\n toolbarStyleClass = input<string>();\r\n tableStyleClass = input<string>();\r\n\r\n /** Selectable rows checkbox */\r\n selectableRows = input<boolean>(false);\r\n /** Condition for each row's checkbox to be active */\r\n isRowSelectable = input<(row: any) => boolean>();\r\n\r\n rowKey = input<string>('id');\r\n\r\n pageChanged = output<{ page: number; pageSize: number }>();\r\n search = output<string>();\r\n\r\n /** checkbox */\r\n selectedItemsChange = output<any[]>();\r\n\r\n searchTerm = signal<string>('');\r\n sortedColumn = signal<string | null>(null);\r\n sortDirection = signal<'asc' | 'desc'>('asc');\r\n\r\n readonly filteredItems = computed(() => {\r\n let items = [...this.items()];\r\n\r\n const search = this.searchTerm().trim().toLowerCase();\r\n\r\n if (search) {\r\n items = items.filter((item) =>\r\n this.columns().some((col) => {\r\n let value = '';\r\n\r\n if (col.template) {\r\n value = this.applyTemplate(col.template, item);\r\n } else if (col.field) {\r\n value = this.resolveFieldPath(item, col.field);\r\n }\r\n\r\n return value?.toString().toLowerCase().includes(search);\r\n }),\r\n );\r\n }\r\n\r\n const sortField = this.sortedColumn();\r\n\r\n if (sortField) {\r\n items.sort((a, b) => {\r\n const aVal = this.resolveFieldPath(a, sortField);\r\n const bVal = this.resolveFieldPath(b, sortField);\r\n\r\n if (aVal == null) return this.sortDirection() === 'asc' ? -1 : 1;\r\n if (bVal == null) return this.sortDirection() === 'asc' ? 1 : -1;\r\n\r\n return this.sortDirection() === 'asc'\r\n ? String(aVal).localeCompare(String(bVal))\r\n : String(bVal).localeCompare(String(aVal));\r\n });\r\n }\r\n\r\n return items;\r\n });\r\n\r\n readonly paginatedItems = computed(() => {\r\n if (this.serverSide()) {\r\n return this.items();\r\n }\r\n\r\n if (!this.isPagination()) {\r\n return this.filteredItems();\r\n }\r\n\r\n const start = (this.page() - 1) * this.pageSize();\r\n\r\n return this.filteredItems().slice(start, start + this.pageSize());\r\n });\r\n\r\n selectedItems = signal<any[]>([]);\r\n\r\n totalPages = computed<number>(() => {\r\n return Math.ceil(this.collectionSize() / this.pageSize()) || 1;\r\n });\r\n\r\n firstIndex = computed<number>(() => {\r\n return (this.page() - 1) * this.pageSize();\r\n });\r\n\r\n lastIndex = computed<number>(() => {\r\n return Math.min(this.firstIndex() + this.pageSize(), this.collectionSize());\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n this.columns();\r\n this.checkUniqueColumnKeys();\r\n });\r\n\r\n effect(() => {\r\n if (!this.serverSide()) {\r\n this.collectionSize.set(this.filteredItems().length);\r\n }\r\n });\r\n }\r\n\r\n onSort(field: string): void {\r\n if (this.sortedColumn() === field) {\r\n this.sortDirection.update((v) => (v === 'asc' ? 'desc' : 'asc'));\r\n } else {\r\n this.sortedColumn.set(field);\r\n this.sortDirection.set('asc');\r\n }\r\n }\r\n\r\n changePage(page: number): void {\r\n if (page < 1 || page > this.totalPages()) {\r\n return;\r\n }\r\n\r\n this.page.set(page);\r\n\r\n if (this.serverSide()) {\r\n this.pageChanged.emit({\r\n page,\r\n pageSize: this.pageSize(),\r\n });\r\n }\r\n }\r\n\r\n changePageSize(size: number): void {\r\n this.pageSize.set(+size);\r\n this.page.set(1);\r\n\r\n if (this.serverSide()) {\r\n this.pageChanged.emit({\r\n page: 1,\r\n pageSize: +size,\r\n });\r\n }\r\n }\r\n\r\n onSearch(target: EventTarget | null): void {\r\n this.searchTerm.set((target as HTMLInputElement).value);\r\n\r\n this.page.set(1);\r\n\r\n if (this.serverSide()) {\r\n this.search.emit(this.searchTerm());\r\n }\r\n }\r\n\r\n applyPipe(pipe: PipeTransform, value: unknown, args: unknown[] = []): any {\r\n return pipe?.transform(value, ...args);\r\n }\r\n\r\n resolveFieldPath(obj: any, path: string): any {\r\n return path.split('.').reduce((acc, part) => acc?.[part], obj);\r\n }\r\n\r\n applyTemplate(template: string, item: any): string {\r\n return template.replace(/\\{([^}]+)\\}/g, (_, path) => {\r\n const val = this.resolveFieldPath(item, path.trim());\r\n return val !== undefined && val !== null ? val : '';\r\n });\r\n }\r\n\r\n private checkUniqueColumnKeys(): void {\r\n const seen = new Set<number>();\r\n const duplicates: number[] = [];\r\n\r\n this.columns().forEach((col) => {\r\n if (!col.key) {\r\n throw new Error(`Column with header \"${col.header}\" is missing a unique \"key\"`);\r\n }\r\n if (seen.has(col.key)) {\r\n duplicates.push(col.key);\r\n } else {\r\n seen.add(col.key);\r\n }\r\n });\r\n\r\n if (duplicates.length > 0) {\r\n throw new Error(`Duplicate column keys found: ${duplicates.join(', ')}`);\r\n }\r\n }\r\n\r\n getLabel(action: ActionButton, item: any): string {\r\n return typeof action.label === 'function' ? action.label(item) : (action.label ?? 'Label');\r\n }\r\n\r\n getIconClass(action: ActionButton, item: any): string {\r\n return typeof action.iconClass === 'function'\r\n ? action.iconClass(item)\r\n : (action.iconClass ?? '');\r\n }\r\n\r\n getTooltipText(tooltip?: string | (() => string)): string {\r\n if (!tooltip) return '';\r\n\r\n return typeof tooltip === 'function' ? tooltip() : tooltip;\r\n }\r\n\r\n getLabelText(label?: string | (() => string)): string {\r\n if (!label) return '';\r\n\r\n return typeof label === 'function' ? label() : label;\r\n }\r\n\r\n itemKey(item: any): string {\r\n return String(item[this.rowKey()]);\r\n }\r\n\r\n onSelectionChange(item: any, checked: boolean) {\r\n if (checked) {\r\n this.selectedItems.update((items) => [...items, item]);\r\n } else {\r\n this.selectedItems.update((items) =>\r\n items.filter((x) => this.itemKey(x) !== this.itemKey(item)),\r\n );\r\n }\r\n\r\n this.selectedItemsChange.emit(this.selectedItems());\r\n }\r\n\r\n isSelected(item: any): boolean {\r\n return this.selectedItems().some((x) => this.itemKey(x) === this.itemKey(item));\r\n }\r\n\r\n toggleSelection(item: any, event: Event): void {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n\r\n if (checked) {\r\n this.selectedItems.update((items) => [...items, item]);\r\n } else {\r\n this.selectedItems.update((items) =>\r\n items.filter((x) => this.itemKey(x) !== this.itemKey(item)),\r\n );\r\n }\r\n\r\n this.selectedItemsChange.emit(this.selectedItems());\r\n }\r\n\r\n allSelected(): boolean {\r\n const selectable = this.paginatedItems().filter((i) => this.isSelectable(i));\r\n\r\n return selectable.length > 0 && selectable.every((i) => this.isSelected(i));\r\n }\r\n\r\n toggleSelectAll(event: Event): void {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n\r\n if (checked) {\r\n const itemsToAdd = this.paginatedItems().filter(\r\n (item) =>\r\n this.isSelectable(item) &&\r\n !this.selectedItems().some((x) => this.itemKey(x) === this.itemKey(item)),\r\n );\r\n\r\n this.selectedItems.update((items) => [...items, ...itemsToAdd]);\r\n } else {\r\n this.selectedItems.update((items) =>\r\n items.filter(\r\n (item) => !this.paginatedItems().some((p) => this.itemKey(p) === this.itemKey(item)),\r\n ),\r\n );\r\n }\r\n\r\n this.selectedItemsChange.emit(this.selectedItems());\r\n }\r\n\r\n getRowClass(row: any): string {\r\n const styleClass = this.rowStyleClass();\r\n\r\n if (!styleClass) {\r\n return '';\r\n }\r\n\r\n return typeof styleClass === 'function' ? styleClass(row) : styleClass;\r\n }\r\n\r\n getColumnClass(col: TableColumn, row: any): string {\r\n if (!col.styleClass) return '';\r\n return typeof col.styleClass === 'function' ? col.styleClass(row) : col.styleClass;\r\n }\r\n\r\n isSortable(col: TableColumn): col is TableColumn & { field: string } {\r\n return !!col.sortable && !!col.field;\r\n }\r\n\r\n isSelectable(row: any): boolean {\r\n if (!this.selectableRows()) {\r\n return false;\r\n }\r\n\r\n const predicate = this.isRowSelectable();\r\n\r\n return predicate ? predicate(row) : true;\r\n }\r\n\r\n resolveValue<T>(value: ValueOrFn<T> | undefined, row: any): T | undefined {\r\n return typeof value === 'function' ? (value as (row: any) => T)(row) : value;\r\n }\r\n\r\n getVisibleIndicators(row: any): RowIndicator[] {\r\n return this.rowIndicators().filter((ind) => {\r\n if (ind.visible === undefined) return true;\r\n return this.resolveValue(ind.visible, row);\r\n });\r\n }\r\n\r\n readonly firstRecord = computed(() => (this.collectionSize() === 0 ? 0 : this.firstIndex() + 1));\r\n\r\n readonly pageReportText = computed(() =>\r\n this.pageReportTemplate()\r\n .replace('{first}', this.firstRecord() + '')\r\n .replace('{last}', this.lastIndex() + '')\r\n .replace('{totalRecords}', this.collectionSize() + ''),\r\n );\r\n}\r\n","<div class=\"ys-table-container card shadow-sm\" [class]=\"styleClass()\">\r\n <div class=\"card-body\">\r\n <div class=\"table-responsive\">\r\n <div class=\"ys-table-toolbar d-flex justify-content-between\" [class]=\"toolbarStyleClass()\">\r\n @if (toolbarButtons() && toolbarButtons().length) {\r\n <div class=\"mb-2 d-flex gap-2 w-100\">\r\n @for (btn of toolbarButtons(); track $index) {\r\n @if (!btn.visible || btn.visible()) {\r\n <button class=\"btn btn-primary btn-sm\" [class]=\"btn.styleClass\" (click)=\"btn.onClick?.()\"\r\n [disabled]=\"btn.disabled?.()\" [ngbTooltip]=\"getTooltipText(btn.tooltip)\">\r\n @if (btn.iconClass) {\r\n <i [class]=\"btn.iconClass\"></i>\r\n }\r\n\r\n {{ getLabelText(btn.label) }}\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n @if (hasSearch()) {\r\n <input type=\"text\" class=\"form-control w-auto mb-2 ms-auto\" [class]=\"searchStyleClass()\"\r\n [placeholder]=\"searchPlaceholder()\" (input)=\"onSearch($event.target)\" />\r\n }\r\n </div>\r\n\r\n <table class=\"ys-table table table-striped table-hover align-middle\" [class]=\"tableStyleClass()\">\r\n <thead class=\"table-light\">\r\n <tr>\r\n <th class=\"number-col\">#</th>\r\n\r\n @if (selectableRows()) {\r\n <th class=\"select-col\">\r\n <input type=\"checkbox\" [checked]=\"allSelected()\" (change)=\"toggleSelectAll($event)\" id=\"allSelect\" />\r\n </th>\r\n }\r\n\r\n @if (rowIndicators().length) {\r\n <th class=\"indicator-col\"></th>\r\n }\r\n\r\n @if (actionButtons().length) {\r\n <th></th>\r\n }\r\n\r\n @for (col of columns(); track col.key) {\r\n <th [class.cursor-pointer]=\"isSortable(col)\" (click)=\"isSortable(col) && onSort(col.field)\"\r\n [class]=\"col.headerStyleClass\">\r\n {{ col.header }}\r\n\r\n @if (isSortable(col)) {\r\n <i class=\"fa\" [ngClass]=\"{\r\n 'fa-sort': sortedColumn() !== col.field,\r\n 'fa-sort-up': sortedColumn() === col.field && sortDirection() === 'asc',\r\n 'fa-sort-down': sortedColumn() === col.field && sortDirection() === 'desc',\r\n }\"></i>\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n @for (item of paginatedItems(); track $index; let i = $index) {\r\n <tr [class]=\"getRowClass(item)\">\r\n <td class=\"number-col\">{{ (page() - 1) * pageSize() + i + 1 }}</td>\r\n\r\n @if (selectableRows()) {\r\n <td class=\"select-col\">\r\n <input #checkbox type=\"checkbox\" [checked]=\"isSelected(item)\" (change)=\"toggleSelection(item, $event)\"\r\n [disabled]=\"!isSelectable(item)\" [class.opacity-50]=\"!isSelectable(item)\"\r\n id=\"{{ 'select' + $index }}\" />\r\n </td>\r\n }\r\n\r\n @if (rowIndicators().length) {\r\n <td class=\"indicator-col text-center\">\r\n <div class=\"d-flex justify-content-center align-items-center gap-1\">\r\n @for (ind of getVisibleIndicators(item); track $index) {\r\n @if ((ind.type || 'icon') === 'icon') {\r\n <i [class.cursor-pointer]=\"ind.onClick\" [class]=\"\r\n resolveValue(ind.iconClass, item) +\r\n ' ' +\r\n (resolveValue(ind.styleClass, item) || '')\r\n \" [ngbTooltip]=\"resolveValue(ind.tooltip, item)\" (click)=\"ind.onClick?.(item)\">\r\n </i>\r\n } @else if (ind.type === 'badge') {\r\n <span class=\"badge rounded-pill position-relative\" [class]=\"resolveValue(ind.styleClass, item)\"\r\n [ngbTooltip]=\"resolveValue(ind.tooltip, item)\" (click)=\"ind.onClick?.(item)\">\r\n @if (resolveValue(ind.iconClass, item)) {\r\n <i [class]=\"resolveValue(ind.iconClass, item)\"></i>\r\n }\r\n\r\n @if (resolveValue(ind.badgeLabel, item)) {\r\n {{ resolveValue(ind.badgeLabel, item) }}\r\n }\r\n\r\n @if (resolveValue(ind.badgeValue, item)) {\r\n <span class=\"position-absolute top-0 start-100 translate-middle badge rounded-pill\"\r\n [class]=\"resolveValue(ind.badgeValueClass, item)\">\r\n {{ resolveValue(ind.badgeValue, item) }}\r\n </span>\r\n }\r\n </span>\r\n }\r\n }\r\n </div>\r\n </td>\r\n }\r\n\r\n @if (actionButtons().length) {\r\n <td>\r\n <div class=\"dropdown\">\r\n <button class=\"btn btn-light btn-sm btn-menu\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <i class=\"fa fa-bars\"></i>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n @for (action of actionButtons(); track $index) {\r\n @if (!action.visible || action.visible(item)) {\r\n @if (action.isDivider) {\r\n <li>\r\n <hr class=\"dropdown-divider\" />\r\n </li>\r\n } @else {\r\n <li>\r\n <button class=\"dropdown-item d-flex align-items-center gap-2\" type=\"button\"\r\n [class]=\"action.styleClass\" (click)=\"action.onClick?.(item)\" [disabled]=\"action.disabled?.(item)\">\r\n @if (action.iconClass) {\r\n <i [class]=\"getIconClass(action, item)\"></i>\r\n }\r\n {{ getLabel(action, item) }}\r\n </button>\r\n </li>\r\n }\r\n }\r\n }\r\n </ul>\r\n </div>\r\n </td>\r\n }\r\n\r\n @for (col of columns(); track col.key) {\r\n <td [class]=\"getColumnClass(col, item)\">\r\n @if (!col.visible || col.visible(item)) {\r\n @if (col.cellTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\">\r\n </ng-container>\r\n } @else if (col.template) {\r\n {{ applyTemplate(col.template, item) }}\r\n } @else if (col.field && col.pipe) {\r\n {{\r\n applyPipe(col.pipe, resolveFieldPath(item, col.field), col.pipeArgs || [])\r\n }}\r\n } @else if (col.field) {\r\n {{ resolveFieldPath(item, col.field) }}\r\n }\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n\r\n <caption>\r\n @if (isPagination()) {\r\n <div class=\"ys-table-pagination d-flex flex-wrap justify-content-between align-items-center gap-2\">\r\n <!-- صفحه‌بندی -->\r\n <ngb-pagination [collectionSize]=\"collectionSize()\" [page]=\"page()\" [pageSize]=\"pageSize()\" [maxSize]=\"5\"\r\n [rotate]=\"true\" [ellipses]=\"false\" [boundaryLinks]=\"true\" (pageChange)=\"changePage($event)\" />\r\n\r\n <!-- انتخاب تعداد در هر صفحه -->\r\n <select class=\"pagination-select form-select form-select-sm w-auto\" [(ngModel)]=\"pageSize\"\r\n (change)=\"changePageSize(pageSize())\" id=\"pagination\">\r\n @for (opt of rowsPerPage(); track opt) {\r\n <option [value]=\"opt\">{{ opt }}</option>\r\n }\r\n </select>\r\n\r\n <!-- گزارش -->\r\n <small class=\"pagination-report text-muted ms-auto\">\r\n {{ pageReportText() }}\r\n </small>\r\n </div>\r\n }\r\n </caption>\r\n </table>\r\n </div>\r\n </div>\r\n</div>","/*\r\n * Public API Surface of ys-tiff-viewer\r\n */\r\n\r\nexport * from './src/models';\r\nexport * from './src/ys-table/ys-table';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,50 +1,66 @@
1
1
  import { isPlatformBrowser, NgClass } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { inject, PLATFORM_ID, input, output, signal, computed, viewChild, effect, Component } from '@angular/core';
3
+ import { inject, PLATFORM_ID, input, output, signal, computed, viewChild, effect, ChangeDetectionStrategy, Component } from '@angular/core';
4
4
 
5
5
  const DEFAULT_TIFF_ICONS = {
6
6
  first: 'fa fa-fast-backward',
7
7
  previous: 'fa fa-step-backward',
8
8
  next: 'fa fa-step-forward',
9
- last: 'fa fa-fast-forward'
9
+ last: 'fa fa-fast-forward',
10
10
  };
11
11
  class YsTiffViewer {
12
12
  // ---------- injects ----------
13
13
  platformId = inject(PLATFORM_ID);
14
14
  // ---------- inputs ----------
15
- buffer = input(...(ngDevMode ? [undefined, { debugName: "buffer" }] : /* istanbul ignore next */ []));
16
- styleClass = input(...(ngDevMode ? [undefined, { debugName: "styleClass" }] : /* istanbul ignore next */ []));
17
- noFileMessage = input('No image file', ...(ngDevMode ? [{ debugName: "noFileMessage" }] : /* istanbul ignore next */ []));
18
- noFileStyleClass = input('text-center', ...(ngDevMode ? [{ debugName: "noFileStyleClass" }] : /* istanbul ignore next */ []));
19
- icons = input({}, ...(ngDevMode ? [{ debugName: "icons" }] : /* istanbul ignore next */ []));
20
- pageReportTemplate = input('Page {current} of {total}', ...(ngDevMode ? [{ debugName: "pageReportTemplate" }] : /* istanbul ignore next */ []));
15
+ buffer = input(/* @ts-ignore */
16
+ ...(ngDevMode ? [undefined, { debugName: "buffer" }] : /* istanbul ignore next */ []));
17
+ styleClass = input(/* @ts-ignore */
18
+ ...(ngDevMode ? [undefined, { debugName: "styleClass" }] : /* istanbul ignore next */ []));
19
+ noFileMessage = input('No image file', /* @ts-ignore */
20
+ ...(ngDevMode ? [{ debugName: "noFileMessage" }] : /* istanbul ignore next */ []));
21
+ noFileStyleClass = input('text-center', /* @ts-ignore */
22
+ ...(ngDevMode ? [{ debugName: "noFileStyleClass" }] : /* istanbul ignore next */ []));
23
+ icons = input({}, /* @ts-ignore */
24
+ ...(ngDevMode ? [{ debugName: "icons" }] : /* istanbul ignore next */ []));
25
+ pageReportTemplate = input('Page {current} of {total}', /* @ts-ignore */
26
+ ...(ngDevMode ? [{ debugName: "pageReportTemplate" }] : /* istanbul ignore next */ []));
21
27
  // ---------- outputs ----------
22
28
  pageChange = output();
23
29
  emitPageChange() {
24
30
  this.pageChange.emit({
25
31
  index: this.currentIndex(),
26
32
  page: this.currentPage(),
27
- total: this.ifds().length
33
+ total: this.ifds().length,
28
34
  });
29
35
  }
30
36
  // ---------- state ----------
31
- ifds = signal([], ...(ngDevMode ? [{ debugName: "ifds" }] : /* istanbul ignore next */ []));
32
- currentIndex = signal(0, ...(ngDevMode ? [{ debugName: "currentIndex" }] : /* istanbul ignore next */ []));
33
- isDecoding = signal(false, ...(ngDevMode ? [{ debugName: "isDecoding" }] : /* istanbul ignore next */ []));
37
+ ifds = signal([], /* @ts-ignore */
38
+ ...(ngDevMode ? [{ debugName: "ifds" }] : /* istanbul ignore next */ []));
39
+ currentIndex = signal(0, /* @ts-ignore */
40
+ ...(ngDevMode ? [{ debugName: "currentIndex" }] : /* istanbul ignore next */ []));
41
+ isDecoding = signal(false, /* @ts-ignore */
42
+ ...(ngDevMode ? [{ debugName: "isDecoding" }] : /* istanbul ignore next */ []));
34
43
  decodeVersion = 0;
35
- isIFDs = computed(() => this.ifds().length > 0, ...(ngDevMode ? [{ debugName: "isIFDs" }] : /* istanbul ignore next */ []));
36
- isFirstImage = computed(() => !this.isIFDs() || this.currentIndex() === 0, ...(ngDevMode ? [{ debugName: "isFirstImage" }] : /* istanbul ignore next */ []));
37
- isLastImage = computed(() => !this.isIFDs() || this.currentIndex() === this.ifds().length - 1, ...(ngDevMode ? [{ debugName: "isLastImage" }] : /* istanbul ignore next */ []));
38
- currentPage = computed(() => this.currentIndex() + 1, ...(ngDevMode ? [{ debugName: "currentPage" }] : /* istanbul ignore next */ []));
44
+ isIFDs = computed(() => this.ifds().length > 0, /* @ts-ignore */
45
+ ...(ngDevMode ? [{ debugName: "isIFDs" }] : /* istanbul ignore next */ []));
46
+ isFirstImage = computed(() => !this.isIFDs() || this.currentIndex() === 0, /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "isFirstImage" }] : /* istanbul ignore next */ []));
48
+ isLastImage = computed(() => !this.isIFDs() || this.currentIndex() === this.ifds().length - 1, /* @ts-ignore */
49
+ ...(ngDevMode ? [{ debugName: "isLastImage" }] : /* istanbul ignore next */ []));
50
+ currentPage = computed(() => this.currentIndex() + 1, /* @ts-ignore */
51
+ ...(ngDevMode ? [{ debugName: "currentPage" }] : /* istanbul ignore next */ []));
39
52
  mergedIcons = computed(() => ({
40
53
  ...DEFAULT_TIFF_ICONS,
41
- ...this.icons()
42
- }), ...(ngDevMode ? [{ debugName: "mergedIcons" }] : /* istanbul ignore next */ []));
54
+ ...this.icons(),
55
+ }), /* @ts-ignore */
56
+ ...(ngDevMode ? [{ debugName: "mergedIcons" }] : /* istanbul ignore next */ []));
43
57
  pageReport = computed(() => this.pageReportTemplate()
44
58
  .replace('{current}', `${this.currentPage()}`)
45
- .replace('{total}', `${this.ifds().length}`), ...(ngDevMode ? [{ debugName: "pageReport" }] : /* istanbul ignore next */ []));
59
+ .replace('{total}', `${this.ifds().length}`), /* @ts-ignore */
60
+ ...(ngDevMode ? [{ debugName: "pageReport" }] : /* istanbul ignore next */ []));
46
61
  // ---------- viewchilds ----------
47
- canvasRef = viewChild.required('tiffCanvas');
62
+ canvasRef = viewChild.required('tiffCanvas', /* @ts-ignore */
63
+ ...(ngDevMode ? [{ debugName: "canvasRef" }] : /* istanbul ignore next */ []));
48
64
  constructor() {
49
65
  effect(() => {
50
66
  const buf = this.buffer();
@@ -66,9 +82,7 @@ class YsTiffViewer {
66
82
  const version = ++this.decodeVersion;
67
83
  this.ifds.set([]);
68
84
  this.currentIndex.set(0);
69
- let buffer = source instanceof ArrayBuffer
70
- ? source
71
- : await source.arrayBuffer();
85
+ let buffer = source instanceof ArrayBuffer ? source : await source.arrayBuffer();
72
86
  const decoded = UTIF.decode(buffer);
73
87
  if (version !== this.decodeVersion) {
74
88
  return;
@@ -122,12 +136,12 @@ class YsTiffViewer {
122
136
  const i = this.ifds().length - 1;
123
137
  this.goTo(i);
124
138
  }
125
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: YsTiffViewer, deps: [], target: i0.ɵɵFactoryTarget.Component });
126
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: YsTiffViewer, isStandalone: true, selector: "ys-tiff-viewer", inputs: { buffer: { classPropertyName: "buffer", publicName: "buffer", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, noFileMessage: { classPropertyName: "noFileMessage", publicName: "noFileMessage", isSignal: true, isRequired: false, transformFunction: null }, noFileStyleClass: { classPropertyName: "noFileStyleClass", publicName: "noFileStyleClass", isSignal: true, isRequired: false, transformFunction: null }, icons: { classPropertyName: "icons", publicName: "icons", isSignal: true, isRequired: false, transformFunction: null }, pageReportTemplate: { classPropertyName: "pageReportTemplate", publicName: "pageReportTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageChange: "pageChange" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["tiffCanvas"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"tiff-viewer\">\n <div class=\"row\">\n <div class=\"col d-flex justify-content-between align-items-center\">\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"first()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().first\"></i>\n\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"previous()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().previous\"></i>\n </button>\n </div>\n\n @if (isIFDs()) {\n <span>{{ pageReport() }}</span>\n }\n\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"next()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().next\"></i>\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"last()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().last\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"canvas-container card mt-1\" [ngClass]=\"styleClass()\">\n @if (!isIFDs() && noFileMessage()) {\n <span [ngClass]=\"noFileStyleClass()\">{{ noFileMessage() }}</span>\n }\n\n <canvas #tiffCanvas class=\"img-fluid\" [class.d-none]=\"!isIFDs()\">\n </canvas>\n\n <div class=\"spinner-border text-info position-absolute\" [class.d-none]=\"!isDecoding()\">\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".tiff-viewer{direction:ltr!important}.backdrop{background-color:rgba(var(--bs-dark-rgb),.3)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
139
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: YsTiffViewer, deps: [], target: i0.ɵɵFactoryTarget.Component });
140
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: YsTiffViewer, isStandalone: true, selector: "ys-tiff-viewer", inputs: { buffer: { classPropertyName: "buffer", publicName: "buffer", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, noFileMessage: { classPropertyName: "noFileMessage", publicName: "noFileMessage", isSignal: true, isRequired: false, transformFunction: null }, noFileStyleClass: { classPropertyName: "noFileStyleClass", publicName: "noFileStyleClass", isSignal: true, isRequired: false, transformFunction: null }, icons: { classPropertyName: "icons", publicName: "icons", isSignal: true, isRequired: false, transformFunction: null }, pageReportTemplate: { classPropertyName: "pageReportTemplate", publicName: "pageReportTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageChange: "pageChange" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["tiffCanvas"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"tiff-viewer\">\n <div class=\"row\">\n <div class=\"col d-flex justify-content-between align-items-center\">\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"first()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().first\"></i>\n\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"previous()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().previous\"></i>\n </button>\n </div>\n\n @if (isIFDs()) {\n <span>{{ pageReport() }}</span>\n }\n\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"next()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().next\"></i>\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"last()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().last\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"canvas-container card mt-1\" [ngClass]=\"styleClass()\">\n @if (!isIFDs() && noFileMessage()) {\n <span [ngClass]=\"noFileStyleClass()\">{{ noFileMessage() }}</span>\n }\n\n <canvas #tiffCanvas class=\"img-fluid\" [class.d-none]=\"!isIFDs()\">\n </canvas>\n\n <div class=\"spinner-border text-info position-absolute\" [class.d-none]=\"!isDecoding()\">\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".tiff-viewer{direction:ltr!important}.backdrop{background-color:rgba(var(--bs-dark-rgb),.3)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
127
141
  }
128
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: YsTiffViewer, decorators: [{
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: YsTiffViewer, decorators: [{
129
143
  type: Component,
130
- args: [{ selector: 'ys-tiff-viewer', imports: [NgClass], template: "<div class=\"tiff-viewer\">\n <div class=\"row\">\n <div class=\"col d-flex justify-content-between align-items-center\">\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"first()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().first\"></i>\n\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"previous()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().previous\"></i>\n </button>\n </div>\n\n @if (isIFDs()) {\n <span>{{ pageReport() }}</span>\n }\n\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"next()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().next\"></i>\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"last()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().last\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"canvas-container card mt-1\" [ngClass]=\"styleClass()\">\n @if (!isIFDs() && noFileMessage()) {\n <span [ngClass]=\"noFileStyleClass()\">{{ noFileMessage() }}</span>\n }\n\n <canvas #tiffCanvas class=\"img-fluid\" [class.d-none]=\"!isIFDs()\">\n </canvas>\n\n <div class=\"spinner-border text-info position-absolute\" [class.d-none]=\"!isDecoding()\">\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".tiff-viewer{direction:ltr!important}.backdrop{background-color:rgba(var(--bs-dark-rgb),.3)}\n"] }]
144
+ args: [{ selector: 'ys-tiff-viewer', imports: [NgClass], changeDetection: ChangeDetectionStrategy.Eager, template: "<div class=\"tiff-viewer\">\n <div class=\"row\">\n <div class=\"col d-flex justify-content-between align-items-center\">\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"first()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().first\"></i>\n\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"previous()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().previous\"></i>\n </button>\n </div>\n\n @if (isIFDs()) {\n <span>{{ pageReport() }}</span>\n }\n\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"next()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().next\"></i>\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"last()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().last\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"canvas-container card mt-1\" [ngClass]=\"styleClass()\">\n @if (!isIFDs() && noFileMessage()) {\n <span [ngClass]=\"noFileStyleClass()\">{{ noFileMessage() }}</span>\n }\n\n <canvas #tiffCanvas class=\"img-fluid\" [class.d-none]=\"!isIFDs()\">\n </canvas>\n\n <div class=\"spinner-border text-info position-absolute\" [class.d-none]=\"!isDecoding()\">\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".tiff-viewer{direction:ltr!important}.backdrop{background-color:rgba(var(--bs-dark-rgb),.3)}\n"] }]
131
145
  }], ctorParameters: () => [], propDecorators: { buffer: [{ type: i0.Input, args: [{ isSignal: true, alias: "buffer", required: false }] }], styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], noFileMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "noFileMessage", required: false }] }], noFileStyleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "noFileStyleClass", required: false }] }], icons: [{ type: i0.Input, args: [{ isSignal: true, alias: "icons", required: false }] }], pageReportTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageReportTemplate", required: false }] }], pageChange: [{ type: i0.Output, args: ["pageChange"] }], canvasRef: [{ type: i0.ViewChild, args: ['tiffCanvas', { isSignal: true }] }] } });
132
146
 
133
147
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"yoozsoft-yoozsoft-ng-tiff-viewer.mjs","sources":["../../../../projects/yoozsoft/yoozsoft-ng/tiff-viewer/src/ys-tiff-viewer/ys-tiff-viewer.ts","../../../../projects/yoozsoft/yoozsoft-ng/tiff-viewer/src/ys-tiff-viewer/ys-tiff-viewer.html","../../../../projects/yoozsoft/yoozsoft-ng/tiff-viewer/public-api.ts","../../../../projects/yoozsoft/yoozsoft-ng/tiff-viewer/yoozsoft-yoozsoft-ng-tiff-viewer.ts"],"sourcesContent":["import { isPlatformBrowser, NgClass } from '@angular/common';\nimport { Component, computed, effect, ElementRef, inject, input, output, PLATFORM_ID, signal, viewChild } from '@angular/core';\nimport { TiffPageChange, TiffViewerIcons } from '../models';\n\ndeclare var UTIF: any;\n\nconst DEFAULT_TIFF_ICONS: Record<\n 'first' | 'previous' | 'next' | 'last',\n string\n> = {\n first: 'fa fa-fast-backward',\n previous: 'fa fa-step-backward',\n next: 'fa fa-step-forward',\n last: 'fa fa-fast-forward'\n};\n\n@Component({\n selector: 'ys-tiff-viewer',\n imports: [NgClass],\n templateUrl: './ys-tiff-viewer.html',\n styleUrl: './ys-tiff-viewer.scss',\n})\nexport class YsTiffViewer {\n\n // ---------- injects ----------\n private platformId = inject(PLATFORM_ID);\n\n // ---------- inputs ----------\n buffer = input<ArrayBuffer | Blob | File | null>();\n\n styleClass = input<string>();\n noFileMessage = input('No image file');\n noFileStyleClass = input('text-center');\n\n icons = input<TiffViewerIcons>({});\n\n pageReportTemplate = input('Page {current} of {total}');\n\n // ---------- outputs ----------\n pageChange = output<TiffPageChange>();\n private emitPageChange() {\n this.pageChange.emit({\n index: this.currentIndex(),\n page: this.currentPage(),\n total: this.ifds().length\n });\n }\n\n // ---------- state ----------\n private ifds = signal<any[]>([]);\n private currentIndex = signal(0);\n readonly isDecoding = signal(false);\n private decodeVersion = 0;\n\n readonly isIFDs = computed(() =>\n this.ifds().length > 0\n );\n\n readonly isFirstImage = computed(() =>\n !this.isIFDs() || this.currentIndex() === 0\n );\n\n readonly isLastImage = computed(\n () => !this.isIFDs() || this.currentIndex() === this.ifds().length - 1\n );\n\n readonly currentPage = computed(\n () => this.currentIndex() + 1\n );\n\n readonly mergedIcons = computed(() => ({\n ...DEFAULT_TIFF_ICONS,\n ...this.icons()\n }));\n\n readonly pageReport = computed(() =>\n this.pageReportTemplate()\n .replace('{current}', `${this.currentPage()}`)\n .replace('{total}', `${this.ifds().length}`)\n );\n\n // ---------- viewchilds ----------\n canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('tiffCanvas');\n\n constructor() {\n effect(() => {\n const buf = this.buffer();\n\n if (!buf) return;\n\n if (isPlatformBrowser(this.platformId)) {\n this.decode(buf);\n }\n });\n }\n\n // ---------- logic ----------\n private async decode(source: ArrayBuffer | Blob | File): Promise<void> {\n const canvas = this.canvasRef().nativeElement;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n try {\n this.isDecoding.set(true);\n\n const version = ++this.decodeVersion;\n\n this.ifds.set([]);\n this.currentIndex.set(0);\n\n let buffer = source instanceof ArrayBuffer\n ? source\n : await source.arrayBuffer();\n\n const decoded = UTIF.decode(buffer);\n\n if (version !== this.decodeVersion) {\n return;\n }\n\n decoded.forEach((ifd: any) => UTIF.decodeImage(buffer, ifd));\n\n if (version !== this.decodeVersion) {\n return;\n }\n\n this.ifds.set(decoded);\n this.draw(0);\n this.emitPageChange();\n\n } catch (error) {\n\n console.error(error);\n\n } finally {\n\n this.isDecoding.set(false);\n\n }\n }\n\n private draw(index: number): void {\n const ctx = this.canvasRef().nativeElement.getContext('2d');\n if (!ctx) return;\n\n const ifd = this.ifds()[index];\n if (!ifd) return;\n\n const rgba = UTIF.toRGBA8(ifd);\n const imageData = new ImageData(\n new Uint8ClampedArray(rgba),\n ifd.width,\n ifd.height\n );\n\n ctx.canvas.width = ifd.width;\n ctx.canvas.height = ifd.height;\n ctx.putImageData(imageData, 0, 0);\n }\n\n // ---------- navigation ----------\n private goTo(index: number) {\n this.currentIndex.set(index);\n this.draw(index);\n this.emitPageChange();\n }\n\n first() {\n this.goTo(0);\n }\n\n previous() {\n const i = Math.max(this.currentIndex() - 1, 0);\n this.goTo(i);\n }\n\n next() {\n const i = Math.min(this.currentPage(), this.ifds().length - 1);\n this.goTo(i);\n }\n\n last() {\n const i = this.ifds().length - 1;\n this.goTo(i);\n }\n\n}","<div class=\"tiff-viewer\">\n <div class=\"row\">\n <div class=\"col d-flex justify-content-between align-items-center\">\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"first()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().first\"></i>\n\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"previous()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().previous\"></i>\n </button>\n </div>\n\n @if (isIFDs()) {\n <span>{{ pageReport() }}</span>\n }\n\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"next()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().next\"></i>\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"last()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().last\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"canvas-container card mt-1\" [ngClass]=\"styleClass()\">\n @if (!isIFDs() && noFileMessage()) {\n <span [ngClass]=\"noFileStyleClass()\">{{ noFileMessage() }}</span>\n }\n\n <canvas #tiffCanvas class=\"img-fluid\" [class.d-none]=\"!isIFDs()\">\n </canvas>\n\n <div class=\"spinner-border text-info position-absolute\" [class.d-none]=\"!isDecoding()\">\n </div>\n </div>\n </div>\n </div>\n</div>","/*\r\n * Public API Surface of ys-tiff-viewer\r\n */\r\n\r\nexport * from './src/models';\r\nexport * from './src/ys-tiff-viewer/ys-tiff-viewer';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yoozsoft-yoozsoft-ng-tiff-viewer.mjs","sources":["../../../../projects/yoozsoft/yoozsoft-ng/tiff-viewer/src/ys-tiff-viewer/ys-tiff-viewer.ts","../../../../projects/yoozsoft/yoozsoft-ng/tiff-viewer/src/ys-tiff-viewer/ys-tiff-viewer.html","../../../../projects/yoozsoft/yoozsoft-ng/tiff-viewer/public-api.ts","../../../../projects/yoozsoft/yoozsoft-ng/tiff-viewer/yoozsoft-yoozsoft-ng-tiff-viewer.ts"],"sourcesContent":["import { isPlatformBrowser, NgClass } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n PLATFORM_ID,\r\n signal,\r\n viewChild,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { TiffPageChange, TiffViewerIcons } from '../models';\r\n\r\ndeclare var UTIF: any;\r\n\r\nconst DEFAULT_TIFF_ICONS: Record<'first' | 'previous' | 'next' | 'last', string> = {\r\n first: 'fa fa-fast-backward',\r\n previous: 'fa fa-step-backward',\r\n next: 'fa fa-step-forward',\r\n last: 'fa fa-fast-forward',\r\n};\r\n\r\n@Component({\r\n selector: 'ys-tiff-viewer',\r\n imports: [NgClass],\r\n templateUrl: './ys-tiff-viewer.html',\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n styleUrl: './ys-tiff-viewer.scss',\r\n})\r\nexport class YsTiffViewer {\r\n // ---------- injects ----------\r\n private platformId = inject(PLATFORM_ID);\r\n\r\n // ---------- inputs ----------\r\n buffer = input<ArrayBuffer | Blob | File | null>();\r\n\r\n styleClass = input<string>();\r\n noFileMessage = input('No image file');\r\n noFileStyleClass = input('text-center');\r\n\r\n icons = input<TiffViewerIcons>({});\r\n\r\n pageReportTemplate = input('Page {current} of {total}');\r\n\r\n // ---------- outputs ----------\r\n pageChange = output<TiffPageChange>();\r\n private emitPageChange() {\r\n this.pageChange.emit({\r\n index: this.currentIndex(),\r\n page: this.currentPage(),\r\n total: this.ifds().length,\r\n });\r\n }\r\n\r\n // ---------- state ----------\r\n private ifds = signal<any[]>([]);\r\n private currentIndex = signal(0);\r\n readonly isDecoding = signal(false);\r\n private decodeVersion = 0;\r\n\r\n readonly isIFDs = computed(() => this.ifds().length > 0);\r\n\r\n readonly isFirstImage = computed(() => !this.isIFDs() || this.currentIndex() === 0);\r\n\r\n readonly isLastImage = computed(\r\n () => !this.isIFDs() || this.currentIndex() === this.ifds().length - 1,\r\n );\r\n\r\n readonly currentPage = computed(() => this.currentIndex() + 1);\r\n\r\n readonly mergedIcons = computed(() => ({\r\n ...DEFAULT_TIFF_ICONS,\r\n ...this.icons(),\r\n }));\r\n\r\n readonly pageReport = computed(() =>\r\n this.pageReportTemplate()\r\n .replace('{current}', `${this.currentPage()}`)\r\n .replace('{total}', `${this.ifds().length}`),\r\n );\r\n\r\n // ---------- viewchilds ----------\r\n canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('tiffCanvas');\r\n\r\n constructor() {\r\n effect(() => {\r\n const buf = this.buffer();\r\n\r\n if (!buf) return;\r\n\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.decode(buf);\r\n }\r\n });\r\n }\r\n\r\n // ---------- logic ----------\r\n private async decode(source: ArrayBuffer | Blob | File): Promise<void> {\r\n const canvas = this.canvasRef().nativeElement;\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return;\r\n\r\n try {\r\n this.isDecoding.set(true);\r\n\r\n const version = ++this.decodeVersion;\r\n\r\n this.ifds.set([]);\r\n this.currentIndex.set(0);\r\n\r\n let buffer = source instanceof ArrayBuffer ? source : await source.arrayBuffer();\r\n\r\n const decoded = UTIF.decode(buffer);\r\n\r\n if (version !== this.decodeVersion) {\r\n return;\r\n }\r\n\r\n decoded.forEach((ifd: any) => UTIF.decodeImage(buffer, ifd));\r\n\r\n if (version !== this.decodeVersion) {\r\n return;\r\n }\r\n\r\n this.ifds.set(decoded);\r\n this.draw(0);\r\n this.emitPageChange();\r\n } catch (error) {\r\n console.error(error);\r\n } finally {\r\n this.isDecoding.set(false);\r\n }\r\n }\r\n\r\n private draw(index: number): void {\r\n const ctx = this.canvasRef().nativeElement.getContext('2d');\r\n if (!ctx) return;\r\n\r\n const ifd = this.ifds()[index];\r\n if (!ifd) return;\r\n\r\n const rgba = UTIF.toRGBA8(ifd);\r\n const imageData = new ImageData(new Uint8ClampedArray(rgba), ifd.width, ifd.height);\r\n\r\n ctx.canvas.width = ifd.width;\r\n ctx.canvas.height = ifd.height;\r\n ctx.putImageData(imageData, 0, 0);\r\n }\r\n\r\n // ---------- navigation ----------\r\n private goTo(index: number) {\r\n this.currentIndex.set(index);\r\n this.draw(index);\r\n this.emitPageChange();\r\n }\r\n\r\n first() {\r\n this.goTo(0);\r\n }\r\n\r\n previous() {\r\n const i = Math.max(this.currentIndex() - 1, 0);\r\n this.goTo(i);\r\n }\r\n\r\n next() {\r\n const i = Math.min(this.currentPage(), this.ifds().length - 1);\r\n this.goTo(i);\r\n }\r\n\r\n last() {\r\n const i = this.ifds().length - 1;\r\n this.goTo(i);\r\n }\r\n}\r\n","<div class=\"tiff-viewer\">\n <div class=\"row\">\n <div class=\"col d-flex justify-content-between align-items-center\">\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"first()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().first\"></i>\n\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"previous()\" [disabled]=\"isFirstImage()\">\n <i [ngClass]=\"mergedIcons().previous\"></i>\n </button>\n </div>\n\n @if (isIFDs()) {\n <span>{{ pageReport() }}</span>\n }\n\n <div>\n <button class=\"btn btn-outline-primary me-2\" (click)=\"next()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().next\"></i>\n </button>\n\n <button class=\"btn btn-outline-primary\" (click)=\"last()\" [disabled]=\"isLastImage()\">\n <i [ngClass]=\"mergedIcons().last\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col\">\n <div class=\"canvas-container card mt-1\" [ngClass]=\"styleClass()\">\n @if (!isIFDs() && noFileMessage()) {\n <span [ngClass]=\"noFileStyleClass()\">{{ noFileMessage() }}</span>\n }\n\n <canvas #tiffCanvas class=\"img-fluid\" [class.d-none]=\"!isIFDs()\">\n </canvas>\n\n <div class=\"spinner-border text-info position-absolute\" [class.d-none]=\"!isDecoding()\">\n </div>\n </div>\n </div>\n </div>\n</div>","/*\r\n * Public API Surface of ys-tiff-viewer\r\n */\r\n\r\nexport * from './src/models';\r\nexport * from './src/ys-tiff-viewer/ys-tiff-viewer';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, Injectable, input, computed, inject, ElementRef, effect, TemplateRef, Component } from '@angular/core';
2
+ import { signal, Injectable, input, computed, inject, ElementRef, effect, TemplateRef, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { NgTemplateOutlet } from '@angular/common';
4
4
  import * as i2 from '@ng-bootstrap/ng-bootstrap';
5
5
  import { NgbToastModule } from '@ng-bootstrap/ng-bootstrap';
@@ -13,7 +13,8 @@ var ToastType;
13
13
  })(ToastType || (ToastType = {}));
14
14
 
15
15
  class ToastService {
16
- _toasts = signal([], ...(ngDevMode ? [{ debugName: "_toasts" }] : /* istanbul ignore next */ []));
16
+ _toasts = signal([], /* @ts-ignore */
17
+ ...(ngDevMode ? [{ debugName: "_toasts" }] : /* istanbul ignore next */ []));
17
18
  toasts = this._toasts.asReadonly();
18
19
  show(toast) {
19
20
  this._toasts.update(list => {
@@ -74,10 +75,10 @@ class ToastService {
74
75
  autohide: true
75
76
  });
76
77
  }
77
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
78
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ToastService, providedIn: 'root' });
78
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
79
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ToastService, providedIn: 'root' });
79
80
  }
80
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ToastService, decorators: [{
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ToastService, decorators: [{
81
82
  type: Injectable,
82
83
  args: [{
83
84
  providedIn: 'root',
@@ -92,7 +93,8 @@ const DEFAULT_TOAST_ICONS = {
92
93
  };
93
94
  class YsToast {
94
95
  toastService;
95
- autohide = input(true, ...(ngDevMode ? [{ debugName: "autohide" }] : /* istanbul ignore next */ []));
96
+ autohide = input(true, /* @ts-ignore */
97
+ ...(ngDevMode ? [{ debugName: "autohide" }] : /* istanbul ignore next */ []));
96
98
  /**
97
99
  * Bootstrap placement classes
98
100
  * Examples:
@@ -101,12 +103,15 @@ class YsToast {
101
103
  * ['top-50','start-50','translate-middle']
102
104
  * Default is ['top-0', 'end-0']
103
105
  */
104
- placement = input(['top-0', 'end-0'], ...(ngDevMode ? [{ debugName: "placement" }] : /* istanbul ignore next */ []));
105
- icons = input({}, ...(ngDevMode ? [{ debugName: "icons" }] : /* istanbul ignore next */ []));
106
+ placement = input(['top-0', 'end-0'], /* @ts-ignore */
107
+ ...(ngDevMode ? [{ debugName: "placement" }] : /* istanbul ignore next */ []));
108
+ icons = input({}, /* @ts-ignore */
109
+ ...(ngDevMode ? [{ debugName: "icons" }] : /* istanbul ignore next */ []));
106
110
  mergedIcons = computed(() => ({
107
111
  ...DEFAULT_TOAST_ICONS,
108
- ...this.icons()
109
- }), ...(ngDevMode ? [{ debugName: "mergedIcons" }] : /* istanbul ignore next */ []));
112
+ ...this.icons(),
113
+ }), /* @ts-ignore */
114
+ ...(ngDevMode ? [{ debugName: "mergedIcons" }] : /* istanbul ignore next */ []));
110
115
  host = inject((ElementRef));
111
116
  constructor(toastService) {
112
117
  this.toastService = toastService;
@@ -128,17 +133,14 @@ class YsToast {
128
133
  isTemplate(toast) {
129
134
  return toast.textOrTpl instanceof TemplateRef;
130
135
  }
131
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: YsToast, deps: [{ token: ToastService }], target: i0.ɵɵFactoryTarget.Component });
132
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: YsToast, isStandalone: true, selector: "ys-toast", inputs: { autohide: { classPropertyName: "autohide", publicName: "autohide", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, icons: { classPropertyName: "icons", publicName: "icons", isSignal: true, isRequired: false, transformFunction: null } }, host: { styleAttribute: "z-index:1200", classAttribute: "toast-container position-fixed p-3" }, ngImport: i0, template: "@for (toast of toastService.toasts(); track toast.id) {\n<ngb-toast [class]=\"toast.classname\" [autohide]=\"toast.autohide ?? autohide()\" [header]=\"toast.header!\"\n [delay]=\"toast.delay ?? 5000\" (hidden)=\"toastService.remove(toast)\">\n\n <div class=\"d-flex align-items-center\">\n @if (mergedIcons()[toast.type]) {\n <i [class]=\"mergedIcons()[toast.type] + ' me-2'\"></i>\n }\n\n @if (isTemplate(toast)) {\n <ng-template [ngTemplateOutlet]=\"toast.textOrTpl\"></ng-template>\n } @else {\n <span class=\"ms-2\">{{ toast.textOrTpl }}</span>\n }\n </div>\n\n</ngb-toast>\n}\n\n<!-- danger svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"bug\"\nclass=\"svg-inline--fa fa-bug fa-w-16\" role=\"img\" width=\"24\" height=\"24\" viewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z\" />\n</svg> -->\n\n<!-- warnig svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"exclamation-triangle\" class=\"svg-inline--fa fa-exclamation-triangle fa-w-18 ml-2\" role=\"img\" width=\"24\"\nheight=\"24\" viewBox=\"0 0 576 512\">\n<path fill=\"currentColor\"\nd=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\" />\n</svg> -->\n\n<!-- info svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"info-circle\" class=\"svg-inline--fa fa-info-circle fa-w-16 ml-2\" role=\"img\" width=\"24\" height=\"24\"\nviewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\" />\n</svg> -->\n\n<!-- success svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"check-circle\" class=\"svg-inline--fa fa-check-circle fa-w-16 ml-2\" role=\"img\" width=\"24\" height=\"24\"\nviewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\" />\n</svg> -->", styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: NgbToastModule }, { kind: "component", type: i2.NgbToast, selector: "ngb-toast", inputs: ["animation", "delay", "autohide", "header"], outputs: ["shown", "hidden"], exportAs: ["ngbToast"] }] });
136
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: YsToast, deps: [{ token: ToastService }], target: i0.ɵɵFactoryTarget.Component });
137
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: YsToast, isStandalone: true, selector: "ys-toast", inputs: { autohide: { classPropertyName: "autohide", publicName: "autohide", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, icons: { classPropertyName: "icons", publicName: "icons", isSignal: true, isRequired: false, transformFunction: null } }, host: { styleAttribute: "z-index:1200", classAttribute: "toast-container position-fixed p-3" }, ngImport: i0, template: "@for (toast of toastService.toasts(); track toast.id) {\n<ngb-toast [class]=\"toast.classname\" [autohide]=\"toast.autohide ?? autohide()\" [header]=\"toast.header!\"\n [delay]=\"toast.delay ?? 5000\" (hidden)=\"toastService.remove(toast)\">\n\n <div class=\"d-flex align-items-center\">\n @if (mergedIcons()[toast.type]) {\n <i [class]=\"mergedIcons()[toast.type] + ' me-2'\"></i>\n }\n\n @if (isTemplate(toast)) {\n <ng-template [ngTemplateOutlet]=\"toast.textOrTpl\"></ng-template>\n } @else {\n <span class=\"ms-2\">{{ toast.textOrTpl }}</span>\n }\n </div>\n\n</ngb-toast>\n}\n\n<!-- danger svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"bug\"\nclass=\"svg-inline--fa fa-bug fa-w-16\" role=\"img\" width=\"24\" height=\"24\" viewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z\" />\n</svg> -->\n\n<!-- warnig svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"exclamation-triangle\" class=\"svg-inline--fa fa-exclamation-triangle fa-w-18 ml-2\" role=\"img\" width=\"24\"\nheight=\"24\" viewBox=\"0 0 576 512\">\n<path fill=\"currentColor\"\nd=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\" />\n</svg> -->\n\n<!-- info svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"info-circle\" class=\"svg-inline--fa fa-info-circle fa-w-16 ml-2\" role=\"img\" width=\"24\" height=\"24\"\nviewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\" />\n</svg> -->\n\n<!-- success svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"check-circle\" class=\"svg-inline--fa fa-check-circle fa-w-16 ml-2\" role=\"img\" width=\"24\" height=\"24\"\nviewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\" />\n</svg> -->", styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: NgbToastModule }, { kind: "component", type: i2.NgbToast, selector: "ngb-toast", inputs: ["animation", "delay", "autohide", "header"], outputs: ["shown", "hidden"], exportAs: ["ngbToast"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
133
138
  }
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: YsToast, decorators: [{
139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: YsToast, decorators: [{
135
140
  type: Component,
136
- args: [{ selector: 'ys-toast', imports: [
137
- NgTemplateOutlet,
138
- NgbToastModule
139
- ], host: {
141
+ args: [{ selector: 'ys-toast', imports: [NgTemplateOutlet, NgbToastModule], changeDetection: ChangeDetectionStrategy.Eager, host: {
140
142
  class: 'toast-container position-fixed p-3',
141
- style: 'z-index:1200'
143
+ style: 'z-index:1200',
142
144
  }, template: "@for (toast of toastService.toasts(); track toast.id) {\n<ngb-toast [class]=\"toast.classname\" [autohide]=\"toast.autohide ?? autohide()\" [header]=\"toast.header!\"\n [delay]=\"toast.delay ?? 5000\" (hidden)=\"toastService.remove(toast)\">\n\n <div class=\"d-flex align-items-center\">\n @if (mergedIcons()[toast.type]) {\n <i [class]=\"mergedIcons()[toast.type] + ' me-2'\"></i>\n }\n\n @if (isTemplate(toast)) {\n <ng-template [ngTemplateOutlet]=\"toast.textOrTpl\"></ng-template>\n } @else {\n <span class=\"ms-2\">{{ toast.textOrTpl }}</span>\n }\n </div>\n\n</ngb-toast>\n}\n\n<!-- danger svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"bug\"\nclass=\"svg-inline--fa fa-bug fa-w-16\" role=\"img\" width=\"24\" height=\"24\" viewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z\" />\n</svg> -->\n\n<!-- warnig svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"exclamation-triangle\" class=\"svg-inline--fa fa-exclamation-triangle fa-w-18 ml-2\" role=\"img\" width=\"24\"\nheight=\"24\" viewBox=\"0 0 576 512\">\n<path fill=\"currentColor\"\nd=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\" />\n</svg> -->\n\n<!-- info svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"info-circle\" class=\"svg-inline--fa fa-info-circle fa-w-16 ml-2\" role=\"img\" width=\"24\" height=\"24\"\nviewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\" />\n</svg> -->\n\n<!-- success svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"check-circle\" class=\"svg-inline--fa fa-check-circle fa-w-16 ml-2\" role=\"img\" width=\"24\" height=\"24\"\nviewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\" />\n</svg> -->" }]
143
145
  }], ctorParameters: () => [{ type: ToastService }], propDecorators: { autohide: [{ type: i0.Input, args: [{ isSignal: true, alias: "autohide", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], icons: [{ type: i0.Input, args: [{ isSignal: true, alias: "icons", required: false }] }] } });
144
146
 
@@ -1 +1 @@
1
- {"version":3,"file":"yoozsoft-yoozsoft-ng-toast.mjs","sources":["../../../../projects/yoozsoft/yoozsoft-ng/toast/src/models/toast-type.ts","../../../../projects/yoozsoft/yoozsoft-ng/toast/src/services/toast-service.ts","../../../../projects/yoozsoft/yoozsoft-ng/toast/src/ys-toast/ys-toast.ts","../../../../projects/yoozsoft/yoozsoft-ng/toast/src/ys-toast/ys-toast.html","../../../../projects/yoozsoft/yoozsoft-ng/toast/public-api.ts","../../../../projects/yoozsoft/yoozsoft-ng/toast/yoozsoft-yoozsoft-ng-toast.ts"],"sourcesContent":["export enum ToastType {\r\n info = 'info',\r\n success = 'success',\r\n warning = 'warning',\r\n danger = 'danger'\r\n}\r\n\r\nexport type ToastIconMap = Partial<Record<ToastType, string>>;","import { Injectable, signal, TemplateRef } from '@angular/core';\nimport { ToastItem, ToastType } from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n\n private readonly _toasts = signal<ToastItem[]>([]);\n\n readonly toasts = this._toasts.asReadonly();\n\n show(toast: ToastItem) {\n this._toasts.update(list => {\n const next = [\n ...list,\n {\n ...toast,\n id: `toast-${Date.now()}-${Math.random()}`\n }\n ];\n\n return next.slice(-5);\n });\n }\n\n remove(toast: ToastItem) {\n this._toasts.update(list => list.filter(t => t !== toast));\n }\n\n clear() {\n this._toasts.set([]);\n }\n\n // ---------- helpers ----------\n\n info(text: string | TemplateRef<any>, header?: string) {\n this.show({\n textOrTpl: text,\n header,\n type: ToastType.info,\n classname: 'bg-info text-light',\n delay: 10000,\n autohide: true\n });\n }\n\n success(text: string | TemplateRef<any>, header?: string) {\n this.show({\n textOrTpl: text,\n header,\n type: ToastType.success,\n classname: 'bg-success text-light',\n delay: 8000,\n autohide: true\n });\n }\n\n warning(text: string | TemplateRef<any>, header?: string) {\n this.show({\n textOrTpl: text,\n header,\n type: ToastType.warning,\n classname: 'bg-warning text-dark',\n delay: 10000,\n autohide: true\n });\n }\n\n danger(text: string | TemplateRef<any>, header?: string) {\n this.show({\n textOrTpl: text,\n header,\n type: ToastType.danger,\n classname: 'bg-danger text-light',\n delay: 15000,\n autohide: true\n });\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, effect, ElementRef, inject, input, TemplateRef } from '@angular/core';\nimport { NgbToastModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ToastIconMap, ToastItem, ToastType } from '../../../toast/src/models';\nimport { ToastService } from '../../../toast/src/services';\n\nconst DEFAULT_TOAST_ICONS: Record<ToastType, string> = {\n [ToastType.danger]: 'fa fa-bug',\n [ToastType.warning]: 'fa fa-triangle-exclamation',\n [ToastType.info]: 'fa fa-circle-info',\n [ToastType.success]: 'fa fa-circle-check',\n};\n\n@Component({\n selector: 'ys-toast',\n imports: [\n NgTemplateOutlet,\n NgbToastModule\n ],\n templateUrl: './ys-toast.html',\n styleUrl: './ys-toast.scss',\n host: {\n class: 'toast-container position-fixed p-3',\n style: 'z-index:1200'\n }\n})\nexport class YsToast {\n\n autohide = input(true);\n /**\n * Bootstrap placement classes\n * Examples:\n * ['top-0','start-50','translate-middle-x']\n * ['bottom-25','end-0']\n * ['top-50','start-50','translate-middle']\n * Default is ['top-0', 'end-0']\n */\n placement = input<string[]>(['top-0', 'end-0']);\n icons = input<ToastIconMap>({});\n\n readonly mergedIcons = computed(() => ({\n ...DEFAULT_TOAST_ICONS,\n ...this.icons()\n })\n );\n\n private host = inject(ElementRef<HTMLElement>);\n\n constructor(public toastService: ToastService) {\n effect(() => {\n this.applyPlacement(this.placement());\n });\n }\n\n private applyPlacement(placement: string[]): void {\n const el = this.host.nativeElement;\n\n // remove only previous placement classes\n if ((el as any).__ysPlacement) {\n el.classList.remove(...(el as any).__ysPlacement);\n }\n\n // apply new placement\n el.classList.add(...placement);\n\n // store applied classes\n (el as any).__ysPlacement = [...placement];\n }\n\n isTemplate(toast: ToastItem): toast is ToastItem & { textOrTpl: TemplateRef<unknown> } {\n return toast.textOrTpl instanceof TemplateRef;\n }\n\n}\n","@for (toast of toastService.toasts(); track toast.id) {\n<ngb-toast [class]=\"toast.classname\" [autohide]=\"toast.autohide ?? autohide()\" [header]=\"toast.header!\"\n [delay]=\"toast.delay ?? 5000\" (hidden)=\"toastService.remove(toast)\">\n\n <div class=\"d-flex align-items-center\">\n @if (mergedIcons()[toast.type]) {\n <i [class]=\"mergedIcons()[toast.type] + ' me-2'\"></i>\n }\n\n @if (isTemplate(toast)) {\n <ng-template [ngTemplateOutlet]=\"toast.textOrTpl\"></ng-template>\n } @else {\n <span class=\"ms-2\">{{ toast.textOrTpl }}</span>\n }\n </div>\n\n</ngb-toast>\n}\n\n<!-- danger svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"bug\"\nclass=\"svg-inline--fa fa-bug fa-w-16\" role=\"img\" width=\"24\" height=\"24\" viewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z\" />\n</svg> -->\n\n<!-- warnig svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"exclamation-triangle\" class=\"svg-inline--fa fa-exclamation-triangle fa-w-18 ml-2\" role=\"img\" width=\"24\"\nheight=\"24\" viewBox=\"0 0 576 512\">\n<path fill=\"currentColor\"\nd=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\" />\n</svg> -->\n\n<!-- info svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"info-circle\" class=\"svg-inline--fa fa-info-circle fa-w-16 ml-2\" role=\"img\" width=\"24\" height=\"24\"\nviewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\" />\n</svg> -->\n\n<!-- success svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"check-circle\" class=\"svg-inline--fa fa-check-circle fa-w-16 ml-2\" role=\"img\" width=\"24\" height=\"24\"\nviewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\" />\n</svg> -->","/*\r\n * Public API Surface of ys-toast\r\n */\r\n\r\nexport * from './src/models';\r\nexport * from './src/services';\r\nexport * from './src/ys-toast/ys-toast';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ToastService"],"mappings":"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"}
1
+ {"version":3,"file":"yoozsoft-yoozsoft-ng-toast.mjs","sources":["../../../../projects/yoozsoft/yoozsoft-ng/toast/src/models/toast-type.ts","../../../../projects/yoozsoft/yoozsoft-ng/toast/src/services/toast-service.ts","../../../../projects/yoozsoft/yoozsoft-ng/toast/src/ys-toast/ys-toast.ts","../../../../projects/yoozsoft/yoozsoft-ng/toast/src/ys-toast/ys-toast.html","../../../../projects/yoozsoft/yoozsoft-ng/toast/public-api.ts","../../../../projects/yoozsoft/yoozsoft-ng/toast/yoozsoft-yoozsoft-ng-toast.ts"],"sourcesContent":["export enum ToastType {\r\n info = 'info',\r\n success = 'success',\r\n warning = 'warning',\r\n danger = 'danger'\r\n}\r\n\r\nexport type ToastIconMap = Partial<Record<ToastType, string>>;","import { Injectable, signal, TemplateRef } from '@angular/core';\nimport { ToastItem, ToastType } from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n\n private readonly _toasts = signal<ToastItem[]>([]);\n\n readonly toasts = this._toasts.asReadonly();\n\n show(toast: ToastItem) {\n this._toasts.update(list => {\n const next = [\n ...list,\n {\n ...toast,\n id: `toast-${Date.now()}-${Math.random()}`\n }\n ];\n\n return next.slice(-5);\n });\n }\n\n remove(toast: ToastItem) {\n this._toasts.update(list => list.filter(t => t !== toast));\n }\n\n clear() {\n this._toasts.set([]);\n }\n\n // ---------- helpers ----------\n\n info(text: string | TemplateRef<any>, header?: string) {\n this.show({\n textOrTpl: text,\n header,\n type: ToastType.info,\n classname: 'bg-info text-light',\n delay: 10000,\n autohide: true\n });\n }\n\n success(text: string | TemplateRef<any>, header?: string) {\n this.show({\n textOrTpl: text,\n header,\n type: ToastType.success,\n classname: 'bg-success text-light',\n delay: 8000,\n autohide: true\n });\n }\n\n warning(text: string | TemplateRef<any>, header?: string) {\n this.show({\n textOrTpl: text,\n header,\n type: ToastType.warning,\n classname: 'bg-warning text-dark',\n delay: 10000,\n autohide: true\n });\n }\n\n danger(text: string | TemplateRef<any>, header?: string) {\n this.show({\n textOrTpl: text,\n header,\n type: ToastType.danger,\n classname: 'bg-danger text-light',\n delay: 15000,\n autohide: true\n });\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n TemplateRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { NgbToastModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ToastIconMap, ToastItem, ToastType } from '../../../toast/src/models';\r\nimport { ToastService } from '../../../toast/src/services';\r\n\r\nconst DEFAULT_TOAST_ICONS: Record<ToastType, string> = {\r\n [ToastType.danger]: 'fa fa-bug',\r\n [ToastType.warning]: 'fa fa-triangle-exclamation',\r\n [ToastType.info]: 'fa fa-circle-info',\r\n [ToastType.success]: 'fa fa-circle-check',\r\n};\r\n\r\n@Component({\r\n selector: 'ys-toast',\r\n imports: [NgTemplateOutlet, NgbToastModule],\r\n templateUrl: './ys-toast.html',\r\n styleUrl: './ys-toast.scss',\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n host: {\r\n class: 'toast-container position-fixed p-3',\r\n style: 'z-index:1200',\r\n },\r\n})\r\nexport class YsToast {\r\n autohide = input(true);\r\n /**\r\n * Bootstrap placement classes\r\n * Examples:\r\n * ['top-0','start-50','translate-middle-x']\r\n * ['bottom-25','end-0']\r\n * ['top-50','start-50','translate-middle']\r\n * Default is ['top-0', 'end-0']\r\n */\r\n placement = input<string[]>(['top-0', 'end-0']);\r\n icons = input<ToastIconMap>({});\r\n\r\n readonly mergedIcons = computed(() => ({\r\n ...DEFAULT_TOAST_ICONS,\r\n ...this.icons(),\r\n }));\r\n\r\n private host = inject(ElementRef<HTMLElement>);\r\n\r\n constructor(public toastService: ToastService) {\r\n effect(() => {\r\n this.applyPlacement(this.placement());\r\n });\r\n }\r\n\r\n private applyPlacement(placement: string[]): void {\r\n const el = this.host.nativeElement;\r\n\r\n // remove only previous placement classes\r\n if ((el as any).__ysPlacement) {\r\n el.classList.remove(...(el as any).__ysPlacement);\r\n }\r\n\r\n // apply new placement\r\n el.classList.add(...placement);\r\n\r\n // store applied classes\r\n (el as any).__ysPlacement = [...placement];\r\n }\r\n\r\n isTemplate(toast: ToastItem): toast is ToastItem & { textOrTpl: TemplateRef<unknown> } {\r\n return toast.textOrTpl instanceof TemplateRef;\r\n }\r\n}\r\n","@for (toast of toastService.toasts(); track toast.id) {\n<ngb-toast [class]=\"toast.classname\" [autohide]=\"toast.autohide ?? autohide()\" [header]=\"toast.header!\"\n [delay]=\"toast.delay ?? 5000\" (hidden)=\"toastService.remove(toast)\">\n\n <div class=\"d-flex align-items-center\">\n @if (mergedIcons()[toast.type]) {\n <i [class]=\"mergedIcons()[toast.type] + ' me-2'\"></i>\n }\n\n @if (isTemplate(toast)) {\n <ng-template [ngTemplateOutlet]=\"toast.textOrTpl\"></ng-template>\n } @else {\n <span class=\"ms-2\">{{ toast.textOrTpl }}</span>\n }\n </div>\n\n</ngb-toast>\n}\n\n<!-- danger svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"bug\"\nclass=\"svg-inline--fa fa-bug fa-w-16\" role=\"img\" width=\"24\" height=\"24\" viewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z\" />\n</svg> -->\n\n<!-- warnig svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"exclamation-triangle\" class=\"svg-inline--fa fa-exclamation-triangle fa-w-18 ml-2\" role=\"img\" width=\"24\"\nheight=\"24\" viewBox=\"0 0 576 512\">\n<path fill=\"currentColor\"\nd=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\" />\n</svg> -->\n\n<!-- info svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"info-circle\" class=\"svg-inline--fa fa-info-circle fa-w-16 ml-2\" role=\"img\" width=\"24\" height=\"24\"\nviewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\" />\n</svg> -->\n\n<!-- success svg -->\n<!-- <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\"\ndata-icon=\"check-circle\" class=\"svg-inline--fa fa-check-circle fa-w-16 ml-2\" role=\"img\" width=\"24\" height=\"24\"\nviewBox=\"0 0 512 512\">\n<path fill=\"currentColor\"\nd=\"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\" />\n</svg> -->","/*\r\n * Public API Surface of ys-toast\r\n */\r\n\r\nexport * from './src/models';\r\nexport * from './src/services';\r\nexport * from './src/ys-toast/ys-toast';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ToastService"],"mappings":"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"}