@appaflytech/zeyrek-ai-mcp 0.0.26 → 0.0.27

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.
@@ -358,15 +358,18 @@ export const componentKnowledge = {
358
358
  "SEÇİM İKİ YOLDAN YAZILIR, ikisi de self.selectedIndex'e: (1) satırın HERHANGİ bir yerine tıklama — her tıklamada `select`, satır değiştiyse önce `change`; (2) satırdaki bir çocuğun yaydığı olay (buton click, girdi change/focus…) — satır değiştiyse `change`. Yalnız text/image taşıyan kart da tıklamayla seçilir (2026-09-15'ten önce ancak olay yayan bir çocukla seçilebiliyordu). İSTİSNA: tıklamayı kendisi yutan etkileşimli çocuklar (dropdown-button, collapsible-container, tag-input, tarih seçici, dosya girdileri, tree-view, table) satıra ulaştırmaz — orada select gelmez, seçim yalnız o çocuk olay yayarsa change ile yazılır. Etikete tıklamak (switch/checkbox/radio) tek tıklama sayılır. Satırdaki butona tıklanınca akışların BAŞLAMA sırası: repeater `change` → butonun click akışı → repeater `select` (akışlar asenkron, bitiş sırası garanti değil); butonun akışında <repeater>.selectedIndex zaten o satırdır. Butonun akışı satırı SİLER ya da selectedIndex'e null yazarsa, ardından gelen select eski sırayla yayılır ve selectedIndex'i yeniden yazar — silme/temizleme akışını butona bağla, repeater'ın select'ine iş bağlama.",
359
359
  "SEÇİLİ SATIRIN VERİSİ `selectedItem`'dır (şema prop'u DEĞİL, runtime türetir): `{{ <repeater>.selectedItem.<alan> }}` ve akışta self.selectedItem. selectedIndex yazılmamışken İLK SATIRI (rows[0]) döndürür — 'henüz seçim yok' ile 'ilk satır seçili'yi ayırmak için selectedIndex'e bak (sayı değilse seçim yok). rows yenilenince selectedIndex SIFIRLANMAZ; eski sıra yeni listede başka satırı gösterebilir, gerekiyorsa sorgu akışında selectedIndex'i null yaz.",
360
360
  "rows dizi DEĞİLSE (henüz koşmamış sorgu, null yazan akış) liste boş çizilir, sayfa düşmez; aynı _id/id'yi taşıyan satırlar da çizilir AMA çocuk girdilerin satır başına değerleri o kimliğe göre tutulduğu için bu satırlar yazılan değeri PAYLAŞIR — girdi taşıyan kartlarda id'ler benzersiz olmalı. Boş liste için ayrı bir emptystate bileşeni koy ve isHidden'ını `{{ (<repeater>.rows || []).length > 0 }}` yap — repeater'ın kendi boş durum metni yok.",
361
- "Izgara: columnCount kolon (en az 1), kartlar arası dikey boşluk verticalSpacing (px, yazılmazsa 20), yatay boşluk horizontalSpacing (px, yazılmazsa 0). autoRowSize:false iken bütün satırlar EN UZUN kart kadar yüksek (1fr); true iken her satır kendi içeriği kadar. Boş/null boşluk varsayılana düşer."
361
+ "Izgara: columnCount kolon (en az 1; katalog varsayılanı 5, yazılmamış eski düğüm 1), kartlar arası dikey boşluk verticalSpacing (px; katalog varsayılanı 12, yazılmazsa 20), yatay boşluk horizontalSpacing (px; katalog varsayılanı 12, yazılmazsa 0). autoRowSize:false iken bütün satırlar EN UZUN kart kadar yüksek (1fr); true iken her satır kendi içeriği kadar. Boş/null boşluk varsayılana düşer.",
362
+ "KARTIN İÇİ container ailesiyle AYNI yedi yerleşim prop'uyla dizilir (2026-09-29): layout ('flex' | 'grid', katalog varsayılanı 'flex') + direction/horizontalAlign/verticalAlign/size/gap/wrap — anlamları container kaydındakiyle birebir; TEK FARK direction varsayılanının 'column' olması (kart dikey yığındır). Satır (row) akışında heightType:'fill' yalnız align-self:stretch'tir ve wrap açıkken kısa kart hücreyi doldurmaz — eşit boylu kartlar için column kullan. Her satırın kartı ayrı bir .ng-app__node-children sarmalıdır ve bu düzeni giyer; çocuklar blocks[].position sırasıyla (önce y, sonra x) akar ve flex çocuk sözleşmesini (appearance.widthType/heightType, spacer mode) alır. Kartların KENDİ dizilişi (kaç kolon, aralarındaki boşluk) hâlâ columnCount/verticalSpacing/horizontalSpacing'tir. layout prop'u hiç yazılmamış eski repeater'ın kartı 12 kolon ızgara kalır.",
363
+ "Studio'ya bırakılan YENİ repeater dolu doğar: 10 görselli örnek satır (id, image, title, category, price, description; satırda 5 kart, iki tam sıra) ve tek bir kart şablonu — tema yüzeyli bir container (layout flex, direction column, gap small; appearance widthType/heightType 'fill') içinde image (240px kapak), kategori, başlık (1 satır), açıklama (2 satır), esnek spacer (mode 'flex' — fiyatı ve butonu kartın tabanına iter), fiyat ('{{ item.price }} ₺') ve buton (kind 'info'). Şemayı sen kuruyorsan bu şablon GELMEZ: kartı children olarak yaz; kartın içindeki her parçaya appearance.widthType:'fill' ver — sütun akışında genişliği yazılmamış çocuk 12 kolon payına düşer ve o pay sütunda yükseklik anlamına gelir."
362
364
  ],
