@sentroy-co/client-sdk 2.0.0 → 2.2.0

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 (47) hide show
  1. package/dist/index.d.ts +3 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +3 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/react/MediaManager.d.ts +69 -0
  6. package/dist/react/MediaManager.d.ts.map +1 -0
  7. package/dist/react/MediaManager.js +216 -0
  8. package/dist/react/MediaManager.js.map +1 -0
  9. package/dist/react/index.d.ts +4 -0
  10. package/dist/react/index.d.ts.map +1 -0
  11. package/dist/react/index.js +13 -0
  12. package/dist/react/index.js.map +1 -0
  13. package/dist/react/lib/Lightbox.d.ts +18 -0
  14. package/dist/react/lib/Lightbox.d.ts.map +1 -0
  15. package/dist/react/lib/Lightbox.js +40 -0
  16. package/dist/react/lib/Lightbox.js.map +1 -0
  17. package/dist/react/lib/use-media-list.d.ts +21 -0
  18. package/dist/react/lib/use-media-list.d.ts.map +1 -0
  19. package/dist/react/lib/use-media-list.js +50 -0
  20. package/dist/react/lib/use-media-list.js.map +1 -0
  21. package/dist/react/lib/utils.d.ts +17 -0
  22. package/dist/react/lib/utils.d.ts.map +1 -0
  23. package/dist/react/lib/utils.js +62 -0
  24. package/dist/react/lib/utils.js.map +1 -0
  25. package/dist/resources/storage.d.ts +23 -0
  26. package/dist/resources/storage.d.ts.map +1 -0
  27. package/dist/resources/storage.js +31 -0
  28. package/dist/resources/storage.js.map +1 -0
  29. package/dist/types.d.ts +40 -0
  30. package/dist/types.d.ts.map +1 -1
  31. package/package.json +40 -4
  32. package/src/http.ts +151 -0
  33. package/src/index.ts +106 -0
  34. package/src/react/MediaManager.tsx +628 -0
  35. package/src/react/index.ts +13 -0
  36. package/src/react/lib/Lightbox.tsx +162 -0
  37. package/src/react/lib/use-media-list.ts +54 -0
  38. package/src/react/lib/utils.ts +73 -0
  39. package/src/resources/buckets.ts +50 -0
  40. package/src/resources/domains.ts +16 -0
  41. package/src/resources/inbox.ts +99 -0
  42. package/src/resources/mailboxes.ts +11 -0
  43. package/src/resources/media.ts +115 -0
  44. package/src/resources/send.ts +11 -0
  45. package/src/resources/storage.ts +28 -0
  46. package/src/resources/templates.ts +16 -0
  47. package/src/types.ts +316 -0
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@ import { Inbox } from "./resources/inbox";
5
5
  import { Send } from "./resources/send";
6
6
  import { Buckets } from "./resources/buckets";
7
7
  import { MediaResource } from "./resources/media";
8
+ import { Storage } from "./resources/storage";
8
9
  import type { SentroyClientConfig } from "./types";
