@devoplus/one-sdk 0.2.0-next.112 → 0.2.0-next.155
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 +37 -0
- package/README.md +150 -51
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +181 -9
- package/dist/client.js.map +1 -1
- package/dist/components.d.ts +161 -38
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +1145 -11
- package/dist/components.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,43 @@ Biçim: [Keep a Changelog](https://keepachangelog.com/tr/1.1.0/); sürümleme [S
|
|
|
10
10
|
> `0.2.0-next.<n>` ön sürümleri `next` etiketiyle çıkar; kararlı 0.2.0 `main`'den `latest` etiketiyle çıkar ve tarihi o
|
|
11
11
|
> zaman yazılır. Aşağıdaki maddeler 0.1.0'dan bu yana birikenlerdir; kararlı yayına kadar yeni maddeler bu başlığa eklenir.
|
|
12
12
|
|
|
13
|
+
### Eklendi (D-96 — hazır arayüz bileşenleri ilk dalga ve Portal karartması, 20.10.2026)
|
|
14
|
+
|
|
15
|
+
- **`/one-ui.css` sınıfları:** rozet (`one-badge` + `-success`, `-info`, `-warn`, `-error`, `-primary`), anahtar
|
|
16
|
+
(`one-switch`, `role="switch"`), radyo grubu (`one-radio-group`, `-inline`), ilerleme çubuğu (`one-progress`, belirsiz kip
|
|
17
|
+
dahil), yükleniyor göstergesi (`one-spinner`, `one-spinner-lg`, `one-loading-inline`). Renkler tema değişkenlerinden;
|
|
18
|
+
hareket azaltma tercihine uyulur. Yeni değişkenler: `--one-backdrop`, `--one-shadow`.
|
|
19
|
+
- **Yeni bileşenler** (`/one-components.js`): `<one-select>` (aranabilir, tekli/çoklu), `<one-tag-input>`, `<one-dialog>`
|
|
20
|
+
(onay penceresi dahil), `<one-tooltip>`, `<one-menu>`, `<one-avatar>`, `<one-tabs>`, `<one-accordion>`. Hepsi iki dilli,
|
|
21
|
+
klavye ve ekran okuyucu kalıplarına (APG) uygun, düz metin; satır içi betik ya da stil gerektirmez.
|
|
22
|
+
- **Köprü:** `one.setModal(open)` (`one:modal { open }`) ve `one.onModalDismiss(fn)` (`one:modal-dismiss`): uygulama
|
|
23
|
+
içinde pencere açıkken Portal da kendi ekranını karartır; kullanıcı Portal'da vazgeçerse karartmayı Portal kaldırır ve
|
|
24
|
+
pencere kapanır. Köprü `one:viewport` değerini `--one-viewport-top` / `--one-viewport-height` değişkenlerine de yazar.
|
|
25
|
+
Açık açılır öğenin (`data-one-popup`) alt kenarı otomatik yükseklik ölçütüne katılır.
|
|
26
|
+
- Onay penceresi (`<one-dialog accept-label reject-label>`) Portal içindeyken Portal'ın onay penceresiyle (`one.confirm`)
|
|
27
|
+
sorulur; bildirim Portal içindeyken Portal'da çizilir (D-76 U4 değişmedi). Portal dışında (yerel geliştirme)
|
|
28
|
+
`one.toast` hazır bileşenler yüklüyse artık konsol yerine sayfada gösterilir.
|
|
29
|
+
- ⚠️ Portal karartması Portal'ın bu iletiyi tanıyan sürümünü ister; tanımayan Portal'da pencere yalnız iframe içinde
|
|
30
|
+
karartılır, başka bir şey değişmez.
|
|
31
|
+
- **Olay tipleri bileşen başına:** `OneComponentEvents[etiket][olay]` ve `OneComponentEvent<etiket, olay>` her bileşenin
|
|
32
|
+
yaydığı olayın yükünü verir (`<one-dialog>` `cancel` `{ reason }`, `close` `{ returnValue }`, `<one-tabs>` `change`
|
|
33
|
+
`{ tab }`, `<one-menu>` `select` `{ id }` …); `ONE_COMPONENT_EVENTS` aynı kümeyi çalışma anında taşır. Eski
|
|
34
|
+
`OneComponentEventMap` tek haritada aynı adlı olayların birleşimidir ve `@deprecated` işaretlidir.
|
|
35
|
+
- **Tek doğruluk kaynağı:** `<one-tabs>` seçimi `selected` özniteliğindedir (başlangıçta da özellikte görünür, seçili
|
|
36
|
+
sekmeye yeniden tıklamak `change` üretmez); `<one-dialog open>` özniteliği pencereyi açar/kapatır; `<one-accordion>`
|
|
37
|
+
`data-open` iki yönlüdür; `<one-select>` `multiple` kaldırılınca tek seçime iner.
|
|
38
|
+
- **Yeniden bağlanma:** sayfadan ayrılıp yeniden eklenen bileşen ayrıyken değişen öznitelikleri uygular (`src` değişen
|
|
39
|
+
tablo bir kez yeniden yüklenir, `open` alan pencere kipli açılır); eski değerine dönen öznitelik yok sayılır. Ayrılan açık
|
|
40
|
+
pencere içteki görünümüyle birlikte kapanır; ayrılan açık liste kapanır. Portal'a bildirilen kirli durum sayfadaki bağlı
|
|
41
|
+
kirli formların birleşimidir: bir formun ayrılması ötekinin korumasını kaldırmaz.
|
|
42
|
+
- `<one-select>`: seçimi yalnız `null` / `undefined` temizler; `''` yalnız `''` değerli bir seçenek varsa seçilir.
|
|
43
|
+
- **Köprü (D-96):** `one.start()`'tan önce açılmış pencere `one:ready`'nin ardından yeniden bildirilir (Portal `one:ready`'de
|
|
44
|
+
karartmayı sıfırlar; önceden pencere açık ama Portal karartmasız kalıyordu). Pencere açıkken iframe içindeki Escape'i
|
|
45
|
+
uygulama işlemezse köprü `one:modal-escape` ile Portal'a iletir; olay `stopPropagation()` ile durdurulduysa, iptal edildiyse,
|
|
46
|
+
pencere kapandıysa ya da sayfada kipli bir `<dialog>` varsa iletmez (Escape'i zaman uyumsuz işleyen uygulama `preventDefault()` çağırır). Kipli `<dialog>` denetimi tuş
|
|
47
|
+
anında (yakalama aşamasında) yapılır. Sayfa giderken açık pencere kapalı bildirilir (`pagehide`); geri/ileri önbelleğinden
|
|
48
|
+
dönüşte pencere hâlâ açıksa yeniden açık bildirilir (`pageshow`). ⚠️ Portal'ın bu iletiyi tanıyan sürümü gerekir; tanımayan Portal iletiyi yok sayar.
|
|
49
|
+
|
|
13
50
|
### Değişti (C7 — DEXA sorgusunda uygulamanın bağlam kodu göndermesi, 18.10.2026)
|
|
14
51
|
|
|
15
52
|
- `queryDexa` / `buildDexaQueryRequest` artık `UserCode` · `CompanyCode` · `CostCenterCode`'u kabul eder (ad harf
|
package/README.md
CHANGED
|
@@ -5,8 +5,7 @@ servislerine **ince istemcisi**. SDK sır taşımaz, kiracı seçmez ve
|
|
|
5
5
|
belirteç üretmez: kimliği platform kapısının yazdığı başlıklardan **okur**, backend'e kullanıcının uygulama
|
|
6
6
|
belirteciyle gider, dosyayı kuruluma bağlı dosya deposuna yazar.
|
|
7
7
|
|
|
8
|
-
Platformun tamamı: `devoplus/devoplus-one` (mimari `docs/architecture.md`)
|
|
9
|
-
`devoplus-root/docs/devoplus-one-karar-defteri.md`; örnek uygulama `apps/hello`.
|
|
8
|
+
Platformun tamamı: `devoplus/devoplus-one` (mimari `docs/architecture.md`, örnek uygulama `apps/hello`).
|
|
10
9
|
|
|
11
10
|
## Kurulum
|
|
12
11
|
|
|
@@ -23,23 +22,23 @@ Paket yalnız **ESM** dağıtılır (`dist/index.js` + `dist/index.d.ts`); Node
|
|
|
23
22
|
|
|
24
23
|
### Yerel geliştirme: `one` komutu
|
|
25
24
|
|
|
26
|
-
Paket `one` komutunu da getirir
|
|
25
|
+
Paket `one` komutunu da getirir; uygulamanın kök dizininde çalışır ve `one.manifest.json`'u okur:
|
|
27
26
|
|
|
28
27
|
| Komut | Ne yapar |
|
|
29
28
|
|---|---|
|
|
30
29
|
| `one dev [--port n] [--api-base url]` | Uygulamayı yerelde çalıştırır. Devoplus servisleri varsayılan olarak test ortamındadır (`ONE_API_BASE` ile değişir). İstekler Portal'dan geçmediği için kimlik başlıklarını (`X-One-*`) elle gönderirsiniz. |
|
|
31
30
|
| `one migrate` | `migrations/` altındaki SQL dosyalarını **yerel** veritabanına uygular (`one dev` aynı veriyi görür). |
|
|
32
31
|
| `one build` | Yükleme provası: kodu paketler, hiçbir yere göndermez (çıktı `.one/dist/`). |
|
|
33
|
-
| `one data generate [--check]` | `one.data.json` veri modelinden yeni migration + `src/data/types.ts` üretir; yalnız ekleyen değişiklik ([Veri modeli](#veri-modeli-ve-kayıt-işlemleri
|
|
32
|
+
| `one data generate [--check]` | `one.data.json` veri modelinden yeni migration + `src/data/types.ts` üretir; yalnız ekleyen değişiklik ([Veri modeli](#veri-modeli-ve-kayıt-işlemleri)). |
|
|
34
33
|
|
|
35
34
|
Yerel yapılandırma ve veri `.one/` altındadır, depoya girmez ve her komutta manifest'ten yeniden üretilir. Gerçek
|
|
36
35
|
yükleme Devoplus GitLab hattıyla yapılır; geliştirici makinesinden yükleme yoktur. Komutun ekrana yazdığı ayrıntılar
|
|
37
36
|
(araç adı, sürüm satırı) yerel çalışma ortamına aittir ve gizlenmez.
|
|
38
37
|
|
|
39
|
-
### Erişim talebi: `one login`, `one request`, `one requests`
|
|
38
|
+
### Erişim talebi: `one login`, `one request`, `one requests`
|
|
40
39
|
|
|
41
40
|
Uygulamanız bir kuruluma, DEXA sorgusuna, uygulama izni atamasına ya da yetki alanına ihtiyaç duyduğunda izni
|
|
42
|
-
yöneticiden komut satırından isteyebilirsiniz. Talep izni kendiliğinden VERMEZ; yönetici
|
|
41
|
+
yöneticiden komut satırından isteyebilirsiniz. Talep izni kendiliğinden VERMEZ; yönetici Devoplus Console'da onaylar ve
|
|
43
42
|
sonuç size e-postayla bildirilir.
|
|
44
43
|
|
|
45
44
|
| Komut | Ne yapar |
|
|
@@ -55,7 +54,7 @@ One.Hello.Manage="Yönetir"` (tekrar edilebilir, en çok 16; İngilizce ad `--pe
|
|
|
55
54
|
portalın şirket yöneticisi, yetki alanı talebini platform yöneticisi onaylar. Kayıt talebi dışındaki türleri yalnız uygulamanın sahibi gönderebilir. Vekalet ya da Yerine Görüntüle oturumuyla talep
|
|
56
55
|
gönderilemez. Aynı istemci Devoplus One MCP sunucusunda da kullanılır (`@devoplus/one-sdk/access-request`).
|
|
57
56
|
|
|
58
|
-
### Yayın ve kullanım panosu: `one publish`, `one promote`, `one rollback`, `one deployments`, `one status`
|
|
57
|
+
### Yayın ve kullanım panosu: `one publish`, `one promote`, `one rollback`, `one deployments`, `one status`
|
|
59
58
|
|
|
60
59
|
Kod yine bu bilgisayardan yüklenmez: komut Devoplus'a bir **yayın isteği** bırakır, Devoplus isteği kaydeder ve yayın
|
|
61
60
|
hattını kendisi başlatır; hattın kapılarının hiçbiri atlanmaz. Komutlar `one login` oturumuyla çalışır; uygulamanın
|
|
@@ -74,8 +73,8 @@ kısa adı `one.manifest.json`'dan okunur (`--app` ile değişir), `--json` ham
|
|
|
74
73
|
sayısı istek gönderilmeden denetlenir; tanınmayan bir seçenek (`--portl`) açık hatadır.
|
|
75
74
|
- Yanıt *"Yayın hattı bu ortamda yapılandırılmamış"* ya da *"Kullanım ve hata panosu bu ortamda yapılandırılmamış"*
|
|
76
75
|
ise o ortamda bu özellik henüz kullanılamıyor demektir.
|
|
77
|
-
- Aynı istemci Devoplus One MCP sunucusunun
|
|
78
|
-
|
|
76
|
+
- Aynı istemci Devoplus One MCP sunucusunun yayın ve kullanım panosu araçlarında da kullanılır
|
|
77
|
+
(`@devoplus/one-sdk/app-ops`).
|
|
79
78
|
|
|
80
79
|
## Hızlı başlangıç
|
|
81
80
|
|
|
@@ -128,20 +127,20 @@ export default {
|
|
|
128
127
|
|---|---|
|
|
129
128
|
| `readContext(headers): OneContext` | `X-One-App`, `X-One-Portal-Key`, `X-One-Portal`, (`X-One-Auth=user` ya da kuyruk işinde `job` + `X-One-Sub`, `X-One-Scope`, `X-One-Global-Admin`, `X-One-Permissions`, `X-One-Admin`). Üç kurulum başlığından biri yoksa `ONE-SDK-E-001` (500): istek dispatch üzerinden gelmemiştir. |
|
|
130
129
|
| `OneContext` | `{ app, portalKey, portalId, user: OneUser \| null, actor?: OneActor \| null, mode?, admin?, jobServices? }`. `portalId` kiracıdır (24-hex); veri her zaman buna bağlıdır. `mode`: `'user'` (kullanıcının isteği), `'job'` (kuyruk / zamanlanmış iş), `'agent'` (Devoplus ajanının araç çağrısı). `admin` = `user.admin` (oturumsuzda ve işte `false`). `jobServices`: işte manifest `jobs.services` beyanı, diğer yollarda boş. |
|
|
131
|
-
| `OneActor`, `isActingSession(ctx)` | Vekalet / Yerine Görüntüle oturumu (
|
|
132
|
-
| `OneUser` | `{ sub, scope: readonly string[], globalAdmin, permissions: readonly string[], admin }`. `sub` devoplus-auth kimlik uzayıdır (`UserAccount._id`), Organization Schema `User._id` DEĞİLDİR. `permissions` yalnız bu uygulamanın ad alanındaki (`One.<Uygulama>.*`) izinlerdir
|
|
130
|
+
| `OneActor`, `isActingSession(ctx)` | Vekalet / Yerine Görüntüle oturumu (`X-One-Actor-Sub` + `X-One-Session-Kind`): `{ sub, kind: 'delegation' \| 'impersonation' }`. `user.sub` adına çalışılan kişidir (veri onundur), `actor.sub` oturumu kullanan kişidir; "kim yaptı" kaydına bu yazılır. Kendi oturumunda `null`. ⛔ Bu oturumlar varsayılan **salt-okunurdur**: platform GET/HEAD dışındaki isteği uygulamaya ulaşmadan **403 `ONE-DSP-E-009`** ile reddeder; uygulama manifest'te `"actingSessions": "write"` beyan ederse yazma isteği geçer. |
|
|
131
|
+
| `OneUser` | `{ sub, scope: readonly string[], globalAdmin, permissions: readonly string[], admin }`. `sub` devoplus-auth kimlik uzayıdır (`UserAccount._id`), Organization Schema `User._id` DEĞİLDİR. `permissions` yalnız bu uygulamanın ad alanındaki (`One.<Uygulama>.*`) izinlerdir; `admin` = şirket ya da küresel yönetici rolü. |
|
|
133
132
|
| `requireUser(ctx): OneUser` | anonimse `ONE-SDK-E-002` (401). |
|
|
134
133
|
| `requireScope(ctx, scope): OneUser` | belirteçte scope yoksa `ONE-SDK-E-003` (403). Onaya bağlı scope'ta metin kullanıcıya izni nereden vereceğini de söyler. |
|
|
135
134
|
| `requireServiceScope(ctx, scope)` | Devoplus servisinin yerel kapısı, üç yolu ayırır (bkz. "Devoplus servisleri arka plan işinde ve ajan aracında"): kullanıcıda `requireScope`; ajan aracında süreli onay gerektiren scope'lar hiç kullanılamaz; işte kullanıcı gerekmez, scope `jobs.services`'te beyanlı olmalı. İhlal `ONE-SDK-E-003` (403); asıl karar sunucudadır. |
|
|
136
|
-
| `CONSENT_SCOPES`, `awaitsUserConsent(ctx, scope): boolean` | Kullanıcının **ayrıca ve süreli** onay vermesi gereken scope'lar
|
|
137
|
-
| `hasPermission(ctx, code): boolean` | uygulama izni
|
|
135
|
+
| `CONSENT_SCOPES`, `awaitsUserConsent(ctx, scope): boolean` | Kullanıcının **ayrıca ve süreli** onay vermesi gereken scope'lar: `dexa.write`, `mail.execute`, `sms.execute` ve `push.execute`. `awaitsUserConsent` scope onaya bağlıysa ve belirteçte yoksa `true` döner; ilgili düğmeyi kapatıp kullanıcıya "portaldaki İzinleri incele düğmesiyle izin verin" demek için. ⚠️ Manifest'te hiç beyan edilmemiş scope için de `true` döner (beyan uygulamanın bilgisidir). |
|
|
136
|
+
| `hasPermission(ctx, code): boolean` | uygulama izni: kullanıcıda kod varsa ya da `admin` ise `true` (backend'in yönetici baypasıyla aynı); anonimde `false`. Kod manifest `permission`/`permissions` içinde beyan edilir, atamayı portal yöneticisi Yetki Yönetimi'nde kullanıcı gruplarına (org düğümlerine) yapar. ⚠️ Ad alanı süzgeci bir kolaylıktır, gizlilik sınırı değildir: `Authorization` belirteci kullanıcının bütün izinlerini taşır. |
|
|
138
137
|
| `requirePermission(ctx, code): OneUser` | oturum yoksa 401, izin yoksa `ONE-SDK-E-004` (403). |
|
|
139
138
|
| `OneError` | `status`, `code`, `message` (kullanıcıya görünen Türkçe metin). |
|
|
140
139
|
|
|
141
140
|
Uygulama kodu `X-One-*` başlıklarını **asla kendisi yazmaz**; dispatch istemciden gelenleri siler ve belirteçten
|
|
142
141
|
yeniden kurar.
|
|
143
142
|
|
|
144
|
-
**Kullanıcı
|
|
143
|
+
**Kullanıcı onayı.** ERP'ye veri yazma (`dexa.write`) ve kullanıcı adına e-posta/SMS/mobil bildirim
|
|
145
144
|
(`mail.execute`, `sms.execute`, `push.execute`) manifest'te beyan edilmiş ve kullanıcının yetkisi olsa bile, kullanıcı bu uygulamaya
|
|
146
145
|
**o portalda** ayrıca onay vermeden belirtece girmez. Onay bir kez verilir, **30 gün** geçerlidir; portal uygulamanın
|
|
147
146
|
üstünde bir uyarı ve "İzinleri incele" düğmesi gösterir, onay devoplus-auth ekranında verilir ve oradaki "Yetkili
|
|
@@ -150,7 +149,7 @@ yüzden bu işleri yapan rotalar `requireScope` ile korunmalı, arayüz `awaitsU
|
|
|
150
149
|
yönlendirme yazabilir. Onay kaldırılınca sonraki her belirteç hassas scope'u taşımaz (devoplus-auth onayı güçlü tutarlı
|
|
151
150
|
bir Durable Object'te tutar); daha önce verilmiş belirteç iptal edilmez, en çok ömrü kadar (10 dk) geçerli kalır.
|
|
152
151
|
|
|
153
|
-
## Portal köprüsü ve görsel dil
|
|
152
|
+
## Portal köprüsü ve görsel dil
|
|
154
153
|
|
|
155
154
|
Uygulama sayfası Portal'da iframe içinde açılır. Sayfa üç dosyayı **kendi** adresinden yükler; satır içi betik
|
|
156
155
|
platformda kapalıdır (`script-src 'self'`) ve `one-ci validate` satır içi ya da harici (`https://...`) betiği yayından önce
|
|
@@ -176,9 +175,9 @@ if (url.pathname === '/shell.js') return scriptResponse(renderShellScript(NAVIGA
|
|
|
176
175
|
|
|
177
176
|
| Sunucu üyesi | Açıklama |
|
|
178
177
|
|---|---|
|
|
179
|
-
| `clientAssetResponse(pathname): Response \| null` | `/one-bridge.js` (`ONE_BRIDGE_SCRIPT`, `text/javascript`), `/one-components.js` (`ONE_COMPONENTS_SCRIPT`, hazır bileşenler
|
|
178
|
+
| `clientAssetResponse(pathname): Response \| null` | `/one-bridge.js` (`ONE_BRIDGE_SCRIPT`, `text/javascript`), `/one-components.js` (`ONE_COMPONENTS_SCRIPT`, hazır bileşenler) ve `/one-ui.css` (`ONE_UI_CSS`, `text/css`); başka yolda `null`. |
|
|
180
179
|
| `scriptResponse(body)` | Sayfa betiği için doğru içerik türüyle yanıt. |
|
|
181
|
-
| `navigationFromManifest(manifest)` | Manifest `navigation` alanı: bozuk/yinelenen öğe atlanır, en çok `NAVIGATION_MAX_ITEMS` (12). Yol kuralı `ROUTE_PATH_RE` / `isRoutePath` (manifest şemasıyla aynı). Sekme izni (`permission
|
|
180
|
+
| `navigationFromManifest(manifest)` | Manifest `navigation` alanı: bozuk/yinelenen öğe atlanır, en çok `NAVIGATION_MAX_ITEMS` (12). Yol kuralı `ROUTE_PATH_RE` / `isRoutePath` (manifest şemasıyla aynı). Sekme izni (`permission`) korunur; biçimi bozuk izinli öğe atlanır. |
|
|
182
181
|
| `visibleNavigation(items, access)` | Kişinin görebildiği sekmeler (`access`: `{ permissions, admin }` ya da `null` = yalnız izinsiz sekmeler); dönen öğeler izin kodu taşımaz. |
|
|
183
182
|
|
|
184
183
|
Tarayıcıdaki `window.one` (tip: `OneBridge`):
|
|
@@ -186,22 +185,26 @@ Tarayıcıdaki `window.one` (tip: `OneBridge`):
|
|
|
186
185
|
| Üye | İleti | Açıklama |
|
|
187
186
|
|---|---|---|
|
|
188
187
|
| `one.start({ navigation })` | `one:ready` + `one:navigation` | Sayfa hazır olunca **bir kez**; yükseklik bildirimini de başlatır (`one:resize`). Menü sözleşmeye uymuyorsa fırlatır. İzinli sekmeler (`permission`) erişim bildirilene kadar gönderilmez. |
|
|
189
|
-
| `one.setNavigationAccess({ permissions, admin })` | `one:navigation` | Oturumdaki kişinin uygulama izinleri
|
|
188
|
+
| `one.setNavigationAccess({ permissions, admin })` | `one:navigation` | Oturumdaki kişinin uygulama izinleri: görebildiği izinli sekmeler menüye eklenir (menü değiştiyse ileti yeniden gönderilir; Portal son iletiyi geçerli sayar). Yönetici her sekmeyi görür. Oturum bilgisini okuyunca çağırın (`GET /api/session`). |
|
|
190
189
|
| `one.token`, `one.onToken(fn)`, `one.fetch(yol, init)` | `one:token` | Belirteç yalnız Portal'dan gelir; `one.fetch` `Authorization: Bearer ...` ekler. |
|
|
191
190
|
| `one.context`, `one.onContext(fn)`, `one.actor` | `one:context` | `{ theme, lang, autoHeight, actor: { kind } \| null, design }`. Köprü `data-theme`'i köke yazar, tasarım değerlerini (`primary`, `primaryContrast`, `fontFamily`, `radius`; biçimi tutmayan değer yazılmaz) `--one-primary` ve benzeri değişkenlere geçirir, `autoHeight` gelince sayfanın kendi dikey taşmasını gizler (yatay taşma kaydırılabilir kalır; yatay kaydırma çubuğu bildirilen yüksekliğe eklenir). `one.actor` yalnız gösterim içindir; yazma kapısı sunucudadır. |
|
|
192
191
|
| `one.onNavigate(fn)`, `one.path` | `one:navigate` | Portal sekmesine tıklandı; görünümü değiştirin. Adres geçmiş kaydı eklenmeden güncellenir; geri bildirim gönderilmez. |
|
|
193
192
|
| `one.setRoute(yol)` | `one:route` | Uygulama kendi içinde görünüm değiştirdi; Portal adresi güncellenir. Yol `/` ile başlar, sorgu/`#` yok. |
|
|
194
193
|
| `one.setTitle(metin \| null)` | `one:title` | Alt sayfa başlığı (en çok `TITLE_MAX_LENGTH` = 120, uzunu kesilir); `null` kaldırır. |
|
|
195
|
-
| `one.toast({ severity, summary, detail? })` | `one:toast` | `success`, `info`, `warn`, `error`; Portal çizer. Düz metin. |
|
|
194
|
+
| `one.toast({ severity, summary, detail? })` | `one:toast` | `success`, `info`, `warn`, `error`; Portal içindeyken Portal çizer. Düz metin. Portal dışında hazır bileşenler yüklüyse sayfanın köşesinde gösterilir, değilse konsola yazılır. |
|
|
196
195
|
| `await one.confirm({ message, title?, severity?, acceptLabel?, rejectLabel? })` | `one:confirm`, yanıt `one:confirm-result` | `true`/`false`. `severity`: `danger`, `warn`, `info`. Portal origin'i yoksa `false`. ⚠️ Portal bu iletiyi tanımıyorsa söz çözülmez. |
|
|
197
196
|
| `await one.download({ name, mime, data })` | `one:download` | `data` ArrayBuffer (Uint8Array, Blob ve metin çevrilir); en çok `DOWNLOAD_MAX_BYTES` (25 MB). iframe'de indirme kapalıdır; Portal kaydeder. |
|
|
198
197
|
| `one.openExternal(url)` | `one:open-external` | Yalnız `https://`; Portal kullanıcıya sorup yeni sekmede açar. |
|
|
199
198
|
| `one.setDirty(bool)` | `one:dirty` | Kaydedilmemiş değişiklik; Portal ayrılmadan önce sorar. Yalnız değişince gönderilir. |
|
|
200
|
-
| `one.viewport.current`, `one.viewport.onChange(fn)` | `one:viewport` | iframe'in ekranda görünen kısmı `{ top, height }` (iframe CSS pikseli). Kendi penceresini görünen alana yerleştirmek için kullanılır. |
|
|
199
|
+
| `one.viewport.current`, `one.viewport.onChange(fn)` | `one:viewport` | iframe'in ekranda görünen kısmı `{ top, height }` (iframe CSS pikseli). Kendi penceresini görünen alana yerleştirmek için kullanılır. Köprü aynı değeri `--one-viewport-top` / `--one-viewport-height` CSS değişkenlerine de yazar (`<one-dialog>` bunlarla yerleşir; betik konum yazmaz). |
|
|
200
|
+
| `one.setModal(bool)` | `one:modal { open }` | Uygulama içinde pencere açık mı? `true` Portal'a kendi ekranını, çerçevenin görünen kısmı DIŞINDA aynı renkle karartmasını söyler; `false` karartmayı kaldırır. Yalnız değişince gönderilir; `one.start()`'tan önce açılmış pencere `one:ready`'nin ardından yeniden bildirilir. Sayfa giderken (tam sayfa gezinme, yeniden yükleme) açık pencere Portal'a kapalı bildirilir; sayfa geri/ileri önbelleğinden dönerse ve pencere açık kalmışsa yeniden açık bildirilir. `<one-dialog>` bunu kendisi çağırır; elle yalnız kendi penceresini çizen uygulama kullanır. |
|
|
201
|
+
| (köprü kendisi) | `one:modal-escape` | Pencere açıkken odak iframe'de olduğu için Escape Portal'a ulaşmaz. Uygulama tuşu işlemezse köprü onu Portal'a iletir ve Portal bunu vazgeçme sayar (`one:modal-dismiss` döner). İletilmediği durumlar: tuşa basıldığı anda sayfada kipli bir `<dialog>` vardı (tarayıcı Escape'i yalnız kipli `<dialog>`'da, `showModal()` ile açılmışsa, `cancel` olarak kendisi işler; `<one-dialog>` da öyle; pencereyi `close` olayında kapatmanız yeterlidir), Escape `stopPropagation()` ya da `preventDefault()` ile işlendi ya da olay bittiğinde pencere kapanmıştı. Escape'i zaman uyumsuz işliyorsanız `preventDefault()` çağırın; yoksa Portal da vazgeçer. |
|
|
202
|
+
| `one.onModalDismiss(fn)` | `one:modal-dismiss` | Kullanıcı Portal'ın karartılmış alanına tıkladı ya da Portal'da Escape'e bastı: Portal karartmayı **beklemeden kendisi** kaldırmıştır; açık pencereyi "vazgeçildi" diye kapatın. Uygulama Portal'ı kilitleyemez (karartma ayrıca uygulama/kimlik değişince, Portal gezintisinde, sayfa yeniden yüklenince kalkar; açılış hız sınırlıdır). |
|
|
201
203
|
|
|
202
204
|
Bütün iletiler yalnız iframe `src`'sindeki `parent` origin'lerine gönderilir (joker yok); gelen ileti origin ve üst
|
|
203
205
|
pencere doğrulanarak alınır. Portal dışında (yerel geliştirme) ileti gönderilmez: `confirm` tarayıcının kendi sorusuna,
|
|
204
|
-
`download` tarayıcı indirmesine, `openExternal` yeni pencereye
|
|
206
|
+
`download` tarayıcı indirmesine, `openExternal` yeni pencereye düşer; `toast` hazır bileşenler yüklüyse sayfada, değilse
|
|
207
|
+
konsolda görünür.
|
|
205
208
|
|
|
206
209
|
**Görsel dil (`/one-ui.css`):** açık/koyu değişkenler (`--one-bg`, `--one-fg`, `--one-muted`, `--one-surface`,
|
|
207
210
|
`--one-border`, `--one-primary`, `--one-primary-contrast`, `--one-font-family`, `--one-radius`, durum renkleri) ve
|
|
@@ -210,9 +213,20 @@ sınıflar: `one-btn` (`-primary`, `-danger`, `-text`), `one-field` + `one-label
|
|
|
210
213
|
`-error`), içerik sekmeleri `one-tabs` + `one-tab` (`aria-selected`), `one-row`, `one-stack`, `one-muted`, `one-empty`,
|
|
211
214
|
`one-loading`, `one-sr-only`. ⚠️ `one-tabs` içerik içi gruplama içindir; uygulama menüsünü Portal çizer.
|
|
212
215
|
|
|
213
|
-
|
|
216
|
+
**Ek sınıflar** (renkler tema değişkenlerinden; hareket azaltma tercihine uyulur):
|
|
214
217
|
|
|
215
|
-
|
|
218
|
+
| Sınıf | İşaretleme | Not |
|
|
219
|
+
|---|---|---|
|
|
220
|
+
| `one-badge` (+ `-success`, `-info`, `-warn`, `-error`, `-primary`) | `<span class="one-badge one-badge-success">Onaylandı</span>` | Durum rozeti. Durumu yalnız renkle anlatmayın; metin taşır. |
|
|
221
|
+
| `one-switch` | `<label class="one-check"><input type="checkbox" role="switch" class="one-switch"> Bildirimler</label>` | Açık/kapalı anahtarı; tarayıcının onay kutusudur (klavye ve ekran okuyucu hazır). |
|
|
222
|
+
| `one-radio-group` (+ `-inline`) | `<fieldset class="one-radio-group" role="radiogroup"><legend class="one-label">Öncelik</legend><label class="one-check"><input type="radio" name="p"> Düşük</label>...</fieldset>` | Ok tuşları tarayıcının kendi radyo davranışıdır. |
|
|
223
|
+
| `one-progress` | `<progress class="one-progress" max="100" value="60">%60</progress>` | `value` yoksa belirsiz (akan) kip. Etiketi `<label for>` ya da `aria-label` ile verin. |
|
|
224
|
+
| `one-spinner` (+ `-lg`), `one-loading-inline` | `<span class="one-loading-inline" role="status"><span class="one-spinner" aria-hidden="true"></span> Yükleniyor</span>` | Yalnız döner simge kullanılacaksa `role="status"` + `aria-label` verin. |
|
|
225
|
+
|
|
226
|
+
## Hazır arayüz bileşenleri
|
|
227
|
+
|
|
228
|
+
Liste, form, süzgeç, kişi seçimi, dosya yükleme ve grafik için hazır bileşenler `/one-components.js`'tedir; açılır
|
|
229
|
+
liste, etiket girişi, pencere, ipucu, avatar, eylem menüsü, sekmeler ve akordeon da oradadır (aşağıda). Bileşenler
|
|
216
230
|
bağımlılıksızdır, uygulamanın **kendi** adresinden yüklenir (satır içi betik gerekmez), `/one-ui.css` görsel dilini
|
|
217
231
|
kullanır, Portal'ın tema ve dil değişimini (`one:context`) kendiliğinden izler ve bütün metinleri Türkçe + İngilizce
|
|
218
232
|
taşır. Tarih `gg.aa.yyyy`, sayı ve para `tr-TR` biçimindedir. İstekler yalnız uygulamanın kendi adresine gider ve
|
|
@@ -275,7 +289,8 @@ Süzgeç değerleri `<one-filter>`'dan parametre olarak gelir: metin için `q`,
|
|
|
275
289
|
iletilerle; hatalı alan `aria-invalid` alır ve odak ilk hataya gider. Sunucu 4xx yanıtındaki RFC 9457 `errors` alanı
|
|
276
290
|
(`{ "alan": "ileti" | ["ileti"] }` ya da `[{ "field" | "pointer": "#/alan", "detail": "..." }]`) alanlara bağlanır;
|
|
277
291
|
eşleşmeyen iletiler ve `detail` formun üstünde gösterilir. Kaydedilmemiş değişiklik köprüye bildirilir
|
|
278
|
-
(`one.setDirty
|
|
292
|
+
(`one.setDirty`; sayfada birden çok form varsa herhangi biri kirli olduğu sürece Portal sorar, sayfadan ayrılan form
|
|
293
|
+
sayılmaz, yeniden eklenen kirli form yeniden sayılır); Vazgeç değişiklik varsa Portal'da onay sorar. Başkası adına açılmış oturumda (Vekalet / Yerine
|
|
279
294
|
Görüntüle) Kaydet kapalıdır; manifest `actingSessions: "write"` beyan eden uygulama forma `acting-write` yazar.
|
|
280
295
|
|
|
281
296
|
**Kişi araması:** bileşen uygulamanın kendi ucuna gider; ucu SDK hazırlar:
|
|
@@ -299,10 +314,90 @@ tarayıcıda denetlenir; sunucu yine kendi sınırını uygular. Kaldır düğme
|
|
|
299
314
|
**Grafik** SVG'dir: `role="img"` + `aria-label`, ekran okuyucu için gizli veri tablosu, renkler `--one-chart-1` ile
|
|
300
315
|
`--one-chart-6` arasındaki değişkenlerden (açık/koyu).
|
|
301
316
|
|
|
317
|
+
### Açılır liste, pencere ve gezinme bileşenleri
|
|
318
|
+
|
|
319
|
+
| Bileşen | Özellikler (JS) | Öznitelikler | Olaylar |
|
|
320
|
+
|---|---|---|---|
|
|
321
|
+
| `<one-select>` | `options` (`[{ value, label, description?, disabled? }]`), `value` (tekli: değer ya da `null`; `multiple`: dizi), `label` | `label`, `multiple`, `required`, `disabled`, `placeholder`, `lang` | `change` `{ value }` |
|
|
322
|
+
| `<one-tag-input>` | `value` (`string[]`), `suggestions` (`string[]`, isteğe bağlı), `label` | `label`, `max` (adet, varsayılan 50), `max-length` (karakter, varsayılan 50), `required`, `disabled`, `placeholder`, `lang` | `change` `{ value }` |
|
|
323
|
+
| `<one-dialog>` | `label`, `body` (gövde öğesi), `open` (salt okunur), `show()` (`Promise<string>` döner), `close(değer?)` | `label` (başlık), `size` (`sm`, `lg`), `accept-label` / `reject-label` (onay penceresi), `severity` (`danger`, `warn`, `info`), `alert` (`role="alertdialog"`), `open` (eklenince açılır, kaldırılınca kapanır), `lang` | `open`; `cancel` `{ reason }` (iptal edilebilir; `escape`, `close`, `backdrop`, `portal`); `close` `{ returnValue }` |
|
|
324
|
+
| `<one-tooltip>` | `text` (`{ tr, en }` ya da metin) | `text`, `text-en`, `placement="bottom"`, `lang` | Yok |
|
|
325
|
+
| `<one-menu>` | `items` (`[{ id, label, danger?, disabled? }]`, ayraç `{ separator: true }`), `label` | `label`, `compact` (yalnız `⋯` düğmesi; `label` erişilebilir ad olur), `disabled`, `lang` | `select` `{ id }` |
|
|
326
|
+
| `<one-avatar>` | Yok | `name`, `src` (kendi adresi, `https:`, `data:image/`, `blob:`), `size` (`sm`, `lg`), `lang` | Yok |
|
|
327
|
+
| `<one-tabs>` | `selected` (sekme anahtarı) | `label` (sekme şeridinin erişilebilir adı), `selected`, `lang` | `change` `{ tab }` |
|
|
328
|
+
| `<one-accordion>` | Yok | `multiple`, `heading-level` (2-6, varsayılan 3), `lang` | `toggle` `{ index, open, key }` |
|
|
329
|
+
|
|
330
|
+
**Açılır liste** (`<one-select>`): APG "combobox + listbox" kalıbı. Yazınca Türkçe harf duyarsız süzer (`ı`/`i`, `ş`/`s`
|
|
331
|
+
gibi), ok tuşları etkin seçeneği taşır (devre dışı seçenek atlanır), Enter seçer, Escape önce listeyi kapatır (olay dışarı,
|
|
332
|
+
ör. pencereye, taşmaz), Alt+Aşağı listeyi açar. Çoklu seçimde liste açık kalır, seçilenler etiket olarak görünür ve boş
|
|
333
|
+
alanda Geri son seçimi kaldırır. En çok 200 seçenek gösterilir (fazlası için "aramayı daraltın" yazar). Liste giriş alanının
|
|
334
|
+
altında akış içindedir (Portal iframe'i içerik boyunda çizer; akış dışındaki liste kesilirdi). Değer seçeneğin `value`'sudur
|
|
335
|
+
(sayı ve mantıksal değer korunur). Seçimi yalnız `null` (ya da `undefined`) atamak temizler. `''` yalnız `''` değerli bir
|
|
336
|
+
seçenek varsa seçilir: önce `options`, sonra `value` atayın; seçenekler değişince artık seçenek olmayan `''` seçimden düşer.
|
|
337
|
+
|
|
338
|
+
**Etiket girişi** (`<one-tag-input>`): Enter ya da virgül etiket ekler; yapıştırılan virgüllü/çok satırlı liste ayrı
|
|
339
|
+
etiketlere bölünür; alandan ayrılınca yazılı kalan metin etikete dönüşür; aynı etiket (büyük/küçük harf ve Türkçe harf
|
|
340
|
+
duyarsız) ikinci kez eklenmez. Uzunluk, adet ve yinelenme nedenini durum satırı söyler. `suggestions` verilirse kutu
|
|
341
|
+
combobox olur ve öneriler listelenir.
|
|
342
|
+
|
|
343
|
+
**Pencere** (`<one-dialog>`): tarayıcının kipli penceresidir (`<dialog>.showModal()`): odak pencerede kalır, sayfanın geri
|
|
344
|
+
kalanı etkisizdir. Alt öğeler gövdeye taşınır; `data-one-dialog-footer` taşıyan öğe alt bilgiye gider. `data-one-close="değer"`
|
|
345
|
+
taşıyan her düğme pencereyi o değerle kapatır (`<form method="dialog">` da çalışır). İlk odak sırası: `autofocus`, onay
|
|
346
|
+
penceresinde "vazgeç", gövdedeki ilk odaklanabilir öğe, kapat düğmesi; kapanınca odak açan öğeye döner. Escape, kapat
|
|
347
|
+
düğmesi ve karartmaya tıklama iptal edilebilir `cancel` olayıdır (`preventDefault` pencereyi açık tutar).
|
|
348
|
+
|
|
349
|
+
- Pencere iframe'in **görünen** dilimine yerleşir (uzun sayfada kullanıcının baktığı yerde açılır).
|
|
350
|
+
- Açılınca köprü `one.setModal(true)` ile Portal'a bildirir; Portal kendi ekranını aynı renkle karartır ve iki karartma
|
|
351
|
+
kenarda birleşir. Kullanıcı Portal'ın karartılmış alanına tıklarsa ya da Portal'da Escape'e basarsa Portal karartmayı
|
|
352
|
+
kendisi kaldırır ve pencere `cancel` (`reason: "portal"`) ile kapanır. `cancel` iptal edilirse pencere açık kalır ama
|
|
353
|
+
Portal yeniden karartılmaz.
|
|
354
|
+
- **Onay penceresi** (`accept-label` / `reject-label`): sonuç `'accept'` ya da `'reject'`. ⛔ Portal içindeyken pencere
|
|
355
|
+
iframe'de ÇİZİLMEZ, Portal'ın onay penceresiyle (`one.confirm`) sorulur: başlık `label`, ileti gövdenin DÜZ
|
|
356
|
+
METNİ (HTML ve biçim taşınmaz), düğmeler `accept-label` / `reject-label`, `severity`. Portal'ın onay penceresi
|
|
357
|
+
uygulamadan kapatılamaz (`close()` etkisizdir). Portal dışında (yerel geliştirme) aynı pencere sayfada çizilir.
|
|
358
|
+
- Zengin içerikli onay (biçimli metin, alan) gerekiyorsa onay öznitelikleri olmadan genel pencere kullanın ve düğmeleri
|
|
359
|
+
`data-one-close` ile kendiniz koyun; o pencere Portal içinde de iframe'de çizilir.
|
|
360
|
+
|
|
361
|
+
**Bildirim** için ayrı bileşen yoktur: `one.toast(...)` Portal içindeyken bildirimi Portal'a verir (tek görünüm); Portal
|
|
362
|
+
dışında hazır bileşenler yüklüyse sayfanın köşesinde gösterir (hata 8, diğerleri 5 saniye; kapatılabilir).
|
|
363
|
+
|
|
364
|
+
**İpucu** (`<one-tooltip>`): ilk alt öğe tetikleyicidir ve **odaklanabilir** olmalıdır (düğme, bağlantı). Fareyle üzerine
|
|
365
|
+
gelince ve klavye odağıyla görünür, Escape ile kapanır, fare ipucunun üzerine geçebilir (WCAG 1.4.13). Tetikleyiciye
|
|
366
|
+
`aria-describedby` bağlanır. İpucuna önemli bilgi koymayın; ipucu dokunmatik ekranda görünmeyebilir.
|
|
367
|
+
|
|
368
|
+
**Eylem menüsü** (`<one-menu>`): APG "menu button". Düğme `aria-haspopup="menu"`; açınca ilk öğe odaklanır (Yukarı ok ile
|
|
369
|
+
son öğe), oklar/Home/End gezinir, harf yazınca o harfle başlayan öğeye atlar, Enter/Boşluk seçer, Escape kapatıp odağı
|
|
370
|
+
düğmeye döndürür. Devre dışı öğe odaklanır ama seçilmez. Menü aşağıda yer yoksa yukarı açılır.
|
|
371
|
+
|
|
372
|
+
**Avatar** (`<one-avatar>`): baş harfler Türkçe büyük harfle (`şule yıldız` için `ŞY`), renk addan kararlı biçimde seçilir;
|
|
373
|
+
erişilebilir ad kişinin adıdır. Görsel yüklenemezse baş harflere döner.
|
|
374
|
+
|
|
375
|
+
**Sekmeler** (`<one-tabs>`): alt öğeler paneldir: `data-label` (+ `data-label-en`), isteğe bağlı `data-tab` (anahtar) ve
|
|
376
|
+
`data-disabled`. APG "tabs": oklar devre dışı sekmeyi atlayarak gezer ve seçer, Home/End uçlara gider. Uygulama menüsü
|
|
377
|
+
DEĞİLDİR (menüyü Portal çizer); içerik içi gruplama içindir. Seçimin tek kaynağı `selected` özniteliğidir: `selected`
|
|
378
|
+
özelliği başlangıçta da gösterilen sekmeyi döndürür, kullanıcının seçimi özniteliğe yazılır, uygulama özniteliği sonradan
|
|
379
|
+
da değiştirebilir. `change` yalnız seçim gerçekten değişince yayılır. Panel sonradan eklenir ya da `data-label`,
|
|
380
|
+
`data-tab`, `data-disabled` değişirse şerit yenilenir.
|
|
381
|
+
|
|
382
|
+
**Akordeon** (`<one-accordion>`): alt öğeler bölümdür: `data-label` (+ `data-label-en`), başlangıçta açık olan için
|
|
383
|
+
`data-open`. Başlık düğmesi `aria-expanded` taşır, oklar başlıklar arasında gezer; `multiple` yoksa aynı anda tek bölüm açıktır.
|
|
384
|
+
`data-open` iki yönlüdür: kullanıcı bölüm açınca öznitelik eklenir, kapatınca kalkar; uygulama özniteliği ekleyip
|
|
385
|
+
kaldırarak bölümü açıp kapatabilir.
|
|
386
|
+
|
|
387
|
+
**Sayfadan ayrılıp yeniden eklenen bileşen:** ayrıyken değişen öznitelikler yeniden eklenince uygulanır (ör. `src`
|
|
388
|
+
değişen tablo bir kez yeniden yüklenir, `open` alan pencere açılır, `selected` alan sekmeler o sekmeyi gösterir); ayrıyken
|
|
389
|
+
değişip eski değerine dönen öznitelik yok sayılır (tablo bulunduğu sayfada kalır). Ayrılan açık pencere `''` ile kapanır
|
|
390
|
+
ve Portal karartması kalkar; yeniden eklenince kapalı görünür, `show()` ya da `open` ile yeniden açılır (Portal'ın onay
|
|
391
|
+
penceresi hariç: o yanıt gelince sonuçlanır). Açık liste, menü ve ipucu kapanır.
|
|
392
|
+
|
|
393
|
+
**Açılır öğeler ve yükseklik:** menü ve ipucu kapsayıcılarına göre mutlak konumludur; açıkken alt kenarları otomatik
|
|
394
|
+
yükseklik ölçütüne katılır (`data-one-popup`), sayfanın altındaki menü iframe'in alt kenarında kesilmez.
|
|
395
|
+
|
|
302
396
|
| Sabit | Değer |
|
|
303
397
|
|---|---|
|
|
304
398
|
| `COMPONENTS_SCRIPT_PATH` | `/one-components.js` (`ONE_COMPONENTS_SCRIPT`) |
|
|
305
|
-
| `ONE_COMPONENT_TAGS` |
|
|
399
|
+
| `ONE_COMPONENT_TAGS` | on dört etiket adı |
|
|
400
|
+
| `ONE_COMPONENT_EVENTS` | etiket başına yayılan olay adları (`OneComponentEvents` ile aynı küme) |
|
|
306
401
|
| `PEOPLE_SEARCH_PATH`, `PEOPLE_SEARCH_MIN_QUERY`, `PEOPLE_SEARCH_MAX_QUERY`, `PEOPLE_SEARCH_MAX_RESULTS` | `/api/one/people`, 2, 100, 20 |
|
|
307
402
|
| `FILE_UPLOAD_DEFAULT_ACTION`, `FILE_UPLOAD_DEFAULT_MAX_BYTES` | `/api/files`, 5 MB |
|
|
308
403
|
| `TABLE_DEFAULT_PAGE_SIZE`, `TABLE_MAX_PAGE_SIZE` | 20, 100 |
|
|
@@ -310,7 +405,11 @@ tarayıcıda denetlenir; sunucu yine kendi sınırını uygular. Kaldır düğme
|
|
|
310
405
|
Tipler: `OneTableColumn`, `OneTableElement`, `OneListResponse`, `OneFormField`, `OneFormElement`, `OneFormErrors`,
|
|
311
406
|
`OneFilterField`, `OneFilterElement`, `OneFilterChange`, `OnePerson`, `OnePersonPickerElement`, `OneUploadedFile`,
|
|
312
407
|
`OneFileUploadElement`, `OneChartData`, `OneChartSeries`, `OneChartElement`, `OneChoiceOption`, `OneLocalizedText`,
|
|
313
|
-
`OneFieldType`, `
|
|
408
|
+
`OneFieldType`, `OneSelectElement`, `OneSelectOption`, `OneSelectValue`, `OneTagInputElement`, `OneDialogElement`,
|
|
409
|
+
`OneDialogCancelReason`, `OneTooltipElement`, `OneMenuElement`, `OneMenuItem`, `OneTabsElement`. Olay yükleri bileşen
|
|
410
|
+
başına `OneComponentEvents[etiket][olay]` (ör. `OneComponentEvents['one-dialog']['cancel']` = `{ reason }`) ya da
|
|
411
|
+
`OneComponentEvent<etiket, olay>` (`CustomEvent`) ile yazılır; eski birleşik `OneComponentEventMap` yükü daraltamaz
|
|
412
|
+
ve kullanımdan kalkacaktır. Sunucu: `peopleSearchHandler`, `searchPeople` (saf), `foldPersonText`,
|
|
314
413
|
`PeopleSearchItem`, `PeopleSearchEnv`, `PeopleSearchOptions`.
|
|
315
414
|
|
|
316
415
|
## Backend istemcisi
|
|
@@ -328,7 +427,7 @@ Backend "kullanıcı yetkisi ∩ scope" kuralını kendisi uygular; SDK ek bir y
|
|
|
328
427
|
|
|
329
428
|
## Dosya servisi
|
|
330
429
|
|
|
331
|
-
Manifest'te `services.files: true` ise platform kurulum başına bir dosya deposu açar ve `env.FILES`'a bağlar
|
|
430
|
+
Manifest'te `services.files: true` ise platform kurulum başına bir dosya deposu açar ve `env.FILES`'a bağlar.
|
|
332
431
|
İzolasyon depo sınırındadır: anahtara `portalId` eklenmez, başka kurulumun deposu görünmez.
|
|
333
432
|
|
|
334
433
|
| Üye | Açıklama |
|
|
@@ -343,7 +442,7 @@ Manifest'te `services.files: true` ise platform kurulum başına bir dosya depos
|
|
|
343
442
|
|
|
344
443
|
## Önbellek servisi
|
|
345
444
|
|
|
346
|
-
Manifest'te `services.cache: true` ise platform kurulum başına bir önbellek açar ve `env.CACHE`'e bağlar
|
|
445
|
+
Manifest'te `services.cache: true` ise platform kurulum başına bir önbellek açar ve `env.CACHE`'e bağlar. İzolasyon
|
|
347
446
|
önbellek sınırındadır. Bu bir **önbellektir**: nihai tutarlıdır (yazma başka bölgelerde 60 sn'ye kadar gecikebilir).
|
|
348
447
|
Sayaç, kilit ya da kalıcı kayıt için kullanılmaz; kalıcı veri veritabanındadır.
|
|
349
448
|
|
|
@@ -367,9 +466,9 @@ yalnız hiçbir ileti kuyruğa girmez **ve** atlananların tamamı `rate-limited
|
|
|
367
466
|
girmeyen istek **200** + `queued: 0` alır. Sonucu `skipped[].reason` ile denetleyin (backend `OneServiceHandlers`,
|
|
368
467
|
okundu 15.10.2026).
|
|
369
468
|
|
|
370
|
-
**Org kimliğiyle
|
|
469
|
+
**Org kimliğiyle alıcı:** `toOrgUserIds` alanı org şemasındaki kullanıcı kimliğini (legacy `User._id`, 24-hex) kabul eder. Yönetici zinciri ve grup üyeleri bu uzayda geldiği için onlara `sub` bulmadan bildirim gönderilebilir. `toSubjects` ile birlikte verilebilir; toplam alıcı en çok 50'dir, aynı kişi iki kez sayılmaz. Biçimi bozuk org kimliği `invalid-org-user`, portalın aktif kullanıcısı olmayan kimlik `not-in-portal` ile atlanır. ⛔ İki kimlik uzayını karıştırmayın: `ctx.user.sub` org kimliği DEĞİLDİR (ikisi de 24-hex; karışırsa hata vermez, kişi `not-in-portal` ile sessizce atlanır).
|
|
371
470
|
|
|
372
|
-
### Mobil bildirim
|
|
471
|
+
### Mobil bildirim
|
|
373
472
|
|
|
374
473
|
`sendPush(api, { toSubjects, toOrgUserIds?, title, text })`, `POST One/services/push` ucunu çağırır; scope `push.execute`. Devoplus
|
|
375
474
|
Portal mobil uygulamasına **yalnız başlık + metin** gider (başlık 1-100, metin 1-300 karakter; bu sınırı sunucu uygular, SDK
|
|
@@ -379,7 +478,7 @@ Portal mobil uygulamasına **yalnız başlık + metin** gider (başlık 1-100, m
|
|
|
379
478
|
⚠️ Push bugün **hiçbir ortamda açık değildir**: uç kuyruğa almadan `OneError` `ONE-APP-E-029` ile reddeder (kapalı
|
|
380
479
|
kanal sessiz başarı gibi görünmesin). Kodunuz bu hatada çalışmayı sürdürmeli; `notify` kanalları bağımsız gönderir.
|
|
381
480
|
|
|
382
|
-
### Hazır bildirim senaryoları
|
|
481
|
+
### Hazır bildirim senaryoları
|
|
383
482
|
|
|
384
483
|
`approvalRequest`, `approvalResult`, `reminder`, `systemNotice`, `operationResult`, `verificationCode` aynı girdiden e-posta konusu + gövdesi ve SMS metni üretir (`ScenarioMessage { subject, text, smsText }`; Türkçe resmi "siz" ya da `lang: 'en'`). Metinler backend sınırlarına göre kırpılır (konu ≤ 200, SMS ≤ 300; e-posta gövdesi 10.000'i aşarsa `ONE-SDK-E-062`). Bağlantı yalnız `https` olabilir ve kullanıcı adı/parola taşıyamaz (`normalizeLink`, `ONE-SDK-E-061`). `notify(api, message, { toSubjects?, toOrgUserIds?, channels })` kanalları (`mail`, `sms`, `push`) **bağımsız** gönderir: SMS ya da push düşse de e-posta gider; sonuç kanal adıyla döner, düşen kanal `{ error }` taşır. `toPush(message, to)` başlığı e-posta konusundan (≤ 100, `PUSH_TITLE_MAX_LENGTH`), metni SMS metninden (≤ 300, `PUSH_TEXT_MAX_LENGTH`) kurar; kırpma bir emojiyi ortasından bölmez.
|
|
385
484
|
|
|
@@ -397,11 +496,11 @@ if (me) {
|
|
|
397
496
|
}
|
|
398
497
|
```
|
|
399
498
|
|
|
400
|
-
### Doğrulama kodu
|
|
499
|
+
### Doğrulama kodu
|
|
401
500
|
|
|
402
501
|
`generateVerificationCode(digits = 6)` (4-10 hane, yanlılıksız); `generateSalt()`; `hashVerificationCode({ code, salt, purpose, sub })`; `verificationCodeMatches({ ..., hash })` (sabit süreli karşılaştırma). Özet **amaca ve kişiye** bağlıdır: başka bir işlem ya da başka bir kişi için üretilmiş kod kabul edilmez. Kodun kendisini değil `salt + hash + son kullanma + deneme sayısı`nı uygulamanın **veritabanında** saklayın (önbellek nihai tutarlıdır; deneme sayacı ve tek kullanım orada güvenilir değildir). Süreyi ve deneme tavanını (ör. 5) uygulama uygular; doğru koddan sonra kaydı silin.
|
|
403
502
|
|
|
404
|
-
## Organizasyon şeması
|
|
503
|
+
## Organizasyon şeması
|
|
405
504
|
|
|
406
505
|
Scope `orgschema.read` (salt okuma) + kullanıcının kendi `Portal.Generic.Read` izni. Veri aktif portalın aktif kayıtlarıdır.
|
|
407
506
|
|
|
@@ -418,9 +517,9 @@ Saf yardımcılar (ağ yok): `managerOf(users, orgUserId, kind?)`; `approvalChai
|
|
|
418
517
|
## DEXA (ERP okuma) servisi
|
|
419
518
|
|
|
420
519
|
`queryDexa(api, key, parameters?)`, `POST One/services/dexa/query` ucunu çağırır. Uygulama ERP verisini **yalnız önceden tanımlı
|
|
421
|
-
QueryStore anahtarlarıyla** okur
|
|
520
|
+
QueryStore anahtarlarıyla** okur: serbest SQL, ERP'ye yazan anahtar ya
|
|
422
521
|
da desteklenmeyen sorgu türü çalıştırılamaz. Hangi anahtarın çalışabileceğinin **tek kaynağı platform kayıt
|
|
423
|
-
defteridir**: anahtarları
|
|
522
|
+
defteridir**: anahtarları Devoplus Console'da uygulamanın kaydına yönetici ekler; kayıtta olmayan anahtar 403
|
|
424
523
|
`ONE-APP-E-024` alır. Manifest `services.dexa.queryKeys` yalnız **beyandır** (çalışma anında okunmaz) ve `scopes`
|
|
425
524
|
içinde `dexa.read` ile birlikte yazılır; biri eksikse manifest doğrulaması düşer. Belirteçte `dexa.read` yoksa
|
|
426
525
|
backend 403 `ONE-APP-E-017` döner.
|
|
@@ -473,7 +572,7 @@ başına saatte 600 sorgu); 400 `ONE-APP-E-076` (gönderilen bağlam kodu geçer
|
|
|
473
572
|
karakteri içeriyor); 403 `ONE-APP-E-077` (gönderilen `UserCode` ya da `CompanyCode` kurulumun portalında tanımlı değil);
|
|
474
573
|
400 `ONE-APP-E-078` (arka plan işinde sorgu bir bağlam kodu istiyor ve uygulama onu göndermedi).
|
|
475
574
|
|
|
476
|
-
### Bağlam kodları: `UserCode`, `CompanyCode`, `CostCenterCode`
|
|
575
|
+
### Bağlam kodları: `UserCode`, `CompanyCode`, `CostCenterCode`
|
|
477
576
|
|
|
478
577
|
Sorgu bu kodlardan birini bildiriyorsa değer şu sırayla belirlenir:
|
|
479
578
|
|
|
@@ -498,14 +597,14 @@ Sorgu bu kodlardan birini bildiriyorsa değer şu sırayla belirlenir:
|
|
|
498
597
|
const stock = await queryDexa(api, 'Ornek.MagazaStok', { CompanyCode: '01', StoreCode: storeCode })
|
|
499
598
|
```
|
|
500
599
|
|
|
501
|
-
## DEXA işlemleri: ERP'ye veri yazma
|
|
600
|
+
## DEXA işlemleri: ERP'ye veri yazma
|
|
502
601
|
|
|
503
602
|
`runDexaCommand(api, key, parameters, { idempotencyKey })`, `POST One/services/dexa/command` ucunu `Idempotency-Key`
|
|
504
603
|
başlığıyla çağırır; `getDexaCommandStatus(api, idempotencyKey)` ise `GET One/services/dexa/command/{anahtar}` ucunu. Scope **`dexa.write`**.
|
|
505
604
|
Okuma sorgularından (`queryDexa`) ayrıdır: bu uç ERP'ye **VERİ YAZAR**. Çalışması dört kapının kesişimidir:
|
|
506
605
|
|
|
507
606
|
1. Belirteçte `dexa.write` (yoksa 403 `ONE-APP-E-017`).
|
|
508
|
-
2. Anahtar uygulamanın kayıt defterindeki işlem izin listesinde (`dexaCommandKeys`,
|
|
607
|
+
2. Anahtar uygulamanın kayıt defterindeki işlem izin listesinde (`dexaCommandKeys`, Devoplus Console; yoksa 403 `ONE-APP-E-030`).
|
|
509
608
|
3. Anahtar koddaki ERP komut kataloğunda **One uygulamalarına açık** (yoksa 404 `ERPCMD-APP-E-006`; açmak backend kod
|
|
510
609
|
değişikliğidir; ⚠️ bugün açık hiçbir işlem yoktur).
|
|
511
610
|
4. Kullanıcının o işleme özgü izni (yoksa 403 `ERPCMD-APP-E-0xx`).
|
|
@@ -568,10 +667,10 @@ Sorgulardaki ayrılmış bağlam parametresi yasağı (`LangCode` vb.) işlemler
|
|
|
568
667
|
uygulamıyor. 4xx yanıtların hepsi ERP'ye **hiçbir şey gönderilmediği** anlamına gelir; ayrıca 429 `ONE-APP-E-018`
|
|
569
668
|
(kurulum başına saatte 300 işlem).
|
|
570
669
|
|
|
571
|
-
## Zamanlanmış görev ve kuyruk
|
|
670
|
+
## Zamanlanmış görev ve kuyruk
|
|
572
671
|
|
|
573
672
|
Uygulama işi manifest `jobs` ile **beyan eder** ve işleyicisini yazar; işi platform tetikler. Ayrıntı ve örnek:
|
|
574
|
-
|
|
673
|
+
belgelerdeki `/docs/jobs` sayfası; manifest kuralları `/docs/manifest` sayfasındaki `jobs` bölümünde.
|
|
575
674
|
|
|
576
675
|
| Üye | Açıklama |
|
|
577
676
|
|---|---|
|
|
@@ -587,7 +686,7 @@ taşınmaz. Zamanlanmış iş kullanıcısızdır (`ctx.user` null). İkisinde d
|
|
|
587
686
|
çağrılır (bkz. aşağıdaki bölüm). `/__one/` yolu platforma ayrılmıştır ve internetten kapalıdır. Yerelde (`one dev`) zamanlama
|
|
588
687
|
tetiklenmez ve `enqueue` 503 döner.
|
|
589
688
|
|
|
590
|
-
## Devoplus servisleri arka plan işinde ve ajan aracında
|
|
689
|
+
## Devoplus servisleri arka plan işinde ve ajan aracında
|
|
591
690
|
|
|
592
691
|
İşte ve ajan aracında tarayıcıdan gelen bir belirteç yoktur; servis istemcileri (`BackendClient`) yine de çağrı yapar:
|
|
593
692
|
platform çıkış katmanı isteği doğru kimlikle Devoplus'a taşır (`new BackendClient({ baseUrl, authorization: null })` ya
|
|
@@ -610,9 +709,9 @@ Devoplus'a **iletilmez**.
|
|
|
610
709
|
`logEvent(ctx, level, message, data?)` sistem/çalışma zamanı olayı; `logError(ctx, message, error, data?)` beklenmeyen
|
|
611
710
|
hata (ad, ileti ve en çok 4.000 karakterlik yığın; `OneError` kodu ve durumu korunur); `logAudit(ctx, action, target?,
|
|
612
711
|
data?)` kritik kullanıcı işlemi; aktör zorunludur (anonim bağlamda fırlatır). Hepsi tek satır JSON olarak yazılır ve
|
|
613
|
-
**platform günlüğünde saklanır**: platform her kurulumda günlüğü açar
|
|
712
|
+
**platform günlüğünde saklanır**: platform her kurulumda günlüğü açar, örnekleme manifest
|
|
614
713
|
`observability.headSamplingRate` (varsayılan 1). Satırları platform ekibi kurulum (uygulama × portal) süzgeciyle
|
|
615
|
-
görür;
|
|
714
|
+
görür; uygulamanın son hata kayıtları kısaltılmış olarak kullanım ve hata panosunda görünür (`one status`).
|
|
616
715
|
|
|
617
716
|
Koruma: `data` içinde adı parola, token, secret, authorization, cookie, API anahtarı, private key, credential ya da
|
|
618
717
|
parola/şifre geçen alanların değeri `"[gizli]"` olur (her derinlikte, girdi değişmez; `redact`); JSON'u 8 KiB'ı aşan
|
|
@@ -624,7 +723,7 @@ metin döner.
|
|
|
624
723
|
## Denetim günlüğü (kalıcı)
|
|
625
724
|
|
|
626
725
|
`recordAudit(api, ctx, action, target?, data?)`, `logAudit` izini yazar **ve** `POST One/services/audit` ile
|
|
627
|
-
Devoplus denetim günlüğüne kaydeder (scope `audit.write
|
|
726
|
+
Devoplus denetim günlüğüne kaydeder (scope `audit.write`). Kayıt Devoplus Console Denetim Günlüğü'nde "Devoplus
|
|
628
727
|
One uygulaması" türüyle, `reason = {slug}:{action}`, `targetLabel = target`, `details = data` olarak görünür; aktör
|
|
629
728
|
ve portal istekle gönderilmez, backend doğrulanmış bağlamdan alır. Kurallar sunucuyla birebir: `action`
|
|
630
729
|
`^[a-z0-9][a-z0-9._:-]*$` ≤ 64, `target` ≤ 200, `data` JSON nesnesi ≤ 4 KiB (`buildAuditRequest`; ihlal
|
|
@@ -632,7 +731,7 @@ ve portal istekle gönderilmez, backend doğrulanmış bağlamdan alır. Kuralla
|
|
|
632
731
|
`{ recorded: false }` + uyarı olayı döner, isteğiniz düşmez. ⛔ `target`/`data`ya kişisel veri ya da sır yazmayın
|
|
633
732
|
(365 gün saklanır).
|
|
634
733
|
|
|
635
|
-
## Yapay zeka servisi
|
|
734
|
+
## Yapay zeka servisi
|
|
636
735
|
|
|
637
736
|
`completeAi(api, ctx, istek)` (eşdeğeri `ai.complete`), `POST One/services/ai` ucunu çağırır (scope `ai.use`; kullanıcıdan ayrıca
|
|
638
737
|
onay istenmez). Diğer `One/services/*` uçlarıyla aynı kapıdan geçer; kullanıcı, portal ve uygulama istekle GÖNDERİLMEZ.
|
|
@@ -658,7 +757,7 @@ olup olmadığı Devoplus'tadır: kapalı/yapılandırılmamış portalda 503, k
|
|
|
658
757
|
hesaplamaz** ve **kayıt yazmaz**: tutar/toplam/tarih farkı kodda hesaplanıp `input`'a hazır verilir; çıktı bir öneridir,
|
|
659
758
|
veritabanına yazmadan önce kod doğrular. `input`'a sır ya da işin gerektirmediği kişisel veri konmaz.
|
|
660
759
|
|
|
661
|
-
## Devoplus yapay zekasına açılan araçlar
|
|
760
|
+
## Devoplus yapay zekasına açılan araçlar
|
|
662
761
|
|
|
663
762
|
Devoplus yapay zekası, kullanıcı Devoplus'ta bir soru sorduğunda uygulamanın verisine ve işlemlerine yalnız manifest
|
|
664
763
|
`agent.tools[]` ile beyan edilen **araçlarla**, kullanıcının kendi kimliğiyle ulaşır. Her araç üç yerde durur: manifest
|
|
@@ -700,7 +799,7 @@ Girdi şeması JSON Schema'nın dar bir alt kümesidir: `type` (`object`, `strin
|
|
|
700
799
|
`app: { slug, name }` + `agent`) ve `GET /.well-known/one-agent.md` (`AGENT_GUIDE.md`, ≤ 256 KiB) sunar; manifest'te
|
|
701
800
|
`agent` yoksa 404. Rehbere kullanıcı verisi, sır ya da iç adres yazılmaz.
|
|
702
801
|
|
|
703
|
-
## Veri modeli ve kayıt işlemleri
|
|
802
|
+
## Veri modeli ve kayıt işlemleri
|
|
704
803
|
|
|
705
804
|
Kayıt tutan uygulamada tabloyu, tipleri ve uçları elle yazmak yerine `one.data.json`'da **varlıkları ve alanları**
|
|
706
805
|
tanımlayın; gerisini `one data generate` ve `createCrudHandler` yapar.
|
|
@@ -791,7 +890,7 @@ modelden seçilir.
|
|
|
791
890
|
bulunur. ⚠️ Bir metin alanını **elle yazdığınız SQL ile güncelliyorsanız** arama kolonunu da yazın
|
|
792
891
|
(`"<alan>_fold" = ?` + `foldSearchText(değer)`) ya da `NULL` yapın; yoksa arama eski metne göre bulur.
|
|
793
892
|
|
|
794
|
-
## Rapor ve dışa aktarma
|
|
893
|
+
## Rapor ve dışa aktarma
|
|
795
894
|
|
|
796
895
|
`toCsv(rows, columns, { lang, delimiter, timeZone })`; `toXlsx(rows, columns, { lang, sheetName, timeZone })`;
|
|
797
896
|
`exportResponse(içerik, { fileName, format: 'csv' | 'xlsx' | 'html' })`; `renderPrintableReport({ title, subtitle,
|
|
@@ -814,8 +913,8 @@ columns, rows, totals, lang })`. Sütun: `{ key, title: { tr, en }, type?: 'text
|
|
|
814
913
|
|---|---|---|
|
|
815
914
|
| `ONE-SDK-E-001` | 500 | Platform bağlamı eksik (dispatch dışından çağrı) |
|
|
816
915
|
| `ONE-SDK-E-002` | 401 | Oturum gerekli |
|
|
817
|
-
| `ONE-SDK-E-003` | 403 | Scope yok (onaya bağlı scope'ta kullanıcı henüz izin vermemiş olabilir
|
|
818
|
-
| `ONE-SDK-E-004` | 403 | Uygulama izni yok (`requirePermission
|
|
916
|
+
| `ONE-SDK-E-003` | 403 | Scope yok (onaya bağlı scope'ta kullanıcı henüz izin vermemiş olabilir) |
|
|
917
|
+
| `ONE-SDK-E-004` | 403 | Uygulama izni yok (`requirePermission`) |
|
|
819
918
|
| `ONE-SDK-E-010...013` | 400 | Dosya anahtarı / adı geçersiz |
|
|
820
919
|
| `ONE-SDK-E-014` | 413 | Dosya boyut tavanı (`put` ve `readBoundedBody`) |
|
|
821
920
|
| `ONE-SDK-E-015` | 500 | Dosya yazılamadı |
|
|
@@ -879,7 +978,7 @@ Backend'den dönen kodlar (`ONE-APP-E-*`, `USRDIR-*` vb.) `OneError.code` ile ol
|
|
|
879
978
|
## Sürümleme
|
|
880
979
|
|
|
881
980
|
SemVer; `0.x` boyunca küçük sürüm artışı kırıcı olabilir; `CHANGELOG.md` **Kırıcı** başlığına bakın. Paket iki
|
|
882
|
-
kanaldan otomatik yayımlanır (`Publish SDK (npm)` iş
|
|
981
|
+
kanaldan otomatik yayımlanır (`Publish SDK (npm)` iş akışı):
|
|
883
982
|
|
|
884
983
|
| Kanal | Ne zaman | Sürüm | npm etiketi |
|
|
885
984
|
|---|---|---|---|
|
package/dist/client.d.ts
CHANGED
|
@@ -116,6 +116,20 @@ export interface OneBridge {
|
|
|
116
116
|
setTitle(title: string | null): void;
|
|
117
117
|
setDirty(dirty: boolean): void;
|
|
118
118
|
setRoute(path: string): void;
|
|
119
|
+
/**
|
|
120
|
+
* Uygulama içinde bir pencere (modal) açık mı (D-96)? `true` Portal'a arka planı karartmasını söyler, `false` karartmayı
|
|
121
|
+
* kaldırır; aynı değer yeniden gönderilmez. `<one-dialog>` bunu kendisi çağırır — elle yalnız kendi penceresini çizen
|
|
122
|
+
* uygulama kullanır. Karartma Portal'ındır: kullanıcı Portal'ın karartılmış alanına tıklarsa ya da Escape'e basarsa Portal
|
|
123
|
+
* karartmayı kaldırır ve `onModalDismiss` dinleyicileri çağrılır (uygulama Portal'ı kilitleyemez). Pencere açıkken odak
|
|
124
|
+
* iframe'de olduğundan Escape Portal'a ulaşmaz: uygulama tuşu işlemezse (tuşa basıldığı anda sayfada KİPLİ bir
|
|
125
|
+
* `<dialog>` yoktu, olay `stopPropagation()` ile durdurulmadı, iptal edilmedi ve olay bittiğinde pencere hâlâ açık)
|
|
126
|
+
* köprü onu Portal'a iletir. Tarayıcı Escape'i yalnız kipli `<dialog>`'da
|
|
127
|
+
* (`showModal()`) kendisi `cancel` olarak işler; `<one-dialog>` da öyle. Escape'i zaman uyumsuz işleyen uygulama
|
|
128
|
+
* `preventDefault()` çağırmalıdır; aksi hâlde Portal da vazgeçer.
|
|
129
|
+
*/
|
|
130
|
+
setModal(open: boolean): void;
|
|
131
|
+
/** Portal karartmayı kullanıcı isteğiyle kaldırdı: açık pencere "vazgeçildi" diye kapatılmalı (D-96). */
|
|
132
|
+
onModalDismiss(fn: () => void): () => void;
|
|
119
133
|
}
|
|
120
134
|
/** Uygulama içi yol geçerli mi (manifest `navigation[].path` kuralı)? */
|
|
121
135
|
export declare function isRoutePath(path: unknown): path is string;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|