@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.
- package/README.md +206 -94
- package/fesm2022/yoozsoft-yoozsoft-ng-autocomplete.mjs +70 -38
- package/fesm2022/yoozsoft-yoozsoft-ng-autocomplete.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-datepicker.mjs +194 -109
- package/fesm2022/yoozsoft-yoozsoft-ng-datepicker.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-dropdown.mjs +70 -55
- package/fesm2022/yoozsoft-yoozsoft-ng-dropdown.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-file-upload.mjs +55 -33
- package/fesm2022/yoozsoft-yoozsoft-ng-file-upload.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-footer.mjs +13 -11
- package/fesm2022/yoozsoft-yoozsoft-ng-footer.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-loading.mjs +17 -11
- package/fesm2022/yoozsoft-yoozsoft-ng-loading.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-navbar.mjs +37 -28
- package/fesm2022/yoozsoft-yoozsoft-ng-navbar.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-overlay.mjs +7 -6
- package/fesm2022/yoozsoft-yoozsoft-ng-overlay.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-pagination.mjs +39 -28
- package/fesm2022/yoozsoft-yoozsoft-ng-pagination.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-password-strength.mjs +65 -39
- package/fesm2022/yoozsoft-yoozsoft-ng-password-strength.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-pipes.mjs +3 -3
- package/fesm2022/yoozsoft-yoozsoft-ng-pipes.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-progress.mjs +26 -17
- package/fesm2022/yoozsoft-yoozsoft-ng-progress.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-rating.mjs +155 -0
- package/fesm2022/yoozsoft-yoozsoft-ng-rating.mjs.map +1 -0
- package/fesm2022/yoozsoft-yoozsoft-ng-select.mjs +47 -33
- package/fesm2022/yoozsoft-yoozsoft-ng-select.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-sidebar.mjs +30 -29
- package/fesm2022/yoozsoft-yoozsoft-ng-sidebar.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-table.mjs +93 -84
- package/fesm2022/yoozsoft-yoozsoft-ng-table.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-tiff-viewer.mjs +41 -27
- package/fesm2022/yoozsoft-yoozsoft-ng-tiff-viewer.mjs.map +1 -1
- package/fesm2022/yoozsoft-yoozsoft-ng-toast.mjs +20 -18
- package/fesm2022/yoozsoft-yoozsoft-ng-toast.mjs.map +1 -1
- package/package.json +12 -4
- package/rating/package.json +4 -0
- 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(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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([],
|
|
32
|
-
|
|
33
|
-
|
|
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,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
}),
|
|
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}`),
|
|
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: "
|
|
126
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
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: "
|
|
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([],
|
|
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: "
|
|
78
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
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: "
|
|
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,
|
|
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'],
|
|
105
|
-
|
|
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
|
-
}),
|
|
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: "
|
|
132
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
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: "
|
|
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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"}
|