@appaflytech/zeyrek-ai-mcp 0.0.14 → 0.0.16

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.
@@ -29,6 +29,14 @@ component_get → tek tipin TAM sözleşmesi, üç katman birleşik:
29
29
  - **Boyut:** `blocks[].size` katalogdaki `maxSize`'ı aşamaz; yükseklikte
30
30
  `appearance.heightType: 'auto'` tercih edilir. Katalog varsayılanı bazı tiplerde kendi
31
31
  sınırını aşar — körü körüne kopyalama, gateway kırpar ve bildirir.
32
+ - **Çocuk tarafı flex sözleşmesi — `mode: 'flex'` (2026-09-18):** flex kapta kalan alanı alan
33
+ öğe komponent değil onu taşıyan düğüm sarmalayıcısıdır ve sarmalayıcının `flex`i ortak
34
+ katmanda yazılır. `mode` prop'u `'flex'` olan bir çocuk (bugün yalnız `spacer`) kabın ANA
35
+ ekseninde kalanı ister: sütunda kalan yükseklik, satırda kalan genişlik, sıfır taban (wrap
36
+ açıkken satırdan düşmez). `appearance.widthType`/`heightType`'tan bağımsızdır ve ana
37
+ eksende onları yener; kabın ölçüsü o eksende belirli olmalıdır (auto/hug sütunda kalan
38
+ alan yoktur). Komponentin kendi `style`'ından istenemez — `style`'a `flex` yazma tablosuna
39
+ bkz. aşağıda.
32
40
 
33
41
  ### Arayüz metni ve biçimler uygulama dilini izler
34
42
 
@@ -93,8 +93,9 @@ mümkündür ama doğrulama duvarı ve canlı canvas yalnız `page_schema_patch`
93
93
  komponentin iç kimliğidir (aşağıda Kural 2, `FLOW-018`).
94
94
 
95
95
  - **`blocks[].size`'ı komponentin `component_get`'teki `minSize`..`maxSize` aralığında tut.** Dikkat:
