@tekus/design-system 5.40.0 → 5.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/fesm2022/tekus-design-system-components-badge.mjs +19 -3
  2. package/fesm2022/tekus-design-system-components-badge.mjs.map +1 -1
  3. package/fesm2022/tekus-design-system-components-carousel.mjs +44 -9
  4. package/fesm2022/tekus-design-system-components-carousel.mjs.map +1 -1
  5. package/fesm2022/tekus-design-system-components-checkbox.mjs +2 -2
  6. package/fesm2022/tekus-design-system-components-checkbox.mjs.map +1 -1
  7. package/fesm2022/tekus-design-system-components-color-picker.mjs +119 -71
  8. package/fesm2022/tekus-design-system-components-color-picker.mjs.map +1 -1
  9. package/fesm2022/tekus-design-system-components-column-picker.mjs +210 -0
  10. package/fesm2022/tekus-design-system-components-column-picker.mjs.map +1 -0
  11. package/fesm2022/tekus-design-system-components-dropdown.mjs +1 -1
  12. package/fesm2022/tekus-design-system-components-dropdown.mjs.map +1 -1
  13. package/fesm2022/tekus-design-system-components-icon.mjs +10 -0
  14. package/fesm2022/tekus-design-system-components-icon.mjs.map +1 -1
  15. package/fesm2022/tekus-design-system-components-link-group.mjs +74 -0
  16. package/fesm2022/tekus-design-system-components-link-group.mjs.map +1 -0
  17. package/fesm2022/tekus-design-system-components-panel.mjs +2 -2
  18. package/fesm2022/tekus-design-system-components-panel.mjs.map +1 -1
  19. package/fesm2022/tekus-design-system-components-skeleton.mjs +79 -0
  20. package/fesm2022/tekus-design-system-components-skeleton.mjs.map +1 -0
  21. package/fesm2022/tekus-design-system-components-stepper.mjs +2 -2
  22. package/fesm2022/tekus-design-system-components-stepper.mjs.map +1 -1
  23. package/fesm2022/tekus-design-system-components-table.mjs +293 -11
  24. package/fesm2022/tekus-design-system-components-table.mjs.map +1 -1
  25. package/fesm2022/tekus-design-system-components-tabs.mjs +1 -1
  26. package/fesm2022/tekus-design-system-components-tabs.mjs.map +1 -1
  27. package/fesm2022/tekus-design-system-components-toggle.mjs +2 -2
  28. package/fesm2022/tekus-design-system-components-toggle.mjs.map +1 -1
  29. package/fesm2022/tekus-design-system-components-toolbar.mjs +33 -3
  30. package/fesm2022/tekus-design-system-components-toolbar.mjs.map +1 -1
  31. package/fesm2022/tekus-design-system-components-tooltip.mjs +16 -3
  32. package/fesm2022/tekus-design-system-components-tooltip.mjs.map +1 -1
  33. package/package.json +13 -1
  34. package/types/tekus-design-system-components-badge.d.ts +15 -1
  35. package/types/tekus-design-system-components-carousel.d.ts +29 -3
  36. package/types/tekus-design-system-components-color-picker.d.ts +41 -7
  37. package/types/tekus-design-system-components-column-picker.d.ts +116 -0
  38. package/types/tekus-design-system-components-icon.d.ts +1 -1
  39. package/types/tekus-design-system-components-link-group.d.ts +119 -0
  40. package/types/tekus-design-system-components-skeleton.d.ts +68 -0
  41. package/types/tekus-design-system-components-table.d.ts +263 -8
  42. package/types/tekus-design-system-components-toolbar.d.ts +37 -2
  43. package/types/tekus-design-system-components-tooltip.d.ts +12 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-toolbar.mjs","sources":["../../../projects/design-system/components/toolbar/src/toolbar.component.ts","../../../projects/design-system/components/toolbar/src/toolbar.component.html","../../../projects/design-system/components/toolbar/tekus-design-system-components-toolbar.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, model, signal, input, output, computed, inject, viewChild, effect, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport {\n combineLatest,\n distinctUntilChanged,\n EMPTY,\n map,\n switchMap,\n timer,\n} from 'rxjs';\nimport { MenuItem } from 'primeng/api';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { ButtonComponent } from '@tekus/design-system/components/button';\nimport { InputTextComponent } from '@tekus/design-system/components/input-text';\nimport { CheckboxComponent } from '@tekus/design-system/components/checkbox';\nimport { ActionGroupComponent, TkAction } from '@tekus/design-system/components/action-group';\nimport { IconComponent } from '@tekus/design-system/components/icon';\nimport { DropdownComponent } from '@tekus/design-system/components/dropdown';\nimport { MultiselectComponent, MultiSelectOption } from '@tekus/design-system/components/multiselect';\nimport { ChipComponent } from '@tekus/design-system/components/chip';\nimport { DrawerComponent } from '@tekus/design-system/components/drawer';\nimport { TkToolbarFilterConfig, TkToolbarAction } from './toolbar.types';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'tk-toolbar',\n imports: [\n ButtonComponent,\n InputTextComponent,\n CheckboxComponent,\n ActionGroupComponent,\n IconComponent,\n DropdownComponent,\n MultiselectComponent,\n ChipComponent,\n DrawerComponent,\n PopoverModule,\n ],\n templateUrl: './toolbar.component.html',\n styleUrl: './toolbar.component.scss',\n})\nexport class ToolbarComponent {\n private readonly breakpointObserver = inject(BreakpointObserver);\n\n /** Responsive flag using BreakpointObserver */\n isMobile = toSignal(\n this.breakpointObserver.observe('(max-width: 768px)').pipe(map(r => r.matches)),\n { initialValue: false }\n );\n\n /**\n * Two-way bindable signal for the search input value.\n */\n searchModel = model<string>('');\n\n /**\n * Label/placeholder text displayed inside the search input.\n * @default 'Buscar'\n */\n searchFloatLabel = input<string>('Buscar');\n\n /**\n * Controls the visibility of the search input field.\n * @default true\n */\n searchVisible = input<boolean>(true);\n\n /**\n * Two-way bindable signal for the layout view toggle ('table' or 'cards').\n * @default 'table'\n */\n view = model<'table' | 'cards'>('table');\n\n /**\n * Controls the visibility of the layout view toggle button.\n * @default false\n */\n viewToggleVisible = input<boolean>(false);\n\n /**\n * Dynamic list of filters and their available selection options.\n * @default []\n */\n filters = input<TkToolbarFilterConfig[]>([]);\n\n /** Backwards compatibility: Writable model signal for the selected option in a single filter select (deprecated) */\n filterModel = model<Record<string, string> | null>(null);\n\n /** Backwards compatibility: Input for dropdown options (deprecated) */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n filterOptions = input<Array<any>>([\n { label: 'Option 1', value: 'option1' },\n { label: 'Option 2', value: 'option2' },\n { label: 'Option 3', value: 'option3' },\n ]);\n\n /** Backwards compatibility: Input for the option label key (deprecated) */\n filterOptionLabel = input<string>('label');\n\n /** Backwards compatibility: Input for the label of the single select dropdown (deprecated) */\n filterFloatLabel = input<string>('Filtrar');\n\n /** Backwards compatibility: Controls whether filter button is shown (deprecated) */\n filterVisible = input<boolean>(true);\n\n /**\n * Two-way bindable signal for currently selected filter values.\n * Format: { [filterKey]: MultiSelectOption[] }\n * @default {}\n */\n filterValues = model<Record<string, MultiSelectOption[]>>({});\n\n /**\n * Label/text for the clear button.\n * @default 'Limpiar'\n */\n clearLabel = input<string>('Limpiar');\n\n /**\n * Label/text for the delete action button.\n * @default 'Eliminar'\n */\n deleteLabel = input<string>('Eliminar');\n\n /**\n * Label/text for the filters header.\n * @default 'Filtros'\n */\n filterLabel = input<string>('Filtros');\n\n /** Label for selected item singular form (e.g. 'seleccionado') */\n selectedLabel = input<string>('seleccionado');\n\n /** Label for selected item plural form (e.g. 'seleccionados') */\n selectedPluralLabel = input<string>('seleccionados');\n\n /** Label/text for the apply button in overlays (e.g. 'Aplicar') */\n applyLabel = input<string>('Aplicar');\n\n /** Tooltip text for the reload action button (e.g. 'Actualizar') */\n reloadTooltip = input<string>('Actualizar');\n\n /** Tooltip text for the sort action button (e.g. 'Ordenar') */\n sortTooltip = input<string>('Ordenar');\n\n /** Tooltip text for view cards layout button (e.g. 'Vista tarjeta') */\n viewCardsTooltip = input<string>('Vista tarjeta');\n\n /** Tooltip text for view table layout button (e.g. 'Vista tabla') */\n viewTableTooltip = input<string>('Vista tabla');\n\n /**\n * Available list of sorting options.\n * @default []\n */\n sortOptions = input<Array<{ label: string; value: string }>>([]);\n\n /**\n * Label/text for the sorting header.\n * @default 'Ordenar por'\n */\n sortLabel = input<string>('Ordenar por');\n\n /**\n * Two-way bindable signal for the active sort option value.\n * @default null\n */\n sortValue = model<string | null>(null);\n\n /**\n * Controls the visibility of the reload button.\n * @default false\n */\n reloadVisible = input<boolean>(false);\n\n /**\n * Sets the interval for automatic reload in milliseconds.\n * If null, automatic reload is disabled.\n * @default null\n */\n reloadInterval = input<number | null>(null);\n\n /**\n * Controls the loading state of the reload button, triggering a rotation animation.\n * @default false\n */\n loading = input<boolean>(false);\n\n /**\n * Secondary or mass actions collapsed into the tk-action-group dropdown.\n * @default []\n */\n globalActions = input<TkAction[]>([]);\n\n /**\n * Number of items selected in the list.\n * @default 0\n */\n selectionCount = input<number>(0);\n\n /**\n * Two-way bindable signal for checking/unchecking the select-all checkbox.\n * @default false\n */\n allSelected = model<boolean>(false);\n\n /**\n * Two-way bindable signal for the indeterminate state of the select-all checkbox.\n * @default false\n */\n indeterminate = model<boolean>(false);\n\n /**\n * Actions available when one or more items are selected.\n * @default []\n */\n selectionActions = input<TkToolbarAction[]>([]);\n\n /**\n * Maximum number of selection action buttons visible directly before grouping the rest.\n * @default 1\n */\n maxVisibleSelectionActions = input<number>(1);\n\n /**\n * Emits an event when the reload button is clicked or the automatic interval is reached.\n */\n reload = output<void>();\n\n /**\n * Emits when filters are applied.\n */\n appliedFilters = output<Record<string, MultiSelectOption[]>>();\n\n /**\n * Emits when sorting changes.\n */\n appliedSort = output<string | null>();\n\n /** Temporary filter values held before the user clicks \"Aplicar\" */\n tempFilterValues = signal<Record<string, MultiSelectOption[]>>({});\n\n /** Temporary sort value held before the user clicks \"Aplicar\" in mobile drawer */\n tempSortValue = signal<string | null>(null);\n\n /** Controls visibility of mobile drawers */\n showFilterDrawer = signal<boolean>(false);\n showSortDrawer = signal<boolean>(false);\n\n filterPopover = viewChild<Popover>('filterPopover');\n sortPopover = viewChild<Popover>('sortPopover');\n\n /** Computes whether any filters are currently active */\n hasActiveFilters = computed(() => {\n const values = this.filterValues();\n return Object.values(values).some(arr => arr && arr.length > 0);\n });\n\n /** Computes whether sorting is active */\n hasActiveSort = computed(() => {\n return this.sortValue() !== null && this.sortValue() !== '';\n });\n\n /** Reload button visibility: only visible if reload is allowed AND filters or sorting is active */\n shouldShowReload = computed(() => {\n return this.reloadVisible();\n });\n\n /** Computes the final filters configuration, adapting old filterOptions format to the new filters schema */\n derivedFilters = computed<TkToolbarFilterConfig[]>(() => {\n const customFilters = this.filters();\n if (customFilters && customFilters.length > 0) {\n return customFilters;\n }\n\n const oldOptions = this.filterOptions();\n if (oldOptions && oldOptions.length > 0) {\n return [\n {\n key: 'default_filter',\n label: this.filterFloatLabel() || 'Filtrar',\n options: oldOptions.map(opt => ({\n name: opt[this.filterOptionLabel()] || opt['label'] || opt['value'],\n code: opt['value']\n }))\n }\n ];\n }\n\n return [];\n });\n\n /** Active chips representing individual filter selections */\n activeChips = computed(() => {\n const values = this.filterValues();\n const configs = this.derivedFilters();\n const chips: Array<{ filterKey: string; code: string; label: string }> = [];\n\n for (const config of configs) {\n const selected = values[config.key] || [];\n for (const item of selected) {\n chips.push({\n filterKey: config.key,\n code: item.code,\n label: item.name,\n });\n }\n }\n return chips;\n });\n\n /** Visibility of the active filters bar (below tools) */\n shouldShowActiveFiltersBar = computed(() => {\n return this.hasActiveFilters();\n });\n\n /** Visible selection actions as buttons */\n visibleSelectionActions = computed(() => {\n return this.selectionActions()\n .slice(0, this.maxVisibleSelectionActions())\n .map(action => {\n if (action.severity === 'danger') {\n return { ...action, label: this.deleteLabel() };\n }\n return action;\n });\n });\n\n /** Overflow selection actions as menu items for dropdown */\n overflowSelectionActions = computed<MenuItem[]>(() => {\n const list = this.selectionActions();\n const max = this.maxVisibleSelectionActions();\n if (list.length <= max) {\n return [];\n }\n return list.slice(max).map(action => {\n const label = action.severity === 'danger' ? this.deleteLabel() : action.label;\n return {\n label: label,\n icon: action.icon,\n command: () => action.action(),\n disabled: action.disabled ?? false,\n };\n });\n });\n\n constructor() {\n combineLatest([\n toObservable(this.reloadInterval).pipe(distinctUntilChanged()),\n toObservable(this.loading).pipe(distinctUntilChanged()),\n ])\n .pipe(\n switchMap(([interval, isLoading]) => {\n if (isLoading || !interval || interval <= 0) {\n return EMPTY;\n }\n return timer(interval, interval);\n }),\n takeUntilDestroyed()\n )\n .subscribe(() => this.onReload());\n\n effect(() => {\n const modelVal = this.filterModel();\n if (modelVal?.['value']) {\n const matchedOpt = this.filterOptions().find(opt => opt['value'] === modelVal['value']);\n if (matchedOpt) {\n const labelKey = this.filterOptionLabel();\n const label = matchedOpt[labelKey] || matchedOpt['label'] || matchedOpt['value'];\n untracked(() => {\n const current = this.filterValues();\n const currentSelections = current['default_filter'] || [];\n if (currentSelections.length !== 1 || currentSelections[0].code !== matchedOpt['value']) {\n this.filterValues.set({\n ...current,\n default_filter: [{ name: label, code: matchedOpt['value'] }]\n });\n }\n });\n }\n } else if (!modelVal) {\n untracked(() => {\n const current = this.filterValues();\n if (current['default_filter'] && current['default_filter'].length > 0) {\n const updated = { ...current };\n delete updated['default_filter'];\n this.filterValues.set(updated);\n }\n });\n }\n });\n\n // Sync filterValues (new) -> filterModel (old single-select)\n effect(() => {\n const values = this.filterValues();\n const defaultFilterSelections = values['default_filter'];\n if (defaultFilterSelections && defaultFilterSelections.length > 0) {\n const lastSelected = defaultFilterSelections[defaultFilterSelections.length - 1];\n const matchedOpt = this.filterOptions().find(opt => opt['value'] === lastSelected.code);\n if (matchedOpt) {\n untracked(() => {\n if (this.filterModel()?.[ 'value' ] !== matchedOpt['value']) {\n this.filterModel.set(matchedOpt);\n }\n });\n }\n } else {\n untracked(() => {\n if (this.filterModel() !== null) {\n this.filterModel.set(null);\n }\n });\n }\n });\n }\n\n /** Toggles filters overlay and initializes temporary state */\n openFilters(event: Event): void {\n const currentValues = this.filterValues();\n // Copy current filter selections into temporary state\n const copy: Record<string, MultiSelectOption[]> = {};\n for (const key of Object.keys(currentValues)) {\n copy[key] = [...(currentValues[key] || [])];\n }\n this.tempFilterValues.set(copy);\n\n if (this.isMobile()) {\n this.showFilterDrawer.set(true);\n } else {\n this.filterPopover()?.toggle(event);\n }\n }\n\n /** Updates temporary filter values for a specific filter key */\n onTempFilterChange(key: string, value: MultiSelectOption[]): void {\n this.tempFilterValues.update(prev => ({ ...prev, [key]: value }));\n }\n\n /** Saves temporary filter selections and triggers apply */\n applyFilters(): void {\n const temp = this.tempFilterValues();\n this.filterValues.set({ ...temp });\n this.appliedFilters.emit({ ...temp });\n\n if (this.isMobile()) {\n this.showFilterDrawer.set(false);\n } else {\n this.filterPopover()?.hide();\n }\n }\n\n /** Clears temporary filters inside popover/drawer */\n clearTempFilters(): void {\n const cleared: Record<string, MultiSelectOption[]> = {};\n for (const filter of this.derivedFilters()) {\n cleared[filter.key] = [];\n }\n this.tempFilterValues.set(cleared);\n }\n\n /** Clears all applied filters */\n clearAllFilters(): void {\n const cleared: Record<string, MultiSelectOption[]> = {};\n this.filterValues.set(cleared);\n this.appliedFilters.emit(cleared);\n }\n\n /** Removes a single filter chip */\n removeChip(chip: { filterKey: string; code: string }): void {\n const currentValues = { ...this.filterValues() };\n const list = currentValues[chip.filterKey] || [];\n currentValues[chip.filterKey] = list.filter(item => item.code !== chip.code);\n this.filterValues.set(currentValues);\n this.appliedFilters.emit(currentValues);\n }\n\n /** Toggles sorting overlay */\n openSort(event: Event): void {\n if (this.isMobile()) {\n this.tempSortValue.set(this.sortValue());\n this.showSortDrawer.set(true);\n } else {\n this.sortPopover()?.toggle(event);\n }\n }\n\n /** Selects a sort option (toggles if already selected) and hides overlay */\n selectSortOption(value: string, isMobileDrawer = false): void {\n const newValue = this.sortValue() === value ? null : value;\n this.sortValue.set(newValue);\n this.appliedSort.emit(newValue);\n\n if (isMobileDrawer) {\n this.showSortDrawer.set(false);\n } else {\n this.sortPopover()?.hide();\n }\n }\n\n /** Toggles temporary sorting selection on mobile drawer */\n toggleSortOptionMobile(value: string): void {\n this.tempSortValue.update(prev => prev === value ? null : value);\n }\n\n /** Applies selected sorting on mobile */\n applySortMobile(): void {\n const val = this.tempSortValue();\n this.sortValue.set(val);\n this.appliedSort.emit(val);\n this.showSortDrawer.set(false);\n }\n\n /** Toggle layout view */\n toggleView(): void {\n this.view.set(this.view() === 'table' ? 'cards' : 'table');\n }\n\n onReload(): void {\n this.reload.emit();\n }\n}\n","<div class=\"tk-toolbar-container\">\n <!-- 1. Selection Status Bar (Desktop replacement) -->\n @if (selectionCount() > 0 && !isMobile()) {\n <div class=\"tk-toolbar-selection-bar\" data-testid=\"selection-bar-desktop\">\n <div class=\"tk-toolbar-selection-bar__left\">\n <tk-checkbox\n [binary]=\"true\"\n [(model)]=\"allSelected\"\n [indeterminate]=\"indeterminate()\">\n </tk-checkbox>\n <span class=\"tk-toolbar-selection-bar__count\">\n {{ selectionCount() }} {{ selectionCount() === 1 ? selectedLabel() : selectedPluralLabel() }}\n </span>\n </div>\n <div class=\"tk-toolbar-selection-bar__right\">\n @for (action of visibleSelectionActions(); track action.label) {\n <tk-button\n [label]=\"action.label\"\n [icon]=\"action.icon\"\n [severity]=\"action.severity ?? 'secondary'\"\n [variant]=\"action.variant !== undefined ? action.variant : (action.severity === 'danger' ? undefined : 'text')\"\n [disabled]=\"action.disabled ?? false\"\n (clicked)=\"action.action()\">\n </tk-button>\n }\n @if (overflowSelectionActions().length > 0) {\n <tk-dropdown\n icon=\"ellipsis-vertical\"\n [model]=\"overflowSelectionActions()\">\n </tk-dropdown>\n }\n </div>\n </div>\n } @else {\n <!-- 2. Main Tools Bar -->\n <div class=\"tk-toolbar\" data-testid=\"main-toolbar\">\n <!-- Left part: search input (always visible if searchVisible is true) -->\n @if (searchVisible()) {\n <div class=\"tk-toolbar__search\">\n <tk-input-text\n [label]=\"searchFloatLabel()\"\n icon=\"magnifying-glass\"\n [clearable]=\"true\"\n [value]=\"searchModel()\"\n (valueChange)=\"searchModel.set($event)\">\n </tk-input-text>\n </div>\n }\n\n <!-- Right part: actions -->\n <div class=\"tk-toolbar__actions\">\n @if (viewToggleVisible()) {\n <tk-button\n [icon]=\"view() === 'table' ? 'table' : 'table-list'\"\n severity=\"secondary\"\n variant=\"text\"\n [tooltipText]=\"view() === 'table' ? viewCardsTooltip() : viewTableTooltip()\"\n (clicked)=\"toggleView()\">\n </tk-button>\n }\n\n @if (derivedFilters().length > 0 && filterVisible()) {\n <tk-button\n #filterBtn\n [icon]=\"'filter'\"\n [severity]=\"hasActiveFilters() ? 'primary' : 'secondary'\"\n [variant]=\"hasActiveFilters() ? undefined : 'text'\"\n [tooltipText]=\"filterLabel()\"\n (click)=\"openFilters($event)\"\n (keydown.enter)=\"openFilters($event)\"\n (keydown.space)=\"openFilters($event)\">\n </tk-button>\n }\n\n @if (sortOptions().length > 0) {\n <tk-button\n #sortBtn\n [icon]=\"'arrow-down-wide-short'\"\n [severity]=\"hasActiveSort() ? 'primary' : 'secondary'\"\n [variant]=\"hasActiveSort() ? undefined : 'text'\"\n [tooltipText]=\"sortTooltip()\"\n (click)=\"openSort($event)\"\n (keydown.enter)=\"openSort($event)\"\n (keydown.space)=\"openSort($event)\">\n </tk-button>\n }\n\n @if (shouldShowReload()) {\n <tk-button\n class=\"tk-toolbar__reload-btn\"\n [class.tk-toolbar__reload-btn--animating]=\"\n reloadInterval() && reloadInterval()! > 0 && !loading()\n \"\n [class.tk-toolbar__reload-btn--spinning]=\"loading()\"\n [style.--reload-interval]=\"(reloadInterval() ?? 0) + 'ms'\"\n [icon]=\"'arrows-rotate'\"\n severity=\"secondary\"\n variant=\"text\"\n [tooltipText]=\"reloadTooltip()\"\n (clicked)=\"onReload()\">\n </tk-button>\n }\n\n @if (globalActions().length > 0) {\n <tk-action-group\n [actions]=\"globalActions()\"\n [maxVisible]=\"0\">\n </tk-action-group>\n }\n </div>\n </div>\n }\n\n @if (shouldShowActiveFiltersBar()) {\n <div class=\"tk-toolbar-chips-bar\" data-testid=\"chips-bar\">\n <div class=\"tk-toolbar-chips-bar__scroll\">\n @for (chip of activeChips(); track chip.filterKey + '-' + chip.code) {\n <tk-chip\n [label]=\"chip.label\"\n [removable]=\"true\"\n (removed)=\"removeChip(chip)\">\n </tk-chip>\n }\n </div>\n <tk-button\n [link]=\"true\"\n [label]=\"clearLabel()\"\n class=\"tk-toolbar-chips-bar__clear-btn\"\n (clicked)=\"clearAllFilters()\">\n </tk-button>\n </div>\n }\n\n <!-- 4. Selection Status Bar (Mobile floating panel) -->\n @if (selectionCount() > 0 && isMobile()) {\n <div class=\"tk-toolbar-selection-bar tk-toolbar-selection-bar--mobile\" data-testid=\"selection-bar-mobile\">\n <div class=\"tk-toolbar-selection-bar__left\">\n <tk-checkbox\n [binary]=\"true\"\n [(model)]=\"allSelected\"\n [indeterminate]=\"indeterminate()\">\n </tk-checkbox>\n <span class=\"tk-toolbar-selection-bar__count\">\n {{ selectionCount() }} {{ selectionCount() === 1 ? selectedLabel() : selectedPluralLabel() }}\n </span>\n </div>\n <div class=\"tk-toolbar-selection-bar__right\">\n @for (action of visibleSelectionActions(); track action.label) {\n <tk-button\n [label]=\"action.label\"\n [icon]=\"action.icon\"\n [severity]=\"action.severity ?? 'secondary'\"\n [variant]=\"action.variant !== undefined ? action.variant : (action.severity === 'danger' ? undefined : 'text')\"\n [disabled]=\"action.disabled ?? false\"\n (clicked)=\"action.action()\">\n </tk-button>\n }\n @if (overflowSelectionActions().length > 0) {\n <tk-dropdown\n icon=\"ellipsis-vertical\"\n [model]=\"overflowSelectionActions()\">\n </tk-dropdown>\n }\n </div>\n </div>\n }\n</div>\n\n<!-- 5. Desktop Popovers -->\n@if (derivedFilters().length > 0 && filterVisible() && !isMobile()) {\n <p-popover #filterPopover styleClass=\"tk-toolbar-popover\">\n <div class=\"tk-toolbar-overlay\" data-testid=\"filter-popover\">\n <div class=\"tk-toolbar-overlay__header\">\n <span class=\"tk-toolbar-overlay__title\">{{ filterLabel() }}</span>\n <button type=\"button\" class=\"tk-toolbar-overlay__close\" (click)=\"filterPopover.hide()\">\n <tk-icon icon=\"xmark\" size=\"lg\"></tk-icon>\n </button>\n </div>\n <div class=\"tk-toolbar-overlay__body\">\n @for (filter of derivedFilters(); track filter.key) {\n <div class=\"tk-toolbar-overlay__field\">\n <tk-multiselect\n [id]=\"'filter-' + filter.key\"\n [options]=\"filter.options\"\n [labelText]=\"filter.label\"\n [model]=\"tempFilterValues()[filter.key] || []\"\n (modelChange)=\"onTempFilterChange(filter.key, $event || [])\"\n appendTo=\"body\"\n panelStyleClass=\"tk-toolbar-multiselect-panel\">\n </tk-multiselect>\n </div>\n }\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"clearLabel()\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"clearTempFilters()\">\n </tk-button>\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applyFilters()\">\n </tk-button>\n </div>\n </div>\n </p-popover>\n}\n\n@if (sortOptions().length > 0 && !isMobile()) {\n <p-popover #sortPopover styleClass=\"tk-toolbar-popover\">\n <div class=\"tk-toolbar-overlay tk-toolbar-overlay--sort\" data-testid=\"sort-popover\">\n <div class=\"tk-toolbar-overlay__header\">\n <span class=\"tk-toolbar-overlay__title\">{{ sortLabel() }}</span>\n <button type=\"button\" class=\"tk-toolbar-overlay__close\" (click)=\"sortPopover.hide()\">\n <tk-icon icon=\"xmark\" size=\"lg\"></tk-icon>\n </button>\n </div>\n <div class=\"tk-toolbar-overlay__body\">\n <div class=\"tk-toolbar-sort-options\">\n @for (option of sortOptions(); track option.value) {\n <button \n type=\"button\"\n class=\"tk-toolbar-sort-option\" \n [class.tk-toolbar-sort-option--active]=\"sortValue() === option.value\"\n (click)=\"selectSortOption(option.value)\">\n <span>{{ option.label }}</span>\n </button>\n }\n </div>\n </div>\n </div>\n </p-popover>\n}\n\n<!-- 6. Mobile Drawers -->\n@if (derivedFilters().length > 0 && filterVisible() && isMobile()) {\n <tk-drawer\n [(isOpened)]=\"showFilterDrawer\"\n [title]=\"filterLabel()\"\n direction=\"bottom\"\n [dismissible]=\"true\">\n <div class=\"tk-toolbar-overlay__body\">\n @for (filter of derivedFilters(); track filter.key) {\n <div class=\"tk-toolbar-overlay__field\">\n <tk-multiselect\n [id]=\"'filter-mob-' + filter.key\"\n [options]=\"filter.options\"\n [labelText]=\"filter.label\"\n [model]=\"tempFilterValues()[filter.key] || []\"\n (modelChange)=\"onTempFilterChange(filter.key, $event || [])\"\n appendTo=\"body\"\n panelStyleClass=\"tk-toolbar-multiselect-panel\">\n </tk-multiselect>\n </div>\n }\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"clearLabel()\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"clearTempFilters()\">\n </tk-button>\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applyFilters()\">\n </tk-button>\n </div>\n </tk-drawer>\n}\n\n@if (sortOptions().length > 0 && isMobile()) {\n <tk-drawer\n [(isOpened)]=\"showSortDrawer\"\n [title]=\"sortLabel()\"\n direction=\"bottom\"\n [dismissible]=\"true\">\n <div class=\"tk-toolbar-overlay__body\">\n <div class=\"tk-toolbar-sort-options\">\n @for (option of sortOptions(); track option.value) {\n <button \n type=\"button\"\n class=\"tk-toolbar-sort-option\" \n [class.tk-toolbar-sort-option--active]=\"tempSortValue() === option.value\"\n (click)=\"toggleSortOptionMobile(option.value)\">\n <span>{{ option.label }}</span>\n </button>\n }\n </div>\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applySortMobile()\">\n </tk-button>\n </div>\n </tk-drawer>\n}\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":"tekus-design-system-components-toolbar.mjs","sources":["../../../projects/design-system/components/toolbar/src/toolbar.component.ts","../../../projects/design-system/components/toolbar/src/toolbar.component.html","../../../projects/design-system/components/toolbar/tekus-design-system-components-toolbar.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, model, signal, input, output, computed, inject, viewChild, effect, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport {\n combineLatest,\n distinctUntilChanged,\n EMPTY,\n map,\n switchMap,\n timer,\n} from 'rxjs';\nimport { MenuItem } from 'primeng/api';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { ButtonComponent } from '@tekus/design-system/components/button';\nimport { InputTextComponent } from '@tekus/design-system/components/input-text';\nimport { CheckboxComponent } from '@tekus/design-system/components/checkbox';\nimport { ActionGroupComponent, TkAction } from '@tekus/design-system/components/action-group';\nimport { IconComponent } from '@tekus/design-system/components/icon';\nimport { DropdownComponent } from '@tekus/design-system/components/dropdown';\nimport { MultiselectComponent, MultiSelectOption } from '@tekus/design-system/components/multiselect';\nimport { ChipComponent } from '@tekus/design-system/components/chip';\nimport { DrawerComponent } from '@tekus/design-system/components/drawer';\nimport { ColumnPickerComponent } from '@tekus/design-system/components/column-picker';\nimport { TkToolbarFilterConfig, TkToolbarAction, TkToolbarColumnConfig } from './toolbar.types';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'tk-toolbar',\n imports: [\n ButtonComponent,\n InputTextComponent,\n CheckboxComponent,\n ActionGroupComponent,\n IconComponent,\n DropdownComponent,\n MultiselectComponent,\n ChipComponent,\n DrawerComponent,\n PopoverModule,\n ColumnPickerComponent,\n ],\n templateUrl: './toolbar.component.html',\n styleUrl: './toolbar.component.scss',\n})\nexport class ToolbarComponent {\n private readonly breakpointObserver = inject(BreakpointObserver);\n\n /** Responsive flag using BreakpointObserver */\n isMobile = toSignal(\n this.breakpointObserver.observe('(max-width: 768px)').pipe(map(r => r.matches)),\n { initialValue: false }\n );\n\n /**\n * Two-way bindable signal for the search input value.\n */\n searchModel = model<string>('');\n\n /**\n * Label/placeholder text displayed inside the search input.\n * @default 'Buscar'\n */\n searchFloatLabel = input<string>('Buscar');\n\n /**\n * Controls the visibility of the search input field.\n * @default true\n */\n searchVisible = input<boolean>(true);\n\n /**\n * Two-way bindable signal for the layout view toggle ('table' or 'cards').\n * @default 'table'\n */\n view = model<'table' | 'cards'>('table');\n\n /**\n * Controls the visibility of the layout view toggle button.\n * @default false\n */\n viewToggleVisible = input<boolean>(false);\n\n /**\n * Dynamic list of filters and their available selection options.\n * @default []\n */\n filters = input<TkToolbarFilterConfig[]>([]);\n\n /** Backwards compatibility: Writable model signal for the selected option in a single filter select (deprecated) */\n filterModel = model<Record<string, string> | null>(null);\n\n /** Backwards compatibility: Input for dropdown options (deprecated) */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n filterOptions = input<Array<any>>([\n { label: 'Option 1', value: 'option1' },\n { label: 'Option 2', value: 'option2' },\n { label: 'Option 3', value: 'option3' },\n ]);\n\n /** Backwards compatibility: Input for the option label key (deprecated) */\n filterOptionLabel = input<string>('label');\n\n /** Backwards compatibility: Input for the label of the single select dropdown (deprecated) */\n filterFloatLabel = input<string>('Filtrar');\n\n /** Backwards compatibility: Controls whether filter button is shown (deprecated) */\n filterVisible = input<boolean>(true);\n\n /**\n * Two-way bindable signal for currently selected filter values.\n * Format: { [filterKey]: MultiSelectOption[] }\n * @default {}\n */\n filterValues = model<Record<string, MultiSelectOption[]>>({});\n\n /**\n * Label/text for the clear button.\n * @default 'Limpiar'\n */\n clearLabel = input<string>('Limpiar');\n\n /**\n * Label/text for the delete action button.\n * @default 'Eliminar'\n */\n deleteLabel = input<string>('Eliminar');\n\n /**\n * Label/text for the filters header.\n * @default 'Filtros'\n */\n filterLabel = input<string>('Filtros');\n\n /** Label for selected item singular form (e.g. 'seleccionado') */\n selectedLabel = input<string>('seleccionado');\n\n /** Label for selected item plural form (e.g. 'seleccionados') */\n selectedPluralLabel = input<string>('seleccionados');\n\n /** Label/text for the apply button in overlays (e.g. 'Aplicar') */\n applyLabel = input<string>('Aplicar');\n\n /** Tooltip text for the reload action button (e.g. 'Actualizar') */\n reloadTooltip = input<string>('Actualizar');\n\n /** Tooltip text for the sort action button (e.g. 'Ordenar') */\n sortTooltip = input<string>('Ordenar');\n\n /** Tooltip text for view cards layout button (e.g. 'Vista tarjeta') */\n viewCardsTooltip = input<string>('Vista tarjeta');\n\n /** Tooltip text for view table layout button (e.g. 'Vista tabla') */\n viewTableTooltip = input<string>('Vista tabla');\n\n /**\n * Optional. Columns listed in the embedded `tk-column-picker`.\n * The picker button is only shown when this list is not empty.\n * @default []\n */\n readonly columns = input<TkToolbarColumnConfig[]>([]);\n\n /**\n * Two-way bindable list of hidden column keys, forwarded to the embedded\n * `tk-column-picker`. Bind the same list to `tk-table`'s `[hiddenColumns]`.\n * Its initial value preloads a saved selection; locked keys are removed from it.\n * @default []\n */\n readonly hiddenColumns = model<string[]>([]);\n\n /**\n * Title/tooltip for the column visibility picker.\n * @default 'Columnas'\n */\n readonly columnsLabel = input<string>('Columnas');\n\n /**\n * Label for the button that shows every column again.\n * @default 'Restablecer'\n */\n readonly resetColumnsLabel = input<string>('Restablecer');\n\n /**\n * Available list of sorting options.\n * @default []\n */\n sortOptions = input<Array<{ label: string; value: string }>>([]);\n\n /**\n * Label/text for the sorting header.\n * @default 'Ordenar por'\n */\n sortLabel = input<string>('Ordenar por');\n\n /**\n * Two-way bindable signal for the active sort option value.\n * @default null\n */\n sortValue = model<string | null>(null);\n\n /**\n * Controls the visibility of the reload button.\n * @default false\n */\n reloadVisible = input<boolean>(false);\n\n /**\n * Sets the interval for automatic reload in milliseconds.\n * If null, automatic reload is disabled.\n * @default null\n */\n reloadInterval = input<number | null>(null);\n\n /**\n * Controls the loading state of the reload button, triggering a rotation animation.\n * @default false\n */\n loading = input<boolean>(false);\n\n /**\n * Secondary or mass actions collapsed into the tk-action-group dropdown.\n * @default []\n */\n globalActions = input<TkAction[]>([]);\n\n /**\n * Number of items selected in the list.\n * @default 0\n */\n selectionCount = input<number>(0);\n\n /**\n * Two-way bindable signal for checking/unchecking the select-all checkbox.\n * @default false\n */\n allSelected = model<boolean>(false);\n\n /**\n * Two-way bindable signal for the indeterminate state of the select-all checkbox.\n * @default false\n */\n indeterminate = model<boolean>(false);\n\n /**\n * Actions available when one or more items are selected.\n * @default []\n */\n selectionActions = input<TkToolbarAction[]>([]);\n\n /**\n * Maximum number of selection action buttons visible directly before grouping the rest.\n * @default 1\n */\n maxVisibleSelectionActions = input<number>(1);\n\n /**\n * Emits an event when the reload button is clicked or the automatic interval is reached.\n */\n reload = output<void>();\n\n /**\n * Emits when filters are applied.\n */\n appliedFilters = output<Record<string, MultiSelectOption[]>>();\n\n /**\n * Emits when sorting changes.\n */\n appliedSort = output<string | null>();\n\n /**\n * Emits the hidden column keys when the user applies the column picker,\n * so the consumer can store the selection and preload it next time.\n */\n readonly appliedColumns = output<string[]>();\n\n /** Temporary filter values held before the user clicks \"Aplicar\" */\n tempFilterValues = signal<Record<string, MultiSelectOption[]>>({});\n\n /** Temporary sort value held before the user clicks \"Aplicar\" in mobile drawer */\n tempSortValue = signal<string | null>(null);\n\n /** Controls visibility of mobile drawers */\n showFilterDrawer = signal<boolean>(false);\n showSortDrawer = signal<boolean>(false);\n\n filterPopover = viewChild<Popover>('filterPopover');\n sortPopover = viewChild<Popover>('sortPopover');\n\n /** Computes whether any filters are currently active */\n hasActiveFilters = computed(() => {\n const values = this.filterValues();\n return Object.values(values).some(arr => arr && arr.length > 0);\n });\n\n /** Computes whether sorting is active */\n hasActiveSort = computed(() => {\n return this.sortValue() !== null && this.sortValue() !== '';\n });\n\n /** Reload button visibility: only visible if reload is allowed AND filters or sorting is active */\n shouldShowReload = computed(() => {\n return this.reloadVisible();\n });\n\n /** Computes the final filters configuration, adapting old filterOptions format to the new filters schema */\n derivedFilters = computed<TkToolbarFilterConfig[]>(() => {\n const customFilters = this.filters();\n if (customFilters && customFilters.length > 0) {\n return customFilters;\n }\n\n const oldOptions = this.filterOptions();\n if (oldOptions && oldOptions.length > 0) {\n return [\n {\n key: 'default_filter',\n label: this.filterFloatLabel() || 'Filtrar',\n options: oldOptions.map(opt => ({\n name: opt[this.filterOptionLabel()] || opt['label'] || opt['value'],\n code: opt['value']\n }))\n }\n ];\n }\n\n return [];\n });\n\n /** Active chips representing individual filter selections */\n activeChips = computed(() => {\n const values = this.filterValues();\n const configs = this.derivedFilters();\n const chips: Array<{ filterKey: string; code: string; label: string }> = [];\n\n for (const config of configs) {\n const selected = values[config.key] || [];\n for (const item of selected) {\n chips.push({\n filterKey: config.key,\n code: item.code,\n label: item.name,\n });\n }\n }\n return chips;\n });\n\n /** Visibility of the active filters bar (below tools) */\n shouldShowActiveFiltersBar = computed(() => {\n return this.hasActiveFilters();\n });\n\n /** Visible selection actions as buttons */\n visibleSelectionActions = computed(() => {\n return this.selectionActions()\n .slice(0, this.maxVisibleSelectionActions())\n .map(action => {\n if (action.severity === 'danger') {\n return { ...action, label: this.deleteLabel() };\n }\n return action;\n });\n });\n\n /** Overflow selection actions as menu items for dropdown */\n overflowSelectionActions = computed<MenuItem[]>(() => {\n const list = this.selectionActions();\n const max = this.maxVisibleSelectionActions();\n if (list.length <= max) {\n return [];\n }\n return list.slice(max).map(action => {\n const label = action.severity === 'danger' ? this.deleteLabel() : action.label;\n return {\n label: label,\n icon: action.icon,\n command: () => action.action(),\n disabled: action.disabled ?? false,\n };\n });\n });\n\n constructor() {\n combineLatest([\n toObservable(this.reloadInterval).pipe(distinctUntilChanged()),\n toObservable(this.loading).pipe(distinctUntilChanged()),\n ])\n .pipe(\n switchMap(([interval, isLoading]) => {\n if (isLoading || !interval || interval <= 0) {\n return EMPTY;\n }\n return timer(interval, interval);\n }),\n takeUntilDestroyed()\n )\n .subscribe(() => this.onReload());\n\n effect(() => {\n const modelVal = this.filterModel();\n if (modelVal?.['value']) {\n const matchedOpt = this.filterOptions().find(opt => opt['value'] === modelVal['value']);\n if (matchedOpt) {\n const labelKey = this.filterOptionLabel();\n const label = matchedOpt[labelKey] || matchedOpt['label'] || matchedOpt['value'];\n untracked(() => {\n const current = this.filterValues();\n const currentSelections = current['default_filter'] || [];\n if (currentSelections.length !== 1 || currentSelections[0].code !== matchedOpt['value']) {\n this.filterValues.set({\n ...current,\n default_filter: [{ name: label, code: matchedOpt['value'] }]\n });\n }\n });\n }\n } else if (!modelVal) {\n untracked(() => {\n const current = this.filterValues();\n if (current['default_filter'] && current['default_filter'].length > 0) {\n const updated = { ...current };\n delete updated['default_filter'];\n this.filterValues.set(updated);\n }\n });\n }\n });\n\n // Sync filterValues (new) -> filterModel (old single-select)\n effect(() => {\n const values = this.filterValues();\n const defaultFilterSelections = values['default_filter'];\n if (defaultFilterSelections && defaultFilterSelections.length > 0) {\n const lastSelected = defaultFilterSelections[defaultFilterSelections.length - 1];\n const matchedOpt = this.filterOptions().find(opt => opt['value'] === lastSelected.code);\n if (matchedOpt) {\n untracked(() => {\n if (this.filterModel()?.[ 'value' ] !== matchedOpt['value']) {\n this.filterModel.set(matchedOpt);\n }\n });\n }\n } else {\n untracked(() => {\n if (this.filterModel() !== null) {\n this.filterModel.set(null);\n }\n });\n }\n });\n }\n\n /** Toggles filters overlay and initializes temporary state */\n openFilters(event: Event): void {\n const currentValues = this.filterValues();\n // Copy current filter selections into temporary state\n const copy: Record<string, MultiSelectOption[]> = {};\n for (const key of Object.keys(currentValues)) {\n copy[key] = [...(currentValues[key] || [])];\n }\n this.tempFilterValues.set(copy);\n\n if (this.isMobile()) {\n this.showFilterDrawer.set(true);\n } else {\n this.filterPopover()?.toggle(event);\n }\n }\n\n /** Updates temporary filter values for a specific filter key */\n onTempFilterChange(key: string, value: MultiSelectOption[]): void {\n this.tempFilterValues.update(prev => ({ ...prev, [key]: value }));\n }\n\n /** Saves temporary filter selections and triggers apply */\n applyFilters(): void {\n const temp = this.tempFilterValues();\n this.filterValues.set({ ...temp });\n this.appliedFilters.emit({ ...temp });\n\n if (this.isMobile()) {\n this.showFilterDrawer.set(false);\n } else {\n this.filterPopover()?.hide();\n }\n }\n\n /** Clears temporary filters inside popover/drawer */\n clearTempFilters(): void {\n const cleared: Record<string, MultiSelectOption[]> = {};\n for (const filter of this.derivedFilters()) {\n cleared[filter.key] = [];\n }\n this.tempFilterValues.set(cleared);\n }\n\n /** Clears all applied filters */\n clearAllFilters(): void {\n const cleared: Record<string, MultiSelectOption[]> = {};\n this.filterValues.set(cleared);\n this.appliedFilters.emit(cleared);\n }\n\n /** Removes a single filter chip */\n removeChip(chip: { filterKey: string; code: string }): void {\n const currentValues = { ...this.filterValues() };\n const list = currentValues[chip.filterKey] || [];\n currentValues[chip.filterKey] = list.filter(item => item.code !== chip.code);\n this.filterValues.set(currentValues);\n this.appliedFilters.emit(currentValues);\n }\n\n /** Toggles sorting overlay */\n openSort(event: Event): void {\n if (this.isMobile()) {\n this.tempSortValue.set(this.sortValue());\n this.showSortDrawer.set(true);\n } else {\n this.sortPopover()?.toggle(event);\n }\n }\n\n /** Selects a sort option (toggles if already selected) and hides overlay */\n selectSortOption(value: string, isMobileDrawer = false): void {\n const newValue = this.sortValue() === value ? null : value;\n this.sortValue.set(newValue);\n this.appliedSort.emit(newValue);\n\n if (isMobileDrawer) {\n this.showSortDrawer.set(false);\n } else {\n this.sortPopover()?.hide();\n }\n }\n\n /** Toggles temporary sorting selection on mobile drawer */\n toggleSortOptionMobile(value: string): void {\n this.tempSortValue.update(prev => prev === value ? null : value);\n }\n\n /** Applies selected sorting on mobile */\n applySortMobile(): void {\n const val = this.tempSortValue();\n this.sortValue.set(val);\n this.appliedSort.emit(val);\n this.showSortDrawer.set(false);\n }\n\n /** Toggle layout view */\n toggleView(): void {\n this.view.set(this.view() === 'table' ? 'cards' : 'table');\n }\n\n onReload(): void {\n this.reload.emit();\n }\n}\n","<div class=\"tk-toolbar-container\">\n <!-- 1. Selection Status Bar (Desktop replacement) -->\n @if (selectionCount() > 0 && !isMobile()) {\n <div class=\"tk-toolbar-selection-bar\" data-testid=\"selection-bar-desktop\">\n <div class=\"tk-toolbar-selection-bar__left\">\n <tk-checkbox\n [binary]=\"true\"\n [(model)]=\"allSelected\"\n [indeterminate]=\"indeterminate()\">\n </tk-checkbox>\n <span class=\"tk-toolbar-selection-bar__count\">\n {{ selectionCount() }} {{ selectionCount() === 1 ? selectedLabel() : selectedPluralLabel() }}\n </span>\n </div>\n <div class=\"tk-toolbar-selection-bar__right\">\n @for (action of visibleSelectionActions(); track action.label) {\n <tk-button\n [label]=\"action.label\"\n [icon]=\"action.icon\"\n [severity]=\"action.severity ?? 'secondary'\"\n [variant]=\"action.variant !== undefined ? action.variant : (action.severity === 'danger' ? undefined : 'text')\"\n [disabled]=\"action.disabled ?? false\"\n (clicked)=\"action.action()\">\n </tk-button>\n }\n @if (overflowSelectionActions().length > 0) {\n <tk-dropdown\n icon=\"ellipsis-vertical\"\n [model]=\"overflowSelectionActions()\">\n </tk-dropdown>\n }\n </div>\n </div>\n } @else {\n <!-- 2. Main Tools Bar -->\n <div class=\"tk-toolbar\" data-testid=\"main-toolbar\">\n <!-- Left part: search input (always visible if searchVisible is true) -->\n @if (searchVisible()) {\n <div class=\"tk-toolbar__search\">\n <tk-input-text\n [label]=\"searchFloatLabel()\"\n icon=\"magnifying-glass\"\n [clearable]=\"true\"\n [value]=\"searchModel()\"\n (valueChange)=\"searchModel.set($event)\">\n </tk-input-text>\n </div>\n }\n\n <!-- Right part: actions -->\n <div class=\"tk-toolbar__actions\">\n @if (viewToggleVisible()) {\n <tk-button\n [icon]=\"view() === 'table' ? 'table' : 'table-list'\"\n severity=\"secondary\"\n variant=\"text\"\n [tooltipText]=\"view() === 'table' ? viewCardsTooltip() : viewTableTooltip()\"\n (clicked)=\"toggleView()\">\n </tk-button>\n }\n\n @if (derivedFilters().length > 0 && filterVisible()) {\n <tk-button\n #filterBtn\n [icon]=\"'filter'\"\n [severity]=\"hasActiveFilters() ? 'primary' : 'secondary'\"\n [variant]=\"hasActiveFilters() ? undefined : 'text'\"\n [tooltipText]=\"filterLabel()\"\n (click)=\"openFilters($event)\"\n (keydown.enter)=\"openFilters($event)\"\n (keydown.space)=\"openFilters($event)\">\n </tk-button>\n }\n\n <tk-column-picker\n [columns]=\"columns()\"\n [(hiddenColumns)]=\"hiddenColumns\"\n [label]=\"columnsLabel()\"\n [resetLabel]=\"resetColumnsLabel()\"\n [applyLabel]=\"applyLabel()\"\n (appliedColumns)=\"appliedColumns.emit($event)\">\n </tk-column-picker>\n\n @if (sortOptions().length > 0) {\n <tk-button\n #sortBtn\n [icon]=\"'arrow-down-wide-short'\"\n [severity]=\"hasActiveSort() ? 'primary' : 'secondary'\"\n [variant]=\"hasActiveSort() ? undefined : 'text'\"\n [tooltipText]=\"sortTooltip()\"\n (click)=\"openSort($event)\"\n (keydown.enter)=\"openSort($event)\"\n (keydown.space)=\"openSort($event)\">\n </tk-button>\n }\n\n @if (shouldShowReload()) {\n <tk-button\n class=\"tk-toolbar__reload-btn\"\n [class.tk-toolbar__reload-btn--animating]=\"\n reloadInterval() && reloadInterval()! > 0 && !loading()\n \"\n [class.tk-toolbar__reload-btn--spinning]=\"loading()\"\n [style.--reload-interval]=\"(reloadInterval() ?? 0) + 'ms'\"\n [icon]=\"'arrows-rotate'\"\n severity=\"secondary\"\n variant=\"text\"\n [tooltipText]=\"reloadTooltip()\"\n (clicked)=\"onReload()\">\n </tk-button>\n }\n\n @if (globalActions().length > 0) {\n <tk-action-group\n [actions]=\"globalActions()\"\n [maxVisible]=\"0\">\n </tk-action-group>\n }\n </div>\n </div>\n }\n\n @if (shouldShowActiveFiltersBar()) {\n <div class=\"tk-toolbar-chips-bar\" data-testid=\"chips-bar\">\n <div class=\"tk-toolbar-chips-bar__scroll\">\n @for (chip of activeChips(); track chip.filterKey + '-' + chip.code) {\n <tk-chip\n [label]=\"chip.label\"\n [removable]=\"true\"\n (removed)=\"removeChip(chip)\">\n </tk-chip>\n }\n </div>\n <tk-button\n [link]=\"true\"\n [label]=\"clearLabel()\"\n class=\"tk-toolbar-chips-bar__clear-btn\"\n (clicked)=\"clearAllFilters()\">\n </tk-button>\n </div>\n }\n\n <!-- 4. Selection Status Bar (Mobile floating panel) -->\n @if (selectionCount() > 0 && isMobile()) {\n <div class=\"tk-toolbar-selection-bar tk-toolbar-selection-bar--mobile\" data-testid=\"selection-bar-mobile\">\n <div class=\"tk-toolbar-selection-bar__left\">\n <tk-checkbox\n [binary]=\"true\"\n [(model)]=\"allSelected\"\n [indeterminate]=\"indeterminate()\">\n </tk-checkbox>\n <span class=\"tk-toolbar-selection-bar__count\">\n {{ selectionCount() }} {{ selectionCount() === 1 ? selectedLabel() : selectedPluralLabel() }}\n </span>\n </div>\n <div class=\"tk-toolbar-selection-bar__right\">\n @for (action of visibleSelectionActions(); track action.label) {\n <tk-button\n [label]=\"action.label\"\n [icon]=\"action.icon\"\n [severity]=\"action.severity ?? 'secondary'\"\n [variant]=\"action.variant !== undefined ? action.variant : (action.severity === 'danger' ? undefined : 'text')\"\n [disabled]=\"action.disabled ?? false\"\n (clicked)=\"action.action()\">\n </tk-button>\n }\n @if (overflowSelectionActions().length > 0) {\n <tk-dropdown\n icon=\"ellipsis-vertical\"\n [model]=\"overflowSelectionActions()\">\n </tk-dropdown>\n }\n </div>\n </div>\n }\n</div>\n\n<!-- 5. Desktop Popovers -->\n@if (derivedFilters().length > 0 && filterVisible() && !isMobile()) {\n <p-popover #filterPopover styleClass=\"tk-toolbar-popover\">\n <div class=\"tk-toolbar-overlay\" data-testid=\"filter-popover\">\n <div class=\"tk-toolbar-overlay__header\">\n <span class=\"tk-toolbar-overlay__title\">{{ filterLabel() }}</span>\n <button type=\"button\" class=\"tk-toolbar-overlay__close\" (click)=\"filterPopover.hide()\">\n <tk-icon icon=\"xmark\" size=\"lg\"></tk-icon>\n </button>\n </div>\n <div class=\"tk-toolbar-overlay__body\">\n @for (filter of derivedFilters(); track filter.key) {\n <div class=\"tk-toolbar-overlay__field\">\n <tk-multiselect\n [id]=\"'filter-' + filter.key\"\n [options]=\"filter.options\"\n [labelText]=\"filter.label\"\n [model]=\"tempFilterValues()[filter.key] || []\"\n (modelChange)=\"onTempFilterChange(filter.key, $event || [])\"\n appendTo=\"body\"\n panelStyleClass=\"tk-toolbar-multiselect-panel\">\n </tk-multiselect>\n </div>\n }\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"clearLabel()\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"clearTempFilters()\">\n </tk-button>\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applyFilters()\">\n </tk-button>\n </div>\n </div>\n </p-popover>\n}\n\n@if (sortOptions().length > 0 && !isMobile()) {\n <p-popover #sortPopover styleClass=\"tk-toolbar-popover\">\n <div class=\"tk-toolbar-overlay tk-toolbar-overlay--sort\" data-testid=\"sort-popover\">\n <div class=\"tk-toolbar-overlay__header\">\n <span class=\"tk-toolbar-overlay__title\">{{ sortLabel() }}</span>\n <button type=\"button\" class=\"tk-toolbar-overlay__close\" (click)=\"sortPopover.hide()\">\n <tk-icon icon=\"xmark\" size=\"lg\"></tk-icon>\n </button>\n </div>\n <div class=\"tk-toolbar-overlay__body\">\n <div class=\"tk-toolbar-sort-options\">\n @for (option of sortOptions(); track option.value) {\n <button \n type=\"button\"\n class=\"tk-toolbar-sort-option\" \n [class.tk-toolbar-sort-option--active]=\"sortValue() === option.value\"\n (click)=\"selectSortOption(option.value)\">\n <span>{{ option.label }}</span>\n </button>\n }\n </div>\n </div>\n </div>\n </p-popover>\n}\n\n<!-- 6. Mobile Drawers -->\n@if (derivedFilters().length > 0 && filterVisible() && isMobile()) {\n <tk-drawer\n [(isOpened)]=\"showFilterDrawer\"\n [title]=\"filterLabel()\"\n direction=\"bottom\"\n [dismissible]=\"true\">\n <div class=\"tk-toolbar-overlay__body\">\n @for (filter of derivedFilters(); track filter.key) {\n <div class=\"tk-toolbar-overlay__field\">\n <tk-multiselect\n [id]=\"'filter-mob-' + filter.key\"\n [options]=\"filter.options\"\n [labelText]=\"filter.label\"\n [model]=\"tempFilterValues()[filter.key] || []\"\n (modelChange)=\"onTempFilterChange(filter.key, $event || [])\"\n appendTo=\"body\"\n panelStyleClass=\"tk-toolbar-multiselect-panel\">\n </tk-multiselect>\n </div>\n }\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"clearLabel()\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"clearTempFilters()\">\n </tk-button>\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applyFilters()\">\n </tk-button>\n </div>\n </tk-drawer>\n}\n\n@if (sortOptions().length > 0 && isMobile()) {\n <tk-drawer\n [(isOpened)]=\"showSortDrawer\"\n [title]=\"sortLabel()\"\n direction=\"bottom\"\n [dismissible]=\"true\">\n <div class=\"tk-toolbar-overlay__body\">\n <div class=\"tk-toolbar-sort-options\">\n @for (option of sortOptions(); track option.value) {\n <button \n type=\"button\"\n class=\"tk-toolbar-sort-option\" \n [class.tk-toolbar-sort-option--active]=\"tempSortValue() === option.value\"\n (click)=\"toggleSortOptionMobile(option.value)\">\n <span>{{ option.label }}</span>\n </button>\n }\n </div>\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applySortMobile()\">\n </tk-button>\n </div>\n </tk-drawer>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -20,14 +20,27 @@ class TooltipComponent {
20
20
  * @default 'top'
21
21
  */
22
22
  this.position = input('top', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
23
+ /**
24
+ * @property {number | null} lineClamp
25
+ * @description
26
+ * Optional. Truncates the projected content to this number of lines with an
27
+ * ellipsis (long words without spaces break too) and only shows the tooltip
28
+ * when the content is actually truncated. Use it with `content` set to the
29
+ * full text. Without it the content is not truncated and the tooltip always shows.
30
+ *
31
+ * @default null
32
+ */
33
+ this.lineClamp = input(null, ...(ngDevMode ? [{ debugName: "lineClamp" }] : /* istanbul ignore next */ []));
23
34
  }
24
35
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.17", type: TooltipComponent, isStandalone: true, selector: "tk-tooltip", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<span [pTooltip]=\"content()\" [tooltipPosition]=\"position()\" class=\"tk-tooltip-wrapper\">\n <ng-content></ng-content>\n</span>\n", styles: [":host{display:inline-block}.tk-tooltip-wrapper{display:inline-block}\n"], dependencies: [{ kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.17", type: TooltipComponent, isStandalone: true, selector: "tk-tooltip", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, lineClamp: { classPropertyName: "lineClamp", publicName: "lineClamp", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.tk-tooltip--clamp": "!!lineClamp()" } }, ngImport: i0, template: "<span\n [pTooltip]=\"content()\"\n [tooltipPosition]=\"position()\"\n [showOnEllipsis]=\"!!lineClamp()\"\n [class.tk-tooltip-wrapper--clamp]=\"!!lineClamp()\"\n [style.--tk-tooltip-line-clamp]=\"lineClamp()\"\n class=\"tk-tooltip-wrapper\">\n <ng-content></ng-content>\n</span>\n", styles: [":host{display:inline-block}.tk-tooltip-wrapper{display:inline-block}:host(.tk-tooltip--clamp){display:block;min-width:0}.tk-tooltip-wrapper--clamp{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--tk-tooltip-line-clamp);line-clamp:var(--tk-tooltip-line-clamp);overflow:hidden;overflow-wrap:anywhere}\n"], dependencies: [{ kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26
37
  }
27
38
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TooltipComponent, decorators: [{
28
39
  type: Component,
29
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'tk-tooltip', imports: [Tooltip], template: "<span [pTooltip]=\"content()\" [tooltipPosition]=\"position()\" class=\"tk-tooltip-wrapper\">\n <ng-content></ng-content>\n</span>\n", styles: [":host{display:inline-block}.tk-tooltip-wrapper{display:inline-block}\n"] }]
30
- }], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: true }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }] } });
40
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'tk-tooltip', imports: [Tooltip], host: {
41
+ '[class.tk-tooltip--clamp]': '!!lineClamp()',
42
+ }, template: "<span\n [pTooltip]=\"content()\"\n [tooltipPosition]=\"position()\"\n [showOnEllipsis]=\"!!lineClamp()\"\n [class.tk-tooltip-wrapper--clamp]=\"!!lineClamp()\"\n [style.--tk-tooltip-line-clamp]=\"lineClamp()\"\n class=\"tk-tooltip-wrapper\">\n <ng-content></ng-content>\n</span>\n", styles: [":host{display:inline-block}.tk-tooltip-wrapper{display:inline-block}:host(.tk-tooltip--clamp){display:block;min-width:0}.tk-tooltip-wrapper--clamp{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--tk-tooltip-line-clamp);line-clamp:var(--tk-tooltip-line-clamp);overflow:hidden;overflow-wrap:anywhere}\n"] }]
43
+ }], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: true }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], lineClamp: [{ type: i0.Input, args: [{ isSignal: true, alias: "lineClamp", required: false }] }] } });
31
44
 
