UNPKG

@sixbell-telco/sdk

Version:

A collection of reusable components designed for use in Sixbell Telco Angular projects

1 lines 25.7 kB
{"version":3,"file":"sixbell-telco-sdk-components-paginator.mjs","sources":["../../../projects/sdk/components/paginator/components/pagination-item/pagination-item.component.ts","../../../projects/sdk/components/paginator/components/pagination-item/pagination-item.component.html","../../../projects/sdk/components/paginator/pipes/pagination.pipe.ts","../../../projects/sdk/components/paginator/src/paginator.component.ts","../../../projects/sdk/components/paginator/src/paginator.component.html","../../../projects/sdk/components/paginator/sixbell-telco-sdk-components-paginator.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport { IconComponent } from '@sixbell-telco/sdk/components/icon';\nimport { matKeyboardArrowLeftOutline } from '@sixbell-telco/sdk/components/icon/material/outline';\nimport { TypographyDirective } from '@sixbell-telco/sdk/directives/typography';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { cva } from 'class-variance-authority';\n\n/**\n * @internal\n * Generates base pagination item classes with style variants\n */\nexport const paginationItemComponent = cva([], {\n\tvariants: {\n\t\tvariant: {\n\t\t\tnumeric: [\n\t\t\t\t'btn',\n\t\t\t\t'btn-outline',\n\t\t\t\t'flex',\n\t\t\t\t'text-base-content',\n\t\t\t\t'border-secondary',\n\t\t\t\t'hover:text-secondary-content',\n\t\t\t\t'hover:bg-secondary/40',\n\t\t\t\t'hover:border-secondary',\n\t\t\t\t'active:hover:bg-secondary-content',\n\t\t\t\t'active:hover:bg-secondary',\n\t\t\t\t'active:focus:border-secondary',\n\t\t\t\t'min-h-[30px]',\n\t\t\t\t'h-[30px]',\n\t\t\t\t'min-w-[30px]',\n\t\t\t\t'w-[30px]',\n\t\t\t\t'p-0',\n\t\t\t],\n\t\t\ticon: [\n\t\t\t\t'btn',\n\t\t\t\t'btn-outline',\n\t\t\t\t'flex',\n\t\t\t\t'text-base-content',\n\t\t\t\t'border-secondary',\n\t\t\t\t'hover:text-secondary-content',\n\t\t\t\t'hover:bg-secondary/40',\n\t\t\t\t'hover:border-secondary',\n\t\t\t\t'active:hover:bg-secondary-content',\n\t\t\t\t'active:hover:bg-secondary',\n\t\t\t\t'active:focus:border-secondary',\n\t\t\t\t'min-h-[30px]',\n\t\t\t\t'h-[30px]',\n\t\t\t\t'min-w-[30px]',\n\t\t\t\t'w-[30px]',\n\t\t\t\t'p-0',\n\t\t\t],\n\t\t\tdots: [\n\t\t\t\t'btn',\n\t\t\t\t'btn-circle',\n\t\t\t\t'flex',\n\t\t\t\t'border-secondary',\n\t\t\t\t'bg-secondary',\n\t\t\t\t'hover:bg-secondary/40',\n\t\t\t\t'hover:border-secondary',\n\t\t\t\t'hover:scale-150',\n\t\t\t\t'active:hover:bg-secondary',\n\t\t\t\t'active:border-secondary',\n\t\t\t\t'active:scale-150',\n\t\t\t\t'active:focus:border-secondary',\n\t\t\t\t'h-[10px]',\n\t\t\t\t'min-h-[10px]',\n\t\t\t\t'w-[10px]',\n\t\t\t\t'min-w-[10px]',\n\t\t\t\t'p-0',\n\t\t\t],\n\t\t\t// New variant for ellipsis\n\t\t\tellipsis: [\n\t\t\t\t'px-2',\n\t\t\t\t'py-1',\n\t\t\t\t'text-base-content',\n\t\t\t\t'pointer-events-none', // Make it non-clickable\n\t\t\t\t'select-none', // Prevent text selection\n\t\t\t],\n\t\t},\n\t},\n\tcompoundVariants: [],\n\tdefaultVariants: {\n\t\tvariant: 'numeric',\n\t},\n});\n\n/** Possible pagination item style variants */\nexport type PaginationItemVariantProps = 'numeric' | 'icon' | 'dots' | 'ellipsis' | null | undefined;\n\n/** Configuration object for pagination item styling */\nexport type PaginationItemProps = {\n\tvariant?: PaginationItemVariantProps;\n};\n\n/**\n * A compact pagination control component with interactive states\n *\n * @remarks\n * Built with Tailwind CSS and class-variance-authority for style management.\n * Supports three variants: numeric pages, navigation icons, and dot indicators.\n * Provides visual feedback for active and hover states.\n *\n * @example\n * ```html\n * <!-- Numeric page item -->\n * <st-pagination-item\n * variant=\"numeric\"\n * [number]=\"2\"\n * [active]=\"true\"\n * ></st-pagination-item>\n * ```\n *\n * @example\n * ```html\n * <!-- Icon navigation -->\n * <st-pagination-item\n * variant=\"icon\"\n * icon=\"chevron-right\"\n * ></st-pagination-item>\n * ```\n *\n * @example\n * ```html\n * <!-- Active dot indicator -->\n * <st-pagination-item\n * variant=\"dots\"\n * [active]=\"true\"\n * ></st-pagination-item>\n * ```\n */\n@Component({\n\tselector: 'st-pagination-item',\n\timports: [IconComponent, TypographyDirective],\n\ttemplateUrl: './pagination-item.component.html',\n\tstyles: '',\n\tstandalone: true,\n})\nexport class PaginationItemComponent {\n\t/**\n\t * Style variant for the pagination item\n\t * @defaultValue 'numeric'\n\t */\n\tvariant = input<PaginationItemVariantProps>();\n\n\t/**\n\t * Icon name from the icon library\n\t * @defaultValue matKeyboardArrowLeftOutline\n\t */\n\ticon = input<string>(matKeyboardArrowLeftOutline);\n\n\t/**\n\t * Display number or custom content\n\t * @defaultValue 1\n\t */\n\tnumber = input<number | string>(1);\n\n\t/**\n\t * Active state styling\n\t * @defaultValue false\n\t */\n\tactive = input<boolean>(false);\n\n\t/**\n\t * Disabled state styling\n\t * @defaultValue false\n\t */\n\tdisabled = input<boolean>(false); // New input for disabled state\n\n\t/**\n\t * @internal\n\t * Computed class string for the pagination item\n\t */\n\tcomponentClass = computed(() => {\n\t\treturn cn(\n\t\t\tpaginationItemComponent({\n\t\t\t\tvariant: this.variant(),\n\t\t\t}),\n\t\t\t{\n\t\t\t\t'bg-secondary border-secondary text-secondary-content': this.active() && this.variant() !== 'dots',\n\t\t\t\t'opacity-50 cursor-not-allowed': this.disabled(), // Add disabled styles\n\t\t\t},\n\t\t\t{\n\t\t\t\t'hover:scale-100 hover:bg-secondary/100 w-[16px] h-[16px] bg-secondary border-secondary text-secondary-content':\n\t\t\t\t\tthis.active() && this.variant() === 'dots',\n\t\t\t},\n\t\t);\n\t});\n}\n","@let variantVar = this.variant();\n@let componentClassVar = this.componentClass();\n\n@if (variantVar === 'numeric') {\n\t<button [class]=\"componentClassVar\" type=\"button\" [disabled]=\"disabled()\">\n\t\t<span typography [tyVariant]=\"'body-sm'\" [tyColor]=\"'inherit'\" [tyFontWeight]=\"'normal'\">{{ number() }}</span>\n\t</button>\n} @else if (variantVar === 'icon') {\n\t<button [class]=\"componentClassVar\" type=\"button\" [disabled]=\"disabled()\">\n\t\t<st-icon [icon]=\"this.icon()\" color=\"inherit\" size=\"sm\"></st-icon>\n\t</button>\n} @else if (variantVar === 'dots') {\n\t<button [class]=\"componentClassVar\" type=\"button\" [disabled]=\"disabled()\">\n\t\t<span></span>\n\t</button>\n} @else if (variantVar === 'ellipsis') {\n\t<!-- Ellipsis button is inherently not interactive -->\n\t<button [class]=\"componentClassVar\" type=\"button\" [disabled]=\"true\">\n\t\t<span typography [tyVariant]=\"'body-sm'\" [tyColor]=\"'inherit'\" [tyFontWeight]=\"'normal'\">{{ number() }}</span>\n\t</button>\n} @else {\n\t<button [class]=\"componentClassVar\" type=\"button\" [disabled]=\"disabled()\">\n\t\t<span typography [tyVariant]=\"'body-sm'\" [tyColor]=\"'inherit'\" [tyFontWeight]=\"'normal'\">{{ number() }}</span>\n\t</button>\n}\n","// projects/sdk/components/paginator/src/pagination.pipe.ts\nimport { Pipe, PipeTransform } from '@angular/core';\n\nexport type Pagination = {\n\tcurrentPage: number;\n\titemsPerPage: number;\n};\n\n/**\n * A pipe to manually paginate an array of items.\n *\n * @remarks\n * This pipe takes an array and a pagination configuration object (currentPage, itemsPerPage)\n * and returns a sliced version of the array, representing the items for the current page.\n *\n * @example\n * ```html\n * @for (item of items | pagination: { currentPage: 2, itemsPerPage: 10 }; track item.id) {\n * <li>{{ item.name }}</li>\n * }\n * ```\n */\n@Pipe({\n\tname: 'paginate',\n\tstandalone: true, // Use standalone pipes for better tree-shaking and consistency\n})\nexport class PaginationPipe implements PipeTransform {\n\ttransform<T>(items: T[], pagination: { currentPage: number; itemsPerPage: number }): T[];\n\ttransform<T>(items: T[] | null, pagination: { currentPage: number; itemsPerPage: number }): T[] | null;\n\ttransform<T>(items: T[] | undefined, pagination: { currentPage: number; itemsPerPage: number }): T[] | undefined;\n\ttransform<T>(items: T[] | null | undefined, pagination: { currentPage: number; itemsPerPage: number }): T[] | null | undefined;\n\ttransform<T>(items: T[] | null | undefined, pagination: { currentPage: number; itemsPerPage: number }): T[] | null | undefined {\n\t\tif (!items || !Array.isArray(items) || pagination?.currentPage === undefined || pagination?.itemsPerPage === undefined) {\n\t\t\treturn items;\n\t\t}\n\n\t\tconst currentPage = Math.max(1, pagination.currentPage);\n\t\tconst itemsPerPage = Math.max(1, pagination.itemsPerPage);\n\n\t\tconst startIndex = (currentPage - 1) * itemsPerPage;\n\t\tconst endIndex = startIndex + itemsPerPage;\n\n\t\treturn items.slice(startIndex, endIndex);\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\nimport {\n\tmatKeyboardArrowLeftOutline,\n\tmatKeyboardArrowRightOutline,\n\tmatKeyboardDoubleArrowLeftOutline,\n\tmatKeyboardDoubleArrowRightOutline,\n} from '@sixbell-telco/sdk/components/icon/material/outline';\nimport { PaginationItemComponent } from '../components/pagination-item/pagination-item.component';\n\n/** Type of pagination display variant */\nexport type PaginationType = 'default' | 'dots';\n\n/**\n * A customizable pagination component with navigation controls\n *\n * @remarks\n * Supports both traditional numbered pagination and dot indicators.\n * Provides custom styling and navigation controls.\n *\n * @example\n * ```html\n * <st-paginator\n * [pages]=\"10\"\n * type=\"default\"\n * (pageChanged)=\"onPageChange($event)\"\n * ></st-paginator>\n * ```\n *\n * @example\n * ```html\n * <st-paginator\n * [pages]=\"5\"\n * type=\"dots\"\n * [maxSize]=\"3\"\n * ></st-paginator>\n * ```\n */\n@Component({\n\tselector: 'st-paginator',\n\timports: [CommonModule, PaginationItemComponent],\n\ttemplateUrl: './paginator.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PaginatorComponent {\n\t/**\n\t * Unique identifier for the paginator instance\n\t * @defaultValue 'paginator'\n\t */\n\tpaginatorId = input<string>('paginator');\n\n\t/**\n\t * Maximum number of visible numeric page items (excluding arrows and ellipses).\n\t * This controls the window of page numbers shown around the current page.\n\t * @defaultValue 4\n\t */\n\tmaxSize = input<number>(4);\n\n\t/**\n\t * Pagination display variant\n\t * @defaultValue 'default'\n\t */\n\ttype = input<PaginationType>('default');\n\n\t/**\n\t * Event emitted when the current page changes\n\t */\n\tpageChanged = output<number>();\n\n\t/**\n\t * Total number of pages\n\t * @defaultValue 0\n\t */\n\tpages = input<number>(0);\n\n\t/**\n\t * Current active page (1-based)\n\t * @defaultValue 1\n\t */\n\tcurrentPage = model<number>(1);\n\n\t/**\n\t * @internal\n\t * Left arrow icon reference\n\t */\n\ticonArrowLeft = matKeyboardArrowLeftOutline;\n\n\t/**\n\t * @internal\n\t * Double left arrow icon reference\n\t */\n\ticonDoubleArrowLeft = matKeyboardDoubleArrowLeftOutline;\n\n\t/**\n\t * @internal\n\t * Right arrow icon reference\n\t */\n\ticonArrowRight = matKeyboardArrowRightOutline;\n\n\t/**\n\t * @internal\n\t * Double right arrow icon reference\n\t */\n\ticonDoubleArrowRight = matKeyboardDoubleArrowRightOutline;\n\n\t/**\n\t * @internal\n\t * Computed array of page numbers and ellipses for display.\n\t * Implements the logic to show a limited range of pages around the current page\n\t * with '...' for skipped pages.\n\t */\n\tpageNumbersForDisplay = computed<(number | string)[]>(() => {\n\t\tconst totalPages = this.pages();\n\t\tconst currentPage = this.currentPage();\n\t\tconst maxSize = this.maxSize(); // Number of visible numeric page links\n\n\t\tconst pages: (number | string)[] = [];\n\n\t\tif (totalPages <= 1) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet startRange: number;\n\t\tlet endRange: number;\n\n\t\t// Calculate the range of pages to display around the current page\n\t\tif (totalPages <= maxSize) {\n\t\t\t// If total pages are less than or equal to maxSize, show all pages\n\t\t\tstartRange = 1;\n\t\t\tendRange = totalPages;\n\t\t} else {\n\t\t\t// Calculate the range to center the currentPage\n\t\t\tconst half = Math.floor(maxSize / 2);\n\t\t\tstartRange = currentPage - half;\n\t\t\tendRange = currentPage + (maxSize - 1 - half);\n\n\t\t\t// Adjust boundary conditions\n\t\t\tif (startRange < 1) {\n\t\t\t\tstartRange = 1;\n\t\t\t\tendRange = maxSize;\n\t\t\t}\n\t\t\tif (endRange > totalPages) {\n\t\t\t\tendRange = totalPages;\n\t\t\t\tstartRange = totalPages - maxSize + 1;\n\t\t\t}\n\t\t}\n\n\t\t// Add first page and leading ellipsis if necessary\n\t\tif (startRange > 1) {\n\t\t\tpages.push(1);\n\t\t\tif (startRange > 2) {\n\t\t\t\t// Only add ellipsis if there's at least one page between 1 and startRange\n\t\t\t\tpages.push('...');\n\t\t\t}\n\t\t}\n\n\t\t// Add pages within the calculated range\n\t\tfor (let i = startRange; i <= endRange; i++) {\n\t\t\tpages.push(i);\n\t\t}\n\n\t\t// Add trailing ellipsis and last page if necessary\n\t\tif (endRange < totalPages) {\n\t\t\tif (endRange < totalPages - 1) {\n\t\t\t\t// Only add ellipsis if there's at least one page between endRange and totalPages\n\t\t\t\tpages.push('...');\n\t\t\t}\n\t\t\t// Ensure last page is only added once and if it's not already in the array\n\t\t\tif (!pages.includes(totalPages)) {\n\t\t\t\tpages.push(totalPages);\n\t\t\t}\n\t\t}\n\n\t\t// Final pass to remove potential duplicate adjacent '...' (e.g., if page 1, ..., 3, ..., 5 leads to 1, ..., ..., 5)\n\t\tconst finalPages: (number | string)[] = [];\n\t\tfor (let i = 0; i < pages.length; i++) {\n\t\t\t// Skip if current is '...' and previous was also '...'\n\t\t\tif (pages[i] === '...' && finalPages.length > 0 && finalPages[finalPages.length - 1] === '...') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfinalPages.push(pages[i]);\n\t\t}\n\n\t\treturn finalPages;\n\t});\n\n\t/**\n\t * @internal\n\t * Handles page navigation changes\n\t * @param page - New page number (or '...' if clicked on ellipsis, which is ignored)\n\t */\n\thandlePageChange(page: number | string) {\n\t\t// Updated signature to accept string\n\t\tif (typeof page !== 'number') {\n\t\t\t// Type guard: ignore clicks on '...'\n\t\t\treturn;\n\t\t}\n\t\tconst newPage = Math.min(Math.max(1, page), this.pages());\n\t\tif (newPage !== this.currentPage()) {\n\t\t\tthis.currentPage.set(newPage);\n\t\t\tthis.pageChanged.emit(newPage);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t * Navigates to previous page if available\n\t */\n\tpreviousPage() {\n\t\tthis.handlePageChange(this.currentPage() - 1);\n\t}\n\n\t/**\n\t * @internal\n\t * Navigates to next page if available\n\t */\n\tnextPage() {\n\t\tthis.handlePageChange(this.currentPage() + 1);\n\t}\n\n\t/**\n\t * @internal\n\t * Jumps to first page\n\t */\n\tfirstPage() {\n\t\tthis.handlePageChange(1);\n\t}\n\n\t/**\n\t * @internal\n\t * Jumps to last page\n\t */\n\tlastPage() {\n\t\tthis.handlePageChange(this.pages());\n\t}\n}\n","@if (type() === 'default') {\n\t<div class=\"flex items-center justify-center gap-2\">\n\t\t<!-- First page button -->\n\t\t<st-pagination-item\n\t\t\t[icon]=\"iconDoubleArrowLeft\"\n\t\t\t(click)=\"firstPage()\"\n\t\t\tvariant=\"icon\"\n\t\t\tsize=\"md\"\n\t\t\tshape=\"round-xs\"\n\t\t\tpadding=\"none\"\n\t\t\t[disabled]=\"currentPage() === 1\"\n\t\t></st-pagination-item>\n\t\t<!-- Previous page button -->\n\t\t<st-pagination-item\n\t\t\t[icon]=\"iconArrowLeft\"\n\t\t\t(click)=\"previousPage()\"\n\t\t\tvariant=\"icon\"\n\t\t\tsize=\"md\"\n\t\t\tshape=\"round-xs\"\n\t\t\tpadding=\"none\"\n\t\t\t[disabled]=\"currentPage() === 1\"\n\t\t></st-pagination-item>\n\n\t\t@for (page of pageNumbersForDisplay(); track $index) {\n\t\t\t@if (page === '...') {\n\t\t\t\t<!-- Ellipsis for hidden pages -->\n\t\t\t\t<st-pagination-item variant=\"ellipsis\" size=\"md\" shape=\"round-xs\" padding=\"none\" [number]=\"'...'\"></st-pagination-item>\n\t\t\t} @else {\n\t\t\t\t<!-- Numeric page item -->\n\t\t\t\t<st-pagination-item\n\t\t\t\t\t(click)=\"handlePageChange(page)\"\n\t\t\t\t\tvariant=\"numeric\"\n\t\t\t\t\tsize=\"md\"\n\t\t\t\t\tshape=\"round-xs\"\n\t\t\t\t\tpadding=\"none\"\n\t\t\t\t\t[number]=\"page\"\n\t\t\t\t\t[active]=\"currentPage() === page\"\n\t\t\t\t></st-pagination-item>\n\t\t\t}\n\t\t}\n\n\t\t<!-- Next page button -->\n\t\t<st-pagination-item\n\t\t\t[icon]=\"iconArrowRight\"\n\t\t\t(click)=\"nextPage()\"\n\t\t\tvariant=\"icon\"\n\t\t\tsize=\"md\"\n\t\t\tshape=\"round-xs\"\n\t\t\tpadding=\"none\"\n\t\t\t[disabled]=\"currentPage() === pages()\"\n\t\t></st-pagination-item>\n\t\t<!-- Last page button -->\n\t\t<st-pagination-item\n\t\t\t[icon]=\"iconDoubleArrowRight\"\n\t\t\t(click)=\"lastPage()\"\n\t\t\tvariant=\"icon\"\n\t\t\tsize=\"md\"\n\t\t\tshape=\"round-xs\"\n\t\t\tpadding=\"none\"\n\t\t\t[disabled]=\"currentPage() === pages()\"\n\t\t></st-pagination-item>\n\t</div>\n}\n@if (type() === 'dots') {\n\t<div class=\"flex items-center justify-center gap-2\">\n\t\t@for (page of pageNumbersForDisplay(); track $index) {\n\t\t\t@if (page === '...') {\n\t\t\t\t<!-- Ellipsis for hidden pages -->\n\t\t\t\t<st-pagination-item variant=\"ellipsis\" size=\"xs\" shape=\"round-lg\" padding=\"none\" [number]=\"'...'\"></st-pagination-item>\n\t\t\t} @else {\n\t\t\t\t<st-pagination-item\n\t\t\t\t\t(click)=\"handlePageChange(page)\"\n\t\t\t\t\tvariant=\"dots\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tshape=\"round-lg\"\n\t\t\t\t\tpadding=\"none\"\n\t\t\t\t\t[active]=\"currentPage() === page\"\n\t\t\t\t></st-pagination-item>\n\t\t\t}\n\t\t}\n\t</div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}