363
365
  propNotes: {
364
366
  surfaceStyle: NODE_SURFACE_NOTE,
365
367
  rows: "Yinelenen veri; çocuk komponent ifadelerinde satıra item / Row ile, satırın sırasına RowIndex ile (0'dan başlar) erişilir. Satırlara kalıcı bir id ya da _id ver: girilen değerler ve kart örnekleri ona göre eşlenir.",
366
368
  columns: "YALNIZ Studio'daki Rows düzenleyicisinin alanlarını tanımlar; runtime OKUMAZ. Kartta ne görüneceğini repeater'ın children'ı ve onların `{{ item.<alan> }}` ifadeleri belirler — columns yazmak kartı değiştirmez.",
367
- columnCount: 'Bir satırdaki kart sayısı (tam sayı, en az 1; 0/boş 1 sayılır).',
368
- verticalSpacing: 'Kart satırları arası boşluk, px. Yazılmazsa 20 (şema varsayılanı; 2026-09-15 öncesi yazılmamış düğüm 0 çiziyordu).',
369
- horizontalSpacing: 'Yan yana kartlar arası boşluk, px. Yazılmazsa 0.',
369
+ columnCount: 'Bir satırdaki kart sayısı (tam sayı, en az 1; 0/boş 1 sayılır). Katalog varsayılanı 5 (2026-09-29).',
370
+ verticalSpacing: 'Kart satırları arası boşluk, px. Yazılmazsa 20 (bileşen varsayılanı; 2026-09-15 öncesi yazılmamış düğüm 0 çiziyordu); yeni düğümün katalog varsayılanı 12 (2026-09-29).',
371
+ horizontalSpacing: 'Yan yana kartlar arası boşluk, px. Yazılmazsa 0; katalog varsayılanı 12 (2026-09-29).',
372
+ layout: "KARTIN İÇİ: 'flex' (katalog varsayılanı; akış) | 'grid' (12 kolonluk ızgara). Prop hiç yazılmamışsa renderer IZGARA çizer. Diğer altı yerleşim prop'u yalnız 'flex' iken etkilidir; anlamları container kaydındakiyle aynı.",
370
373
  selectedIndex: "Tıklanan/olay yayan satırın sırası (0'dan). Runtime `change` ve `select` ile yazar; akışta self.selectedIndex, başka bileşende `{{ <repeater>.selectedIndex }}`. Şemada gizli durum prop'udur (panelde çizilmez); akış yazarak seçimi değiştirebilir ya da null yazıp temizleyebilir. Seçili satırın verisi için behavior'daki selectedItem maddesine bak."
371
374
  }