32
45
  /**
33
46
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-tooltip.mjs","sources":["../../../projects/design-system/components/tooltip/src/tooltip.component.ts","../../../projects/design-system/components/tooltip/src/tooltip.component.html","../../../projects/design-system/components/tooltip/tekus-design-system-components-tooltip.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Tooltip } from 'primeng/tooltip';\n\n/**\n * @component TooltipComponent\n * @description\n * Wrapper component that applies a PrimeNG tooltip to its projected content.\n * It allows defining the tooltip text and its position relative to the content.\n *\n * @usage\n * ```html\n * <tk-tooltip content=\"Tooltip text\" position=\"top\">\n * <button>Hover me</button>\n * </tk-tooltip>\n * ```\n */\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'tk-tooltip',\n imports: [Tooltip],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.scss'\n})\nexport class TooltipComponent {\n /**\n * @property {string} content\n * @description\n * The text to be displayed in the tooltip.\n *\n * @required\n */\n content = input.required<string>();\n\n /**\n * @property {TooltipPosition} position\n * @description\n * Position of the tooltip relative to the element.\n *\n * @default 'top'\n */\n position = input<TooltipPosition>('top');\n}\n","<span [pTooltip]=\"content()\" [tooltipPosition]=\"position()\" class=\"tk-tooltip-wrapper\">\n <ng-content></ng-content>\n</span>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAyBa,gBAAgB,CAAA;AAP7B,IAAA,WAAA,GAAA;AAQE;;;;;;AAMG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAElC;;;;;;AAMG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAkB,KAAK,+EAAC;AACzC,IAAA;+GAlBY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzB7B,uIAGA,EAAA,MAAA,EAAA,CAAA,wEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDkBY,OAAO,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAIN,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACS,YAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,YAAY,EAAA,OAAA,EACb,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,uIAAA,EAAA,MAAA,EAAA,CAAA,wEAAA,CAAA,EAAA;;;AErBpB;;AAEG;;;;"}
1
+ {"version":3,"file":"tekus-design-system-components-tooltip.mjs","sources":["../../../projects/design-system/components/tooltip/src/tooltip.component.ts","../../../projects/design-system/components/tooltip/src/tooltip.component.html","../../../projects/design-system/components/tooltip/tekus-design-system-components-tooltip.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Tooltip } from 'primeng/tooltip';\n\n/**\n * @component TooltipComponent\n * @description\n * Wrapper component that applies a PrimeNG tooltip to its projected content.\n * It allows defining the tooltip text and its position relative to the content.\n *\n * @usage\n * ```html\n * <tk-tooltip content=\"Tooltip text\" position=\"top\">\n * <button>Hover me</button>\n * </tk-tooltip>\n * ```\n */\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'tk-tooltip',\n imports: [Tooltip],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.scss',\n host: {\n '[class.tk-tooltip--clamp]': '!!lineClamp()',\n },\n})\nexport class TooltipComponent {\n /**\n * @property {string} content\n * @description\n * The text to be displayed in the tooltip.\n *\n * @required\n */\n content = input.required<string>();\n\n /**\n * @property {TooltipPosition} position\n * @description\n * Position of the tooltip relative to the element.\n *\n * @default 'top'\n */\n position = input<TooltipPosition>('top');\n\n /**\n * @property {number | null} lineClamp\n * @description\n * Optional. Truncates the projected content to this number of lines with an\n * ellipsis (long words without spaces break too) and only shows the tooltip\n * when the content is actually truncated. Use it with `content` set to the\n * full text. Without it the content is not truncated and the tooltip always shows.\n *\n * @default null\n */\n readonly lineClamp = input<number | null>(null);\n}\n","<span\n [pTooltip]=\"content()\"\n [tooltipPosition]=\"position()\"\n [showOnEllipsis]=\"!!lineClamp()\"\n [class.tk-tooltip-wrapper--clamp]=\"!!lineClamp()\"\n [style.--tk-tooltip-line-clamp]=\"lineClamp()\"\n class=\"tk-tooltip-wrapper\">\n <ng-content></ng-content>\n</span>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MA4Ba,gBAAgB,CAAA;AAV7B,IAAA,WAAA,GAAA;AAWE;;;;;;AAMG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAElC;;;;;;AAMG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAkB,KAAK,+EAAC;AAExC;;;;;;;;;AASG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,gFAAC;AAChD,IAAA;+GA9BY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5B7B,gSASA,EAAA,MAAA,EAAA,CAAA,sUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDYY,OAAO,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAON,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;sCACS,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,YAAY,WACb,CAAC,OAAO,CAAC,EAAA,IAAA,EAGZ;AACJ,wBAAA,2BAA2B,EAAE,eAAe;AAC7C,qBAAA,EAAA,QAAA,EAAA,gSAAA,EAAA,MAAA,EAAA,CAAA,sUAAA,CAAA,EAAA;;;AE1BH;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tekus/design-system",
3
3
  "description": "Tekus design system library",
4
- "version": "5.40.0",
4
+ "version": "5.42.0",
5
5
  "license": "UNLICENSED",
6
6
  "peerDependencies": {
7
7
  "@angular/core": "^21.0.0",
@@ -88,6 +88,10 @@
88
88
  "types": "./types/tekus-design-system-components-color-picker.d.ts",
89
89
  "default": "./fesm2022/tekus-design-system-components-color-picker.mjs"
90
90
  },
91
+ "./components/column-picker": {
92
+ "types": "./types/tekus-design-system-components-column-picker.d.ts",
93
+ "default": "./fesm2022/tekus-design-system-components-column-picker.mjs"
94
+ },
91
95
  "./components/counter": {
92
96
  "types": "./types/tekus-design-system-components-counter.d.ts",
93
97
  "default": "./fesm2022/tekus-design-system-components-counter.mjs"
@@ -132,6 +136,10 @@
132
136
  "types": "./types/tekus-design-system-components-input-text.d.ts",
133
137
  "default": "./fesm2022/tekus-design-system-components-input-text.mjs"
134
138
  },
139
+ "./components/link-group": {
140
+ "types": "./types/tekus-design-system-components-link-group.d.ts",
141
+ "default": "./fesm2022/tekus-design-system-components-link-group.mjs"
142
+ },
135
143
  "./components/menu": {
136
144
  "types": "./types/tekus-design-system-components-menu.d.ts",
137
145
  "default": "./fesm2022/tekus-design-system-components-menu.mjs"
@@ -184,6 +192,10 @@
184
192
  "types": "./types/tekus-design-system-components-sidebar-layout.d.ts",
185
193
  "default": "./fesm2022/tekus-design-system-components-sidebar-layout.mjs"
186
194
  },
195
+ "./components/skeleton": {
196
+ "types": "./types/tekus-design-system-components-skeleton.d.ts",
197
+ "default": "./fesm2022/tekus-design-system-components-skeleton.mjs"
198
+ },
187
199
  "./components/stat": {
188
200
  "types": "./types/tekus-design-system-components-stat.d.ts",
189
201
  "default": "./fesm2022/tekus-design-system-components-stat.mjs"
@@ -10,6 +10,7 @@ type BadgeSeverity = 'secondary' | 'primary' | 'contrast' | 'danger';
10
10
  * This component supports:
11
11
  * - `value`: The text content to be displayed in the badge
12
12
  * - `severity`: The color scheme of the badge. Options: `'primary' | 'secondary' | 'contrast' | 'danger'`
13
+ * - `overlay`: When `true`, projects the wrapped content and pins the badge to its top-right corner
13
14
  * - Automatically maps severity values to PrimeNG's badge styles
14
15
  *
15
16
  * @usage
@@ -17,6 +18,13 @@ type BadgeSeverity = 'secondary' | 'primary' | 'contrast' | 'danger';
17
18
  * ```html
18
19
  * <tk-badge value="5" severity="primary"></tk-badge>
19
20
  * ```
21
+ *
22
+ * ### Overlay usage
23
+ * ```html
24
+ * <tk-badge value="3" [overlay]="true">
25
+ * <img src="thumbnail.png" alt="Preview" />
26
+ * </tk-badge>
27
+ * ```
20
28
  * */
21
29
  declare class BadgeComponent {
22
30
  /** The text content to be displayed in the badge. */
@@ -26,13 +34,19 @@ declare class BadgeComponent {
26
34
  * @default 'primary'
27
35
  */
28
36
  severity: _angular_core.InputSignal<BadgeSeverity>;
37
+ /**
38
+ * When `true`, renders the badge pinned to the top-right corner of the
39
+ * projected content instead of as a standalone inline badge.
40
+ * @default false
41
+ */
42
+ overlay: _angular_core.InputSignal<boolean>;
29
43
  /**
30
44
  * Computed property that maps the custom `BadgeSeverity` to the underlying PrimeNG `severity`.
31
45
  * Returns `undefined` for 'primary' as it uses the default style, and maps others accordingly.
32
46
  */
33
47
  primeSeverity: _angular_core.Signal<"secondary" | "contrast" | "danger" | "success">;
34
48
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeComponent, never>;
35
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeComponent, "tk-badge", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "severity": { "alias": "severity"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
49
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeComponent, "tk-badge", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "severity": { "alias": "severity"; "required": false; "isSignal": true; }; "overlay": { "alias": "overlay"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
36
50
  }
37
51
 
38
52
  export { BadgeComponent };
@@ -18,6 +18,15 @@ type CarouselVariant = 'manual' | 'autoplay';
18
18
  * - `'thumbnails'`: clickable image thumbnails rendered below the slide.
19
19
  */
20
20
  type CarouselIndicatorType = 'dots' | 'thumbnails';
21
+ /**
22
+ * Framing mode applied to each slide's background image.
23
+ * - `'cover'` (default): the image fills the slide frame, cropping any
24
+ * overflow to preserve the aspect ratio.
25
+ * - `'contain'`: the full image is shown without cropping. Leftover space is
26
+ * filled with a blurred, scaled copy of the same image so no empty bars
27
+ * are left.
28
+ */
29
+ type CarouselImageFit = 'cover' | 'contain';
21
30
  /**
22
31
  * Presentation state of a slide.
23
32
  * - `'default'`: regular slide with image and content.
@@ -122,6 +131,11 @@ declare const MAX_TAG_LENGTH = 20;
122
131
  * The slide height can be customized with the `--tk-carousel-height` CSS
123
132
  * variable (defaults to `28.125rem`).
124
133
  *
134
+ * Image framing (`imageFit` input):
135
+ * - `'cover'` (default): the image fills the slide frame, cropping overflow.
136
+ * - `'contain'`: the full image is shown without cropping; leftover space is
137
+ * filled with a blurred, scaled copy of the same image.
138
+ *
125
139
  * @usage
126
140
  * ### Manual navigation (default)
127
141
  * ```html
@@ -155,6 +169,11 @@ declare class CarouselComponent {
155
169
  * @default 'dots'
156
170
  */
157
171
  indicator: _angular_core.InputSignal<CarouselIndicatorType>;
172
+ /**
173
+ * Framing mode applied to every slide's background image.
174
+ * @default 'cover'
175
+ */
176
+ imageFit: _angular_core.InputSignal<CarouselImageFit>;
158
177
  /** Emits when the active slide changes, via arrows, indicator, swipe, or autoplay. */
159
178
  slideChange: _angular_core.OutputEmitterRef<CarouselSlideChangeEvent>;
160
179
  /** Emits the slide whose call-to-action button was clicked. */
@@ -165,7 +184,14 @@ declare class CarouselComponent {
165
184
  primeCarousel: _angular_core.Signal<Carousel | undefined>;
166
185
  /** Zero-based index of the active slide within the visible slides. */
167
186
  currentIndex: _angular_core.WritableSignal<number>;
168
- /** Ids of the slides whose image failed to load. */
187
+ /**
188
+ * Ids of the slides whose image failed to load. Pruned whenever `slides`
189
+ * changes: ids no longer present are dropped, and ids that are still
190
+ * present keep their failure status (no pointless reload of a slide that
191
+ * hasn't changed and is already known to fail). An id that is new to the
192
+ * list — e.g. a replaced media assignment — was never in this set to
193
+ * begin with, so it always gets a normal, unblocked first attempt.
194
+ */
169
195
  failedSlideIds: _angular_core.WritableSignal<ReadonlySet<string | number>>;
170
196
  /** Whether the autoplay preset is active. */
171
197
  isAutoplay: _angular_core.Signal<boolean>;
@@ -193,8 +219,8 @@ declare class CarouselComponent {
193
219
  onSlideClick(slide: CarouselSlide): void;
194
220
  hasSlideError(slide: CarouselSlide): boolean;
195
221
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CarouselComponent, never>;
196
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CarouselComponent, "tk-carousel", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "indicator": { "alias": "indicator"; "required": false; "isSignal": true; }; }, { "slideChange": "slideChange"; "actionClick": "actionClick"; "slideClick": "slideClick"; }, never, never, true, never>;
222
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CarouselComponent, "tk-carousel", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "indicator": { "alias": "indicator"; "required": false; "isSignal": true; }; "imageFit": { "alias": "imageFit"; "required": false; "isSignal": true; }; }, { "slideChange": "slideChange"; "actionClick": "actionClick"; "slideClick": "slideClick"; }, never, never, true, never>;
197
223
  }
198
224
 
199
225
  export { AUTOPLAY_INTERVAL_MS, CarouselComponent, MAX_DESCRIPTION_LENGTH, MAX_TAG_LENGTH, MAX_TITLE_LENGTH, MAX_VISIBLE_TAGS };
200
- export type { CarouselIndicatorType, CarouselSlide, CarouselSlideChangeEvent, CarouselSlideState, CarouselSlideTag, CarouselVariant };
226
+ export type { CarouselImageFit, CarouselIndicatorType, CarouselSlide, CarouselSlideChangeEvent, CarouselSlideState, CarouselSlideTag, CarouselVariant };
@@ -1,4 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
+ import { AfterContentInit } from '@angular/core';
2
3
  import { ControlValueAccessor, NgControl, FormControl } from '@angular/forms';
3
4
  import { Popover } from 'primeng/popover';
4
5
  import { ContrastResult } from '@tekus/design-system/utils/wcag-contrast';
@@ -57,8 +58,6 @@ interface ColorPickerTexts {
57
58
  contrastSampleText?: string;
58
59
  contrastSampleLabel?: string;
59
60
  contrastLowLabel?: string;
60
- invalidHexError?: string;
61
- requiredError?: string;
62
61
  eyedropperLabel?: string;
63
62
  addCustomColorLabel?: string;
64
63
  removeCustomColorLabel?: string;
@@ -67,6 +66,11 @@ interface ColorPickerTexts {
67
66
  hueLabel?: string;
68
67
  dialogLabel?: string;
69
68
  }
69
+ interface EyeDropperLike {
70
+ open(): Promise<{
71
+ sRGBHex: string;
72
+ }>;
73
+ }
70
74
 
71
75
  /**
72
76
  * @component ColorPickerComponent
@@ -89,7 +93,7 @@ interface ColorPickerTexts {
89
93
  * </tk-color-picker>
90
94
  * ```
91
95
  */
92
- declare class ColorPickerComponent implements ControlValueAccessor {
96
+ declare class ColorPickerComponent implements ControlValueAccessor, AfterContentInit {
93
97
  readonly ngControl: NgControl | null;
94
98
  private readonly destroyRef;
95
99
  private readonly el;
@@ -177,7 +181,8 @@ declare class ColorPickerComponent implements ControlValueAccessor {
177
181
  /**
178
182
  * @property {string} errorMessage
179
183
  * @description
180
- * External error message that overrides the internal validation messages.
184
+ * Message to display when the field is invalid (required and empty, or an
185
+ * invalid hex). The component has no built-in error texts.
181
186
  * @default `''`
182
187
  */
183
188
  errorMessage: _angular_core.InputSignal<string>;
@@ -284,7 +289,22 @@ declare class ColorPickerComponent implements ControlValueAccessor {
284
289
  private readonly cvaDisabled;
285
290
  protected readonly isDisabled: _angular_core.Signal<boolean>;
286
291
  protected readonly resolvedSections: _angular_core.Signal<Required<ColorPickerSections>>;
287
- protected readonly t: _angular_core.Signal<Required<ColorPickerTexts>>;
292
+ protected readonly resolvedTexts: _angular_core.Signal<{
293
+ hexLabel: string;
294
+ contrastSampleText: string;
295
+ swatchesLabel?: string;
296
+ customColorsLabel?: string;
297
+ contrastLabel?: string;
298
+ contrastSampleLabel?: string;
299
+ contrastLowLabel?: string;
300
+ eyedropperLabel?: string;
301
+ addCustomColorLabel?: string;
302
+ removeCustomColorLabel?: string;
303
+ openPickerLabel?: string;
304
+ spectrumLabel?: string;
305
+ hueLabel?: string;
306
+ dialogLabel?: string;
307
+ }>;
288
308
  /** Valid draft hex to paint swatches, or null → neutral fallback via CSS. */
289
309
  /**
290
310
  * Always reflects `draftHex()`, not `value()` — independent of `emitMode`
@@ -306,6 +326,7 @@ declare class ColorPickerComponent implements ControlValueAccessor {
306
326
  protected readonly showEyedropper: _angular_core.Signal<boolean>;
307
327
  protected readonly canAddCustom: _angular_core.Signal<boolean>;
308
328
  protected readonly errorText: _angular_core.Signal<string>;
329
+ protected readonly isInvalid: _angular_core.Signal<boolean>;
309
330
  protected readonly fieldId: string;
310
331
  protected readonly panelFieldId: string;
311
332
  protected readonly errorId: string;
@@ -315,9 +336,16 @@ declare class ColorPickerComponent implements ControlValueAccessor {
315
336
  private suppressNextHideCommit;
316
337
  private readonly customColorWritePtr;
317
338
  private readonly hexInput$;
339
+ private readonly controlState;
318
340
  onChange: (value: string) => void;
319
341
  onTouched: () => void;
320
342
  constructor();
343
+ /**
344
+ * Subscribes to the host form control's events. Runs here and not in
345
+ * ngOnInit: with `formControlName`, the directive only sets up its control
346
+ * in its own ngOnChanges, which runs after this component's ngOnInit.
347
+ */
348
+ ngAfterContentInit(): void;
321
349
  /**
322
350
  * @method writeValue
323
351
  * @description Hydrates the picker from the form model without emitting.
@@ -386,8 +414,14 @@ declare class ColorPickerComponent implements ControlValueAccessor {
386
414
  /** Strips non-hex chars from pasted text before it reaches the input model. */
387
415
  protected onHexPaste(event: ClipboardEvent): void;
388
416
  protected onHexBlur(): void;
417
+ /**
418
+ * Synchronously applies what's currently in the HEX field (normalized) and
419
+ * cancels the pending debounced emission, so it can't re-validate the same
420
+ * text later as "still typing" and clear the error this flush just set.
421
+ * Never commits: callers own the emit via commitDraft().
422
+ */
423
+ private flushHexInput;
389
424
  private processHexInput;
390
- private parseHex;
391
425
  private applyValidHex;
392
426
  private applyInvalidHex;
393
427
  private setValid;
@@ -416,4 +450,4 @@ declare class ColorPickerComponent implements ControlValueAccessor {
416
450
  }
417
451
 
418
452
  export { ColorPickerComponent };
419
- export type { ColorPickerCloseReason, ColorPickerEmitMode, ColorPickerSections, ColorPickerTexts, ColorPickerVariant };
453
+ export type { ColorPickerCloseReason, ColorPickerEmitMode, ColorPickerSections, ColorPickerTexts, ColorPickerVariant, EyeDropperLike };