@appaflytech/zeyrek-ai-mcp 0.0.28 → 0.0.31

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 (203) hide show
  1. package/.env.example +15 -0
  2. package/README.md +5 -5
  3. package/dist/config.js +37 -0
  4. package/dist/index.js +2 -0
  5. package/dist/knowledge/access.js +802 -0
  6. package/dist/knowledge/backendConstraints.js +18 -1
  7. package/dist/knowledge/case.js +41 -0
  8. package/dist/knowledge/componentCatalog.js +500 -35
  9. package/dist/knowledge/componentEvents.js +132 -7
  10. package/dist/knowledge/connectDataBind.js +819 -0
  11. package/dist/knowledge/connectDataDefinition.js +341 -0
  12. package/dist/knowledge/connectDataExecute.js +93 -0
  13. package/dist/knowledge/connectDataRules.js +128 -0
  14. package/dist/knowledge/decision.js +121 -0
  15. package/dist/knowledge/expressionPrelude.js +59 -0
  16. package/dist/knowledge/layoutSummary.js +140 -2
  17. package/dist/knowledge/microserviceParameters.js +58 -0
  18. package/dist/knowledge/mining.js +94 -0
  19. package/dist/knowledge/mobileComponentCatalog.js +859 -0
  20. package/dist/knowledge/mobileComponentEvents.js +239 -0
  21. package/dist/knowledge/normalize.js +236 -67
  22. package/dist/knowledge/outlines.js +36 -0
  23. package/dist/knowledge/platform/lint.js +385 -0
  24. package/dist/knowledge/platform/mobile.js +142 -0
  25. package/dist/knowledge/platform/mobileLayoutLint.js +324 -0
  26. package/dist/knowledge/platform/mobileRules.js +231 -0
  27. package/dist/knowledge/platform/mobileSpacing.js +82 -0
  28. package/dist/knowledge/platform/mobileTabs.js +108 -0
  29. package/dist/knowledge/platform/nativeBoxModel.js +44 -0
  30. package/dist/knowledge/platform/profile.js +25 -0
  31. package/dist/knowledge/platform/resolve.js +122 -0
  32. package/dist/knowledge/platform/web.js +39 -0
  33. package/dist/knowledge/policy.js +18 -4
  34. package/dist/knowledge/process.js +510 -0
  35. package/dist/knowledge/reservedTables.js +79 -0
  36. package/dist/knowledge/rowFilter.js +43 -0
  37. package/dist/knowledge/rules.js +366 -21
  38. package/dist/knowledge/schemaGuard.js +11 -0
  39. package/dist/knowledge/styleResolve.js +50 -4
  40. package/dist/knowledge/styleResolveNative.js +527 -0
  41. package/dist/knowledge/themeResolve.js +3 -3
  42. package/dist/observability/trace.js +6 -3
  43. package/dist/platform/argumentAliases.js +128 -0
  44. package/dist/platform/bodyFile.js +103 -0
  45. package/dist/platform/capture/actions.js +333 -0
  46. package/dist/platform/capture/browser.js +1 -0
  47. package/dist/platform/{screenshot.js → capture/capture.js} +105 -519
  48. package/dist/platform/capture/console-log.js +122 -0
  49. package/dist/platform/capture/index.js +11 -0
  50. package/dist/platform/capture/readiness.js +103 -0
  51. package/dist/platform/capture/summary.js +77 -0
  52. package/dist/platform/capture/target.js +5 -0
  53. package/dist/platform/capture/targets/studio-mobile.js +15 -0
  54. package/dist/platform/capture/targets/studio-web.js +5 -0
  55. package/dist/platform/diagnostics.js +10 -4
  56. package/dist/platform/domSummary.js +1 -1
  57. package/dist/platform/errors.js +162 -10
  58. package/dist/platform/http.js +29 -8
  59. package/dist/platform/impersonation.js +45 -0
  60. package/dist/platform/jsonArray.js +24 -0
  61. package/dist/platform/responses.js +39 -5
  62. package/dist/platform/schemaReadMemory.js +60 -0
  63. package/dist/platform/secrets.js +17 -1
  64. package/dist/platform/strictArguments.js +68 -12
  65. package/dist/platform/tokenVault.js +187 -4
  66. package/dist/resources/examples/bpm-gorev-kontrol.json +294 -0
  67. package/dist/resources/examples/bpm-iso-dokuman.json +228 -0
  68. package/dist/resources/examples/bpm-satinalma.json +376 -0
  69. package/dist/resources/examples/connect-data-convert-verify.json +107 -0
  70. package/dist/resources/examples/connect-data-dropdown-roles.json +66 -0
  71. package/dist/resources/examples/connect-data-edit-m2m.json +73 -0
  72. package/dist/resources/examples/connect-data-query-params.json +50 -0
  73. package/dist/resources/examples/connect-data-table-entity.json +147 -0
  74. package/dist/resources/examples/connect-data-workflow-microservice.json +65 -0
  75. package/dist/resources/examples/middleware-authenticate.json +1 -1
  76. package/dist/resources/examples/mobile-app-shell-drawer.json +243 -0
  77. package/dist/resources/examples/mobile-app-shell-stack.json +157 -0
  78. package/dist/resources/examples/mobile-app-shell-tab.json +208 -0
  79. package/dist/resources/examples/mobile-form-screen.json +365 -0
  80. package/dist/resources/examples/mobile-list-detail-form.json +672 -0
  81. package/dist/resources/examples/page-detail-profile.json +2 -1
  82. package/dist/resources/examples/page-dynamic-form.json +3 -2
  83. package/dist/resources/examples/page-flex-sections.json +1 -1
  84. package/dist/resources/examples/page-html-embed.json +1 -1
  85. package/dist/resources/examples/workflow-basic.json +8 -2
  86. package/dist/resources/guides/access.md +810 -0
  87. package/dist/resources/guides/bpm.md +691 -0
  88. package/dist/resources/guides/case.md +153 -0
  89. package/dist/resources/guides/component.md +92 -5
  90. package/dist/resources/guides/decision.md +185 -0
  91. package/dist/resources/guides/entity.md +50 -8
  92. package/dist/resources/guides/expressions.md +14 -5
  93. package/dist/resources/guides/functions.md +1 -1
  94. package/dist/resources/guides/getting-started.md +38 -1
  95. package/dist/resources/guides/layout.md +11 -7
  96. package/dist/resources/guides/merge.md +37 -3
  97. package/dist/resources/guides/microservice.md +87 -2
  98. package/dist/resources/guides/middleware.md +68 -4
  99. package/dist/resources/guides/mobile-layout.md +193 -0
  100. package/dist/resources/guides/mobile.md +495 -0
  101. package/dist/resources/guides/page.md +456 -75
  102. package/dist/resources/guides/theme.md +8 -2
  103. package/dist/resources/guides/translation.md +1 -1
  104. package/dist/resources/guides/workflow.md +58 -1
  105. package/dist/resources/read.js +41 -0
  106. package/dist/resources/rules.js +11 -5
  107. package/dist/resources/schema-fingerprint.json +7 -5
  108. package/dist/resources/schemas/AccessExplanationDto.json +144 -0
  109. package/dist/resources/schemas/AccessMatrixDto.json +170 -0
  110. package/dist/resources/schemas/AccessPermissionDto.json +57 -0
  111. package/dist/resources/schemas/AccessPolicyDto.json +223 -0
  112. package/dist/resources/schemas/AccessResourceDto.json +86 -0
  113. package/dist/resources/schemas/AppSessionDto.json +53 -0
  114. package/dist/resources/schemas/ConnectDataDescribeDto.json +344 -0
  115. package/dist/resources/schemas/ConnectDataRequestModel.json +202 -0
  116. package/dist/resources/schemas/ConnectDataResultDto.json +421 -0
  117. package/dist/resources/schemas/ConnectorCredentialDto.json +70 -0
  118. package/dist/resources/schemas/ConvertConnectDataToMicroserviceCommand.json +37 -0
  119. package/dist/resources/schemas/CreateAccessPolicyCommand.json +209 -0
  120. package/dist/resources/schemas/CreateDecisionCommand.json +221 -0
  121. package/dist/resources/schemas/CreateEntityCommand.json +118 -0
  122. package/dist/resources/schemas/CreateMicroserviceCommand.json +13 -1
  123. package/dist/resources/schemas/CreateProcessDefinitionCommand.json +1337 -0
  124. package/dist/resources/schemas/CreateQueryCommand.json +4 -0
  125. package/dist/resources/schemas/CreateWorkflowCommand.json +146 -1
  126. package/dist/resources/schemas/DataJobDto.json +6 -1
  127. package/dist/resources/schemas/DecisionDto.json +302 -0
  128. package/dist/resources/schemas/DetachConnectDataMicroserviceCommand.json +28 -0
  129. package/dist/resources/schemas/ExplainAccessQuery.json +33 -0
  130. package/dist/resources/schemas/GenerateProcessDocumentCommand.json +116 -0
  131. package/dist/resources/schemas/GlobalFunctionUpdateResultDto.json +21 -1
  132. package/dist/resources/schemas/MicroserviceDto.json +15 -3
  133. package/dist/resources/schemas/OrganizationProjectDto.json +335 -0
  134. package/dist/resources/schemas/OrganizationSchemaDto.json +196 -0
  135. package/dist/resources/schemas/OrganizationSchemaVersionDto.json +207 -0
  136. package/dist/resources/schemas/PatchProcessDefinitionCommand.json +76 -0
  137. package/dist/resources/schemas/PreviewMicroserviceCommand.json +10 -1
  138. package/dist/resources/schemas/PreviewWorkflowCommand.json +25 -1
  139. package/dist/resources/schemas/ProcessDefinitionDto.json +1480 -0
  140. package/dist/resources/schemas/ProcessSimulationDto.json +96 -0
  141. package/dist/resources/schemas/SaveConnectorCredentialCommand.json +90 -0
  142. package/dist/resources/schemas/SaveProcessEventSourceCommand.json +61 -0
  143. package/dist/resources/schemas/SaveProcessMailSourceCommand.json +89 -0
  144. package/dist/resources/schemas/SignProcessTaskCommand.json +73 -0
  145. package/dist/resources/schemas/SimulateProcessDefinitionQuery.json +92 -0
  146. package/dist/resources/schemas/StepDto.json +25 -1
  147. package/dist/resources/schemas/UpdateAccessPolicyCommand.json +209 -0
  148. package/dist/resources/schemas/UpdateDecisionCommand.json +216 -0
  149. package/dist/resources/schemas/UpdateEntityCommand.json +118 -0
  150. package/dist/resources/schemas/UpdateMicroserviceCommand.json +13 -1
  151. package/dist/resources/schemas/UpdateProcessDefinitionCommand.json +1357 -0
  152. package/dist/resources/schemas/UpdateQueryCommand.json +4 -0
  153. package/dist/resources/schemas/UpdateViewCommand.json +0 -2
  154. package/dist/resources/schemas/UpdateWorkflowCommand.json +146 -1
  155. package/dist/resources/schemas/ValidateProcessDefinitionQuery.json +1339 -0
  156. package/dist/server.js +27 -1
  157. package/dist/tools/access.js +369 -2
  158. package/dist/tools/accessOperations.js +135 -0
  159. package/dist/tools/accessPolicies.js +170 -0
  160. package/dist/tools/accessRuntime.js +203 -0
  161. package/dist/tools/applications.js +60 -3
  162. package/dist/tools/bpm.js +343 -0
  163. package/dist/tools/bpmGovernance.js +266 -0
  164. package/dist/tools/bpmOperations.js +230 -0
  165. package/dist/tools/bpmReporting.js +154 -0
  166. package/dist/tools/bpmRouting.js +150 -0
  167. package/dist/tools/bpmRuntime.js +396 -0
  168. package/dist/tools/case.js +178 -0
  169. package/dist/tools/caseRuntime.js +89 -0
  170. package/dist/tools/common.js +7 -0
  171. package/dist/tools/components.js +118 -14
  172. package/dist/tools/connectData.js +449 -0
  173. package/dist/tools/connectors.js +193 -0
  174. package/dist/tools/datasources.js +3 -3
  175. package/dist/tools/decisions.js +206 -0
  176. package/dist/tools/dependencies.js +1 -1
  177. package/dist/tools/deployments.js +38 -3
  178. package/dist/tools/designSchemaPatch.js +34 -9
  179. package/dist/tools/dtos.js +36 -5
  180. package/dist/tools/entities.js +79 -12
  181. package/dist/tools/externalComponents.js +26 -5
  182. package/dist/tools/flows.js +122 -14
  183. package/dist/tools/folders.js +1 -1
  184. package/dist/tools/imports.js +5 -2
  185. package/dist/tools/layouts.js +50 -17
  186. package/dist/tools/merges.js +2 -2
  187. package/dist/tools/microservices.js +77 -25
  188. package/dist/tools/mobile.js +221 -0
  189. package/dist/tools/modules.js +48 -0
  190. package/dist/tools/organizationStructure.js +137 -0
  191. package/dist/tools/pages.js +465 -98
  192. package/dist/tools/platformInfo.js +27 -8
  193. package/dist/tools/profileWrite.js +92 -0
  194. package/dist/tools/projects.js +71 -9
  195. package/dist/tools/rows.js +69 -13
  196. package/dist/tools/schemaOps.js +61 -1
  197. package/dist/tools/screenWrite.js +37 -8
  198. package/dist/tools/screens.js +95 -5
  199. package/dist/tools/templates.js +26 -1
  200. package/dist/tools/translations.js +1 -1
  201. package/dist/tools/variables.js +11 -5
  202. package/dist/tools/workflows.js +10 -5
  203. package/package.json +1 -1
