@muxima-ui/core 1.1.0 → 1.3.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/README.md +15 -0
  2. package/fesm2022/muxima-ui-core-carousel.mjs +377 -0
  3. package/fesm2022/muxima-ui-core-carousel.mjs.map +1 -0
  4. package/fesm2022/muxima-ui-core-color-picker.mjs +755 -0
  5. package/fesm2022/muxima-ui-core-color-picker.mjs.map +1 -0
  6. package/fesm2022/muxima-ui-core-data-grid.mjs +1187 -0
  7. package/fesm2022/muxima-ui-core-data-grid.mjs.map +1 -0
  8. package/fesm2022/muxima-ui-core-editor.mjs +575 -0
  9. package/fesm2022/muxima-ui-core-editor.mjs.map +1 -0
  10. package/fesm2022/muxima-ui-core-image-cropper.mjs +568 -0
  11. package/fesm2022/muxima-ui-core-image-cropper.mjs.map +1 -0
  12. package/fesm2022/muxima-ui-core-kanban.mjs +369 -0
  13. package/fesm2022/muxima-ui-core-kanban.mjs.map +1 -0
  14. package/fesm2022/muxima-ui-core-notification-center.mjs +487 -0
  15. package/fesm2022/muxima-ui-core-notification-center.mjs.map +1 -0
  16. package/fesm2022/muxima-ui-core-sidebar.mjs +333 -0
  17. package/fesm2022/muxima-ui-core-sidebar.mjs.map +1 -0
  18. package/fesm2022/muxima-ui-core-timeline.mjs +117 -0
  19. package/fesm2022/muxima-ui-core-timeline.mjs.map +1 -0
  20. package/fesm2022/muxima-ui-core.mjs +1 -1
  21. package/fesm2022/muxima-ui-core.mjs.map +1 -1
  22. package/package.json +57 -2
  23. package/styles/base.css +17 -0
  24. package/styles/components/carousel.css +113 -0
  25. package/styles/components/color-picker.css +207 -0
  26. package/styles/components/data-grid.css +235 -0
  27. package/styles/components/editor.css +187 -0
  28. package/styles/components/image-cropper.css +113 -0
  29. package/styles/components/kanban.css +115 -0
  30. package/styles/components/notification-center.css +220 -0
  31. package/styles/components/sidebar.css +211 -0
  32. package/styles/components/timeline.css +180 -0
  33. package/styles/muxima.css +9 -0
  34. package/types/muxima-ui-core-carousel.d.ts +72 -0
  35. package/types/muxima-ui-core-color-picker.d.ts +153 -0
  36. package/types/muxima-ui-core-data-grid.d.ts +175 -0
  37. package/types/muxima-ui-core-editor.d.ts +104 -0
  38. package/types/muxima-ui-core-image-cropper.d.ts +105 -0
  39. package/types/muxima-ui-core-kanban.d.ts +83 -0
  40. package/types/muxima-ui-core-notification-center.d.ts +91 -0
  41. package/types/muxima-ui-core-sidebar.d.ts +115 -0
  42. package/types/muxima-ui-core-timeline.d.ts +59 -0
  43. package/types/muxima-ui-core.d.ts +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muxima-ui-core-data-grid.mjs","sources":["../../../projects/core/data-grid/data-grid.ts","../../../projects/core/data-grid/muxima-ui-core-data-grid.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n Injector,\n TemplateRef,\n ViewEncapsulation,\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n computed,\n contentChildren,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { MxCheckbox } from '@muxima-ui/core/checkbox';\nimport { mxNormalize, mxUniqueId } from '@muxima-ui/core/form-field';\nimport { MX_MENU } from '@muxima-ui/core/menu';\n\n/** Coluna da grelha. */\nexport interface MxGridColumn<T = any> {\n key: string;\n header: string;\n /** Valor para ordenar e filtrar; por omissão row[key]. */\n value?: (row: T) => unknown;\n /** Texto mostrado; por omissão String(valor). */\n format?: (value: any, row: T) => string;\n /** Largura inicial em px. */\n width?: number;\n minWidth?: number;\n sortable?: boolean;\n /** Filtro no cabeçalho. `number` aceita 100, >100, <100 e 10-20. */\n filter?: 'text' | 'number' | 'select' | false;\n /** Opções do filtro `select`; por omissão, os valores que existem nos dados. */\n filterOptions?: string[];\n align?: 'start' | 'center' | 'end';\n /** Fixa a coluna à esquerda (`start`) ou à direita (`end`) durante o scroll horizontal. */\n pinned?: 'start' | 'end';\n resizable?: boolean;\n hidden?: boolean;\n /** false: não aparece no menu de colunas. */\n hideable?: boolean;\n}\n\nexport interface MxGridSort {\n key: string | null;\n direction: 'asc' | 'desc';\n}\n\n/**\n * Modelo de uma célula: `<ng-template mxGridCell=\"estado\" let-row let-value=\"value\">`.\n */\n@Directive({ selector: 'ng-template[mxGridCell]' })\nexport class MxGridCell {\n readonly key = input.required<string>({ alias: 'mxGridCell' });\n readonly template = inject(TemplateRef);\n}\n\n/** Conteúdo da barra por cima da grelha (pesquisa, botões). */\n@Directive({ selector: '[mxGridToolbar]', host: { class: 'mx-grid-toolbar-slot' } })\nexport class MxGridToolbar {}\n\nconst HEADER_ROWS_BASE = 1;\n\n/** Aplica o filtro de uma coluna numérica: 100, >100, >=100, <100, <=100, 10-20. */\nfunction numberMatch(value: unknown, expr: string): boolean {\n const n =\n typeof value === 'number' ? value : Number(String(value).replace(/\\s/g, '').replace(',', '.'));\n if (Number.isNaN(n)) return false;\n const e = expr.replace(/\\s/g, '').replace(',', '.');\n let m: RegExpMatchArray | null;\n if ((m = e.match(/^(-?[\\d.]+)-(-?[\\d.]+)$/))) return n >= Number(m[1]) && n <= Number(m[2]);\n if ((m = e.match(/^(>=|<=|>|<|=)?(-?[\\d.]+)$/))) {\n const v = Number(m[2]);\n switch (m[1]) {\n case '>':\n return n > v;\n case '>=':\n return n >= v;\n case '<':\n return n < v;\n case '<=':\n return n <= v;\n default:\n return n === v;\n }\n }\n return true;\n}\n\n/**\n * Grelha de dados (padrão WAI-ARIA Grid): ordenação, filtros por coluna, pesquisa,\n * selecção, colunas redimensionáveis, fixas e escondíveis, e scroll virtual para\n * milhares de linhas. Navega-se célula a célula com as setas.\n *\n * ```html\n * <mx-data-grid [data]=\"facturas\" [columns]=\"colunas\" rowKey=\"numero\"\n * selection=\"multiple\" [(selected)]=\"escolhidas\" height=\"480px\" aria-label=\"Facturas\">\n * <ng-template mxGridCell=\"estado\" let-row>\n * <span mxBadge [variant]=\"cor(row.estado)\">{{ row.estado }}</span>\n * </ng-template>\n * </mx-data-grid>\n * ```\n *\n * Com `manual`, a grelha não ordena nem filtra: emite [(sort)] e [(filters)] para o\n * servidor e mostra `data` tal como chega (indica o total em `totalRows`).\n */\n@Component({\n selector: 'mx-data-grid',\n exportAs: 'mxDataGrid',\n imports: [NgTemplateOutlet, MxCheckbox, MX_MENU],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'mx-grid',\n '[attr.data-density]': 'density() === \"comfortable\" ? null : density()',\n '[attr.aria-label]': 'null',\n },\n template: `\n @if (showToolbar()) {\n <div class=\"mx-grid-toolbar\">\n <ng-content select=\"[mxGridToolbar]\" />\n @if (columnMenu()) {\n <button type=\"button\" class=\"mx-grid-columns-button\" [mxMenuTriggerFor]=\"colunas\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M2.5 3.5h11v9h-11zM6.5 3.5v9M10 3.5v9\"\n stroke=\"currentColor\"\n stroke-width=\"1.3\"\n stroke-linejoin=\"round\"\n />\n </svg>\n {{ columnsText() }}\n </button>\n <ng-template #colunas>\n <div mxMenu>\n @for (c of hideableColumns(); track c.key) {\n <button\n mxMenuItemCheckbox\n type=\"button\"\n [checked]=\"!isHidden(c)\"\n (mxMenuItemTriggered)=\"toggleColumn(c.key)\"\n >\n {{ c.header }}\n </button>\n }\n </div>\n </ng-template>\n }\n </div>\n }\n\n <div\n class=\"mx-grid-scroller\"\n #scroller\n [style.height]=\"height()\"\n [style.max-height]=\"maxHeight()\"\n (scroll)=\"onScroll()\"\n >\n <table\n class=\"mx-grid-table\"\n role=\"grid\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-rowcount]=\"rowCount()\"\n [attr.aria-colcount]=\"colCount()\"\n [attr.aria-multiselectable]=\"selection() === 'multiple' ? 'true' : null\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [style.width.px]=\"tableWidth()\"\n (keydown)=\"onKeydown($event)\"\n (focusin)=\"onFocusIn($event)\"\n >\n <colgroup>\n @if (selection() !== 'none') {\n <col [style.width.px]=\"checkWidth\" />\n }\n @for (c of visibleColumns(); track c.key) {\n <col [style.width.px]=\"widthOf(c)\" />\n }\n </colgroup>\n <thead>\n <tr aria-rowindex=\"1\" class=\"mx-grid-header-row\">\n @if (selection() !== 'none') {\n <th\n class=\"mx-grid-check mx-grid-pinned-start\"\n scope=\"col\"\n aria-colindex=\"1\"\n [style.left.px]=\"0\"\n [attr.data-cell]=\"'0:0'\"\n >\n @if (selection() === 'multiple') {\n <input\n type=\"checkbox\"\n mxCheckbox\n [checked]=\"allSelected()\"\n [indeterminate]=\"someSelected()\"\n [attr.aria-label]=\"selectAllText()\"\n (change)=\"toggleAll()\"\n tabindex=\"-1\"\n />\n } @else {\n <span class=\"mx-visually-hidden\">{{ selectText() }}</span>\n }\n </th>\n }\n @for (c of visibleColumns(); track c.key; let i = $index) {\n <th\n scope=\"col\"\n [attr.aria-colindex]=\"i + 1 + offset()\"\n [attr.aria-sort]=\"ariaSort(c)\"\n [attr.aria-describedby]=\"c.resizable !== false ? resizeHintId : null\"\n [attr.data-align]=\"c.align ?? null\"\n [attr.data-cell]=\"'0:' + (i + offset())\"\n [class.mx-grid-pinned-start]=\"c.pinned === 'start'\"\n [class.mx-grid-pinned-end]=\"c.pinned === 'end'\"\n [style.left.px]=\"c.pinned === 'start' ? pinOffset(c) : null\"\n [style.right.px]=\"c.pinned === 'end' ? pinOffsetEnd(c) : null\"\n >\n @if (c.sortable !== false) {\n <button type=\"button\" class=\"mx-grid-sort\" tabindex=\"-1\" (click)=\"toggleSort(c)\">\n {{ c.header }}\n <svg class=\"mx-sort-icon\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n @switch (ariaSort(c)) {\n @case ('ascending') {\n <path\n d=\"M8 12V4M4.5 7.5L8 4l3.5 3.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n }\n @case ('descending') {\n <path\n d=\"M8 4v8M4.5 8.5L8 12l3.5-3.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n }\n @default {\n <path\n d=\"M5 6.5L8 3.5l3 3M5 9.5l3 3 3-3\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n }\n }\n </svg>\n </button>\n } @else {\n <span class=\"mx-grid-header-text\">{{ c.header }}</span>\n }\n @if (c.resizable !== false) {\n <span\n class=\"mx-grid-resize\"\n aria-hidden=\"true\"\n (pointerdown)=\"startResize($event, c)\"\n (dblclick)=\"resetWidth(c)\"\n ></span>\n }\n </th>\n }\n </tr>\n @if (hasFilters()) {\n <tr aria-rowindex=\"2\" class=\"mx-grid-filter-row\">\n @if (selection() !== 'none') {\n <td\n class=\"mx-grid-check mx-grid-pinned-start\"\n aria-colindex=\"1\"\n [style.left.px]=\"0\"\n [attr.data-cell]=\"'1:0'\"\n ></td>\n }\n @for (c of visibleColumns(); track c.key; let i = $index) {\n <td\n [attr.aria-colindex]=\"i + 1 + offset()\"\n [attr.data-cell]=\"'1:' + (i + offset())\"\n [class.mx-grid-pinned-start]=\"c.pinned === 'start'\"\n [class.mx-grid-pinned-end]=\"c.pinned === 'end'\"\n [style.left.px]=\"c.pinned === 'start' ? pinOffset(c) : null\"\n [style.right.px]=\"c.pinned === 'end' ? pinOffsetEnd(c) : null\"\n >\n @switch (c.filter) {\n @case ('select') {\n <select\n class=\"mx-grid-filter\"\n tabindex=\"-1\"\n [attr.aria-label]=\"filterText() + ' ' + c.header\"\n [value]=\"filters()[c.key] || ''\"\n (change)=\"setFilter(c.key, $any($event.target).value)\"\n >\n <option value=\"\">{{ allText() }}</option>\n @for (o of optionsOf(c); track o) {\n <option [value]=\"o\" [selected]=\"filters()[c.key] === o\">{{ o }}</option>\n }\n </select>\n }\n @case ('text') {\n <input\n class=\"mx-grid-filter\"\n tabindex=\"-1\"\n type=\"search\"\n [attr.aria-label]=\"filterText() + ' ' + c.header\"\n [value]=\"filters()[c.key] || ''\"\n (input)=\"setFilter(c.key, $any($event.target).value)\"\n />\n }\n @case ('number') {\n <input\n class=\"mx-grid-filter\"\n tabindex=\"-1\"\n type=\"text\"\n inputmode=\"decimal\"\n placeholder=\">, <, 10-20\"\n [attr.aria-label]=\"\n filterText() +\n ' ' +\n c.header +\n ', aceita maior que, menor que e intervalos'\n \"\n [value]=\"filters()[c.key] || ''\"\n (input)=\"setFilter(c.key, $any($event.target).value)\"\n />\n }\n }\n </td>\n }\n </tr>\n }\n </thead>\n <tbody>\n @if (range().start > 0) {\n <tr class=\"mx-grid-spacer\" aria-hidden=\"true\">\n <td [attr.colspan]=\"colCount()\" [style.height.px]=\"range().start * rowHeight()\"></td>\n </tr>\n }\n @for (row of rendered(); track keyOf(row); let r = $index) {\n @let ri = range().start + r;\n <tr\n [attr.aria-rowindex]=\"ri + headerRows() + 1\"\n [attr.aria-selected]=\"selection() === 'none' ? null : isSelected(row)\"\n [style.height.px]=\"rowHeight()\"\n (dblclick)=\"rowActivate.emit(row)\"\n >\n @if (selection() !== 'none') {\n <td\n class=\"mx-grid-check mx-grid-pinned-start\"\n aria-colindex=\"1\"\n [style.left.px]=\"0\"\n [attr.data-cell]=\"ri + headerRows() + ':0'\"\n >\n @if (selection() === 'multiple') {\n <input\n type=\"checkbox\"\n mxCheckbox\n tabindex=\"-1\"\n [checked]=\"isSelected(row)\"\n [attr.aria-label]=\"selectRowText() + ' ' + rowLabel(row)\"\n (change)=\"toggleRow(row)\"\n />\n } @else {\n <input\n type=\"radio\"\n class=\"mx-radio\"\n tabindex=\"-1\"\n [name]=\"radioName\"\n [checked]=\"isSelected(row)\"\n [attr.aria-label]=\"selectRowText() + ' ' + rowLabel(row)\"\n (change)=\"toggleRow(row)\"\n />\n }\n </td>\n }\n @for (c of visibleColumns(); track c.key; let i = $index) {\n <td\n [attr.aria-colindex]=\"i + 1 + offset()\"\n [attr.data-cell]=\"ri + headerRows() + ':' + (i + offset())\"\n [attr.data-align]=\"c.align ?? null\"\n [class.mx-grid-pinned-start]=\"c.pinned === 'start'\"\n [class.mx-grid-pinned-end]=\"c.pinned === 'end'\"\n [style.left.px]=\"c.pinned === 'start' ? pinOffset(c) : null\"\n [style.right.px]=\"c.pinned === 'end' ? pinOffsetEnd(c) : null\"\n >\n @if (cellTemplate(c.key); as tpl) {\n <ng-container\n *ngTemplateOutlet=\"\n tpl;\n context: { $implicit: row, value: valueOf(c, row), column: c }\n \"\n />\n } @else {\n {{ text(c, row) }}\n }\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td\n class=\"mx-grid-empty\"\n [attr.colspan]=\"colCount()\"\n [attr.data-cell]=\"headerRows() + ':0'\"\n >\n {{ loading() ? loadingText() : emptyText() }}\n </td>\n </tr>\n }\n @if (range().end < rows().length) {\n <tr class=\"mx-grid-spacer\" aria-hidden=\"true\">\n <td\n [attr.colspan]=\"colCount()\"\n [style.height.px]=\"(rows().length - range().end) * rowHeight()\"\n ></td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"mx-grid-footer\">\n <span class=\"mx-grid-status\" aria-live=\"polite\">{{ statusText() }}</span>\n <ng-content select=\"[mxGridFooter]\" />\n </div>\n <span class=\"mx-visually-hidden\" [id]=\"resizeHintId\">{{ resizeHint() }}</span>\n `,\n})\nexport class MxDataGrid<T = any> {\n readonly data = input<readonly T[]>([]);\n readonly columns = input<readonly MxGridColumn<T>[]>([]);\n /** Chave única de cada linha: nome do campo ou função. */\n readonly rowKey = input<string | ((row: T) => unknown)>('id');\n readonly selection = input<'none' | 'single' | 'multiple'>('none');\n /** Chaves das linhas seleccionadas. */\n readonly selected = model<readonly unknown[]>([]);\n readonly sort = model<MxGridSort>({ key: null, direction: 'asc' });\n /** Texto de cada filtro, por chave de coluna. */\n readonly filters = model<Record<string, string>>({});\n /** Pesquisa em todas as colunas visíveis. */\n readonly query = input('');\n /** Não ordena nem filtra: só emite sort e filters (dados do servidor). */\n readonly manual = input(false, { transform: booleanAttribute });\n /** Total de linhas no servidor (modo manual), para aria-rowcount e o estado. */\n readonly totalRows = input<number | null>(null);\n readonly height = input<string | null>(null);\n readonly maxHeight = input<string | null>(null);\n readonly rowHeight = input(40, { transform: numberAttribute });\n /** Scroll virtual: `auto` liga a partir de 100 linhas (precisa de height). */\n readonly virtual = input<boolean | 'auto'>('auto');\n readonly density = input<'comfortable' | 'compact'>('comfortable');\n readonly loading = input(false, { transform: booleanAttribute });\n readonly columnMenu = input(true, { transform: booleanAttribute });\n readonly ariaLabel = input('Tabela de dados', { alias: 'aria-label' });\n /** Coluna cujo texto identifica a linha nos nomes (\"Seleccionar FT 2026/0201\"). */\n readonly labelKey = input<string | null>(null);\n\n readonly emptyText = input('Sem resultados.');\n readonly loadingText = input('A carregar...');\n readonly columnsText = input('Colunas');\n readonly filterText = input('Filtrar');\n readonly allText = input('Todos');\n readonly selectAllText = input('Seleccionar todas as linhas');\n readonly selectRowText = input('Seleccionar');\n readonly selectText = input('Selecção');\n readonly resizeHint = input('Alt e setas esquerda e direita mudam a largura da coluna.');\n\n /** Enter ou duplo clique numa linha. */\n readonly rowActivate = output<T>();\n\n private readonly cells = contentChildren(MxGridCell);\n private readonly toolbarSlot = contentChildren(MxGridToolbar);\n private readonly scroller = viewChild.required<ElementRef<HTMLElement>>('scroller');\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly injector = inject(Injector);\n private readonly announcer = inject(LiveAnnouncer);\n\n protected readonly checkWidth = 44;\n protected readonly resizeHintId = mxUniqueId('mx-grid-resize');\n protected readonly radioName = mxUniqueId('mx-grid-row');\n private readonly widths = signal<Record<string, number>>({});\n private readonly hiddenKeys = signal<Set<string> | null>(null);\n private readonly scrollTop = signal(0);\n private readonly viewport = signal(400);\n /** Célula activa: linha e coluna na grelha (0 = cabeçalho). */\n private readonly active = signal<[number, number]>([0, 0]);\n\n protected readonly showToolbar = computed(\n () => this.columnMenu() || this.toolbarSlot().length > 0,\n );\n protected readonly offset = computed(() => (this.selection() === 'none' ? 0 : 1));\n protected readonly hasFilters = computed(() => this.columns().some((c) => c.filter));\n protected readonly headerRows = computed(() => HEADER_ROWS_BASE + (this.hasFilters() ? 1 : 0));\n protected readonly hideableColumns = computed(() =>\n this.columns().filter((c) => c.hideable !== false),\n );\n\n protected readonly visibleColumns = computed(() => {\n const hidden = this.hiddenKeys();\n const cols = this.columns().filter((c) => !(hidden ? hidden.has(c.key) : c.hidden));\n return [\n ...cols.filter((c) => c.pinned === 'start'),\n ...cols.filter((c) => !c.pinned),\n ...cols.filter((c) => c.pinned === 'end'),\n ];\n });\n protected readonly colCount = computed(() => this.visibleColumns().length + this.offset());\n protected readonly tableWidth = computed(\n () =>\n this.visibleColumns().reduce((a, c) => a + this.widthOf(c), 0) +\n (this.offset() ? this.checkWidth : 0),\n );\n\n /** Linhas depois de filtros, pesquisa e ordenação. */\n readonly rows = computed<readonly T[]>(() => {\n const data = this.data();\n if (this.manual()) return data;\n const filters = Object.entries(this.filters()).filter(([, v]) => v?.trim());\n const cols = this.columns();\n const q = mxNormalize(this.query().trim());\n let out = data.filter((row) =>\n filters.every(([key, v]) => {\n const c = cols.find((x) => x.key === key);\n if (!c) return true;\n const value = this.valueOf(c, row);\n if (c.filter === 'number') return numberMatch(value, v);\n if (c.filter === 'select') return String(value ?? '') === v;\n return mxNormalize(this.text(c, row)).includes(mxNormalize(v.trim()));\n }),\n );\n if (q) {\n const vis = this.visibleColumns();\n out = out.filter((row) => vis.some((c) => mxNormalize(this.text(c, row)).includes(q)));\n }\n const s = this.sort();\n const sc = s.key ? cols.find((c) => c.key === s.key) : null;\n if (sc) {\n const collator = new Intl.Collator('pt', { numeric: true, sensitivity: 'base' });\n const dir = s.direction === 'asc' ? 1 : -1;\n out = [...out].sort((a, b) => {\n const x = this.valueOf(sc, a);\n const y = this.valueOf(sc, b);\n if (x == null && y == null) return 0;\n if (x == null) return 1;\n if (y == null) return -1;\n if (x instanceof Date && y instanceof Date) return (x.getTime() - y.getTime()) * dir;\n if (typeof x === 'number' && typeof y === 'number') return (x - y) * dir;\n return collator.compare(String(x), String(y)) * dir;\n });\n }\n return out;\n });\n\n protected readonly isVirtual = computed(() => {\n const v = this.virtual();\n return (v === 'auto' ? this.rows().length > 100 : v) && !!(this.height() || this.maxHeight());\n });\n protected readonly range = computed(() => {\n const n = this.rows().length;\n if (!this.isVirtual()) return { start: 0, end: n };\n const h = this.rowHeight();\n const buffer = 8;\n const start = Math.max(0, Math.floor(this.scrollTop() / h) - buffer);\n const end = Math.min(n, start + Math.ceil(this.viewport() / h) + buffer * 2);\n return { start, end };\n });\n protected readonly rendered = computed(() => {\n const { start, end } = this.range();\n return this.rows().slice(start, end);\n });\n protected readonly rowCount = computed(\n () => (this.totalRows() ?? this.rows().length) + this.headerRows(),\n );\n\n private readonly selectedSet = computed(() => new Set(this.selected()));\n protected readonly allSelected = computed(\n () => this.rows().length > 0 && this.rows().every((r) => this.selectedSet().has(this.keyOf(r))),\n );\n protected readonly someSelected = computed(\n () => !this.allSelected() && this.rows().some((r) => this.selectedSet().has(this.keyOf(r))),\n );\n\n protected readonly statusText = computed(() => {\n const fmt = new Intl.NumberFormat('pt-AO');\n const total = this.totalRows() ?? this.rows().length;\n const parts = [`${fmt.format(total)} ${total === 1 ? 'linha' : 'linhas'}`];\n if (!this.manual() && this.rows().length !== this.data().length)\n parts[0] += ` de ${fmt.format(this.data().length)}`;\n const sel = this.selected().length;\n if (this.selection() !== 'none' && sel)\n parts.push(`${fmt.format(sel)} ${sel === 1 ? 'seleccionada' : 'seleccionadas'}`);\n return parts.join(', ');\n });\n\n constructor() {\n // tabindex itinerante: só a célula activa (ou o controlo dentro dela) entra no Tab\n afterRenderEffect({\n write: () => {\n const [r, c] = this.active();\n this.rendered();\n this.visibleColumns();\n const table = this.host.querySelector<HTMLElement>('.mx-grid-table');\n if (!table) return;\n let activeEl = table.querySelector<HTMLElement>(`[data-cell=\"${r}:${c}\"]`);\n if (!activeEl) activeEl = table.querySelector<HTMLElement>('[data-cell]');\n table.querySelectorAll<HTMLElement>('[data-cell]').forEach((cell) => {\n const isActive = cell === activeEl;\n const widget = this.widgetIn(cell);\n cell.tabIndex = isActive && !widget ? 0 : -1;\n cell\n .querySelectorAll<HTMLElement>('button, a[href], input, select, textarea, [tabindex]')\n .forEach((w) => {\n if (w === cell) return;\n w.tabIndex = isActive && w === widget ? 0 : -1;\n });\n });\n },\n });\n afterNextRender(() => this.measure());\n }\n\n // ---- utilitários ----\n keyOf(row: T): unknown {\n const k = this.rowKey();\n return typeof k === 'function' ? k(row) : (row as Record<string, unknown>)[k];\n }\n valueOf(c: MxGridColumn<T>, row: T): unknown {\n return c.value ? c.value(row) : (row as Record<string, unknown>)[c.key];\n }\n protected text(c: MxGridColumn<T>, row: T): string {\n const v = this.valueOf(c, row);\n if (c.format) return c.format(v, row);\n if (v instanceof Date) return v.toLocaleDateString('pt-AO');\n if (typeof v === 'number') return v.toLocaleString('pt-AO');\n return v == null ? '' : String(v);\n }\n protected rowLabel(row: T): string {\n const key = this.labelKey() ?? this.visibleColumns()[0]?.key;\n const c = this.columns().find((x) => x.key === key);\n return c ? this.text(c, row) : String(this.keyOf(row));\n }\n protected cellTemplate(key: string): TemplateRef<unknown> | null {\n return this.cells().find((t) => t.key() === key)?.template ?? null;\n }\n protected widthOf(c: MxGridColumn<T>): number {\n return this.widths()[c.key] ?? c.width ?? 160;\n }\n protected pinOffset(c: MxGridColumn<T>): number {\n let left = this.offset() ? this.checkWidth : 0;\n for (const x of this.visibleColumns()) {\n if (x === c) break;\n if (x.pinned === 'start') left += this.widthOf(x);\n }\n return left;\n }\n protected pinOffsetEnd(c: MxGridColumn<T>): number {\n let right = 0;\n const cols = [...this.visibleColumns()].reverse();\n for (const x of cols) {\n if (x === c) break;\n if (x.pinned === 'end') right += this.widthOf(x);\n }\n return right;\n }\n protected optionsOf(c: MxGridColumn<T>): string[] {\n if (c.filterOptions) return c.filterOptions;\n return [...new Set(this.data().map((r) => String(this.valueOf(c, r) ?? '')))]\n .filter(Boolean)\n .sort((a, b) => a.localeCompare(b, 'pt'));\n }\n protected isHidden(c: MxGridColumn<T>): boolean {\n const hidden = this.hiddenKeys();\n return hidden ? hidden.has(c.key) : !!c.hidden;\n }\n protected ariaSort(c: MxGridColumn<T>): string | null {\n if (c.sortable === false) return null;\n const s = this.sort();\n return s.key === c.key ? (s.direction === 'asc' ? 'ascending' : 'descending') : 'none';\n }\n isSelected(row: T): boolean {\n return this.selectedSet().has(this.keyOf(row));\n }\n\n // ---- acções ----\n toggleSort(c: MxGridColumn<T>): void {\n if (c.sortable === false) return;\n const s = this.sort();\n const next: MxGridSort =\n s.key !== c.key\n ? { key: c.key, direction: 'asc' }\n : s.direction === 'asc'\n ? { key: c.key, direction: 'desc' }\n : { key: null, direction: 'asc' };\n this.sort.set(next);\n this.announcer.announce(\n next.key\n ? `Ordenado por ${c.header}, ${next.direction === 'asc' ? 'ascendente' : 'descendente'}`\n : 'Sem ordenação',\n );\n }\n setFilter(key: string, value: string): void {\n this.filters.update((f) => ({ ...f, [key]: value }));\n this.scrollTo(0);\n }\n toggleColumn(key: string): void {\n const current = new Set(\n this.hiddenKeys() ??\n this.columns()\n .filter((c) => c.hidden)\n .map((c) => c.key),\n );\n if (current.has(key)) current.delete(key);\n else if (this.visibleColumns().length > 1) current.add(key);\n this.hiddenKeys.set(current);\n }\n toggleRow(row: T): void {\n const key = this.keyOf(row);\n if (this.selection() === 'single') {\n this.selected.set(this.isSelected(row) ? [] : [key]);\n return;\n }\n const set = new Set(this.selected());\n if (set.has(key)) set.delete(key);\n else set.add(key);\n this.selected.set([...set]);\n }\n toggleAll(): void {\n const keys = this.rows().map((r) => this.keyOf(r));\n if (this.allSelected()) {\n const drop = new Set(keys);\n this.selected.set(this.selected().filter((k) => !drop.has(k)));\n } else {\n this.selected.set([...new Set([...this.selected(), ...keys])]);\n }\n }\n setWidth(key: string, width: number): void {\n const c = this.columns().find((x) => x.key === key);\n const min = c?.minWidth ?? 64;\n this.widths.update((w) => ({ ...w, [key]: Math.max(min, Math.round(width)) }));\n }\n protected resetWidth(c: MxGridColumn<T>): void {\n this.widths.update((w) => {\n const { [c.key]: _, ...rest } = w;\n return rest;\n });\n }\n protected startResize(event: PointerEvent, c: MxGridColumn<T>): void {\n event.preventDefault();\n event.stopPropagation();\n const startX = event.clientX;\n const start = this.widthOf(c);\n const move = (e: PointerEvent) => this.setWidth(c.key, start + (e.clientX - startX));\n const up = () => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', up);\n };\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', up);\n }\n\n // ---- scroll ----\n private measure(): void {\n const el = this.scroller().nativeElement;\n this.viewport.set(el.clientHeight || 400);\n }\n protected onScroll(): void {\n const el = this.scroller().nativeElement;\n this.scrollTop.set(el.scrollTop);\n if (el.clientHeight) this.viewport.set(el.clientHeight);\n }\n private scrollTo(top: number): void {\n const el = this.scroller().nativeElement;\n el.scrollTop = top;\n this.scrollTop.set(top);\n }\n\n // ---- teclado (padrão Grid) ----\n private widgetIn(cell: HTMLElement): HTMLElement | null {\n return cell.querySelector<HTMLElement>(\n 'input, select, textarea, button:not(.mx-grid-resize), a[href]',\n );\n }\n private parseCell(el: Element | null): [number, number] | null {\n const cell = el?.closest<HTMLElement>('[data-cell]');\n if (!cell) return null;\n const [r, c] = cell.dataset['cell']!.split(':').map(Number);\n return [r, c];\n }\n protected onFocusIn(event: FocusEvent): void {\n const pos = this.parseCell(event.target as Element);\n if (pos && (pos[0] !== this.active()[0] || pos[1] !== this.active()[1])) this.active.set(pos);\n }\n\n private lastRow(): number {\n return Math.max(this.headerRows() - 1, this.headerRows() + this.rows().length - 1);\n }\n\n /** Move a célula activa e põe-lhe o foco (fazendo scroll se for preciso). */\n focusCell(row: number, col: number): void {\n const r = Math.min(Math.max(row, 0), this.lastRow());\n const c = Math.min(Math.max(col, 0), this.colCount() - 1);\n this.active.set([r, c]);\n const dataIndex = r - this.headerRows();\n if (this.isVirtual() && dataIndex >= 0) {\n const el = this.scroller().nativeElement;\n const h = this.rowHeight();\n const headerH = el.querySelector('thead')?.getBoundingClientRect().height ?? 0;\n const top = dataIndex * h;\n if (top < el.scrollTop) this.scrollTo(top);\n else if (top + h > el.scrollTop + el.clientHeight - headerH)\n this.scrollTo(top + h - el.clientHeight + headerH);\n }\n afterNextRender(\n () => {\n const cell = this.host.querySelector<HTMLElement>(`[data-cell=\"${r}:${c}\"]`);\n if (!cell) return;\n (this.widgetIn(cell) ?? cell).focus();\n cell.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n },\n { injector: this.injector },\n );\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const pos = this.parseCell(event.target as Element);\n if (!pos) return;\n const [r, c] = pos;\n const target = event.target as HTMLElement;\n const inText = target.matches('input:not([type=checkbox]):not([type=radio]), textarea');\n const inSelect = target.matches('select');\n const page = Math.max(\n 1,\n Math.floor(this.scroller().nativeElement.clientHeight / this.rowHeight()) - 1,\n );\n const col = this.visibleColumns()[c - this.offset()];\n const dataIndex = r - this.headerRows();\n const row = dataIndex >= 0 ? this.rows()[dataIndex] : undefined;\n\n // redimensionar com Alt + setas no cabeçalho\n if (\n event.altKey &&\n r === 0 &&\n col &&\n col.resizable !== false &&\n (event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n ) {\n event.preventDefault();\n this.setWidth(col.key, this.widthOf(col) + (event.key === 'ArrowRight' ? 16 : -16));\n this.announcer.announce(`${col.header}, ${this.widthOf(col)} píxeis`);\n return;\n }\n if (inSelect) return;\n if (inText && !['ArrowUp', 'ArrowDown', 'PageUp', 'PageDown'].includes(event.key)) return;\n\n const ctrl = event.ctrlKey || event.metaKey;\n let next: [number, number] | null = null;\n switch (event.key) {\n case 'ArrowRight':\n next = [r, c + 1];\n break;\n case 'ArrowLeft':\n next = [r, c - 1];\n break;\n case 'ArrowDown':\n next = [r + 1, c];\n break;\n case 'ArrowUp':\n next = [r - 1, c];\n break;\n case 'Home':\n next = ctrl ? [0, 0] : [r, 0];\n break;\n case 'End':\n next = ctrl ? [this.lastRow(), this.colCount() - 1] : [r, this.colCount() - 1];\n break;\n case 'PageDown':\n next = [Math.max(r, this.headerRows()) + page, c];\n break;\n case 'PageUp':\n next = [Math.max(this.headerRows(), r - page), c];\n break;\n case ' ':\n if (row && this.selection() !== 'none' && !target.matches('button, a, input')) {\n event.preventDefault();\n this.toggleRow(row);\n }\n return;\n case 'Enter':\n if (r === 0 && col) {\n event.preventDefault();\n this.toggleSort(col);\n } else if (row && !target.matches('button, a, input, select')) {\n event.preventDefault();\n this.rowActivate.emit(row);\n }\n return;\n case 'a':\n if (ctrl && this.selection() === 'multiple') {\n event.preventDefault();\n this.toggleAll();\n }\n return;\n default:\n return;\n }\n event.preventDefault();\n this.focusCell(next[0], next[1]);\n }\n}\n\nexport const MX_DATA_GRID = [MxDataGrid, MxGridCell, MxGridToolbar] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}