96
- katalog varsayılanı aşabiliyor (`page-header` default `h:8`, `maxSize` `h:4`) — varsayılanı körü
97
- körüne kopyalama. Sınır grid kanvasının kuralıdır; API 2026-09-15'ten beri reddetmez, ama aşan
96
+ katalog varsayılanı aşabiliyor (`datepicker` default `h:8`, `maxSize` `h:5`; 18 şemada aynı
97
+ durum, liste zeyrek-frontend `docs/issues.md` ARC-013 — `page-header` 2026-09-18'de sınırı
98
+ 12'ye açarak çıktı) — varsayılanı körü körüne kopyalama. Sınır grid kanvasının kuralıdır; API 2026-09-15'ten beri reddetmez, ama aşan
98
99
  blok kanvasta boyutlandırılamaz (aşağıda Kural 7 "Boyut tuzağı").
99
100
  - **Kurulmuş bir düğümün boyutunu `resize_component` micro-op'u değiştirir.**
100
101
  `{ op: 'resize_component', target: '<elementId>', size: { w, h } }` ızgara boyutunu,
@@ -159,8 +160,9 @@ Sayfa açılışında veri çekmek için `mount` kullanılır ama tek seçenek o
159
160
 
160
161
  Yani "satırı seçince detay getir" (`select`), "kolondan süzünce sunucudan yeniden çek"
161
162
  (`filter`), "sayfa değişince yeni sayfayı çek" (`pagination`), "satıra çift tıklayınca formu aç"
162
- (`doubleClick`) akışları da aynı `set_event` mekanizmasıyla kurulur. Buna karşılık `page-header`
163
- ve `datatable` yalnız `mount` yayar (`datatable`'ınki bilinçli — Kural 1e).
163
+ (`doubleClick`) akışları da aynı `set_event` mekanizmasıyla kurulur. Buna karşılık `datatable`
164
+ yalnız `mount` yayar (bilinçli — Kural 1e); `page-header` 2026-09-18'den beri izdeki öğe
165
+ tıklamasını `clickItem` olarak yayar (`component_get` yükü verir).
164
166
 
165
167
  **Olay adları `on` ÖNEKİ ALMAZ** (`button` → `click`, `form` → `submit`), tek istisna katalogda
166
168
  `texteditor`'dur (`onMount`/`onChange`). **Komponentin desteklemediği bir olay adı verirsen bağ
@@ -197,12 +199,14 @@ olaylarında **boştur** (ölçüm 2026-08-25, kaynak okuması: `flow-machine.ts
197
199
  Pratik kural: **`payload` anahtarları aynı zamanda prop adlarıdır; akışta `self.<anahtar>` ile
198
200
  oku** (ya da `value { type:'property', ref:{ source:'component', element, property } }` ile).
199
201
  `event.data` yalnız `params` ile gelen olaylarda dolar — `html` komponentinin `fireEvent`
200
- aksiyonları (`platform_guide('html')`) ve **2026-08-27 kuşağı komponentler** (`eventcalendar` ·
201
- `importwizard` · `kanban` · `signature` · `stepper`): bu kuşak `params`'ı da gönderir, yani
202
- yükleri `event.data.<anahtar>` ile okunur; `kanban` ve `eventcalendar` yükü `self`'e HİÇ
203
- yazmaz (`component_get` çıktısındaki sözleşme notları ayrımı söyler). Sessiz hata örneği:
204
- sayfalama akışını `event.data.limit`'e bağlarsan sorgu `LIMIT null OFFSET null` ile koşar ve
205
- **tüm satırları** döndürür; hata yok, sayfalama yok.
202
+ aksiyonları (`platform_guide('html')`) ve **`params`'ı da gönderen komponentler**
203
+ (`eventcalendar` · `importwizard` · `kanban` · `signature` · `stepper` · `tabs` ·
204
+ `tree-view` · `pagination`): bunların yükü `event.data.<anahtar>` ile de okunur; `kanban` ve
205
+ `eventcalendar` yükü `self`'e HİÇ yazmaz (`component_get` çıktısındaki sözleşme notları ayrımı
206
+ söyler). Sessiz hata örneği: **tablonun kendi** sayfalama akışını (`table.pagination`)
207
+ `event.data.limit`'e bağlarsan sorgu `LIMIT null OFFSET null` ile koşar ve **tüm satırları**
208
+ döndürür; hata yok, sayfalama yok. (Bağımsız `pagination` komponenti bu tuzağa girmez, yükünü
209
+ `params` ile de gönderir.)
206
210
 
207
211
  | Komponent · olay | Yük (aynı zamanda prop adları) | Akışta nereden okunur |
208
212
  |---|---|---|
@@ -212,16 +216,18 @@ sayfalama akışını `event.data.limit`'e bağlarsan sorgu `LIMIT null OFFSET n
212
216
  | `table.select` · `doubleClick` | — | `self.selectedRow` |
213
217
  | `table.selectionChange` | — | `self.selectedRows` |
214
218
  | `datatable.mount` | — | `self.filters` · `self.sortField` · `self.sortType` · `self.offset` |
215
- | `pagination.change` | `{ offset, limit }` | `self.offset` · `self.limit` |
219
+ | `pagination.change` | `{ offset, limit }` | `self.offset` · `self.limit` ya da `event.data.offset` · `event.data.limit` |
216
220
  | `textinput/textarea/password.change` | `{ value }` | `self.value` |
217
221
  | `dropdown.change` · `multi-select.change` | `{ value }` | `self.value` |
218
222
  | `dropdown.search` · `multi-select.search` | `{ searchText }` | `self.searchText` |
219
- | `tabs.tab` | `{ selected }` | `self.selected` |
223
+ | `tabs.tab` | `{ selected }` | `self.selected` ya da `event.data.selected` |
220
224
  | `chart.dataPointClick` | `{ name, seriesName, value, dataIndex, row }` | `self.row` (kaynak satırın tamamı) |
221
- | `repeater.change` | `{ selectedIndex }` | `item` / `Row` satır bağlamı |
225
+ | `repeater.change` · `repeater.select` | `{ selectedIndex }` | `self.selectedIndex` · `self.selectedItem` (akış satır bağlamında koşmaz, `item`/`Row` boş) |
222
226
  | `html` aksiyonu (`fireEvent`) | ikinci argüman | **`event.data`** |
223
227
  | `kanban.cardMove` | `{ id, row, from, to }` | **`event.data`** (self'e yazılmaz) |
228
+ | `kanban.cardAdd` · `kanban.cardRemove` | `{ column }` · `{ id, row, column }` | **`event.data`** (self'e yazılmaz; kart eklenmez/gizlenmez, akış yazıp `rows`'u tazeler) |
224
229
  | `eventcalendar.eventMove` | `{ id, row, start, end, previousStart, previousEnd }` | **`event.data`** (self'e yazılmaz) |
230
+ | `eventcalendar.monthChange` · `eventcalendar.viewChange` · `eventcalendar.eventCreate` | `{ month, year, view, start, end }` · `{ view, start, end }` · `{ start, end, allDay }` | **`event.data`** (self'e yazılmaz; veri sorgusunu kesişimle bağla: başlangıç < `end`+1 gün ve bitiş >= `start`) |
225
231
  | `importwizard.complete` | `{ rows, errors, fileName, total }` | `self.rows`… ya da `event.data` |
226
232
  | `stepper.stepChange` | `{ currentStep, previous }` | `self.currentStep` ya da `event.data` |
227
233
  | `signature.change` | `{ value }` | `self.value` ya da `event.data.value` |
@@ -1310,7 +1316,7 @@ budur — bir preset ya da `componentStyles` sizin değerinizi eziyorsa `styleLa
1310
1316
  | Değişiklik | Tool | Neden |
1311
1317
  |---|---|---|
1312
1318
  | Komponent ekle/sil/taşı, prop, binding, event | `page_schema_patch` | Doğrulama duvarı + açık Studio canvas'ına SignalR canlı yayını + eşzamanlı yazar kilidi yalnız bu yolda çalışır |
1313
- | Ad, slug, browserTitle, `browserTitleKey`, layout, roller, middleware | `page_update` | Üstbilgi alanları micro-op sözlüğünde yok. `browserTitleKey` sekme başlığını çeviri anahtarına bağlar: verilirse başlık sözlükten çözülür, boşsa `browserTitle` kullanılır. Başlık sayfa yüklenirken çözülür ve canlı dil değişimini izlemez (`platform_guide('translation')`) |
1319
+ | Ad, slug, browserTitle, `browserTitleKey`, layout, roller, middleware | `page_update` | Üstbilgi alanları micro-op sözlüğünde yok. `browserTitleKey` sekme başlığını çeviri anahtarına bağlar: verilirse başlık sözlükten çözülür, boşsa `browserTitle` kullanılır. Başlık canlı dil değişimini izler; anahtarın o dilde değeri yoksa varsayılan dile düşer (`platform_guide('translation')`) |
1314
1320
 
1315
1321
  Platformun `PUT /pages/...` ucu **replace**'tir: gönderilmeyen `schema`/`events`/`roleIds`
1316
1322
  alanları silinir. Gateway bu yüzden `page_update`'te sayfayı önce okur, yalnız verdiğin
@@ -1825,7 +1831,7 @@ bağlanır, filtre `source:'expression'` + `value:'user.id'` olur.
1825
1831
  | Kimlik alanları | `email` · `password` |
1826
1832
  | Dosya | `fileUpload` (dropzone) · `fileInput` · `filebutton` · `file-viewer` |
1827
1833
  | Liste | `table` · `datatable` (Kural 1e) · `repeater` (kart listesi VE dinamik form — Kural 1g) · `tree-view` (hiyerarşi; `isSearchable` ile istemci içi arama) · `timeline` (tarihli olay akışı) |
1828
- | Pano / takvim | `kanban` (durum kolonlarında sürüklenebilir kartlar; taşıma `cardMove` ile `event.data`'dan okunur, kalıcılık AKIŞIN işidir) · `eventcalendar` (ay/hafta/gün; veri `rows`'a akışla yazılır, `monthChange` tazeleme kancasıdır, `month` 1-tabanlı) |
1834
+ | Pano / takvim | `kanban` (durum kolonlarında sürüklenebilir kartlar; taşıma `cardMove` ile `event.data`'dan okunur, kalıcılık AKIŞIN işidir) · `eventcalendar` (ay/hafta/gün/ajanda; veri `rows`'a akışla yazılır, `monthChange`/`viewChange` görünen `start`/`end` aralığıyla tazeleme kancasıdır) |
1829
1835
  | Kayıt detayı | `detailview` — tek kaydı etiket/değer ızgarası basar (alan başına format, iç içe alan yolu); OLAY YAYMAZ, tıklanabilirlik gerekiyorsa kapsayıcıya sar |
1830
1836
  | Adımlı akış | `stepper` — tabs gibi her adım kendi droppable görünümünü taşır; ileri gidiş `canProceed` kapısıyla (`{{ form1.isValid === true }}` biçimi), adım `currentStep` setter'ıyla sürülür |
1831
1837
  | İmza / CSV içe aktarma | `signature` (değer PNG data-URL ya da ham SVG; `change` setter'lı) · `importwizard` (3 adımlı sihirbaz; temiz+hatalı satırlar `complete` yükünde — satırları uca yazmak akışın işidir) |
@@ -175,11 +175,10 @@ motor olmasıdır (tarayıcı JS'i ve Jint).
175
175
  verilmişse sekme başlığı çeviri sözlüğünden çözülür; anahtar boşsa `browserTitle` olduğu gibi
176
176
  kullanılır. İkisi de boşsa sayfa adı yazılır.
177
177
 
178
- > **Sekme başlığı SAYFA YÜKLENİRKEN çözülür, canlı dil değişimini İZLEMEZ.** Ölçüldü 2026-09-08
179
- > (yerel runtime): `language-selector` ile dil değiştirildiğinde sayfa içeriği ve layout başlığı
180
- > anında yeni dile geçiyor, sekme başlığı ise açılıştaki dilde kalıyor; aynı dille sayfa yeniden
181
- > yüklendiğinde başlık doğru geliyor. Sebep `Runtime.svelte`'te dilin bir `const` olarak bir kez
182
- > çözülmesi. Sekme başlığının dilini doğrulayacaksan **yeniden yükleyerek** doğrula.
178
+ > **Sekme başlığı canlı dil değişimini İZLER.** `language-selector` ile dil değiştirildiğinde
179
+ > sayfa içeriğiyle birlikte sekme başlığı da yeni dilde çözülür; yeniden yükleme gerekmez
180
+ > (ölçüldü 2026-09-11). Anahtarın seçilen dilde değeri yoksa projenin varsayılan diline düşer.
181
+ > 2026-09-08 ölçümündeki "açılıştaki dilde kalır" davranışı düzeltildi.
183
182
 
184
183
  ## Doğrulama mesajları: `t:` öneki
185
184
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appaflytech/zeyrek-ai-mcp",
3
- "version": "0.0.14",
3
+ "version": "0.0.16",
4
4
  "type": "module",
5
5
  "description": "Zeyrek (NgApps) platform APIs as MCP tools — data, logic and Studio design surface in one gateway",
6
6
  "license": "UNLICENSED",