372
375
  },
@@ -1196,9 +1199,9 @@ export const componentKnowledge = {
1196
1199
  }
1197
1200
  },
1198
1201
  navigations: {
1199
- summary: "Çok seviyeli gezinme menüsü. 2026-08-27'de araç kutusuna alındı; 2026-09-22'de TEK AĞAÇ · 12 DÜZEN modeline geçti (layout prop'u): sidebar, header, hybrid (header+sidebar), dual (rail+panel), bottom (alt sekme çubuğu), dock, tabs, breadcrumb, command (komut paleti), launcher, footer, toc (içindekiler). Aynı navigations ağacı hepsinde kullanılır.",
1202
+ summary: "Çok seviyeli gezinme menüsü. 2026-08-27'de araç kutusuna alındı; 2026-09-22'de TEK AĞAÇ · 12 DÜZEN modeline geçti (navLayout prop'u — 2026-09-29'a kadar adı layout idi): sidebar, header, hybrid (header+sidebar), dual (rail+panel), bottom (alt sekme çubuğu), dock, tabs, breadcrumb, command (komut paleti), launcher, footer, toc (içindekiler). Aynı navigations ağacı hepsinde kullanılır.",
1200
1203
  behavior: [
1201
- "layout prop'u hangi KABUĞUN çizeceğini seçer; seçim tipli bir kayıttan yapılır (components/navigations/navigation-layouts/). Tanınmayan ya da temizlenmiş (null) bir değer sidebar'a düşer — ekran boş kalmaz.",
1204
+ "navLayout prop'u hangi KABUĞUN çizeceğini seçer; seçim tipli bir kayıttan yapılır (components/navigations/navigation-layouts/). Tanınmayan ya da temizlenmiş (null) bir değer sidebar'a düşer — ekran boş kalmaz.",
1202
1205
  "variant 'drawer' bir düzen DEĞİL sidebar/hybrid'in menü tipidir ve kendi kabuğunu çağırır (tetikleyici + karartma + örtü katmanı); içindeki satırların düz mü akordiyon mu olduğunu drawerContent söyler.",
1203
1206
  "Derin seviyeler nestingMode ile açılır: 'inline' yerinde ağaç, 'drill' panel içinde panel (drillHeader üç biçimde), 'cascade' sidebar'da kademeli flyout / drawer'da drawer-içinde-drawer. inlineDepth bir panelde yerinde gösterilen seviye sayısıdır.",
1204
1207
  "Bazı prop bileşimlerinin ekranda karşılığı yoktur ve ÇİZİM ANINDA zorlanır (navigation-effective.ts): drawerSide 'bottom' iken cascade → drill ve push → overlay; fullscreen + cascade → üst üste; ≤768px'te sidebar/header/hybrid/dual/dock drawer'a döner (mobileBehavior 'drawer' ise) ve hover ile açma kapanır.",
@@ -1212,13 +1215,15 @@ export const componentKnowledge = {
1212
1215
  "Daraltma durumu tarayıcıda (localStorage, 'ng-nav-collapsed:<elementId>') saklanır ve SONRAKİ SAYFADA okunur — menü linkleri tam sayfa yüklediği için bellekteki durum her tıklamada kayboluyordu. Tuvalde okunmaz.",
1213
1216
  "Menü içi arama bir ALAN gibi çizilir (kenarlık + açık zemin + '/' ipucu); sayfada yazı alanı dışındayken '/' aramaya odaklanır (kısayolun sayfada tek sahibi vardır). command düzeninin tetikleyicisi de alan görünümündedir ve Ctrl K / ⌘ K ipucu taşır; iki yerde de yer tutucu searchPlaceholder'dır.",
1214
1217
  "KAPSAYICIDIR (isDroppable, 2026-09-24): layout gibi içine komponent bırakılır ve bırakılan çocuklar menünün YANINDA/ALTINDA kendi içerik alanında çizilir, menü satırlarının arasında değil. Akış yönünü düzen belirler (navigation-content.ts): sidebar/hybrid/dual menü solda içerik sağda — sidebarSide right ise ters; toc tocPosition ile; header/tabs/breadcrumb içerik altta; footer/bottom ve dock bottom içerik üstte (dock top altta); drawer/command/launcher akışta yer kaplamaz, içerik alanı tek başına kalır. İçerik alanı navigations dizisi BOŞKEN de durur — son menü öğesi silinince bırakılan bileşenler kaybolmaz. İçine hiçbir şey bırakılmamışsa alan akıştan çıkar (menünün yanına boşluk düşmez); kenara yapışık panelde (sidebar/hybrid/dual, floating değil) menü ile içerik arasında boşluk YOKTUR, panelin kenarlığı ayırır. Bırakılan içerik alanın boyunu doldurur (fill zinciri) — yan menü + içerik sütunu kabuğu tek navigations ile kurulabilir. Kanvasta çocukların çizilmesi için kayıtlı düğümde states.isDroppable true olmalı.",
1218
+ "İÇERİK ALANININ YERLEŞİMİ container ailesiyle AYNI yedi prop'tur (2026-09-29): layout ('flex' | 'grid', katalog varsayılanı 'flex') + direction/horizontalAlign/verticalAlign/size/gap/wrap, anlamları ve varsayılanları container kaydındakiyle birebir. Bunlar menüyü DEĞİL, menünün yanına bırakılan çocukları dizer (RenderComponent içerik alanındaki .ng-app__node-children sarmalına yazar). Menünün kendi biçimi navLayout, satır yoğunluğu density'dir. layout prop'u 'flex'/'grid' dışında bir değer taşıyan (ya da hiç taşımayan) düğümün içerik alanı 12 kolon IZGARA çizilir.",
1219
+ "YENİDEN ADLANDIRMA (2026-09-29, ADR 0007): menü düzeni layout → navLayout, satır yoğunluğu size → density. Kayıtlı eski düğümler göç görmedi: navLayout yoksa bileşen eski layout değerini (sidebar/header/… ise) düzen sayar, density yoksa eski size'ı (sm/md/lg ise) — ekranda değişiklik olmaz. AMA backend doğrulayıcısı eski değerli düğüme DOKUNAN patch'i invalid-enum-value ile reddeder (layout artık flex|grid, size shrink|grow): böyle bir düğümü düzenlerken aynı patch'te navLayout'a eski layout değerini, density'ye eski size değerini yaz ve layout'u 'grid' (eski görünüm) ya da 'flex', size'ı 'shrink' yap.",
1215
1220
  "sidebar ve layout bileşenleri bu ağacı GÖMÜLÜ kipte mount eder (embedded): panel kromunu — genişlik, kenarlık, zemin, logo, kullanıcı alanı — o kabuklar çizer, navigations ikinci kez çizmez.",
1216
1221
  "Satır görünümü TİPLİ navigationStyle grubuyla verilir (layout ile aynı grup); serbest style'ın &__item, &__item--active ve &__icon parçaları gruptan SONRA gelir (son söz).",
1217
- 'Karar kaydı: zeyrek-frontend/docs/adr/0001-navigation-duzen-kaydi.md.'
1222
+ 'Karar kayıtları: zeyrek-frontend/docs/adr/0001-navigation-duzen-kaydi.md (düzen kaydı), 0007-navigation-duzen-proplari-yeniden-adlandirildi.md (navLayout/density adları).'
1218
1223
  ],
1219
1224
  propNotes: {
1220
1225
  navigations: "Ağaç: { title, href, icon, isHidden, isExpandable, isExpanded, children } + görünüm alanları { badge, badgeTone, isDisabled, target }. Alan adları kaydedilmiş sayfaların sözleşmesidir ve değişmedi. href düz metin ya da bağlantı seçicisinin nesnesi ({ type:'page', data, ref }) olabilir; ikisini de getHref çözer.",
1221
- layout: "Navigasyonun ekrandaki yeri ve biçimi; 12 seçenek. Kabuk seçimini bu prop yapar — tek istisna, sidebar ve hybrid düzenlerinde drawer menü tipinin kendi kabuğunu çağırmasıdır (bkz. variant).",
1226
+ navLayout: "Navigasyonun ekrandaki yeri ve biçimi; 12 seçenek (2026-09-29'a kadar prop'un adı layout idi). Kabuk seçimini bu prop yapar — tek istisna, sidebar ve hybrid düzenlerinde drawer menü tipinin kendi kabuğunu çağırmasıdır (bkz. variant).",
1222
1227
  variant: "Menü tipi: 'flat' (alt öğeler hep açık), 'accordion' (açılır/kapanır), 'drawer' (tetikleyiciyle açılan panel). Yalnız sidebar ailesinde anlamlıdır.",
1223
1228
  displayMode: "'full' ikon+metin · 'rail' yalnız ikon (alt seviyeler kademeli flyout) · 'text' yalnız metin.",
1224
1229
  nestingMode: "Derin seviyeler nasıl açılır: 'inline' | 'drill' | 'cascade'. Rail'de her zaman cascade'e zorlanır.",
@@ -1296,7 +1301,7 @@ export const componentKnowledge = {
1296
1301
  showFooter: "Panelin alt bandı (kullanıcı alanı vb.). Kapatılırsa liste panelin dibine kadar uzar.",
1297
1302
  showBadges: "Öğelerin badge alanını çizer. Rail modunda rozetin yazacak yeri olmadığı için sayı tek bir NOKTAYA iner.",
1298
1303
  tooltips: "Yalnız ikon görünen satırlarda üzerine gelince adı balonla gösterir. Rail’de ve daraltılabilir panelde anlamlıdır; etiketin zaten göründüğü yerde basılmaz.",
1299
- size: "Yoğunluk kademesi: 'sm' | 'md' | 'lg'. Tek bir prop satır yüksekliğini, yazı boyutunu, satır dolgusunu ve ikon-metin boşluğunu birlikte değiştirir (navigation-tokens.ts ROW_HEIGHTS/FONT_SIZES/ROW_PADDINGS/ROW_GAPS) — bunlar ayrı ayrı ayarlanmaz.",
1304
+ density: "Yoğunluk kademesi: 'sm' | 'md' | 'lg' (2026-09-29'a kadar prop'un adı size idi). Tek bir prop satır yüksekliğini, yazı boyutunu, satır dolgusunu ve ikon-metin boşluğunu birlikte değiştirir (navigation-tokens.ts ROW_HEIGHTS/FONT_SIZES/ROW_PADDINGS/ROW_GAPS) — bunlar ayrı ayrı ayarlanmaz.",
1300
1305
  radius: "Satırın köşe yuvarlaklığı (px, 0–24). SIFIR verildiğinde satırın dış boşluğu da sıfırlanır ve satır panelin kenarına dayanır — yuvarlak köşeli bir satırın kenara yapışması tasarımın istemediği tek durumdur.",
1301
1306
  indent: "Bir seviyenin girintisi (px, 8–48). maxIndent’e kadar her seviye bu kadar içeri alınır, sonrası 12px’lik küçük adımlara döner. Rail’de girinti çizilecek yer yoktur.",
1302
1307
  itemGap: "Satırlar arası dikey boşluk (px, 0–16). Kök listeye ve her çocuk listesine birlikte uygulanır; satır yüksekliğini değiştirmez (onu size belirler).",
@@ -1316,7 +1321,14 @@ export const componentKnowledge = {
1316
1321
  activeBgColor: "Aktif satırın zemini. activeIndicator hangisi olursa olsun geçerlidir — \"bar\"/\"pill\"/\"text\" kendi tonlarını yazar ama AÇIK seçimini ezmez (--ng-nav-active-bg-set).",
1317
1322
  activeTextColor: "Aktif satırın yazı rengi. activeBgColor ile aynı kural: gösterge biçimi bunu ezmez.",
1318
1323
  hoverColor: "Fare üzerindeyken satırın zemini. \"bar\" göstergesi aktif satırın zemini olarak da bunu kullanır.",
1319
- borderColor: "Panel kenarlığı, grup ayraçları ve kılavuz çizgilerinin ortak rengi."
1324
+ borderColor: "Panel kenarlığı, grup ayraçları ve kılavuz çizgilerinin ortak rengi.",
1325
+ layout: "İÇERİK ALANI yerleşimi: 'flex' (katalog varsayılanı; akış) | 'grid' (12 kolonluk ızgara). Menüyü değil bırakılan çocukları dizer; anlamı container kaydındakiyle aynı. Menünün düzeni navLayout'tur.",
1326
+ direction: "İçerik alanı flex yönü: 'row' (varsayılan) | 'column'. Yalnız flex yerleşimde okunur; container ile aynı.",
1327
+ horizontalAlign: 'left | center | right | stretch — içerik alanı; container ile aynı eksen kuralları.',
1328
+ verticalAlign: 'top | middle | bottom | stretch — içerik alanı; container ile aynı eksen kuralları.',
1329
+ size: "İçerik alanı çocuk boyu: 'shrink' (varsayılan) | 'grow'. Satır yoğunluğu DEĞİLDİR — o density'dir (2026-09-29'a kadar size yoğunluktu).",
1330
+ gap: 'none | small | medium (varsayılan) | large ya da ham CSS değeri — içerik alanı çocukları arası; container ile aynı.',
1331
+ wrap: 'İçerik alanında flex-wrap; varsayılan açık, container ile aynı.'
1320
1332
  }
1321
1333
  },
1322
1334
  'layout-shell': {
@@ -1910,7 +1910,7 @@ export const FLEX_LAYOUT_PROP_NAMES = new Set(['layout', ...Object.keys(FLEX_LAY
1910
1910
  * `icon` gibi komponentlerin KENDİ `size` prop'u flex `size`'ı değildir ve dokuz komponent için
1911
1911
  * yanlış uyarı üretiyordu (09-04 Y-08).
1912
1912
  */
1913
- const FLEX_LAYOUT_HOST_TYPES = new Set(['aibox', 'box', 'box-section', 'container', 'page-container', 'form', 'layout', 'widget-area']);
1913
+ const FLEX_LAYOUT_HOST_TYPES = new Set(['aibox', 'box', 'box-section', 'container', 'page-container', 'form', 'layout', 'widget-area', 'repeater', 'navigations']);
1914
1914
  /**
1915
1915
  * Eski `cssgrid` (box/aibox'ın akan gerçek `display:grid` kipi; 2026-09-02'de seçenek olmaktan
1916
1916
  * çıktı, kayıtlı düğümlerde çalışmaya devam ediyor) düzen prop'larının HEPSİNİ ölü yapmaz:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appaflytech/zeyrek-ai-mcp",
3
- "version": "0.0.26",
3
+ "version": "0.0.27",
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",