@konce-pt/angular 0.7.6 → 0.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,97 @@
1
1
  # @konce-pt/angular
2
2
 
3
+ ## 0.7.7
4
+
5
+ ### Minor Changes
6
+
7
+ - 47ada55: `kpt-data-table` — edycja inline komórek, a przy okazji publiczny stan panelu w `kpt-select`
8
+ i `kpt-datepicker`.
9
+
10
+ - `KptColumn.edit` (`{ type, options?, placeholder?, min?, max?, step? }`) włącza edycję kolumny.
11
+ Klik w komórkę (albo Enter — komórka edytowalna ma `tabindex="0"`) zamienia wartość na kontrolkę:
12
+ `text` → `kpt-input`, `number` → `kpt-input-number`, `date` → `kpt-datepicker`, `select`
13
+ i `multiselect` → `kpt-select` (drugi z `multiple filter`). Dla edytorów na overlayu panel otwiera
14
+ się od razu, więc wybór to jedno kliknięcie.
15
+ - `cellEdit` (`output<KptCellEditEvent<T>>`) emituje `{ row, field, value, updatedRow }` po
16
+ zatwierdzeniu i tylko wtedy, gdy wartość faktycznie się zmieniła (tablice porównywane po
17
+ zawartości, więc powrót do tego samego zestawu nic nie wysyła). `updatedRow` to gotowe body
18
+ żądania — tabela sama nic nie zapisuje, jak przy `lazyLoad`.
19
+ - `kptCellEdit` — dyrektywa szablonu własnego edytora, gdy wbudowane typy nie wystarczają.
20
+ Kontekst: `$implicit` = wartość, `row`, `commit(value)`, `cancel()`.
21
+ - `open` w `kpt-select` i `kpt-datepicker` jest teraz publicznym `model(false)` — dwukierunkowe
22
+ `[(open)]` i `(openChange)`, spójnie z `kpt-dialog`/`kpt-drawer`. Bez tego nie da się z zewnątrz
23
+ odróżnić „user skończył wybierać" od „pole straciło fokus": `touch` leci również z blur triggera,
24
+ czyli już przy naciśnięciu myszy na opcji w panelu (panel żyje w kontenerze CDK Overlay przy
25
+ `<body>`). Inicjalizacja panelu przy otwarciu przeniosła się z `toggleOpen()` do efektu na `open`,
26
+ żeby otwarcie z zewnątrz ustawiało widok kalendarza i resetowało filtr tak samo jak klik w trigger.
27
+
28
+ `exportCsv()` i eksport nie zmieniają zachowania. Kolumny bez `edit` (i tabele bez `cellEdit`)
29
+ działają dokładnie jak dotąd.
30
+
31
+ - `kpt-data-table` — ukrywanie kolumn przez `hiddenFields` i slot `kptPaginatorActions`.
32
+
33
+ - `hiddenFields` (`model<readonly string[]>`, dwukierunkowe) trzyma pola ukrytych kolumn.
34
+ Komponent celowo nie dostarcza UI do zarządzania widocznością — to minimalny hak do podpięcia
35
+ własnego przełącznika. Renderowanie (nagłówek, wiersz filtrów, wiersze, `colspan`, sticky-offsety
36
+ kolumn zamrożonych) i `exportCsv()` respektują ukryte kolumny; ukrycie nie wyłącza kolumny
37
+ z globalnego wyszukiwania ani z filtrów per-kolumna, a kolejność zapamiętana przez `reorderable`
38
+ przeżywa ukrycie i pokazanie z powrotem.
39
+ - Wiersz paginatora dostał slot projekcji `[kptPaginatorActions]` po lewej stronie `kpt-paginator`
40
+ (który ma teraz `flex: 1 1 auto`, więc bez projekcji wygląda dokładnie jak dotąd) — miejsce na
41
+ kompaktowy przycisk obok paginatora.
42
+ - Ikona `adjustments-horizontal` doszła do wbudowanego rejestru, więc przycisk dostosowywania
43
+ kolumn nie wymaga `provideKptTablerIcons()`.
44
+
45
+ Przy okazji naprawione przestawianie kolumn: `reorderable` operowało na indeksie z pętli `@for`,
46
+ co po odfiltrowaniu kolumn ukrytych przestawiałoby niewłaściwą kolumnę. Teraz identyfikuje kolumny
47
+ po `field`.
48
+
49
+ Gotowe UI dostosowywania kolumn (przycisk, dialog z checkboxami, zapis w `localStorage`) żyje jako
50
+ przykład w playgroundzie — nie wchodzi do biblioteki.
51
+
52
+ ### Patch Changes
53
+
54
+ - Uzupełniona dokumentacja kontrolek `avatar`, `avatar-group`, `input-number`, `knob` i `slider`
55
+ (`llms.txt`) oraz poprawiony przykład w JSDoc `kpt-knob`.
56
+
57
+ Poprzedni przykład pokazywał `[formField]` razem z `[min]`/`[max]`, co jest błędem kompilacji:
58
+ pod `[formField]` zakres bierze się ze schematu (`min(path.level, 0)`, `max(path.level, 100)`),
59
+ a dyrektywa sama wstrzykuje go w wejścia. Jawne `[min]`/`[max]` należą do wariantu z `[(value)]`.
60
+ Sama implementacja bez zmian.
61
+
62
+ - Domknięcie dwóch bliźniaczych luk, których pierwszy audyt nie objął — znalezionych przy
63
+ ponownej weryfikacji już naprawionych funkcji.
64
+
65
+ - `renderMarkerHtml()` w mapie escapuje teraz również `shape`. Poprzednia poprawka objęła
66
+ `color` i `contrast`, ale `shape` — trzecie pole trafiające do sklejanego HTML — wciąż szło
67
+ surowo do atrybutu `class`, więc wartość z CMS-a czy API bez walidacji runtime mogła wyrwać się
68
+ z atrybutu tym samym mechanizmem. Trzy legalne wartości (`pin`, `dot`, `square`) nie zawierają
69
+ znaków specjalnych HTML, więc wygląd jest bez zmian.
70
+ - Tooltip wykresu wiązał kolor kropki przez `[style.background]` — shorthand akceptujący `url()` —
71
+ zasilany niewalidowanym `KptChartSeries.color`. Zamiana na `background-color`, czyli ten sam fix,
72
+ który wcześniej dostały `color-picker`, `meter-group`, `roadmap` i legenda mapy.
73
+
74
+ - Poprawki bezpieczeństwa z audytu: dwa krytyczne XSS, niebezpieczne publiczne API rejestru ikon
75
+ oraz CSV formula injection.
76
+
77
+ - `kpt-rich-text` zapisywał `value` wprost do `innerHTML` bez sanitizera wszędzie poza ścieżką
78
+ wklejania. Efekt synchronizujący sanityzuje teraz **każdy** zewnętrzny zapis wartości.
79
+ - `marker-html.ts` (mapa) wstawiał kolor kategorii surowo do atrybutu `style` — `colorVarOf`
80
+ i `foregroundVarOf` mają whitelistę `var(--kpt-*)`, co zamyka naraz wyrwanie się z atrybutu
81
+ i wstrzyknięcie CSS średnikiem.
82
+ - `KptIconRegistry.register()` przyjmował dowolny SVG jako string. Teraz sanityzuje do allowlisty
83
+ geometrii (`path`, `circle`, `rect`, `g`, `line`, `polygon`, `polyline`, `ellipse`) — bez zmian
84
+ dla zestawu wbudowanego i pełnego Tablera (5130 ikon), bo oba używają wyłącznie `<path>`.
85
+ - Eksport CSV z `kpt-data-table` poprzedza apostrofem komórki zaczynające się od `=`, `+`, `-`, `@`
86
+ (formula injection), a filtr `javascript:` w narzędziu linku, `normalizeUrl` w mapie i tła CSS
87
+ przyjmujące `url()` przeszły z blocklist na allowlisty schematów.
88
+
89
+ `escapeCsvCell`, `normalizeUrl` i nowy `sanitizeUrl` wydzieliły się do osobnych plików pure-TS,
90
+ żeby dało się je testować przez `node --test`.
91
+
92
+ Dla danych zgodnych z kontraktem zachowanie jest bez zmian. Dwa świadome wyjątki: URL bez schematu
93
+ dostaje prefiks `https://`, a komórki CSV zaczynające się od znaku formuły — wiodący apostrof.
94
+
3
95
  ## 0.7.6
4
96
 
5
97
  ### Minor Changes
@@ -612,7 +612,7 @@ function KptChartTooltip_Conditional_0_For_3_Template(rf, ctx) { if (rf & 1) {
612
612
  } if (rf & 2) {
613
613
  const row_r2 = ctx.$implicit;
614
614
  i0.ɵɵadvance();
615
- i0.ɵɵstyleProp("background", row_r2.color);
615
+ i0.ɵɵstyleProp("background-color", row_r2.color);
616
616
  i0.ɵɵadvance(2);
617
617
  i0.ɵɵtextInterpolate(row_r2.name);
618
618
  i0.ɵɵadvance(2);
@@ -673,7 +673,7 @@ class KptChartTooltip {
673
673
  }
674
674
  @for (row of t.rows; track $index) {
675
675
  <div class="kpt-chart__tooltip-row">
676
- <span class="kpt-chart__tooltip-dot" [style.background]="row.color"></span>
676
+ <span class="kpt-chart__tooltip-dot" [style.background-color]="row.color"></span>
677
677
  <span class="kpt-chart__tooltip-name">{{ row.name }}</span>
678
678
  <span class="kpt-chart__tooltip-val">{{ row.value }}</span>
679
679
  </div>