9
10
  export declare class Sentroy {
10
11
  readonly domains: Domains;
@@ -14,6 +15,7 @@ export declare class Sentroy {
14
15
  readonly send: Send;
15
16
  readonly buckets: Buckets;
16
17
  readonly media: MediaResource;
18
+ readonly storage: Storage;
17
19
  /**
18
20
  * Create a new Sentroy client.
19
21
  *
@@ -36,6 +38,6 @@ export declare class Sentroy {
36
38
  */
37
39
  constructor(config: SentroyClientConfig);
38
40
  }
39
- export type { SentroyClientConfig, ApiResponse, Domain, MailboxUser, Template, LocalizedString, MessageAddress, MessageSummary, MessageDetail, AttachmentInfo, Mailbox, InboxListParams, Attachment, SendParams, SendResult, Bucket, CreateBucketParams, UpdateBucketParams, Media, MediaType, MediaThumbnail, MediaImageMeta, MediaListParams, MediaListResult, UploadMediaParams, } from "./types";
41
+ export type { SentroyClientConfig, ApiResponse, Domain, MailboxUser, Template, LocalizedString, MessageAddress, MessageSummary, MessageDetail, AttachmentInfo, Mailbox, InboxListParams, Attachment, SendParams, SendResult, Bucket, CreateBucketParams, UpdateBucketParams, Media, MediaType, MediaThumbnail, MediaImageMeta, MediaListParams, MediaListResult, UploadMediaParams, StorageQuota, StorageUsage, StorageUsageBucket, StorageUsageByType, } from "./types";
40
42
  export { SentroyError } from "./http";
41
43
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAElD,qBAAa,OAAO;IAClB,SAAgB,OAAO,EAAE,OAAO,CAAA;IAChC,SAAgB,SAAS,EAAE,SAAS,CAAA;IACpC,SAAgB,SAAS,EAAE,SAAS,CAAA;IACpC,SAAgB,KAAK,EAAE,KAAK,CAAA;IAC5B,SAAgB,IAAI,EAAE,IAAI,CAAA;IAC1B,SAAgB,OAAO,EAAE,OAAO,CAAA;IAChC,SAAgB,KAAK,EAAE,aAAa,CAAA;IAEpC;;;;;;;;;;;;;;;;;;;OAmBG;gBACS,MAAM,EAAE,mBAAmB;CA4BxC;AAGD,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,MAAM,EACN,WAAW,EACX,QAAQ,EACR,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,OAAO,EACP,eAAe,EACf,UAAU,EACV,UAAU,EACV,UAAU,EACV,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAElD,qBAAa,OAAO;IAClB,SAAgB,OAAO,EAAE,OAAO,CAAA;IAChC,SAAgB,SAAS,EAAE,SAAS,CAAA;IACpC,SAAgB,SAAS,EAAE,SAAS,CAAA;IACpC,SAAgB,KAAK,EAAE,KAAK,CAAA;IAC5B,SAAgB,IAAI,EAAE,IAAI,CAAA;IAC1B,SAAgB,OAAO,EAAE,OAAO,CAAA;IAChC,SAAgB,KAAK,EAAE,aAAa,CAAA;IACpC,SAAgB,OAAO,EAAE,OAAO,CAAA;IAEhC;;;;;;;;;;;;;;;;;;;OAmBG;gBACS,MAAM,EAAE,mBAAmB;CA6BxC;AAGD,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,MAAM,EACN,WAAW,EACX,QAAQ,EACR,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,OAAO,EACP,eAAe,EACf,UAAU,EACV,UAAU,EACV,UAAU,EACV,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA"}
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ const inbox_1 = require("./resources/inbox");
9
9
  const send_1 = require("./resources/send");
10
10
  const buckets_1 = require("./resources/buckets");
11
11
  const media_1 = require("./resources/media");
12
+ const storage_1 = require("./resources/storage");
12
13
  class Sentroy {
13
14
  domains;
14
15
  mailboxes;
@@ -17,6 +18,7 @@ class Sentroy {
17
18
  send;
18
19
  buckets;
19
20
  media;
21
+ storage;
20
22
  /**
21
23
  * Create a new Sentroy client.
22
24
  *
@@ -53,6 +55,7 @@ class Sentroy {
53
55
  this.send = new send_1.Send(mailHttp);
54
56
  this.buckets = new buckets_1.Buckets(storageHttp);
55
57
  this.media = new media_1.MediaResource(storageHttp);
58
+ this.storage = new storage_1.Storage(storageHttp);
56
59
  }
57
60
  }
58
61
  exports.Sentroy = Sentroy;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAAmC;AACnC,iDAA6C;AAC7C,qDAAiD;AACjD,qDAAiD;AACjD,6CAAyC;AACzC,2CAAuC;AACvC,iDAA6C;AAC7C,6CAAiD;AAGjD,MAAa,OAAO;IACF,OAAO,CAAS;IAChB,SAAS,CAAW;IACpB,SAAS,CAAW;IACpB,KAAK,CAAO;IACZ,IAAI,CAAM;IACV,OAAO,CAAS;IAChB,KAAK,CAAe;IAEpC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,YAAY,MAA2B;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC/C,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAEnD,mEAAmE;QACnE,kEAAkE;QAClE,mBAAmB;QACnB,MAAM,QAAQ,GAAG,IAAI,iBAAU,CAC7B,GAAG,IAAI,uBAAuB,IAAI,EAAE,EACpC,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,OAAO,CACf,CAAA;QAED,8DAA8D;QAC9D,MAAM,WAAW,GAAG,IAAI,iBAAU,CAChC,GAAG,IAAI,0BAA0B,IAAI,EAAE,EACvC,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,OAAO,CACf,CAAA;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,QAAQ,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,CAAC,QAAQ,CAAC,CAAA;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,CAAC,QAAQ,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAAC,QAAQ,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,WAAI,CAAC,QAAQ,CAAC,CAAA;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,WAAW,CAAC,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAa,CAAC,WAAW,CAAC,CAAA;IAC7C,CAAC;CACF;AAzDD,0BAyDC;AA+BD,+BAAqC;AAA5B,oGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAAmC;AACnC,iDAA6C;AAC7C,qDAAiD;AACjD,qDAAiD;AACjD,6CAAyC;AACzC,2CAAuC;AACvC,iDAA6C;AAC7C,6CAAiD;AACjD,iDAA6C;AAG7C,MAAa,OAAO;IACF,OAAO,CAAS;IAChB,SAAS,CAAW;IACpB,SAAS,CAAW;IACpB,KAAK,CAAO;IACZ,IAAI,CAAM;IACV,OAAO,CAAS;IAChB,KAAK,CAAe;IACpB,OAAO,CAAS;IAEhC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,YAAY,MAA2B;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC/C,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAEnD,mEAAmE;QACnE,kEAAkE;QAClE,mBAAmB;QACnB,MAAM,QAAQ,GAAG,IAAI,iBAAU,CAC7B,GAAG,IAAI,uBAAuB,IAAI,EAAE,EACpC,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,OAAO,CACf,CAAA;QAED,8DAA8D;QAC9D,MAAM,WAAW,GAAG,IAAI,iBAAU,CAChC,GAAG,IAAI,0BAA0B,IAAI,EAAE,EACvC,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,OAAO,CACf,CAAA;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,QAAQ,CAAC,CAAA;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,CAAC,QAAQ,CAAC,CAAA;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,CAAC,QAAQ,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAAC,QAAQ,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,WAAI,CAAC,QAAQ,CAAC,CAAA;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,WAAW,CAAC,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAa,CAAC,WAAW,CAAC,CAAA;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,WAAW,CAAC,CAAA;IACzC,CAAC;CACF;AA3DD,0BA2DC;AAmCD,+BAAqC;AAA5B,oGAAA,YAAY,OAAA"}
@@ -0,0 +1,69 @@
1
+ import type { Sentroy } from "..";
2
+ import type { Bucket, Media } from "../types";
3
+ /**
4
+ * MediaManager — Sentroy storage'a bağlanan tek-component dosya yöneticisi.
5
+ *
6
+ * Tasarım hedefleri:
7
+ * - Tek bir prop'la (`client`) tam workflow: bucket select → list → arama →
8
+ * upload → seç → preview (lightbox) → delete.
9
+ * - Ne single ne multi-file selection için zorla; `multiple` prop'u akış
10
+ * belirler. `onChange` her seçim değişikliğinde tetiklenir.
11
+ * - `initialValue` ile pre-selected file'lar (Media obje veya id string).
12
+ * - Tema override: kök `className` + `classNames` map ile alt-component
13
+ * class'larını override edebilir consumer (ileride farklı tema
14
+ * promptları için tek değişiklik noktası).
15
+ * - Spacebar selected item'i lightbox'ta açar; ESC kapatır.
16
+ * - Drag-drop + click-to-upload.
17
+ *
18
+ * Tailwind class kullanır ama kendisi Tailwind import etmez — host app'in
19
+ * Tailwind setup'ı kullanılır. Class çakışmalarında tailwind-merge yerine
20
+ * "consumer'ın className son geliyor" kuralı yeterli.
21
+ */
22
+ export interface MediaManagerClassNames {
23
+ root?: string;
24
+ toolbar?: string;
25
+ searchInput?: string;
26
+ filterSelect?: string;
27
+ uploadButton?: string;
28
+ bucketSelect?: string;
29
+ grid?: string;
30
+ card?: string;
31
+ cardSelected?: string;
32
+ thumbnail?: string;
33
+ cardMeta?: string;
34
+ empty?: string;
35
+ details?: string;
36
+ dropZoneOverlay?: string;
37
+ }
38
+ export interface MediaManagerProps {
39
+ /** Sentroy client instance — caller kendi access token'i ile yaratır. */
40
+ client: Sentroy;
41
+ /**
42
+ * Başlangıçta açılacak bucket. Verilmezse component bucket list çeker
43
+ * ve ilkini açar; ilk render'da kullanıcı dropdown'tan değiştirebilir.
44
+ */
45
+ bucketSlug?: string;
46
+ /** Birden fazla seçilebilir mi? Default false. */
47
+ multiple?: boolean;
48
+ /** Yalnızca belirli MIME prefix'leri kabul et upload'ta — örn "image/*". */
49
+ accept?: string;
50
+ /** Kullanıcının önceden seçtiği item'lar — Media obje ya da id string. */
51
+ initialValue?: Array<Media | string>;
52
+ /** Seçim her değiştiğinde — tek seçimde array.length<=1. */
53
+ onChange?: (selected: Media[]) => void;
54
+ /** Çift tık veya tek seçim "confirm" — picker dialog'larda useful. */
55
+ onSelect?: (selected: Media[]) => void;
56
+ /** Bucket dropdown'unda hangi bucket'lar görünsün — gizli system
57
+ * bucket'larını filtrelemek için. */
58
+ bucketFilter?: (bucket: Bucket) => boolean;
59
+ /** Custom kök class. */
60
+ className?: string;
61
+ /** Alt-component class override haritası. */
62
+ classNames?: MediaManagerClassNames;
63
+ /** Detail panel'i sağda göster mi (default true). */
64
+ showDetailsPane?: boolean;
65
+ /** Toolbar'da bucket selector görünsün mü (default true). */
66
+ showBucketSelector?: boolean;
67
+ }
68
+ export declare function MediaManager(props: MediaManagerProps): import("react/jsx-runtime").JSX.Element;
69
+ //# sourceMappingURL=MediaManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaManager.d.ts","sourceRoot":"","sources":["../../src/react/MediaManager.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAW7C;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,MAAM,EAAE,OAAO,CAAA;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,YAAY,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAA;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,IAAI,CAAA;IACtC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,IAAI,CAAA;IACtC;0CACsC;IACtC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IAC1C,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,qDAAqD;IACrD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAcD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CAghBpD"}
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MediaManager = MediaManager;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const Lightbox_1 = require("./lib/Lightbox");
7
+ const use_media_list_1 = require("./lib/use-media-list");
8
+ const utils_1 = require("./lib/utils");
9
+ const KIND_FILTERS = [
10
+ { value: "all", label: "All" },
11
+ { value: "image", label: utils_1.KIND_LABELS.image },
12
+ { value: "video", label: utils_1.KIND_LABELS.video },
13
+ { value: "audio", label: utils_1.KIND_LABELS.audio },
14
+ { value: "pdf", label: utils_1.KIND_LABELS.pdf },
15
+ { value: "doc", label: utils_1.KIND_LABELS.doc },
16
+ { value: "archive", label: utils_1.KIND_LABELS.archive },
17
+ { value: "code", label: utils_1.KIND_LABELS.code },
18
+ { value: "other", label: utils_1.KIND_LABELS.other },
19
+ ];
20
+ function MediaManager(props) {
21
+ const { client, bucketSlug: initialBucketSlug, multiple = false, accept, initialValue, onChange, onSelect, bucketFilter, className, classNames: cls = {}, showDetailsPane = true, showBucketSelector = true, } = props;
22
+ // ── Bucket state ───────────────────────────────────────────────────────
23
+ const [buckets, setBuckets] = (0, react_1.useState)([]);
24
+ const [bucketsLoading, setBucketsLoading] = (0, react_1.useState)(false);
25
+ const [activeBucketSlug, setActiveBucketSlug] = (0, react_1.useState)(initialBucketSlug ?? null);
26
+ (0, react_1.useEffect)(() => {
27
+ setBucketsLoading(true);
28
+ client.buckets
29
+ .list()
30
+ .then((list) => {
31
+ const filtered = bucketFilter ? list.filter(bucketFilter) : list;
32
+ setBuckets(filtered);
33
+ if (!activeBucketSlug && filtered.length > 0) {
34
+ setActiveBucketSlug(filtered[0].slug);
35
+ }
36
+ })
37
+ .catch(() => {
38
+ setBuckets([]);
39
+ })
40
+ .finally(() => setBucketsLoading(false));
41
+ // eslint-disable-next-line react-hooks/exhaustive-deps
42
+ }, [client]);
43
+ // ── Media list ────────────────────────────────────────────────────────
44
+ const [refreshKey, setRefreshKey] = (0, react_1.useState)(0);
45
+ const { items, loading, error } = (0, use_media_list_1.useMediaList)({
46
+ client,
47
+ bucketSlug: activeBucketSlug,
48
+ refreshKey,
49
+ });
50
+ // ── Selection ──────────────────────────────────────────────────────────
51
+ const [selectedIds, setSelectedIds] = (0, react_1.useState)(() => {
52
+ const initial = new Set();
53
+ for (const v of initialValue ?? []) {
54
+ initial.add(typeof v === "string" ? v : v.id);
55
+ }
56
+ return initial;
57
+ });
58
+ // initialValue Media[] ise hemen onChange'i çağır ki parent state senkron
59
+ // başlasın. Sadece mount'ta.
60
+ (0, react_1.useEffect)(() => {
61
+ if (!initialValue || initialValue.length === 0)
62
+ return;
63
+ const objects = initialValue.filter((v) => typeof v !== "string");
64
+ if (objects.length > 0)
65
+ onChange?.(objects);
66
+ // eslint-disable-next-line react-hooks/exhaustive-deps
67
+ }, []);
68
+ const toggleSelect = (0, react_1.useCallback)((media) => {
69
+ setSelectedIds((prev) => {
70
+ const next = new Set(prev);
71
+ if (multiple) {
72
+ if (next.has(media.id))
73
+ next.delete(media.id);
74
+ else
75
+ next.add(media.id);
76
+ }
77
+ else {
78
+ // Single: aynısı tıklanırsa deselect
79
+ if (next.has(media.id) && next.size === 1)
80
+ next.clear();
81
+ else {
82
+ next.clear();
83
+ next.add(media.id);
84
+ }
85
+ }
86
+ return next;
87
+ });
88
+ }, [multiple]);
89
+ const selected = (0, react_1.useMemo)(() => items.filter((m) => selectedIds.has(m.id)), [items, selectedIds]);
90
+ // selected değiştiğinde onChange'i çağır
91
+ (0, react_1.useEffect)(() => {
92
+ onChange?.(selected);
93
+ // eslint-disable-next-line react-hooks/exhaustive-deps
94
+ }, [selectedIds, items]);
95
+ // ── Search + filter ────────────────────────────────────────────────────
96
+ const [search, setSearch] = (0, react_1.useState)("");
97
+ const [kindFilter, setKindFilter] = (0, react_1.useState)("all");
98
+ const visibleItems = (0, react_1.useMemo)(() => {
99
+ const q = search.trim().toLowerCase();
100
+ return items.filter((m) => {
101
+ if (q && !m.fileName.toLowerCase().includes(q))
102
+ return false;
103
+ if (kindFilter !== "all" && (0, utils_1.detectKind)(m) !== kindFilter)
104
+ return false;
105
+ return true;
106
+ });
107
+ }, [items, search, kindFilter]);
108
+ // ── Upload ─────────────────────────────────────────────────────────────
109
+ const fileInputRef = (0, react_1.useRef)(null);
110
+ const [uploading, setUploading] = (0, react_1.useState)(false);
111
+ const [dragOver, setDragOver] = (0, react_1.useState)(false);
112
+ const uploadFiles = (0, react_1.useCallback)(async (files) => {
113
+ if (!activeBucketSlug)
114
+ return;
115
+ setUploading(true);
116
+ try {
117
+ const list = Array.from(files);
118
+ for (const file of list) {
119
+ await client.media.upload(activeBucketSlug, { body: file });
120
+ }
121
+ setRefreshKey((k) => k + 1);
122
+ }
123
+ finally {
124
+ setUploading(false);
125
+ }
126
+ }, [client, activeBucketSlug]);
127
+ // ── Delete ─────────────────────────────────────────────────────────────
128
+ const [deletingId, setDeletingId] = (0, react_1.useState)(null);
129
+ const handleDelete = (0, react_1.useCallback)(async (media) => {
130
+ if (!activeBucketSlug)
131
+ return;
132
+ const ok = window.confirm(`Delete ${media.fileName}?`);
133
+ if (!ok)
134
+ return;
135
+ setDeletingId(media.id);
136
+ try {
137
+ await client.media.delete(activeBucketSlug, media.id);
138
+ setSelectedIds((prev) => {
139
+ const next = new Set(prev);
140
+ next.delete(media.id);
141
+ return next;
142
+ });
143
+ setRefreshKey((k) => k + 1);
144
+ }
145
+ finally {
146
+ setDeletingId(null);
147
+ }
148
+ }, [client, activeBucketSlug]);
149
+ // ── Lightbox (spacebar opens for active selection) ─────────────────────
150
+ const [lightboxIdx, setLightboxIdx] = (0, react_1.useState)(null);
151
+ (0, react_1.useEffect)(() => {
152
+ const onKey = (e) => {
153
+ if (e.code !== "Space")
154
+ return;
155
+ // Input/textarea içinde değilse spacebar lightbox'ı açar.
156
+ const tag = e.target?.tagName?.toLowerCase();
157
+ if (tag === "input" || tag === "textarea" || tag === "select")
158
+ return;
159
+ if (selected.length === 0 || lightboxIdx !== null)
160
+ return;
161
+ e.preventDefault();
162
+ const idx = visibleItems.findIndex((m) => m.id === selected[0].id);
163
+ if (idx >= 0)
164
+ setLightboxIdx(idx);
165
+ };
166
+ document.addEventListener("keydown", onKey);
167
+ return () => document.removeEventListener("keydown", onKey);
168
+ }, [selected, visibleItems, lightboxIdx]);
169
+ // ── Render ─────────────────────────────────────────────────────────────
170
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)("flex flex-col gap-3 rounded-xl border bg-background text-foreground", className, cls.root), onDragOver: (e) => {
171
+ e.preventDefault();
172
+ setDragOver(true);
173
+ }, onDragLeave: () => setDragOver(false), onDrop: (e) => {
174
+ e.preventDefault();
175
+ setDragOver(false);
176
+ if (e.dataTransfer.files.length > 0)
177
+ uploadFiles(e.dataTransfer.files);
178
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)("flex flex-wrap items-center gap-2 border-b px-3 py-2", cls.toolbar), children: [showBucketSelector && ((0, jsx_runtime_1.jsxs)("select", { value: activeBucketSlug ?? "", onChange: (e) => setActiveBucketSlug(e.target.value || null), disabled: bucketsLoading || buckets.length === 0, className: (0, utils_1.cn)("h-8 rounded-md border bg-transparent px-2 text-xs", cls.bucketSelect), children: [buckets.length === 0 && (0, jsx_runtime_1.jsx)("option", { value: "", children: "No buckets" }), buckets.map((b) => ((0, jsx_runtime_1.jsx)("option", { value: b.slug, children: b.name }, b.id)))] })), (0, jsx_runtime_1.jsx)("input", { type: "search", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search files\u2026", className: (0, utils_1.cn)("h-8 flex-1 rounded-md border bg-transparent px-2 text-xs", cls.searchInput) }), (0, jsx_runtime_1.jsx)("select", { value: kindFilter, onChange: (e) => setKindFilter(e.target.value), className: (0, utils_1.cn)("h-8 rounded-md border bg-transparent px-2 text-xs", cls.filterSelect), children: KIND_FILTERS.map((f) => ((0, jsx_runtime_1.jsx)("option", { value: f.value, children: f.label }, f.value))) }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => fileInputRef.current?.click(), disabled: !activeBucketSlug || uploading, className: (0, utils_1.cn)("h-8 rounded-md border bg-foreground px-3 text-xs font-medium text-background transition-opacity hover:opacity-90 disabled:opacity-50", cls.uploadButton), children: uploading ? "Uploading…" : "Upload" }), (0, jsx_runtime_1.jsx)("input", { ref: fileInputRef, type: "file", multiple: multiple || true, accept: accept, className: "hidden", onChange: (e) => {
179
+ if (e.target.files && e.target.files.length > 0) {
180
+ uploadFiles(e.target.files);
181
+ e.target.value = "";
182
+ }
183
+ } })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex min-h-[280px] flex-1", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex-1 overflow-y-auto p-3", children: [loading && ((0, jsx_runtime_1.jsx)("div", { className: "grid gap-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5", children: Array.from({ length: 8 }).map((_, i) => ((0, jsx_runtime_1.jsx)("div", { className: "h-28 animate-pulse rounded-md bg-muted/50" }, i))) })), error && ((0, jsx_runtime_1.jsx)("div", { className: "rounded-md border border-destructive/30 bg-destructive/5 p-3 text-xs text-destructive", children: error })), !loading && !error && visibleItems.length === 0 && ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)("flex h-full flex-col items-center justify-center gap-2 py-8 text-center text-sm text-muted-foreground", cls.empty), children: [(0, jsx_runtime_1.jsx)("span", { children: "No files match." }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => fileInputRef.current?.click(), className: "text-xs underline", children: "Upload one" })] })), !loading && !error && visibleItems.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.cn)("grid gap-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5", cls.grid), children: visibleItems.map((media) => {
184
+ const isSel = selectedIds.has(media.id);
185
+ const kind = (0, utils_1.detectKind)(media);
186
+ const thumb = kind === "image" ? media.url || media.downloadUrl : null;
187
+ return ((0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => toggleSelect(media), onDoubleClick: () => {
188
+ const idx = visibleItems.findIndex((m) => m.id === media.id);
189
+ if (idx >= 0) {
190
+ if (!isSel)
191
+ toggleSelect(media);
192
+ setLightboxIdx(idx);
193
+ if (multiple === false && onSelect) {
194
+ onSelect([media]);
195
+ }
196
+ }
197
+ }, className: (0, utils_1.cn)("group flex flex-col overflow-hidden rounded-md border text-start transition-all", isSel
198
+ ? (0, utils_1.cn)("border-foreground/60 ring-2 ring-foreground/30", cls.cardSelected)
199
+ : "border-border hover:border-foreground/30", cls.card), children: [(0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)("relative aspect-square overflow-hidden bg-muted/40", cls.thumbnail), children: [thumb ? (
200
+ // eslint-disable-next-line @next/next/no-img-element
201
+ (0, jsx_runtime_1.jsx)("img", { src: thumb, alt: media.alt ?? media.fileName, className: "size-full object-cover" })) : ((0, jsx_runtime_1.jsx)("div", { className: "flex size-full items-center justify-center text-[10px] uppercase text-muted-foreground", children: utils_1.KIND_LABELS[kind] })), isSel && ((0, jsx_runtime_1.jsx)("div", { className: "absolute right-1 top-1 flex size-5 items-center justify-center rounded-full bg-foreground text-background", children: (0, jsx_runtime_1.jsx)("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", children: (0, jsx_runtime_1.jsx)("path", { d: "M20 6L9 17l-5-5" }) }) }))] }), (0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)("flex flex-col gap-0.5 px-2 py-1.5 text-[11px]", cls.cardMeta), children: [(0, jsx_runtime_1.jsx)("span", { className: "truncate font-medium", children: media.fileName }), (0, jsx_runtime_1.jsx)("span", { className: "text-[10px] text-muted-foreground", children: (0, utils_1.formatBytes)(media.size ?? 0) })] })] }, media.id));
202
+ }) }))] }), showDetailsPane && ((0, jsx_runtime_1.jsx)("aside", { className: (0, utils_1.cn)("hidden w-64 shrink-0 flex-col gap-2 border-s bg-muted/10 p-3 lg:flex", cls.details), children: selected.length === 0 ? ((0, jsx_runtime_1.jsxs)("div", { className: "text-xs text-muted-foreground", children: ["Select a file to see details. Press", " ", (0, jsx_runtime_1.jsx)("kbd", { className: "rounded border bg-muted px-1 text-[10px]", children: "Space" }), " ", "to preview."] })) : selected.length === 1 ? ((() => {
203
+ const m = selected[0];
204
+ const kind = (0, utils_1.detectKind)(m);
205
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "aspect-square overflow-hidden rounded-md bg-muted/30", children: kind === "image" && (m.url || m.downloadUrl) ? (
206
+ // eslint-disable-next-line @next/next/no-img-element
207
+ (0, jsx_runtime_1.jsx)("img", { src: m.url || m.downloadUrl || "", alt: m.alt ?? m.fileName, className: "size-full object-cover" })) : ((0, jsx_runtime_1.jsx)("div", { className: "flex size-full items-center justify-center text-xs text-muted-foreground", children: utils_1.KIND_LABELS[kind] })) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-0.5", children: [(0, jsx_runtime_1.jsx)("span", { className: "break-all text-xs font-medium", children: m.fileName }), (0, jsx_runtime_1.jsxs)("span", { className: "text-[10px] text-muted-foreground", children: [(0, utils_1.formatBytes)(m.size ?? 0), m.mimeType ? ` · ${m.mimeType}` : ""] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-auto flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => {
208
+ const idx = visibleItems.findIndex((it) => it.id === m.id);
209
+ if (idx >= 0)
210
+ setLightboxIdx(idx);
211
+ }, className: "flex-1 rounded-md border px-2 py-1 text-[11px] hover:bg-muted/50", children: "Preview" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => handleDelete(m), disabled: deletingId === m.id, className: "flex-1 rounded-md border border-destructive/30 px-2 py-1 text-[11px] text-destructive hover:bg-destructive/10 disabled:opacity-50", children: deletingId === m.id ? "…" : "Delete" })] }), onSelect && ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => onSelect(selected), className: "rounded-md bg-foreground px-2 py-1.5 text-[11px] font-medium text-background hover:opacity-90", children: "Use selection" }))] }));
212
+ })()) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "text-xs font-medium", children: [selected.length, " files selected"] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-[10px] text-muted-foreground", children: ["Total ", (0, utils_1.formatBytes)(selected.reduce((s, m) => s + (m.size ?? 0), 0))] }), onSelect && ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => onSelect(selected), className: "mt-auto rounded-md bg-foreground px-2 py-1.5 text-[11px] font-medium text-background hover:opacity-90", children: "Use selection" }))] })) }))] }), dragOver && ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.cn)("pointer-events-none absolute inset-0 rounded-xl border-2 border-dashed border-foreground/40 bg-foreground/5", cls.dropZoneOverlay) })), lightboxIdx !== null && visibleItems[lightboxIdx] && ((0, jsx_runtime_1.jsx)(Lightbox_1.Lightbox, { media: visibleItems[lightboxIdx], onClose: () => setLightboxIdx(null), onPrev: lightboxIdx > 0 ? () => setLightboxIdx(lightboxIdx - 1) : undefined, onNext: lightboxIdx < visibleItems.length - 1
213
+ ? () => setLightboxIdx(lightboxIdx + 1)
214
+ : undefined }))] }));
215
+ }
216
+ //# sourceMappingURL=MediaManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaManager.js","sourceRoot":"","sources":["../../src/react/MediaManager.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { MediaManager, type MediaManagerProps, type MediaManagerClassNames, } from "./MediaManager";
2
+ export { Lightbox, type LightboxProps } from "./lib/Lightbox";
3
+ export { cn, formatBytes, detectKind, KIND_LABELS, type MediaKind, } from "./lib/utils";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EACL,EAAE,EACF,WAAW,EACX,UAAU,EACV,WAAW,EACX,KAAK,SAAS,GACf,MAAM,aAAa,CAAA"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KIND_LABELS = exports.detectKind = exports.formatBytes = exports.cn = exports.Lightbox = exports.MediaManager = void 0;
4
+ var MediaManager_1 = require("./MediaManager");
5
+ Object.defineProperty(exports, "MediaManager", { enumerable: true, get: function () { return MediaManager_1.MediaManager; } });
6
+ var Lightbox_1 = require("./lib/Lightbox");
7
+ Object.defineProperty(exports, "Lightbox", { enumerable: true, get: function () { return Lightbox_1.Lightbox; } });
8
+ var utils_1 = require("./lib/utils");
9
+ Object.defineProperty(exports, "cn", { enumerable: true, get: function () { return utils_1.cn; } });
10
+ Object.defineProperty(exports, "formatBytes", { enumerable: true, get: function () { return utils_1.formatBytes; } });
11
+ Object.defineProperty(exports, "detectKind", { enumerable: true, get: function () { return utils_1.detectKind; } });
12
+ Object.defineProperty(exports, "KIND_LABELS", { enumerable: true, get: function () { return utils_1.KIND_LABELS; } });
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":";;;AAAA,+CAIuB;AAHrB,4GAAA,YAAY,OAAA;AAId,2CAA6D;AAApD,oGAAA,QAAQ,OAAA;AACjB,qCAMoB;AALlB,2FAAA,EAAE,OAAA;AACF,oGAAA,WAAW,OAAA;AACX,mGAAA,UAAU,OAAA;AACV,oGAAA,WAAW,OAAA"}
@@ -0,0 +1,18 @@
1
+ import type { Media } from "../../types";
2
+ /**
3
+ * Sadeleştirilmiş lightbox — tek media item için fullscreen preview.
4
+ * Image/video native render, audio HTML5 player, diğerleri "download"
5
+ * fallback. ESC kapat, ←/→ next/prev (caller index callback'i sağlar).
6
+ *
7
+ * Headless yapı: tüm renderable HTML/inline class'lar default; consumer
8
+ * className override'ı ile değiştirebilir.
9
+ */
10
+ export interface LightboxProps {
11
+ media: Media;
12
+ onClose: () => void;
13
+ onPrev?: () => void;
14
+ onNext?: () => void;
15
+ className?: string;
16
+ }
17
+ export declare function Lightbox({ media, onClose, onPrev, onNext, className, }: LightboxProps): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=Lightbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../../src/react/lib/Lightbox.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGxC;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAA;IACZ,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,GACV,EAAE,aAAa,2CAuIf"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Lightbox = Lightbox;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const utils_1 = require("./utils");
7
+ function Lightbox({ media, onClose, onPrev, onNext, className, }) {
8
+ (0, react_1.useEffect)(() => {
9
+ const onKey = (e) => {
10
+ if (e.key === "Escape")
11
+ onClose();
12
+ if (e.key === "ArrowLeft" && onPrev)
13
+ onPrev();
14
+ if (e.key === "ArrowRight" && onNext)
15
+ onNext();
16
+ };
17
+ document.addEventListener("keydown", onKey);
18
+ document.body.style.overflow = "hidden";
19
+ return () => {
20
+ document.removeEventListener("keydown", onKey);
21
+ document.body.style.overflow = "";
22
+ };
23
+ }, [onClose, onPrev, onNext]);
24
+ const kind = (0, utils_1.detectKind)(media);
25
+ const url = media.url || media.downloadUrl;
26
+ return ((0, jsx_runtime_1.jsxs)("div", { role: "dialog", "aria-modal": "true", onClick: (e) => {
27
+ if (e.target === e.currentTarget)
28
+ onClose();
29
+ }, className: className ||
30
+ "fixed inset-0 z-50 flex items-center justify-center bg-black/90 p-4 backdrop-blur-sm", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: onClose, "aria-label": "Close", className: "absolute right-4 top-4 rounded-full bg-white/10 p-2 text-white transition-colors hover:bg-white/20", children: (0, jsx_runtime_1.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: (0, jsx_runtime_1.jsx)("path", { d: "M18 6L6 18M6 6l12 12" }) }) }), onPrev && ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: (e) => {
31
+ e.stopPropagation();
32
+ onPrev();
33
+ }, "aria-label": "Previous", className: "absolute left-4 top-1/2 -translate-y-1/2 rounded-full bg-white/10 p-3 text-white transition-colors hover:bg-white/20", children: (0, jsx_runtime_1.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: (0, jsx_runtime_1.jsx)("path", { d: "M15 18l-6-6 6-6" }) }) })), onNext && ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: (e) => {
34
+ e.stopPropagation();
35
+ onNext();
36
+ }, "aria-label": "Next", className: "absolute right-4 top-1/2 -translate-y-1/2 rounded-full bg-white/10 p-3 text-white transition-colors hover:bg-white/20", children: (0, jsx_runtime_1.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: (0, jsx_runtime_1.jsx)("path", { d: "M9 6l6 6-6 6" }) }) })), (0, jsx_runtime_1.jsxs)("div", { className: "flex max-h-full max-w-5xl flex-col items-center gap-3", children: [kind === "image" && url && (
37
+ // eslint-disable-next-line @next/next/no-img-element
38
+ (0, jsx_runtime_1.jsx)("img", { src: url, alt: media.alt ?? media.fileName, className: "max-h-[80vh] max-w-full rounded-lg object-contain shadow-2xl" })), kind === "video" && url && ((0, jsx_runtime_1.jsx)("video", { src: url, controls: true, autoPlay: true, className: "max-h-[80vh] max-w-full rounded-lg shadow-2xl" })), kind === "audio" && url && ((0, jsx_runtime_1.jsxs)("div", { className: "flex w-full max-w-md flex-col gap-3 rounded-lg bg-white/10 p-6 text-white", children: [(0, jsx_runtime_1.jsx)("div", { className: "text-center text-sm font-medium", children: media.fileName }), (0, jsx_runtime_1.jsx)("audio", { src: url, controls: true, className: "w-full" })] })), kind !== "image" && kind !== "video" && kind !== "audio" && ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-center gap-3 rounded-lg bg-white/10 p-8 text-white", children: [(0, jsx_runtime_1.jsxs)("svg", { width: "48", height: "48", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [(0, jsx_runtime_1.jsx)("path", { d: "M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z" }), (0, jsx_runtime_1.jsx)("path", { d: "M14 2v6h6" })] }), (0, jsx_runtime_1.jsx)("div", { className: "text-sm font-medium", children: media.fileName }), (0, jsx_runtime_1.jsx)("a", { href: url, download: media.fileName, target: "_blank", rel: "noreferrer", className: "rounded-md bg-white px-4 py-2 text-xs font-semibold text-black hover:bg-white/90", children: "Download" })] })), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 rounded-md bg-black/40 px-3 py-1.5 text-xs text-white/80", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-mono truncate max-w-xs", children: media.fileName }), (0, jsx_runtime_1.jsx)("span", { children: "\u00B7" }), (0, jsx_runtime_1.jsx)("span", { children: (0, utils_1.formatBytes)(media.size ?? 0) }), media.mimeType && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { children: "\u00B7" }), (0, jsx_runtime_1.jsx)("span", { className: "font-mono opacity-70", children: media.mimeType })] }))] })] })] }));
39
+ }
40
+ //# sourceMappingURL=Lightbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lightbox.js","sourceRoot":"","sources":["../../../src/react/lib/Lightbox.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Sentroy } from "../..";
2
+ import type { Media, MediaListResult } from "../../types";
3
+ /**
4
+ * Bir bucket'taki media listesini çeken hook. Search, kind filter ve
5
+ * folder filter local-side; SDK'nın list endpoint'i şimdilik bunları
6
+ * server-side desteklemiyor (genelde 100-200 dosyalık küçük scale,
7
+ * client-side OK). Büyük scale'de paginate + server filter eklenir.
8
+ */
9
+ export declare function useMediaList(args: {
10
+ client: Sentroy;
11
+ bucketSlug: string | null;
12
+ /** Yeniden tetiklenmek için artırılan key. */
13
+ refreshKey?: number;
14
+ }): {
15
+ data: MediaListResult | null;
16
+ items: Media[];
17
+ loading: boolean;
18
+ error: string | null;
19
+ refresh: () => void;
20
+ };
21
+ //# sourceMappingURL=use-media-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-media-list.d.ts","sourceRoot":"","sources":["../../../src/react/lib/use-media-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAEzD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;;;;;;EAsCA"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMediaList = useMediaList;
4
+ const react_1 = require("react");
5
+ /**
6
+ * Bir bucket'taki media listesini çeken hook. Search, kind filter ve
7
+ * folder filter local-side; SDK'nın list endpoint'i şimdilik bunları
8
+ * server-side desteklemiyor (genelde 100-200 dosyalık küçük scale,
9
+ * client-side OK). Büyük scale'de paginate + server filter eklenir.
10
+ */
11
+ function useMediaList(args) {
12
+ const { client, bucketSlug, refreshKey = 0 } = args;
13
+ const [data, setData] = (0, react_1.useState)(null);
14
+ const [loading, setLoading] = (0, react_1.useState)(false);
15
+ const [error, setError] = (0, react_1.useState)(null);
16
+ (0, react_1.useEffect)(() => {
17
+ if (!bucketSlug) {
18
+ setData(null);
19
+ return;
20
+ }
21
+ let cancelled = false;
22
+ setLoading(true);
23
+ setError(null);
24
+ client.media
25
+ .list(bucketSlug, { limit: 200 })
26
+ .then((res) => {
27
+ if (cancelled)
28
+ return;
29
+ setData(res);
30
+ })
31
+ .catch((err) => {
32
+ if (cancelled)
33
+ return;
34
+ setError(err instanceof Error ? err.message : "Failed to load media");
35
+ })
36
+ .finally(() => {
37
+ if (!cancelled)
38
+ setLoading(false);
39
+ });
40
+ return () => {
41
+ cancelled = true;
42
+ };
43
+ }, [client, bucketSlug, refreshKey]);
44
+ const refresh = (0, react_1.useCallback)(() => {
45
+ // Caller kendi refreshKey'ini bump'lar; bu sadece convenience.
46
+ setData((d) => d);
47
+ }, []);
48
+ return { data, items: data?.items ?? [], loading, error, refresh };
49
+ }
50
+ //# sourceMappingURL=use-media-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-media-list.js","sourceRoot":"","sources":["../../../src/react/lib/use-media-list.ts"],"names":[],"mappings":";;AAUA,oCA2CC;AArDD,iCAAwD;AAIxD;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,IAK5B;IACC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,IAAI,CAAA;IACnD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAyB,IAAI,CAAC,CAAA;IAC9D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAA;IAEvD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAA;YACb,OAAM;QACR,CAAC;QACD,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,MAAM,CAAC,KAAK;aACT,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;aAChC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,SAAS;gBAAE,OAAM;YACrB,OAAO,CAAC,GAAG,CAAC,CAAA;QACd,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,IAAI,SAAS;gBAAE,OAAM;YACrB,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAA;QACvE,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,SAAS;gBAAE,UAAU,CAAC,KAAK,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;QACJ,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAA;IAEpC,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC/B,+DAA+D;QAC/D,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAK,EAAc,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;AACjF,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Minimal class name combiner — clsx + twMerge gibi davranır ama
3
+ * dependency yok. Falsy filtrele, dedup yapma. Tema override'larında
4
+ * Tailwind utility çakışmaları için consumer kendi cn'ini kullanırsa
5
+ * `className` prop'u son geldiği için doğal şekilde kazanır.
6
+ */
7
+ export declare function cn(...args: Array<string | undefined | null | false | 0>): string;
8
+ export declare function formatBytes(bytes: number, decimals?: number): string;
9
+ /** İlk image-like extension veya MIME → "image", "video", "audio", "pdf",
10
+ * "doc" (word/excel/ppt), "archive", "code", "other". */
11
+ export declare function detectKind(file: {
12
+ mimeType?: string | null;
13
+ fileName?: string;
14
+ }): MediaKind;
15
+ export type MediaKind = "image" | "video" | "audio" | "pdf" | "doc" | "archive" | "code" | "other";
16
+ export declare const KIND_LABELS: Record<MediaKind, string>;
17
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/react/lib/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,EAAE,CAChB,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,GACpD,MAAM,CAER;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAU/D;AAED;0DAC0D;AAC1D,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,GAAG,SAAS,CAsBZ;AAED,MAAM,MAAM,SAAS,GACjB,OAAO,GACP,OAAO,GACP,OAAO,GACP,KAAK,GACL,KAAK,GACL,SAAS,GACT,MAAM,GACN,OAAO,CAAA;AAEX,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CASjD,CAAA"}