@@ -0,0 +1,193 @@
1
+ # Mobil mizanpaj — uygulamanın her yeri tek dil
2
+
3
+ Bir mobil ekran kurmadan önce bunu okuyun. Buradaki kurallar zevk meselesi değildir, **ölçülür**:
4
+
5
+ - **Doğru varsayılan.** Gateway iskeleti kendisi doğru kurar (`mobile_app_create`, `page_create`, yeni
6
+ düğümlerin boşluğu).
7
+ - **Yazımda uyarı.** Yazım yanıtında sözleşme dışı durum `MOB-015…021` olarak gelir (`layoutWarnings`).
8
+ - **Çizimde ölçüm.** `page_screenshot({ layoutReport: true })` sonucu sayıyla ölçer (`layoutSummary.alignment`).
9
+
10
+ Temel mobil bilgi (flex-only yerleşim, tipli stil, gezinme, adımlar) için `platform_guide('mobile')`.
11
+ Altın örnek: `ngapps://examples/mobile-form-screen`.
12
+
13
+ ## Sözleşme
14
+
15
+ Birim dp. Ölçek **4 · 8 · 16 · 24 · 32**. `gap` jetonları `small` 8, `medium` 16, `large` 24.
16
+
17
+ | # | Konu | Kural | Bulgu |
18
+ |---|---|---|---|
19
+ | S1 | Üst güvenli alan | Tek yerde. Kabuklu uygulamada kabukta (`safe-area` `edges: 'top'` içinde app-bar). Kabuksuz sayfada ilk öğe `safe-area` `top`. Sayfa kabuğun payını ikinci kez vermez | MOB-015 |
20
+ | S2 | Alt güvenli alan | Formun gönder düğmesi akışta, formun sonunda durur. Ekrana sabit alt eylem gerekiyorsa `floating-container` (`respectSafeArea`) kullanılır, ayrıntısı §Bileşen dizgisi'nde. Akışın sonunda pay gerekiyorsa `safe-area` `bottom` (`all` değil) | — |
21
+ | S3 | Kaydırma | Sayfa kökü kaydırır, `size: 'shrink'`. `scroll-view` yalnız gerekçeyle; iç içe dikey kaydırıcı yok | MOB-016 |
22
+ | S4 | Ekran kenarı | Yatayda ve üstte **16**, tek yerde. Kabuklu sayfada slot'un margin'i verir. Kabuksuz sayfada yatayı kökün padding'i verir; üstteki 16, tepedeki `safe-area`'dan sonraki `gap`tir. Bileşenlere yazılmaz | ölçüm `gutter` |
23
+ | S5 | Aralık | Kardeşler arası boşluk yalnız ebeveynin `gap`'i; çocuklar `marginType: 'none'`. Bölümler arası `large`, bölüm içi alanlar `medium`, satır içi öğeler `small` | MOB-019, MOB-021 |
24
+ | S6 | Saydam sarmalayıcı | Yalnız davranış ekleyen kap (`tooltip`, zeminsiz grup kabı) içeriği içeri itmez: `paddingType: 'none'`, `marginType: 'none'`, `widthType: 'fill'` | MOB-019 |
25
+ | S7 | Yüzey | Görünen grup (kart) iç boşluğu 16, yarıçap `lg`, 1 dp kenarlık ya da zemin (ikisi birden değil). Yüzeyin içeriği bilerek içeride durur | MOB-021 |
26
+ | S8 | Genişlik | Tam genişlik öğesi (alan, birincil düğme, yüzey) `widthType: 'fill'`. Aynı sütundaki kardeşlerin sol ve sağ kenarı eşittir | MOB-019, MOB-020 |
27
+ | S9 | Kap yönü | Dikey grup `direction: 'column'` + `horizontalAlign: 'stretch'`. **Yönü yazılmamış container/form satırdır.** Satır yalnız gerçekten yan yana dizilen öğeler için | MOB-020 |
28
+ | S10 | Bileşen içi | Alan yüksekliği, iç boşluk, etiket aralığı ve yarıçap temadan (`--ng-form-*`) gelir; alanlara padding ya da yarıçap yazılmaz | — |
29
+ | S11 | Yarıçap, renk, yazı | Yarıçap ölçek adıyla (`sm`, `md`, `lg`, `pill`), renk tanımlı jetonla, yazı boyu `text`'in `type` seviyesiyle (`h1`…`h4`, `p`, `small`, `label`). Ham px yok | MOB-021 |
30
+ | S12 | App-bar | Ekranda tek app-bar, ilk çizilen öğe. Kabuk veriyorsa sayfa eklemez; başlık kabuğun app-bar'ına bağlanır | MOB-017 |
31
+ | S13 | Boş kap | Çalışma anında boş kalan kap bırakılmaz (tepedeki `safe-area` payı hariç) | MOB-018 |
32
+
33
+ ## İskelet ağaçları
34
+
35
+ Aşağıdaki iskeleti `mobile_app_create` ile mobil `page_create` kendisi kurar. Elle kuruyorsanız bu biçimi
36
+ kullanın.
37
+
38
+ **Kabuk (layout).** `shell_root` düz bir `container`'dır. Padding tipi yazılmazsa runtime ona 10 dp verir ve
39
+ app-bar kenardan kopar.
40
+
41
+ ```
42
+ container shell_root direction:column gap:none size:shrink appearance.paddingType:none heightType:fill
43
+ ├─ safe-area edges:top
44
+ │ └─ app-bar (başlık, leading, menuTarget)
45
+ ├─ slot appearance.marginType:custom marginValues:{ top:16, right:16, bottom:0, left:16 } heightType:fill
46
+ └─ drawer (çekmeceli kabukta)
47
+ ```
48
+
49
+ **Kabuklu sayfa.** Pay ve kenar boşluğu kabuktan gelir.
50
+
51
+ ```
52
+ container page_container direction:column horizontalAlign:stretch size:shrink gap:medium paddingType:none
53
+ └─ … içerik
54
+ ```
55
+
56
+ **Kabuksuz sayfa** (giriş, karşılama, izin). `isWrapper` yalnız margin'i sıfırlar, kökün padding'i çizilir.
57
+
58
+ ```
59
+ container page_container direction:column horizontalAlign:stretch size:shrink gap:medium
60
+ appearance.paddingType:custom paddingValues:{ top:0, right:16, bottom:0, left:16 }
61
+ ├─ safe-area edges:top (boş: durum çubuğu payı + gap kadar üst boşluk)
62
+ └─ … içerik
63
+ ```
64
+
65
+ **Form ekranı.** Gönder düğmesi formun içinde, akışın sonundadır. Form doğrulaması yalnız bu yolda koşar.
66
+
67
+ ```
68
+ page_container
69
+ ├─ text type:h2 (başlık)
70
+ └─ form direction:column horizontalAlign:stretch gap:large paddingType:none marginType:none widthType:fill
71
+ ├─ … bölümler
72
+ └─ button type:submit widthType:fill
73
+ ```
74
+
75
+ ## Bileşen dizgisi
76
+
77
+ Bir ekran yukarıdan aşağıya şu sırayla kurulur: **başlık → bölümler → eylem.**
78
+
79
+ - **Başlık:** `text` `type: 'h2'`, bölüm başlığı `type: 'h4'`. `typographyStyle.fontSize` yazılmaz.
80
+ - **Bölüm iki türlüdür:**
81
+ - *Görünen grup (yüzey kabı):* `container` + `surfaceStyle` (zemin ya da kenarlık, `radius: 'lg'`) +
82
+ `paddingType: 'custom'` ve `paddingValue: 16`. İçeriği bilerek 16 içeride durur; kabın kendisi kardeşleriyle
83
+ hizalıdır.
84
+ - *Görünmeyen grup (saydam kap):* `container` `direction: 'column'`, `paddingType: 'none'`,
85
+ `marginType: 'none'`. İçerik kardeşleriyle aynı kenarda başlar.
86
+
87
+ Başlığı (`title`) olan ama zemini olmayan kap saydam kap gibi davranmalıdır. Varsayılan 10 dp padding'i
88
+ içeriği kaydırır (MOB-019). Ya yüzey verin ya da padding'i `none` yapın.
89
+ - **`card` çocuk almaz.** Kart görünümlü alan grubu `container` + `surfaceStyle` ile kurulur.
90
+ - **`tooltip`** dokunulan içeriği sarar ve saydamdır. Runtime ona varsayılan boşluk vermez; gateway yine de yeni
91
+ tooltip'e `paddingType: 'none'` ve `widthType: 'fill'` yazar. 2026-09-29'dan önce derlenmiş uygulamada
92
+ boşluksuz tooltip'in içeriği 14 dp içeri kayar ve 28 dp daralır; açık değer onu da korur.
93
+ - **Satır (`direction: 'row'`)** yan yana dizilen öğeler içindir: arama kutusu + düğme, ikon + metin,
94
+ "Ekle / Sil" düğmeleri. Form alanlarını alt alta dizmek için satır kullanılmaz.
95
+ - **Eylem:** birincil düğme tam genişlik (`widthType: 'fill'`). İkincil eylem `variant: 'text'` ya da
96
+ `'outline'`; metin görünümlü düğme içerik genişliğinde durabilir.
97
+ - **Ekrana sabit eylem** (`floating-container`, `anchor: 'bottom-center'`, `fullWidth`, `respectSafeArea`) iki
98
+ şeye dikkat ister:
99
+ - *Yerleşim.* `fullWidth` ekran kenarına dayanır; S4 kenarı için içine `paddingType: 'custom'` +
100
+ `paddingValues` yatay 16 olan bir kap koyun, `floating-container`'ın kendisine `paddingType: 'none'`
101
+ yazın (yoksa akışta 20 dp boş şerit kalır). Sabit düğme uzun formun son alanını örter; akışın sonuna
102
+ düğme boyu kadar boşluk bırakın.
103
+ - *Gönderim.* Formun dışındaki `type: 'submit'` + `formId` düğmesi formun olayını tetikler ama **form
104
+ doğrulamasını koşmaz** (bilinen açık). Doğrulanan form için gönder düğmesi formun içinde kalmalı.
105
+
106
+ ## Boşluk
107
+
108
+ Aralığın tek kaynağı ebeveynin `gap`'idir. Runtime'ın varsayılanları katmanlarda birikir: margin tipi
109
+ yazılmamış her düğüm 4 dp, bırakılabilir düğüm ayrıca 10 dp padding alır. İki kat iç içe zeminsiz kap, içeriği
110
+ 28 dp kaydırır.
111
+
112
+ - **Gateway yeni düğüme `marginType: 'none'` yazar** (`page_create`, `page_schema_patch`,
113
+ `page_schema_validate`) ve bunu `gatewayNormalized`'da söyler.
114
+ - Kardeşleri varsayılan margin'le duran eski bir kaba eklenen düğüme dokunulmaz; yeni düğüm eskilerden
115
+ 4 dp kayardı. Kabı sözleşmeye taşımak için bütün çocuklarına `marginType: 'none'` yazın.
116
+ - `layout_schema_patch` ve `component_schema_patch` bu varsayılanı yazmaz. Kabukta ya da widget'ta eklenen
117
+ düğüme boşluğu siz yazın.
118
+ - **Ritim:**
119
+ - bölümler arası `gap: 'large'` (24);
120
+ - bölüm içi alanlar `gap: 'medium'` (16);
121
+ - satır içi öğeler `gap: 'small'` (8).
122
+
123
+ - **Özel değer** (`custom`) ve sayısal `gap` yalnız ölçekten seçilir: 0, 4, 8, 16, 24, 32 (MOB-021).
124
+
125
+ ## Genişlik ve hiza
126
+
127
+ - **`horizontalAlign: 'stretch'`** olan sütun, çocuklarını `widthType` yazılmasa da tam genişlik gerer. Öteki
128
+ hizalarda tam genişlik öğesine `widthType: 'fill'` yazın. Aynı sütunda bir kısmı `fill`, bir kısmı değilse
129
+ sağ kenar hizadan kopar (MOB-020).
130
+ - **Yönü yazılmamış `container` ve `form` satırdır.** Alanlar yan yana sıkışır; `direction: 'column'` yazın.
131
+ `safe-area` ve `scroll-view` sütun doğar.
132
+ - **Ortalanmış ekran** (giriş, boş durum) için sütuna `horizontalAlign: 'center'` verin. Bu kapsamda kenar
133
+ eşitliği aranmaz.
134
+
135
+ ## Kenarlık, yarıçap, yazı
136
+
137
+ - **Yüzey:** `surfaceStyle` ile verilir.
138
+ - zemin `background: 'var(--ng-…)'` (temada tanımlı jeton);
139
+ - kenarlık `borderTop…borderLeft` 1 dp, renk `border` jetonu;
140
+ - yarıçap `radius: 'lg'`.
141
+
142
+ Zemin ve kenarlığı birlikte kullanmayın; biri yeter.
143
+ - **Yarıçap ölçeği:** kartlar `lg`, çip ve rozetler `pill`, alan ve düğmeler temadan. Ham `'10px'` yazılmaz.
144
+ - **Yazı:** `text` `type` seviyesi.
145
+ - **Tasarım sistemi çapında görünüm** (bütün kartlar, bütün düğmeler) temadan yönetilir. Ölçekler, adlı ön
146
+ ayarlar ve yeni düğümlerin başlangıç değerleri `platform_guide('theme')`'dadır. Aynı değer tek tek düğümlere
147
+ kopyalanmaz. Temanın eski `componentStyles` alanı emeklidir.
148
+
149
+ ## Kaydırma
150
+
151
+ Sayfa kökü her zaman kaydırır: barındırıcı sayfayı bir kaydırıcı içinde çizer.
152
+
153
+ `scroll-view` yalnız şu gerekçelerle eklenir:
154
+
155
+ - `refreshable` (çekerek yenile);
156
+ - `stickyHeader` ya da `states.isSticky` çocuk (yapışkan başlık);
157
+ - `horizontal` (yatay şerit);
158
+ - `heightType: 'fixed'` (sabit boylu iç liste).
159
+
160
+ Gerekçesiz ya da iç içe dikey kaydırıcı jestleri çakıştırır (MOB-016). Kökün `size: 'grow'`'u çocukları ekran
161
+ boyunca eşit böler ve kısa içerik üst üste biner. Yapışkan başlık ve ekrana sabit içerik için
162
+ `platform_guide('mobile')` §Ekrana sabit içerik.
163
+
164
+ ## Doğrulama
165
+
166
+ Bir ekranı bitirince iki çağrı yapın:
167
+
168
+ 1. **`page_schema_validate`** (kuru koşu): `layoutWarnings`'te MOB-015…021 bulgusu olmamalı.
169
+ - Yazım araçları (`page_schema_patch`, `layout_schema_patch`) yalnız o yazımın **getirdiği** bulguyu söyler.
170
+ - Sayfanın bütün durumunu kuru koşu verir.
171
+ 2. **`page_screenshot({ layoutReport: true })`:** `layoutSummary.alignment` şu değerleri vermeli.
172
+
173
+ | Alan | Temiz değer | Anlamı |
174
+ |---|---|---|
175
+ | `gutter` | 16 | ekran kenarı boşluğu (sol = sağ) |
176
+ | `leftEdges` | tek küme | aynı kapsamdaki geniş içeriğin sol kenarları |
177
+ | `surfaces` | `[]` | iç hizası bozuk yüzey kabı yok |
178
+ | `widthOutliers` | `[]` | sağ kenarı sapan geniş öğe yok (`insetLeft`/`insetRight` dp) |
179
+ | `offScaleGaps` | `[]` | ardışık öğeler arası boşluk ölçekte |
180
+
181
+ İki kaynak aynı şeyi söyler. MOB-019'un şemadan öngördüğü dp farkı, `leftEdges` kümeleri arasındaki farktır.
182
+
183
+ ## Bulgu → reçete
184
+
185
+ | Kod | Ne diyor | Ne yapılır |
186
+ |---|---|---|
187
+ | MOB-015 | Üst pay eksik ya da çift | Kabuksuz sayfaya `safe-area` `top`. Kabuğu payı vermiyorsa kabukta app-bar'ı `safe-area` `top` içine alın. Kabuk veriyorsa sayfadaki `top`/`all` güvenli alanı kaldırın |
188
+ | MOB-016 | Kaydırma tek yerde değil | Kök `size: 'shrink'`. Gerekçesiz `scroll-view`'ı kaldırın ya da gerekçesini verin. İç içe olanda içtekine `fixed` boy verin |
189
+ | MOB-017 | İkinci ya da yanlış yerde app-bar | Kabuk veriyorsa sayfadakini silin, başlığı kabuğa bağlayın. Kabuksuzda app-bar'ı ilk sıraya (ya da tepedeki `safe-area`'nın içine) taşıyın |
190
+ | MOB-018 | Boş kap | İçeriğini ekleyin ya da silin |
191
+ | MOB-019 | Kenar kayması (dp) | Bulgunun hedefi içeriği iten kaptır. Görünen grup olacaksa yüzey verin, olmayacaksa `paddingType: 'none'` + `marginType: 'none'`. Hedef öğenin kendisiyse margin'ini kardeşleriyle aynı yapın |
192
+ | MOB-020 | Genişlik tutarsız | Öğeye `widthType: 'fill'`. Yönü yazılmamış kaba `direction: 'column'` + `horizontalAlign: 'stretch'` |
193
+ | MOB-021 | Ölçek dışı değer | Boşluğu ve sayısal gap'i 0/4/8/16/24/32'den, yarıçapı `sm`/`md`/`lg`/`pill`'den, yazı boyunu `text` `type`'tan seçin |