UNPKG

@sixbell-telco/sdk

Version:

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

1 lines 54 kB
{"version":3,"file":"sixbell-telco-sdk-components-data-table.mjs","sources":["../../../projects/sdk/components/data-table/src/data-table-context.service.ts","../../../projects/sdk/components/data-table/expandable/expandable.component.ts","../../../projects/sdk/components/data-table/selection/selection.component.ts","../../../projects/sdk/components/data-table/sortable-header/sortable-header.component.ts","../../../projects/sdk/components/data-table/src/data-table.component.ts","../../../projects/sdk/components/data-table/src/data-table.component.html","../../../projects/sdk/components/data-table/sub-component-toggle/sub-component-toggle.component.ts","../../../projects/sdk/components/data-table/sixbell-telco-sdk-components-data-table.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport { TableContentSizeProps } from '@sixbell-telco/sdk/components/table';\n\n/**\n * Context service to share data table configuration with sub-components\n * This allows sub-components to automatically sync their sizes with the parent data table\n */\n@Injectable()\nexport class DataTableContextService {\n\t/**\n\t * Current table size that sub-components can subscribe to\n\t */\n\treadonly size = signal<TableContentSizeProps>('sm');\n\n\t/**\n\t * Update the table size - called by the main data table component\n\t */\n\tsetSize(size: TableContentSizeProps) {\n\t\tthis.size.set(size);\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { ButtonComponent, ButtonSizeProps } from '@sixbell-telco/sdk/components/button';\nimport { IconComponent, IconSizeProps } from '@sixbell-telco/sdk/components/icon';\nimport { matArrowUpward, matInfo, matKeyboardArrowDown, matSwapVert } from '@sixbell-telco/sdk/components/icon/material/baseline';\nimport { injectFlexRenderContext, RowData, type CellContext, type HeaderContext, type Row } from '@tanstack/angular-table';\nimport { DataTableContextService } from '../src/data-table-context.service';\n\n/**\n * Expandable cell component that shows row data and expand/collapse toggle\n */\n@Component({\n\tstandalone: true,\n\tselector: 'st-data-table-expandable-cell',\n\timports: [CommonModule, IconComponent, ButtonComponent],\n\ttemplate: `\n\t\t<div [style.--depth]=\"row.depth\">\n\t\t\t<div>\n\t\t\t\t@if (row.getCanExpand()) {\n\t\t\t\t\t<st-button\n\t\t\t\t\t\tvariant=\"base\"\n\t\t\t\t\t\t[size]=\"buttonSize()\"\n\t\t\t\t\t\t[square]=\"true\"\n\t\t\t\t\t\t[link]=\"true\"\n\t\t\t\t\t\tclass=\"group\"\n\t\t\t\t\t\t(click)=\"row.getToggleExpandedHandler()()\"\n\t\t\t\t\t\t[attr.aria-expanded]=\"row.getIsExpanded()\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<st-icon\n\t\t\t\t\t\t\tclass=\"transition-transform duration-300 ease-in-out group-aria-[expanded=false]:rotate-0 group-aria-[expanded=true]:rotate-180\"\n\t\t\t\t\t\t\t[icon]=\"iconChevronDown\"\n\t\t\t\t\t\t\t[size]=\"iconSize()\"\n\t\t\t\t\t\t></st-icon>\n\t\t\t\t\t</st-button>\n\t\t\t\t} @else {\n\t\t\t\t\t<span>&nbsp;&nbsp;</span>\n\t\t\t\t}\n\t\t\t\t{{ context.getValue() }}\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tstyles: `\n\t\t:host {\n\t\t\t> div {\n\t\t\t\tpadding-left: calc(2rem * var(--depth, 1));\n\t\t\t}\n\t\t}\n\t`,\n})\nexport class DataTableExpandableCellComponent<T extends RowData> {\n\t/**\n\t * TanStack Table context injected by flexRender\n\t */\n\tcontext = injectFlexRenderContext<CellContext<T, unknown>>();\n\n\t/**\n\t * Data table context for size synchronization\n\t */\n\tdataTableContext = inject(DataTableContextService);\n\n\t/**\n\t * Get the row instance from context\n\t */\n\tget row() {\n\t\treturn this.context.row;\n\t}\n\n\t/** @internal */\n\treadonly iconChevronDown = matKeyboardArrowDown;\n\n\t/**\n\t * @internal\n\t * Computes button size based on data table size\n\t */\n\treadonly buttonSize = computed<ButtonSizeProps>(() => {\n\t\tswitch (this.dataTableContext.size()) {\n\t\t\tcase 'xs':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'sm':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'md':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'lg':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'xl':\n\t\t\t\treturn 'md';\n\t\t\tdefault:\n\t\t\t\treturn 'xs';\n\t\t}\n\t});\n\n\t/**\n\t * @internal\n\t * Computes icon size based on data table size\n\t */\n\treadonly iconSize = computed<IconSizeProps>(() => {\n\t\tswitch (this.dataTableContext.size()) {\n\t\t\tcase 'xs':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'sm':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'md':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'lg':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'xl':\n\t\t\t\treturn 'md';\n\t\t\tdefault:\n\t\t\t\treturn 'xs';\n\t\t}\n\t});\n}\n\n/**\n * Expandable header cell component with sorting capability and expand all functionality\n */\n@Component({\n\tstandalone: true,\n\tselector: 'st-data-table-expandable-header-cell',\n\timports: [CommonModule, IconComponent, ButtonComponent],\n\ttemplate: `\n\t\t<div class=\"inline-flex items-center gap-1\">\n\t\t\t<st-button\n\t\t\t\tvariant=\"base\"\n\t\t\t\t[size]=\"buttonSize()\"\n\t\t\t\t[square]=\"true\"\n\t\t\t\t[link]=\"true\"\n\t\t\t\t(click)=\"context.table.getToggleAllRowsExpandedHandler()($event)\"\n\t\t\t\tclass=\"group\"\n\t\t\t\t[attr.aria-expanded]=\"context.table.getIsAllRowsExpanded()\"\n\t\t\t>\n\t\t\t\t<st-icon\n\t\t\t\t\tclass=\"transition-transform duration-300 ease-in-out group-aria-[expanded=false]:rotate-0 group-aria-[expanded=true]:rotate-180\"\n\t\t\t\t\t[icon]=\"iconChevronDown\"\n\t\t\t\t\t[size]=\"iconSize()\"\n\t\t\t\t></st-icon>\n\t\t\t</st-button>\n\t\t\t<!-- Column Label -->\n\t\t\t<span class=\"font-bold\">{{ label() }}</span>\n\t\t\t<!-- Button for sorting -->\n\t\t\t@if (canSort()) {\n\t\t\t\t<st-button\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t[size]=\"buttonSize()\"\n\t\t\t\t\t[square]=\"true\"\n\t\t\t\t\t[ghost]=\"true\"\n\t\t\t\t\t(click)=\"sortToggle.emit(); $event.stopPropagation()\"\n\t\t\t\t\tclass=\"group\"\n\t\t\t\t\t[attr.aria-label]=\"'Sort by ' + label()\"\n\t\t\t\t\t[attr.aria-sort]=\"computedAriaSortAttribute()\"\n\t\t\t\t>\n\t\t\t\t\t<st-icon\n\t\t\t\t\t\tclass=\"transition-transform duration-300 ease-in-out group-aria-[sort=ascending]:rotate-0 group-aria-[sort=descending]:rotate-180\"\n\t\t\t\t\t\t[icon]=\"currentSortIcon()\"\n\t\t\t\t\t\t[size]=\"iconSize()\"\n\t\t\t\t\t></st-icon>\n\t\t\t\t</st-button>\n\t\t\t}\n\t\t</div>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataTableExpandableHeaderCellComponent<T extends RowData> {\n\t/**\n\t * TanStack Table context injected by flexRender\n\t */\n\treadonly context = injectFlexRenderContext<HeaderContext<T, unknown>>();\n\n\t/**\n\t * Data table context for size synchronization\n\t */\n\treadonly dataTableContext = inject(DataTableContextService);\n\n\t/**\n\t * Display label for the column\n\t */\n\treadonly label = input.required<string>();\n\n\t/**\n\t * Whether this column can be sorted\n\t */\n\treadonly canSort = input<boolean>(false);\n\n\t/**\n\t * Current sort state of the column\n\t */\n\treadonly sortState = input<'asc' | 'desc' | false>(false);\n\n\t/**\n\t * Event emitted when sort toggle is requested\n\t */\n\treadonly sortToggle = output<void>();\n\n\t/**\n\t * Get the table instance from context\n\t */\n\tget table() {\n\t\treturn this.context.table;\n\t}\n\n\t/** @internal */\n\treadonly iconChevronDown = matKeyboardArrowDown;\n\n\t/** @internal */\n\treadonly iconDefaultSort = matSwapVert;\n\n\t/** @internal */\n\treadonly iconAscending = matArrowUpward;\n\n\t/**\n\t * @internal\n\t * Computes button size based on data table size\n\t */\n\treadonly buttonSize = computed<ButtonSizeProps>(() => {\n\t\tswitch (this.dataTableContext.size()) {\n\t\t\tcase 'xs':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'sm':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'md':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'lg':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'xl':\n\t\t\t\treturn 'md';\n\t\t\tdefault:\n\t\t\t\treturn 'xs';\n\t\t}\n\t});\n\n\t/**\n\t * @internal\n\t * Computes icon size based on data table size\n\t */\n\treadonly iconSize = computed<IconSizeProps>(() => {\n\t\tswitch (this.dataTableContext.size()) {\n\t\t\tcase 'xs':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'sm':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'md':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'lg':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'xl':\n\t\t\t\treturn 'md';\n\t\t\tdefault:\n\t\t\t\treturn 'xs';\n\t\t}\n\t});\n\n\t/**\n\t * @internal\n\t * Computes the appropriate icon based on current sort state\n\t */\n\treadonly currentSortIcon = computed(() => {\n\t\tswitch (this.sortState()) {\n\t\t\tcase 'asc':\n\t\t\tcase 'desc':\n\t\t\t\treturn this.iconAscending;\n\t\t\tdefault:\n\t\t\t\treturn this.iconDefaultSort;\n\t\t}\n\t});\n\n\t/**\n\t * @internal\n\t * Computes aria-sort attribute for accessibility\n\t */\n\treadonly computedAriaSortAttribute = computed<'ascending' | 'descending' | 'none'>(() => {\n\t\tswitch (this.sortState()) {\n\t\t\tcase 'asc':\n\t\t\t\treturn 'ascending';\n\t\t\tcase 'desc':\n\t\t\t\treturn 'descending';\n\t\t\tdefault:\n\t\t\t\treturn 'none';\n\t\t}\n\t});\n}\n\n/**\n * Sub-component toggle cell for controlling custom sub-component visibility\n */\n@Component({\n\tstandalone: true,\n\tselector: 'st-data-table-sub-toggle-cell',\n\timports: [CommonModule, IconComponent, ButtonComponent],\n\ttemplate: `\n\t\t@if (canToggleSubComponent()) {\n\t\t\t<st-button\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"xs\"\n\t\t\t\t[circle]=\"true\"\n\t\t\t\t[ghost]=\"true\"\n\t\t\t\tclass=\"group\"\n\t\t\t\t(click)=\"handleToggle(); $event.stopPropagation()\"\n\t\t\t\t[attr.aria-expanded]=\"isExpanded()\"\n\t\t\t\t[attr.title]=\"isExpanded() ? 'Hide Details' : 'Show Details'\"\n\t\t\t>\n\t\t\t\t<st-icon\n\t\t\t\t\tclass=\"transition-transform duration-300 ease-in-out group-aria-[expanded=false]:rotate-0 group-aria-[expanded=true]:rotate-180\"\n\t\t\t\t\t[icon]=\"expandIcon\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t></st-icon>\n\t\t\t\t<span class=\"sr-only\">{{ isExpanded() ? 'Hide Details' : 'Show Details' }}</span>\n\t\t\t</st-button>\n\t\t} @else {\n\t\t\t<!-- Display an informational icon if a sub-component cannot be shown for this row -->\n\t\t\t<st-button\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"xs\"\n\t\t\t\t[circle]=\"true\"\n\t\t\t\t[ghost]=\"true\"\n\t\t\t\t[attr.aria-expanded]=\"isExpanded()\"\n\t\t\t\t[attr.title]=\"isExpanded() ? 'Hide Details' : 'Show Details'\"\n\t\t\t\t[disabled]=\"true\"\n\t\t\t>\n\t\t\t\t<st-icon [icon]=\"infoIcon\" size=\"sm\"></st-icon>\n\t\t\t\t<span class=\"sr-only\">{{ isExpanded() ? 'Hide Details' : 'Show Details' }}</span>\n\t\t\t</st-button>\n\t\t}\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataTableSubToggleCellComponent {\n\t/**\n\t * The table row instance\n\t */\n\treadonly row = input.required<Row<unknown>>();\n\n\t/**\n\t * Whether the sub-component is currently expanded\n\t */\n\treadonly isExpanded = input<boolean>(false);\n\n\t/**\n\t * Whether this row can toggle a sub-component\n\t */\n\treadonly canToggleSubComponent = input<boolean>(false);\n\n\t/**\n\t * Event emitted when toggle is clicked\n\t */\n\treadonly toggled = output<string>();\n\n\t/** @internal */\n\treadonly expandIcon = matKeyboardArrowDown;\n\n\t/** @internal */\n\treadonly infoIcon = matInfo;\n\n\t/**\n\t * @internal\n\t * Handles the toggle click\n\t */\n\thandleToggle() {\n\t\tthis.toggled.emit(this.row().id);\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { CheckboxComponent } from '@sixbell-telco/sdk/components/forms/checkbox';\nimport { type CellContext, type HeaderContext, injectFlexRenderContext, RowData } from '@tanstack/angular-table';\nimport { DataTableContextService } from '../src/data-table-context.service';\n\n/**\n * Header checkbox component for selecting/deselecting all rows on current page\n */\n@Component({\n\tstandalone: true,\n\tselector: 'st-data-table-head-selection',\n\timports: [CheckboxComponent, CommonModule],\n\ttemplate: `\n\t\t<st-checkbox\n\t\t\t[value]=\"context.table.getIsAllPageRowsSelected()\"\n\t\t\t(valueUpdated)=\"context.table.toggleAllPageRowsSelected()\"\n\t\t\t[size]=\"checkboxSize()\"\n\t\t></st-checkbox>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataTableHeadSelectionComponent<T extends RowData> {\n\t/**\n\t * TanStack Table context injected by flexRender\n\t */\n\tcontext = injectFlexRenderContext<HeaderContext<T, unknown>>();\n\n\t/**\n\t * Data table context for size synchronization\n\t */\n\treadonly dataTableContext = inject(DataTableContextService);\n\n\t/**\n\t * Computed checkbox size based on table size\n\t */\n\treadonly checkboxSize = computed(() => {\n\t\tconst tableSize = this.dataTableContext.size();\n\t\tswitch (tableSize) {\n\t\t\tcase 'xs':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'sm':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'md':\n\t\t\t\treturn 'md';\n\t\t\tcase 'lg':\n\t\t\t\treturn 'lg';\n\t\t\tcase 'xl':\n\t\t\t\treturn 'lg';\n\t\t\tdefault:\n\t\t\t\treturn 'sm';\n\t\t}\n\t});\n}\n\n/**\n * Row checkbox component for individual row selection\n */\n@Component({\n\tstandalone: true,\n\tselector: 'st-data-table-row-selection',\n\timports: [CheckboxComponent, CommonModule],\n\ttemplate: `\n\t\t<st-checkbox\n\t\t\t[value]=\"context.row.getIsSelected()\"\n\t\t\t[disabled]=\"!context.row.getCanSelect()\"\n\t\t\t(valueUpdated)=\"context.row.toggleSelected()\"\n\t\t\t[size]=\"checkboxSize()\"\n\t\t></st-checkbox>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataTableRowSelectionComponent<T extends RowData> {\n\t/**\n\t * TanStack Table context injected by flexRender\n\t */\n\tcontext = injectFlexRenderContext<CellContext<T, unknown>>();\n\n\t/**\n\t * Data table context for size synchronization\n\t */\n\treadonly dataTableContext = inject(DataTableContextService);\n\n\t/**\n\t * Computed checkbox size based on table size\n\t */\n\treadonly checkboxSize = computed(() => {\n\t\tconst tableSize = this.dataTableContext.size();\n\t\tswitch (tableSize) {\n\t\t\tcase 'xs':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'sm':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'md':\n\t\t\t\treturn 'md';\n\t\t\tcase 'lg':\n\t\t\t\treturn 'lg';\n\t\t\tcase 'xl':\n\t\t\t\treturn 'lg';\n\t\t\tdefault:\n\t\t\t\treturn 'sm';\n\t\t}\n\t});\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { ButtonComponent, ButtonSizeProps } from '@sixbell-telco/sdk/components/button';\nimport { IconComponent, IconSizeProps } from '@sixbell-telco/sdk/components/icon';\nimport { matArrowUpward, matSwapVert } from '@sixbell-telco/sdk/components/icon/material/baseline';\nimport { DataTableContextService } from '../src/data-table-context.service';\n\n/**\n * Sortable header component for data table columns\n *\n * @example\n * ```typescript\n * flexRenderComponent(DataTableSortableHeaderComponent, {\n * inputs: {\n * label: 'Column Name',\n * sortState: column.getIsSorted(),\n * },\n * outputs: {\n * sortToggle: () => column.toggleSorting(),\n * },\n * })\n * ```\n */\n@Component({\n\tstandalone: true,\n\tselector: 'st-data-table-sortable-header',\n\timports: [CommonModule, IconComponent, ButtonComponent],\n\ttemplate: `\n\t\t<div class=\"inline-flex items-center gap-1\">\n\t\t\t<span class=\"font-bold\">{{ label() }}</span>\n\t\t\t<st-button\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t[size]=\"buttonSize()\"\n\t\t\t\t[square]=\"true\"\n\t\t\t\t[ghost]=\"true\"\n\t\t\t\t(click)=\"sortToggle.emit(); $event.stopPropagation()\"\n\t\t\t\tclass=\"group\"\n\t\t\t\t[attr.aria-label]=\"'Sort by ' + label()\"\n\t\t\t\t[attr.aria-sort]=\"computedAriaSortAttribute()\"\n\t\t\t>\n\t\t\t\t<st-icon\n\t\t\t\t\tclass=\"transition-transform duration-300 ease-in-out group-aria-[sort=ascending]:rotate-0 group-aria-[sort=descending]:rotate-180\"\n\t\t\t\t\t[icon]=\"currentSortIcon()\"\n\t\t\t\t\t[size]=\"iconSize()\"\n\t\t\t\t></st-icon>\n\t\t\t</st-button>\n\t\t</div>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataTableSortableHeaderComponent {\n\treadonly dataTableContext = inject(DataTableContextService);\n\n\t/**\n\t * Display label for the column\n\t */\n\treadonly label = input.required<string>();\n\n\t/**\n\t * Current sort state of the column\n\t */\n\treadonly sortState = input<'asc' | 'desc' | false>(false);\n\n\t/**\n\t * Event emitted when sort toggle is requested\n\t */\n\treadonly sortToggle = output<void>();\n\n\t/** @internal */\n\treadonly iconDefaultSort = matSwapVert;\n\n\t/** @internal */\n\treadonly iconAscending = matArrowUpward;\n\n\t/**\n\t * @internal\n\t * Computes button size based on data table size\n\t */\n\treadonly buttonSize = computed<ButtonSizeProps>(() => {\n\t\tswitch (this.dataTableContext.size()) {\n\t\t\tcase 'xs':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'sm':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'md':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'lg':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'xl':\n\t\t\t\treturn 'md';\n\t\t\tdefault:\n\t\t\t\treturn 'xs';\n\t\t}\n\t});\n\n\t/**\n\t * @internal\n\t * Computes icon size based on data table size\n\t */\n\treadonly iconSize = computed<IconSizeProps>(() => {\n\t\tswitch (this.dataTableContext.size()) {\n\t\t\tcase 'xs':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'sm':\n\t\t\t\treturn 'xs';\n\t\t\tcase 'md':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'lg':\n\t\t\t\treturn 'sm';\n\t\t\tcase 'xl':\n\t\t\t\treturn 'md';\n\t\t\tdefault:\n\t\t\t\treturn 'xs';\n\t\t}\n\t});\n\n\t/**\n\t * @internal\n\t * Computes the appropriate icon based on current sort state\n\t */\n\treadonly currentSortIcon = computed(() => {\n\t\tswitch (this.sortState()) {\n\t\t\tcase 'asc':\n\t\t\tcase 'desc':\n\t\t\t\treturn this.iconAscending;\n\t\t\tdefault:\n\t\t\t\treturn this.iconDefaultSort;\n\t\t}\n\t});\n\n\t/**\n\t * @internal\n\t * Computes aria-sort attribute for accessibility\n\t */\n\treadonly computedAriaSortAttribute = computed<'ascending' | 'descending' | 'none'>(() => {\n\t\tswitch (this.sortState()) {\n\t\t\tcase 'asc':\n\t\t\t\treturn 'ascending';\n\t\t\tcase 'desc':\n\t\t\t\treturn 'descending';\n\t\t\tdefault:\n\t\t\t\treturn 'none';\n\t\t}\n\t});\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output } from '@angular/core';\nimport { heroDocumentText, heroXCircle } from '@ng-icons/heroicons/outline';\nimport { SelectComponent } from '@sixbell-telco/sdk/components/forms/select';\nimport { IconComponent } from '@sixbell-telco/sdk/components/icon';\nimport { PaginationType, PaginatorComponent } from '@sixbell-telco/sdk/components/paginator';\nimport { TableContainerHeightProps, TableContentSizeProps } from '@sixbell-telco/sdk/components/table';\nimport { TypographyDirective, TypographyVariantProps } from '@sixbell-telco/sdk/directives/typography';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { TranslatePipe, TranslateService } from '@sixbell-telco/sdk/utils/translation';\nimport { cva } from 'class-variance-authority';\nimport { DataTableContextService } from './data-table-context.service';\nimport { DataTablePagination } from './models';\n\n/** Configuration object for data table styling variants */\nexport type DataTableVariantProps = {\n\tsize?: TableContentSizeProps;\n\tcontainerHeight?: TableContainerHeightProps;\n};\n\n/**\n * @internal\n * Generates data table classes with size and height variants\n */\nexport const dataTableContent = cva(\n\t[\n\t\t'table',\n\t\t'relative',\n\t\t'text-pretty',\n\t\t'[&_tbody]:font-body',\n\t\t'[&_thead]:font-heading',\n\t\t'[&_thead]:leading-normal',\n\t\t'[&_tbody]:leading-tight',\n\t\t'[&_th]:bg-neutral [&_th]:text-neutral-content',\n\t\t'[&_th]:px-4',\n\t\t'[&_td]:px-4',\n\t\t'[&_tbody_tr]:border-transparent',\n\t\t'rounded-t-box',\n\t\t'[&_tbody_tr]:border-transparent',\n\t],\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\txs: ['table-xs'],\n\t\t\t\tsm: ['table-sm'],\n\t\t\t\tmd: ['table-md'],\n\t\t\t\tlg: ['table-lg'],\n\t\t\t\txl: ['table-xl'],\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: 'sm',\n\t\t},\n\t},\n);\n\n/**\n * A styled container component for data tables - provides styling shell only\n *\n * This component is similar to st-table but with additional data table specific styling.\n * Users should compose their own table structure using TanStack Table and SDK components.\n *\n * @example\n * ```html\n * <st-data-table-container size=\"md\" height=\"lg\">\n * <table>\n * <thead>\n * <tr>\n * <th><st-data-table-sortable-header>Name</st-data-table-sortable-header></th>\n * </tr>\n * </thead>\n * <tbody>\n * <tr>\n * <td>John Doe</td>\n * </tr>\n * </tbody>\n * </table>\n * </st-data-table-container>\n * ```\n */\n@Component({\n\tselector: 'st-data-table',\n\timports: [CommonModule, PaginatorComponent, TypographyDirective, SelectComponent, TranslatePipe, IconComponent],\n\ttemplateUrl: './data-table.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [DataTableContextService],\n})\nexport class DataTableContainerComponent {\n\treadonly translationService = inject(TranslateService);\n\treadonly dataTableContext = inject(DataTableContextService);\n\n\t// Icon references for template\n\treadonly noDataIcon = heroDocumentText;\n\treadonly noResultsIcon = heroXCircle;\n\n\t/**\n\t * Table size variant\n\t * @defaultValue 'sm'\n\t */\n\tsize = input<TableContentSizeProps>('sm');\n\n\tconstructor() {\n\t\t// Update context when size changes\n\t\teffect(() => {\n\t\t\tthis.dataTableContext.setSize(this.size());\n\t\t});\n\t}\n\n\t/**\n\t * Enable sticky header row\n\t * @defaultValue false\n\t */\n\tpinRows = input<boolean>(false);\n\n\t/**\n\t * Enable sticky first column\n\t * @defaultValue false\n\t */\n\tpinColumns = input<boolean>(false);\n\n\t/**\n\t * Apply zebra-striping to rows\n\t * @defaultValue false\n\t */\n\tzebra = input<boolean>(false);\n\n\t/**\n\t * Pagination control display variant\n\t * @defaultValue 'default'\n\t */\n\tpaginatorType = input<PaginationType>('default');\n\n\t/**\n\t * Total number of items across all pages\n\t * @defaultValue 0\n\t */\n\ttotalItems = input<number>(0);\n\n\t/**\n\t * Pagination configuration\n\t * @defaultValue { id: 'paginator', currentPage: 1, itemsPerPage: 10, search: '', sortColumn: null, sortDirection: null, filters: {} }\n\t */\n\tpagination = input<DataTablePagination>({\n\t\tid: 'paginator',\n\t\tcurrentPage: 1,\n\t\titemsPerPage: 10,\n\t\tsearch: '',\n\t\tsortColumn: null,\n\t\tsortDirection: null,\n\t\tfilters: {},\n\t});\n\n\t/**\n\t * Maximum number of pagination buttons to display\n\t * @defaultValue 4\n\t */\n\tmaxSize = input<number>(4);\n\n\t/** Event emitted when page changes */\n\tpageChanged = output<number>();\n\n\t/** Event emitted when page size changes */\n\tpageSizeChanged = output<number>();\n\n\treadonly ENTRIES = [5, 10, 20, 50, 100] as const;\n\n\treadonly entriesPerPageOptions = computed(() => {\n\t\treturn this.ENTRIES.map((n) => {\n\t\t\tconst translatedText = this.translationService.instant('sdk.dataTable.perPage', { count: n });\n\t\t\t// Fallback if translation fails\n\t\t\tconst fallbackText = `${n} / page`;\n\t\t\treturn {\n\t\t\t\tvalue: n,\n\t\t\t\ttext: translatedText && translatedText !== 'sdk.dataTable.perPage' ? translatedText : fallbackText,\n\t\t\t};\n\t\t});\n\t});\n\n\t/**\n\t * Computed total number of pages for the internal paginator.\n\t * Calculated from totalItems and itemsPerPage.\n\t */\n\treadonly totalPages = computed(() => {\n\t\tconst itemsPerPage = this.pagination().itemsPerPage || 1;\n\t\tconst totalItems = this.totalItems();\n\t\treturn Math.ceil(totalItems / itemsPerPage);\n\t});\n\n\t/**\n\t * Computed display range for current page entries\n\t * @example \"1-10\" of 100 entries\n\t */\n\tpaginationRange = computed(() => {\n\t\tconst start = this.pagination().currentPage * this.pagination().itemsPerPage - this.pagination().itemsPerPage + 1;\n\t\tconst end = Math.min(this.pagination().currentPage * this.pagination().itemsPerPage, this.totalItems());\n\t\treturn `${start}-${end}`;\n\t});\n\n\t/**\n\t * Function to determine if any filters are currently active\n\t * This allows the parent component to define what constitutes an \"active filter\"\n\t */\n\thasActiveFiltersCallback = input<(() => boolean) | undefined>();\n\n\t/**\n\t * Computed boolean indicating if any filters are currently active\n\t */\n\treadonly hasActiveFilters = computed(() => {\n\t\tconst callback = this.hasActiveFiltersCallback();\n\n\t\tif (callback) {\n\t\t\treturn callback();\n\t\t}\n\n\t\t// Fallback: check for basic search term only\n\t\tconst pagination = this.pagination();\n\t\treturn !!pagination.search?.trim();\n\t});\n\n\t/**\n\t * Computed boolean indicating if we should show \"no results\" vs \"no data\"\n\t */\n\treadonly hasNoResults = computed(() => {\n\t\treturn this.totalItems() === 0 && this.hasActiveFilters();\n\t});\n\n\t/**\n\t * Computed boolean indicating if we should show \"no data\" state\n\t */\n\treadonly hasNoData = computed(() => {\n\t\treturn this.totalItems() === 0 && !this.hasActiveFilters();\n\t});\n\n\t/**\n\t * Handles page navigation events\n\t * @param page - New page number\n\t */\n\thandlePageChange(page: number) {\n\t\tthis.pageChanged.emit(page);\n\t}\n\n\t/**\n\t * Handles page size changes\n\t * @param size - New items per page value\n\t */\n\thandlePageSizeChange(size: unknown) {\n\t\tlet resolved: number | undefined;\n\t\tif (typeof size === 'number') {\n\t\t\tresolved = size;\n\t\t} else if (size && typeof size === 'object' && 'value' in (size as Record<string, unknown>)) {\n\t\t\tconst v = (size as Record<string, unknown>)['value'];\n\t\t\tconst safeStringify = (x: unknown) => (['string', 'number', 'boolean'].includes(typeof x) ? String(x) : '0');\n\t\t\tresolved = typeof v === 'number' ? v : Number(safeStringify(v));\n\t\t} else {\n\t\t\tconst safeStringify = (x: unknown) => (['string', 'number', 'boolean'].includes(typeof x) ? String(x) : '0');\n\t\t\tresolved = Number(safeStringify(size)) || undefined;\n\t\t}\n\t\tconst s = Number(resolved || 1);\n\t\tthis.pageSizeChanged.emit(s);\n\t}\n\n\t/**\n\t * @internal\n\t * Computes typography variant for paginator text based on table size\n\t */\n\treadonly paginatorTextSize = computed<TypographyVariantProps>(() => {\n\t\tswitch (this.size()) {\n\t\t\tcase 'xs':\n\t\t\t\treturn 'body-xxs';\n\t\t\tcase 'sm':\n\t\t\t\treturn 'body-xs';\n\t\t\tcase 'md':\n\t\t\t\treturn 'body-sm';\n\t\t\tcase 'lg':\n\t\t\t\treturn 'body';\n\t\t\tcase 'xl':\n\t\t\t\treturn 'body';\n\t\t\tdefault:\n\t\t\t\treturn 'body-xs';\n\t\t}\n\t});\n\n\t/**\n\t * @internal\n\t * Computes table element classes based on current configuration\n\t */\n\treadonly tableClass = computed(() =>\n\t\tcn(\n\t\t\tdataTableContent({\n\t\t\t\tsize: this.size(),\n\t\t\t}),\n\t\t\t{\n\t\t\t\t'table-pin-rows': this.pinRows(),\n\t\t\t\t'table-pin-cols': this.pinColumns(),\n\t\t\t\t'table-zebra': this.zebra(),\n\t\t\t},\n\t\t),\n\t);\n\n\t/**\n\t * @internal\n\t * Computes table container classes based on height input\n\t */\n\treadonly tableContainerClass = computed(() => cn('w-full flex-grow'));\n\n\t/**\n\t * @internal\n\t * Computes outer container classes based on size\n\t */\n\treadonly containerClass = computed(() => cn('rounded-box border-neutral flex flex-col overflow-x-auto border border-solid gap-3 @container'));\n}\n","<div [class]=\"containerClass()\">\n\t<!-- Table container -->\n\t<div [class]=\"tableContainerClass()\">\n\t\t<div class=\"w-full flex-grow overflow-x-auto\">\n\t\t\t@if (hasNoData()) {\n\t\t\t\t<!-- No data state -->\n\t\t\t\t<div class=\"flex flex-col items-center justify-center py-12 text-center\">\n\t\t\t\t\t<div class=\"text-base-content/40 mb-3\">\n\t\t\t\t\t\t<st-icon [icon]=\"noDataIcon\" size=\"lg\" color=\"base-content\" class=\"mx-auto opacity-40\"></st-icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<h3 typography tyVariant=\"h6\" class=\"text-base-content/60 mb-2\">{{ 'sdk.dataTable.noData.title' | translate }}</h3>\n\t\t\t\t\t<p typography tyVariant=\"body-sm\" class=\"text-base-content/40\">{{ 'sdk.dataTable.noData.message' | translate }}</p>\n\t\t\t\t</div>\n\t\t\t} @else if (hasNoResults()) {\n\t\t\t\t<!-- No results from filters state -->\n\t\t\t\t<div class=\"flex flex-col items-center justify-center py-12 text-center\">\n\t\t\t\t\t<div class=\"text-base-content/40 mb-3\">\n\t\t\t\t\t\t<st-icon [icon]=\"noResultsIcon\" size=\"xl\" color=\"base-content\" class=\"mx-auto opacity-40\"></st-icon>\n\t\t\t\t\t</div>\n\t\t\t\t\t<h3 typography tyVariant=\"h6\" class=\"text-base-content/60 mb-2\">{{ 'sdk.dataTable.noResults.title' | translate }}</h3>\n\t\t\t\t\t<p typography tyVariant=\"body-sm\" class=\"text-base-content/40\">{{ 'sdk.dataTable.noResults.message' | translate }}</p>\n\t\t\t\t</div>\n\t\t\t} @else {\n\t\t\t\t<table [class]=\"tableClass()\">\n\t\t\t\t\t<ng-content></ng-content>\n\t\t\t\t</table>\n\t\t\t}\n\t\t</div>\n\t</div>\n\n\t<!-- Pagination from showcase -->\n\t<div class=\"@container flex w-full flex-col gap-4 overflow-x-auto pb-3\">\n\t\t<!-- Divider -->\n\t\t<div class=\"divider divider-neutral my-0 h-[0.0625rem] px-4 before:h-[0.0625rem] after:h-[0.0625rem]\"></div>\n\t\t<!-- Paginator Container -->\n\t\t<div\n\t\t\tclass=\"flex flex-col items-center gap-4 px-4 @2xl:flex-row @2xl:justify-between @2xl:gap-2 @4xl:grid @4xl:grid-cols-[auto_1fr_auto] @4xl:items-center\"\n\t\t>\n\t\t\t<!-- Entries range text -->\n\t\t\t<div class=\"flex items-center justify-end\">\n\t\t\t\t<span typography [tyVariant]=\"paginatorTextSize()\" [tyColor]=\"'inherit'\">{{\n\t\t\t\t\t'sdk.dataTable.entriesRange' | translate: { range: paginationRange(), total: totalItems() }\n\t\t\t\t}}</span>\n\t\t\t</div>\n\n\t\t\t<!-- Paginator -->\n\t\t\t<div class=\"flex justify-center\">\n\t\t\t\t<st-paginator\n\t\t\t\t\t[pages]=\"totalPages()\"\n\t\t\t\t\t[currentPage]=\"pagination().currentPage\"\n\t\t\t\t\t[maxSize]=\"maxSize()\"\n\t\t\t\t\ttype=\"default\"\n\t\t\t\t\t(pageChanged)=\"handlePageChange($event)\"\n\t\t\t\t></st-paginator>\n\t\t\t</div>\n\n\t\t\t<!-- Entries per page dropdown -->\n\t\t\t<st-select\n\t\t\t\t[options]=\"entriesPerPageOptions()\"\n\t\t\t\t[value]=\"pagination().itemsPerPage\"\n\t\t\t\tvalueKey=\"value\"\n\t\t\t\tdisplayKey=\"text\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\t(valueUpdated)=\"handlePageSizeChange($event)\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t[allowClear]=\"false\"\n\t\t\t></st-select>\n\t\t</div>\n\t</div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { ButtonComponent } from '@sixbell-telco/sdk/components/button';\nimport { IconComponent } from '@sixbell-telco/sdk/components/icon';\nimport { matInfo, matKeyboardArrowDown } from '@sixbell-telco/sdk/components/icon/material/baseline';\nimport { Row, RowData } from '@tanstack/angular-table';\n\n@Component({\n\tstandalone: true,\n\tselector: 'st-data-table-sub-component-toggle-cell',\n\timports: [CommonModule, IconComponent, ButtonComponent],\n\ttemplate: `\n\t\t@if (canToggleSubComponent()) {\n\t\t\t<st-button\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"xs\"\n\t\t\t\t[circle]=\"true\"\n\t\t\t\t[ghost]=\"true\"\n\t\t\t\tclass=\"group\"\n\t\t\t\t(click)=\"toggled.emit(row().id)\"\n\t\t\t\t[attr.aria-expanded]=\"isExpanded()\"\n\t\t\t\ttitle=\"{{ isExpanded() ? 'Hide Details' : 'Show Details' }}\"\n\t\t\t>\n\t\t\t\t<st-icon\n\t\t\t\t\tclass=\"transition-transform duration-300 ease-in-out group-aria-[expanded=false]:rotate-0 group-aria-[expanded=true]:rotate-180\"\n\t\t\t\t\t[icon]=\"iconChevronDown\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t></st-icon>\n\t\t\t\t<span class=\"sr-only\">{{ isExpanded() ? 'Hide Details' : 'Show Details' }}</span>\n\t\t\t</st-button>\n\t\t} @else {\n\t\t\t<!-- Display an informational icon if a sub-component cannot be shown for this row -->\n\t\t\t<st-button\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"xs\"\n\t\t\t\t[circle]=\"true\"\n\t\t\t\t[ghost]=\"true\"\n\t\t\t\t[attr.aria-expanded]=\"isExpanded()\"\n\t\t\t\ttitle=\"{{ isExpanded() ? 'Hide Details' : 'Show Details' }}\"\n\t\t\t\t[disabled]=\"true\"\n\t\t\t>\n\t\t\t\t<st-icon [icon]=\"iconInfo\" size=\"sm\"></st-icon>\n\t\t\t\t<span class=\"sr-only\">{{ isExpanded() ? 'Hide Details' : 'Show Details' }}</span>\n\t\t\t</st-button>\n\t\t}\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataTableSubComponentToggleCellComponent<T extends RowData> {\n\treadonly row = input.required<Row<T>>();\n\treadonly isExpanded = input.required<boolean>(); // Current state of the sub-component for this row\n\treadonly toggled = output<string>(); // Emits row.id when clicked to trigger parent component update\n\n\t// Input to determine if this specific row is eligible to display a sub-component\n\treadonly canToggleSubComponent = input<boolean>(false);\n\n\treadonly iconChevronDown = matKeyboardArrowDown;\n\treadonly iconInfo = matInfo;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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