@kittl/sdk 1.0.0-alpha.1 → 1.0.0-alpha.2
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/dist/creativeAgentPanel/sdk.d.ts +8667 -0
- package/dist/creativeAgentPanel/sdk.esm.js +1184 -0
- package/dist/creativeAgentPanel/sdk.js +1184 -0
- package/dist/dashboardStandalonePage/sdk.d.ts +516 -121
- package/dist/dashboardStandalonePage/sdk.esm.js +8 -0
- package/dist/dashboardStandalonePage/sdk.js +8 -0
- package/dist/editorContentPanel/sdk.d.ts +460 -106
- package/dist/editorContentPanel/sdk.esm.js +8 -0
- package/dist/editorContentPanel/sdk.js +8 -0
- package/dist/editorScriptRunner/sdk.d.ts +396 -102
- package/dist/editorScriptRunner/sdk.esm.js +8 -0
- package/dist/editorScriptRunner/sdk.js +8 -0
- package/dist/sharedFileBrowser/sdk.d.ts +3 -0
- package/dist/sharedFileBrowser/sdk.esm.js +8 -0
- package/dist/sharedFileBrowser/sdk.js +8 -0
- package/package.json +7 -1
|
@@ -56,7 +56,11 @@ declare const ANIMATION_CHANNELS: readonly [
|
|
|
56
56
|
"scaleY",
|
|
57
57
|
"skewX",
|
|
58
58
|
"skewY",
|
|
59
|
-
"opacity"
|
|
59
|
+
"opacity",
|
|
60
|
+
"offsetDistance",
|
|
61
|
+
"translateZ",
|
|
62
|
+
"rotateX",
|
|
63
|
+
"rotateY"
|
|
60
64
|
];
|
|
61
65
|
declare const ANIMATION_EASING_NAMES: readonly [
|
|
62
66
|
"linear",
|
|
@@ -65,6 +69,7 @@ declare const ANIMATION_EASING_NAMES: readonly [
|
|
|
65
69
|
"ease-out",
|
|
66
70
|
"ease-in-out"
|
|
67
71
|
];
|
|
72
|
+
declare const ANIMATION_SHAPE_CHANNEL = "d";
|
|
68
73
|
declare const APP_STATE_SUBSCRIPTION_KEYS: readonly [
|
|
69
74
|
"selectedObjectsIds",
|
|
70
75
|
"selectedLayersIds",
|
|
@@ -171,9 +176,7 @@ declare const DEFAULT_VALUES$1: {
|
|
|
171
176
|
generation?: {
|
|
172
177
|
meta?: GenerationMeta;
|
|
173
178
|
generationId?: string;
|
|
174
|
-
aiArtId
|
|
175
|
-
* Cache key to support local history changes without relying on persistence
|
|
176
|
-
*/: string;
|
|
179
|
+
aiArtId?: string;
|
|
177
180
|
generatorKey?: string;
|
|
178
181
|
};
|
|
179
182
|
};
|
|
@@ -264,6 +267,37 @@ declare const GUIDE_DEFAULT_VALUES: {
|
|
|
264
267
|
version: string;
|
|
265
268
|
type: ObjectType.Guide;
|
|
266
269
|
};
|
|
270
|
+
declare const GenerateContentActionOrigin: {
|
|
271
|
+
readonly COPILOT: "COPILOT";
|
|
272
|
+
readonly RIGHT_PANEL: "RIGHT_PANEL";
|
|
273
|
+
readonly LEFT_PANEL: "LEFT_PANEL";
|
|
274
|
+
readonly MICRO_APP: "MICRO_APP";
|
|
275
|
+
readonly IMAGE_SETS: "IMAGE_SETS";
|
|
276
|
+
readonly AI_CHAT: "AI_CHAT";
|
|
277
|
+
readonly SMARTBOARD: "SMARTBOARD";
|
|
278
|
+
readonly AI_INPUT_GENERATE_IMAGE: "AI_INPUT_GENERATE_IMAGE";
|
|
279
|
+
readonly AI_INPUT_REMIX_IMAGE: "AI_INPUT_REMIX_IMAGE";
|
|
280
|
+
readonly AI_INPUT_GENERATE_VIDEO: "AI_INPUT_GENERATE_VIDEO";
|
|
281
|
+
readonly AI_INPUT_MICRO_EDITOR_REMIX: "AI_INPUT_MICRO_EDITOR_REMIX";
|
|
282
|
+
readonly AI_INPUT_MICRO_EDITOR_INPAINT: "AI_INPUT_MICRO_EDITOR_INPAINT";
|
|
283
|
+
readonly AI_HUB_GENERATE_IMAGE: "AI_HUB_GENERATE_IMAGE";
|
|
284
|
+
readonly AI_HUB_REMIX_IMAGE: "AI_HUB_REMIX_IMAGE";
|
|
285
|
+
readonly AI_HUB_GENERATE_VIDEO: "AI_HUB_GENERATE_VIDEO";
|
|
286
|
+
readonly VIDEOBOARD: "VIDEOBOARD";
|
|
287
|
+
readonly AGENT: "AGENT";
|
|
288
|
+
readonly WORKFLOW: "WORKFLOW";
|
|
289
|
+
readonly AI_HUB_AGENT: "AI_HUB_AGENT";
|
|
290
|
+
readonly MCP: "MCP";
|
|
291
|
+
readonly MCP_WORKFLOW: "MCP_WORKFLOW";
|
|
292
|
+
readonly AI_AGENT: "AI_AGENT";
|
|
293
|
+
readonly AI_AGENT_CHAT: "AI_AGENT_CHAT";
|
|
294
|
+
readonly AI_AGENT_CHAT_WEBSITE: "AI_AGENT_CHAT_WEBSITE";
|
|
295
|
+
readonly MOBILE_APP_GENERATE_IMAGE: "MOBILE_APP_GENERATE_IMAGE";
|
|
296
|
+
readonly MOBILE_APP_REMIX_IMAGE: "MOBILE_APP_REMIX_IMAGE";
|
|
297
|
+
readonly MOBILE_APP_GENERATE_VIDEO: "MOBILE_APP_GENERATE_VIDEO";
|
|
298
|
+
readonly MOBILE_APP_AGENT: "MOBILE_APP_AGENT";
|
|
299
|
+
readonly AI_AGENT_WORKFLOW: "AI_AGENT_WORKFLOW";
|
|
300
|
+
};
|
|
267
301
|
declare const GenerationStatus: {
|
|
268
302
|
readonly CREATED: "CREATED";
|
|
269
303
|
readonly QUEUED: "QUEUED";
|
|
@@ -412,6 +446,7 @@ declare const PendingOperation: {
|
|
|
412
446
|
readonly UPSCALE: "upscale";
|
|
413
447
|
readonly REMOVE_BACKGROUND: "removeBackground";
|
|
414
448
|
readonly REFRAME: "reframe";
|
|
449
|
+
readonly RASTERIZE: "rasterize";
|
|
415
450
|
};
|
|
416
451
|
declare const RICH_TEXT_DEFAULT_VALUES: {
|
|
417
452
|
opacity?: number | undefined;
|
|
@@ -699,6 +734,17 @@ export interface AddFontStyleOptions {
|
|
|
699
734
|
/**
|
|
700
735
|
* API for managing application state including selection, viewport, active tool, and canvas mode.
|
|
701
736
|
*
|
|
737
|
+
* ## Selection
|
|
738
|
+
*
|
|
739
|
+
* {@link AppState.selectionIds} is the only stored selection list; every
|
|
740
|
+
* selection getter is derived from it and the current design state. Derived results are identity-stable — the very same array instance is
|
|
741
|
+
* returned until the selection or the design state changes — so React
|
|
742
|
+
* subscribers and the extension bridge can diff them by reference.
|
|
743
|
+
*
|
|
744
|
+
* Every selection setter replaces the whole selection: whatever ids it is
|
|
745
|
+
* given are expanded into their closure and committed to
|
|
746
|
+
* {@link AppState.selectionIds}.
|
|
747
|
+
*
|
|
702
748
|
* @public
|
|
703
749
|
*/
|
|
704
750
|
export interface AppStateAPI {
|
|
@@ -707,7 +753,7 @@ export interface AppStateAPI {
|
|
|
707
753
|
*/
|
|
708
754
|
getSelectedObjectsIds(): string[];
|
|
709
755
|
/**
|
|
710
|
-
*
|
|
756
|
+
* Replaces the selection with the given objects.
|
|
711
757
|
*
|
|
712
758
|
* @param ids - Array of object IDs to select
|
|
713
759
|
* @param origin - Optional origin tag for loop prevention in bidirectional syncs.
|
|
@@ -720,41 +766,51 @@ export interface AppStateAPI {
|
|
|
720
766
|
*/
|
|
721
767
|
getSelectedLayersIds(): string[];
|
|
722
768
|
/**
|
|
723
|
-
*
|
|
769
|
+
* Replaces the selection with the given layers.
|
|
770
|
+
*
|
|
771
|
+
* Board sub-layer ids (artboard, background, texture) select the board they
|
|
772
|
+
* belong to.
|
|
724
773
|
*
|
|
725
774
|
* @param ids - Array of layer IDs to select
|
|
775
|
+
* @param origin - Optional origin tag for loop prevention in bidirectional syncs
|
|
726
776
|
*/
|
|
727
|
-
setSelectedLayersIds(ids: string[]): void;
|
|
777
|
+
setSelectedLayersIds(ids: string[], origin?: Origin): void;
|
|
728
778
|
/**
|
|
729
779
|
* Gets the IDs of selected artboards.
|
|
730
780
|
*/
|
|
731
781
|
getSelectedArtboardIds(): string[];
|
|
732
782
|
/**
|
|
733
|
-
*
|
|
783
|
+
* Replaces the selection with the given artboards.
|
|
734
784
|
*
|
|
735
785
|
* @param ids - Array of artboard IDs to select
|
|
786
|
+
* @param origin - Optional origin tag for loop prevention in bidirectional syncs
|
|
736
787
|
*/
|
|
737
|
-
setSelectedArtboardIds(ids: string[]): void;
|
|
788
|
+
setSelectedArtboardIds(ids: string[], origin?: Origin): void;
|
|
738
789
|
/**
|
|
739
790
|
* Gets the object IDs within selected artboards.
|
|
740
791
|
*/
|
|
741
792
|
getSelectedArtboardsObjectIds(): string[];
|
|
742
793
|
/**
|
|
743
|
-
*
|
|
794
|
+
* Replaces the selection with the given objects.
|
|
744
795
|
*
|
|
745
796
|
* @param ids - Array of object IDs
|
|
797
|
+
* @param origin - Optional origin tag for loop prevention in bidirectional syncs
|
|
746
798
|
*/
|
|
747
|
-
setSelectedArtboardsObjectIds(ids: string[]): void;
|
|
799
|
+
setSelectedArtboardsObjectIds(ids: string[], origin?: Origin): void;
|
|
748
800
|
/**
|
|
749
801
|
* Gets all selected object IDs including objects, artboards, and artboard objects.
|
|
802
|
+
*
|
|
803
|
+
* A flat, deduplicated list of ids that exist as boards or objects; it never
|
|
804
|
+
* contains group ids or synthetic (`link__`, `path__`) ids.
|
|
750
805
|
*/
|
|
751
806
|
getAllSelectedObjectsIds(): string[];
|
|
752
807
|
/**
|
|
753
|
-
*
|
|
808
|
+
* Replaces the selection with the given ids.
|
|
754
809
|
*
|
|
755
810
|
* @param ids - Array of all object IDs to select
|
|
811
|
+
* @param origin - Optional origin tag for loop prevention in bidirectional syncs
|
|
756
812
|
*/
|
|
757
|
-
setAllSelectedObjectsIds(ids: string[]): void;
|
|
813
|
+
setAllSelectedObjectsIds(ids: string[], origin?: Origin): void;
|
|
758
814
|
/**
|
|
759
815
|
* Gets the current canvas mode.
|
|
760
816
|
*
|
|
@@ -948,11 +1004,13 @@ export interface AsyncAIAPI {
|
|
|
948
1004
|
* Sandboxed-side API proxies where all calls resolve asynchronously.
|
|
949
1005
|
*/
|
|
950
1006
|
export interface AsyncApiMapping {
|
|
1007
|
+
agent: WithAsync<PublicAgentAPI>;
|
|
951
1008
|
ai: AsyncAIAPI;
|
|
952
1009
|
aiGenerator: AsyncAIGeneratorAPI;
|
|
953
1010
|
brandKit: WithAsync<PublicBrandKitAPI>;
|
|
954
1011
|
mockup: WithAsync<MockupDataAPI>;
|
|
955
|
-
|
|
1012
|
+
/** One proxy serves every entrypoint, so it is typed with every mount's fields. */
|
|
1013
|
+
context: AsyncContextAPI<KittlWidestContext>;
|
|
956
1014
|
data: AsyncDataAPI;
|
|
957
1015
|
/** @deprecated Use `project.design.api`. */
|
|
958
1016
|
design: AsyncDesignAPI;
|
|
@@ -1019,7 +1077,7 @@ export interface AsyncProjectAPI {
|
|
|
1019
1077
|
createBatch(): Promise<AsyncBatchDesignAPI>;
|
|
1020
1078
|
};
|
|
1021
1079
|
app: {
|
|
1022
|
-
state: AsyncPublicStateAPI<
|
|
1080
|
+
state: AsyncPublicStateAPI<PublicAppState, PublicAppSelectorState>;
|
|
1023
1081
|
api: AsyncAppStateAPI;
|
|
1024
1082
|
};
|
|
1025
1083
|
}
|
|
@@ -1255,14 +1313,6 @@ export interface CancellableSubmission {
|
|
|
1255
1313
|
* first point the backend reports a schedule.
|
|
1256
1314
|
*/
|
|
1257
1315
|
until?: number;
|
|
1258
|
-
/**
|
|
1259
|
-
* Drops the work still being done to prepare this submission's generations,
|
|
1260
|
-
* for a caller that handed the tracker an abort handle.
|
|
1261
|
-
*
|
|
1262
|
-
* Cancelling is `cancelGenerations`; this only saves finishing an upload for
|
|
1263
|
-
* a generation the user has already stopped.
|
|
1264
|
-
*/
|
|
1265
|
-
abort?: () => void;
|
|
1266
1316
|
}
|
|
1267
1317
|
/**
|
|
1268
1318
|
* Methods for generating preview images and exports from the canvas.
|
|
@@ -1594,6 +1644,22 @@ export interface DesignStateSoleBoard extends DesignStateBase {
|
|
|
1594
1644
|
objects: SerializedObject[];
|
|
1595
1645
|
groupStructure: StructureObject;
|
|
1596
1646
|
}
|
|
1647
|
+
/**
|
|
1648
|
+
* Host-provided iframe offsets used to translate sandboxed drop coordinates
|
|
1649
|
+
* into host screen coordinates.
|
|
1650
|
+
*
|
|
1651
|
+
* @public
|
|
1652
|
+
*/
|
|
1653
|
+
export interface DragAndDropOffset {
|
|
1654
|
+
/**
|
|
1655
|
+
* Horizontal offset applied to the iframe client-space drop coordinate.
|
|
1656
|
+
*/
|
|
1657
|
+
left: number;
|
|
1658
|
+
/**
|
|
1659
|
+
* Vertical offset applied to the iframe client-space drop coordinate.
|
|
1660
|
+
*/
|
|
1661
|
+
top: number;
|
|
1662
|
+
}
|
|
1597
1663
|
/** @public */
|
|
1598
1664
|
export interface ErrorGenerationResult {
|
|
1599
1665
|
type: typeof ResultType.ERROR;
|
|
@@ -2249,6 +2315,27 @@ export interface ImageAPI {
|
|
|
2249
2315
|
* @throws When the specified image ID doesn't exist in the design
|
|
2250
2316
|
*/
|
|
2251
2317
|
resetImageBackgroundRemoval(params: ResetImageBackgroundRemovalParams, opts?: DesignApiOptions): SdkResultAsync<NormalizedIllustrationImageObject, SdkError>;
|
|
2318
|
+
/**
|
|
2319
|
+
* Crops an image to its non-transparent pixels, for example after its
|
|
2320
|
+
* background was removed.
|
|
2321
|
+
*
|
|
2322
|
+
* Loads the image source, finds the transparent rows and columns along its
|
|
2323
|
+
* edges, and crops them away. The image is moved so its visible content
|
|
2324
|
+
* stays in place on the canvas, respecting rotation, scale, and flip.
|
|
2325
|
+
*
|
|
2326
|
+
* Leaves the image unchanged when it:
|
|
2327
|
+
* - is already cropped,
|
|
2328
|
+
* - has no transparent edges,
|
|
2329
|
+
* - is fully transparent, or
|
|
2330
|
+
* - had its source replaced while the image was loading.
|
|
2331
|
+
*
|
|
2332
|
+
* @param params - Configuration parameters identifying the image to trim
|
|
2333
|
+
* @param opts - Additional options for the design API operation
|
|
2334
|
+
* @returns Promise that resolves to the trimmed image object
|
|
2335
|
+
* @throws When the specified image ID doesn't exist in the design, or the
|
|
2336
|
+
* image source cannot be loaded or read
|
|
2337
|
+
*/
|
|
2338
|
+
trimTransparentEdges(params: TrimTransparentEdgesParams, opts?: UpdateObjectApiOptions): SdkResultAsync<NormalizedIllustrationImageObject, SdkError>;
|
|
2252
2339
|
}
|
|
2253
2340
|
/** @public */
|
|
2254
2341
|
export interface ImageGenerationResult {
|
|
@@ -2281,6 +2368,21 @@ export interface KittlContext {
|
|
|
2281
2368
|
*/
|
|
2282
2369
|
colorScheme: HostColorScheme;
|
|
2283
2370
|
}
|
|
2371
|
+
/**
|
|
2372
|
+
* Host context for editor mounting points, which can drag content onto the
|
|
2373
|
+
* canvas and so need the iframe's position in the editor.
|
|
2374
|
+
*
|
|
2375
|
+
* @public
|
|
2376
|
+
*/
|
|
2377
|
+
export interface KittlEditorContext extends KittlContext {
|
|
2378
|
+
/** Offset from iframe client coordinates to the host. */
|
|
2379
|
+
iframeOffset: DragAndDropOffset;
|
|
2380
|
+
/** @deprecated Use iframeOffset. */
|
|
2381
|
+
dragAndDrop: {
|
|
2382
|
+
/** @deprecated Use iframeOffset. */
|
|
2383
|
+
offset: DragAndDropOffset;
|
|
2384
|
+
};
|
|
2385
|
+
}
|
|
2284
2386
|
/**
|
|
2285
2387
|
* Brand kit API exposed to the content panel and website standalone pages.
|
|
2286
2388
|
*
|
|
@@ -2304,6 +2406,15 @@ export interface KittlSDKContextAPI<TContext extends KittlContext = KittlContext
|
|
|
2304
2406
|
*/
|
|
2305
2407
|
context: AsyncContextAPI<TContext>;
|
|
2306
2408
|
}
|
|
2409
|
+
/**
|
|
2410
|
+
* File picker API exposed to website mounting points.
|
|
2411
|
+
*
|
|
2412
|
+
* @public
|
|
2413
|
+
*/
|
|
2414
|
+
export interface KittlSDKFilePickerAPI {
|
|
2415
|
+
/** Opens the host picker and returns the files selected by the user. */
|
|
2416
|
+
fileBrowser: AsyncFileBrowserAPI;
|
|
2417
|
+
}
|
|
2307
2418
|
/**
|
|
2308
2419
|
* Lifecycle fields shared by every public SDK mounting point.
|
|
2309
2420
|
*
|
|
@@ -2323,6 +2434,24 @@ export interface KittlSDKLifecycle {
|
|
|
2323
2434
|
*/
|
|
2324
2435
|
onReady: (cb: () => void) => void;
|
|
2325
2436
|
}
|
|
2437
|
+
/**
|
|
2438
|
+
* Main editor handoff API exposed to standalone app pages.
|
|
2439
|
+
*
|
|
2440
|
+
* @public
|
|
2441
|
+
*/
|
|
2442
|
+
export interface KittlSDKOpenMainEditorAPI {
|
|
2443
|
+
/** Hands a design over to the main editor, or opens the host project picker. */
|
|
2444
|
+
openMainEditor: AsyncApiMapping["openMainEditor"];
|
|
2445
|
+
}
|
|
2446
|
+
/**
|
|
2447
|
+
* Micro editor API exposed to website mounting points.
|
|
2448
|
+
*
|
|
2449
|
+
* @public
|
|
2450
|
+
*/
|
|
2451
|
+
export interface KittlSDKOpenMicroEditorAPI {
|
|
2452
|
+
/** Opens the host micro editor dialog; resolves once the user closes it. */
|
|
2453
|
+
openMicroEditor: AsyncApiMapping["openMicroEditor"];
|
|
2454
|
+
}
|
|
2326
2455
|
/**
|
|
2327
2456
|
* Host-agnostic APIs every mounting-point SDK entrypoint exposes.
|
|
2328
2457
|
*
|
|
@@ -2346,20 +2475,6 @@ export interface KittlSDKUploadAPI {
|
|
|
2346
2475
|
*/
|
|
2347
2476
|
upload: AsyncUploadAPI;
|
|
2348
2477
|
}
|
|
2349
|
-
/**
|
|
2350
|
-
* Website APIs exposed by the website mounting-point SDK entrypoints, on top
|
|
2351
|
-
* of the shared, context and upload APIs they compose separately.
|
|
2352
|
-
*
|
|
2353
|
-
* @public
|
|
2354
|
-
*/
|
|
2355
|
-
export interface KittlSDKWebsiteMountingPointAPIs extends KittlSDKBrandKitAPI {
|
|
2356
|
-
/** Opens the host micro editor dialog; resolves once the user closes it. */
|
|
2357
|
-
openMicroEditor: AsyncApiMapping["openMicroEditor"];
|
|
2358
|
-
/** Hands a design over to the main editor, or opens the host project picker. */
|
|
2359
|
-
openMainEditor: AsyncApiMapping["openMainEditor"];
|
|
2360
|
-
/** Opens the host picker and returns the files selected by the user. */
|
|
2361
|
-
fileBrowser: AsyncFileBrowserAPI;
|
|
2362
|
-
}
|
|
2363
2478
|
/**
|
|
2364
2479
|
* API for reordering design state layers
|
|
2365
2480
|
*
|
|
@@ -2669,8 +2784,15 @@ export interface MockupDataAPI {
|
|
|
2669
2784
|
getOverview(options?: Pick<PaginationOptions, "sort">): SdkResultAsync<MockupOverviewDto>;
|
|
2670
2785
|
/** Fetches a paginated list of mockups within a specific group. */
|
|
2671
2786
|
getGroup(groupId: string, options?: PaginationOptions): SdkResultAsync<MockupGroupDto>;
|
|
2672
|
-
/**
|
|
2673
|
-
|
|
2787
|
+
/**
|
|
2788
|
+
* Searches mockups by text. OpenSearch uses relevance ordering and ignores sort.
|
|
2789
|
+
*
|
|
2790
|
+
* @param query - Search text.
|
|
2791
|
+
* @param options - Pagination, database sort, and optional OpenSearch mode.
|
|
2792
|
+
*
|
|
2793
|
+
* @returns Lightweight catalog summaries or an SDK error.
|
|
2794
|
+
*/
|
|
2795
|
+
search(query: string, options?: MockupSearchOptions): SdkResultAsync<PaginatedResult<CatalogItem>>;
|
|
2674
2796
|
/** Fetches suggested tags and groups for mockup discovery. */
|
|
2675
2797
|
getSuggestions(): SdkResultAsync<MockupSuggestions>;
|
|
2676
2798
|
}
|
|
@@ -2708,6 +2830,14 @@ export interface MockupOverviewGroupDto {
|
|
|
2708
2830
|
/** Total number of mockups in this group */
|
|
2709
2831
|
total: number;
|
|
2710
2832
|
}
|
|
2833
|
+
/** Pagination and search source options for the mockup catalog. */
|
|
2834
|
+
export interface MockupSearchOptions extends PaginationOptions {
|
|
2835
|
+
/**
|
|
2836
|
+
* Uses OpenSearch relevance ordering instead of database sorting when true.
|
|
2837
|
+
* OpenSearch currently ignores `sort`. Defaults to false.
|
|
2838
|
+
*/
|
|
2839
|
+
useOpenSearch?: boolean;
|
|
2840
|
+
}
|
|
2711
2841
|
/**
|
|
2712
2842
|
* Suggested tags and groups for mockup discovery.
|
|
2713
2843
|
*/
|
|
@@ -2834,7 +2964,7 @@ export interface ObjectAPI {
|
|
|
2834
2964
|
*
|
|
2835
2965
|
* @example
|
|
2836
2966
|
* ```typescript
|
|
2837
|
-
* const objectApi = new ObjectAPI(
|
|
2967
|
+
* const objectApi = new ObjectAPI(projectCapability, store);
|
|
2838
2968
|
*
|
|
2839
2969
|
* // Lock a background image to prevent accidental modification
|
|
2840
2970
|
* const result = await objectApi.setLockedState({
|
|
@@ -2874,7 +3004,7 @@ export interface ObjectAPI {
|
|
|
2874
3004
|
*
|
|
2875
3005
|
* @example
|
|
2876
3006
|
* ```typescript
|
|
2877
|
-
* const objectApi = new ObjectAPI(
|
|
3007
|
+
* const objectApi = new ObjectAPI(projectCapability, store);
|
|
2878
3008
|
*
|
|
2879
3009
|
* // Hide an object
|
|
2880
3010
|
* const result = await objectApi.setHiddenState({
|
|
@@ -2925,7 +3055,7 @@ export interface ObjectAPI {
|
|
|
2925
3055
|
|
|
2926
3056
|
* @example
|
|
2927
3057
|
* ```typescript
|
|
2928
|
-
* const objectApi = new ObjectAPI(
|
|
3058
|
+
* const objectApi = new ObjectAPI(projectCapability, store);
|
|
2929
3059
|
*
|
|
2930
3060
|
* // Rotate a text element 90 degrees clockwise around its center (default)
|
|
2931
3061
|
* await objectApi.rotateObject({
|
|
@@ -3098,6 +3228,43 @@ export interface PlacementAPI {
|
|
|
3098
3228
|
batchClient?: BatchClient<NormalizedDesignState>;
|
|
3099
3229
|
}): SmartPlacementOutput;
|
|
3100
3230
|
}
|
|
3231
|
+
/**
|
|
3232
|
+
* Agent methods sandboxed extensions can call through the public SDK.
|
|
3233
|
+
*
|
|
3234
|
+
* Deliberately narrower than {@link AgentAPI}: a single-object, JSON-serializable
|
|
3235
|
+
* argument per method, and only what an apps panel item needs to hand work to
|
|
3236
|
+
* the agent. Both act on the chat open beside the panel, which the host
|
|
3237
|
+
* decides (see {@link AgentAPI.getOpenChatId}); an app never names a chat.
|
|
3238
|
+
* Listing, archiving and feedback stay host-internal.
|
|
3239
|
+
*/
|
|
3240
|
+
export interface PublicAgentAPI {
|
|
3241
|
+
/**
|
|
3242
|
+
* Posts a text user message into the open chat and runs the agent on it.
|
|
3243
|
+
* Resolves once the run leaves its interruptible phase, like
|
|
3244
|
+
* {@link AgentAPI.sendMessage}. Text only: an image an app wants the agent
|
|
3245
|
+
* to see goes through {@link PublicAgentAPI.attachImage}, so the user stays
|
|
3246
|
+
* in charge of what is sent. Rejects when no chat is open, and while that
|
|
3247
|
+
* chat's run is still active (see {@link AgentAPI.getIsRunActive}): unlike
|
|
3248
|
+
* the host API, an app never replaces an answer the user is waiting for.
|
|
3249
|
+
*/
|
|
3250
|
+
sendMessage: (args: PublicAgentSendMessageArgs) => Promise<void>;
|
|
3251
|
+
/**
|
|
3252
|
+
* Adds an image to the open chat composer's reference row. The user sees it
|
|
3253
|
+
* beside the prompt, can remove it, and sends it with their next message.
|
|
3254
|
+
* Nothing is sent by this call. See {@link AgentAPI.attachImage}.
|
|
3255
|
+
*/
|
|
3256
|
+
attachImage: (args: PublicAgentAttachImageArgs) => Promise<void>;
|
|
3257
|
+
}
|
|
3258
|
+
/** Arguments of {@link PublicAgentAPI.attachImage}. */
|
|
3259
|
+
export interface PublicAgentAttachImageArgs {
|
|
3260
|
+
/** The image to attach: the record `upload.image.upload` returned. */
|
|
3261
|
+
image: SandboxedAgentComposerImage;
|
|
3262
|
+
}
|
|
3263
|
+
/** Arguments of {@link PublicAgentAPI.sendMessage}. */
|
|
3264
|
+
export interface PublicAgentSendMessageArgs {
|
|
3265
|
+
/** The user-role prompt to send, as the user had typed it. */
|
|
3266
|
+
text: string;
|
|
3267
|
+
}
|
|
3101
3268
|
/** Methods the export capability exposes to sandboxed SDK consumers. */
|
|
3102
3269
|
export interface PublicExportAPI {
|
|
3103
3270
|
/** Generates a file directly; requires `export:bypass` and organization approval. */
|
|
@@ -3233,6 +3400,18 @@ export interface RotateObjectParams {
|
|
|
3233
3400
|
y: OriginY;
|
|
3234
3401
|
};
|
|
3235
3402
|
}
|
|
3403
|
+
/**
|
|
3404
|
+
* An image an apps panel item attaches to the chat composer: the record
|
|
3405
|
+
* `upload.image.upload` returned to it. `id` is the upload object id the agent
|
|
3406
|
+
* loop stores (see {@link AgentMessageFilePart}); `objectName` is what the
|
|
3407
|
+
* host builds the thumbnail from.
|
|
3408
|
+
*/
|
|
3409
|
+
export interface SandboxedAgentComposerImage {
|
|
3410
|
+
/** Upload object id of the image. */
|
|
3411
|
+
id: string;
|
|
3412
|
+
/** Storage object name of the upload, for the composer thumbnail. */
|
|
3413
|
+
objectName: string;
|
|
3414
|
+
}
|
|
3236
3415
|
export interface SerializeBoardBase {
|
|
3237
3416
|
objects: SerializedObject[];
|
|
3238
3417
|
groupStructure: StructureObject;
|
|
@@ -3714,26 +3893,6 @@ export interface StructureObjectMeta {
|
|
|
3714
3893
|
*/
|
|
3715
3894
|
maskBackgroundColor?: string | null;
|
|
3716
3895
|
}
|
|
3717
|
-
/**
|
|
3718
|
-
* What a generation's caller knows about the submission it belongs to.
|
|
3719
|
-
*
|
|
3720
|
-
* One submission is one Stop, so every generation of a group shares these.
|
|
3721
|
-
*
|
|
3722
|
-
* @public
|
|
3723
|
-
*/
|
|
3724
|
-
export interface SubmissionOptions {
|
|
3725
|
-
/**
|
|
3726
|
-
* Abandons the work of preparing this generation - rasterizing and uploading
|
|
3727
|
-
* its reference images - when the caller stops the submission it belongs to.
|
|
3728
|
-
*
|
|
3729
|
-
* An optimization, not the way to cancel: stopping a generation is
|
|
3730
|
-
* {@link AIGeneratorAPI.cancelGenerations}, which works the same with or
|
|
3731
|
-
* without this, and aborting once the create request has been sent does
|
|
3732
|
-
* nothing. Pass it to avoid finishing an upload whose generation the user
|
|
3733
|
-
* has already taken back.
|
|
3734
|
-
*/
|
|
3735
|
-
signal?: AbortSignal;
|
|
3736
|
-
}
|
|
3737
3896
|
/**
|
|
3738
3897
|
* API for creating and managing text elements in the design.
|
|
3739
3898
|
*
|
|
@@ -4160,7 +4319,8 @@ export interface WithObjectLayout {
|
|
|
4160
4319
|
flipX: boolean;
|
|
4161
4320
|
flipY: boolean;
|
|
4162
4321
|
}
|
|
4163
|
-
|
|
4322
|
+
/** Where generation started, using the API's action-origin contract. */
|
|
4323
|
+
export type AIGenerationActionOrigin = GenerateContentActionOrigin;
|
|
4164
4324
|
export type AIGenerationContentType = "image" | "video";
|
|
4165
4325
|
export type AIGenerationModelTaskType = "IMAGE_TO_IMAGE" | "IMAGE_INPAINT" | "IMAGE_OUTPAINT" | "TEXT_TO_IMAGE" | "IMAGE_TO_VIDEO";
|
|
4166
4326
|
/**
|
|
@@ -4235,11 +4395,9 @@ export type AIGeneratorAPI = {
|
|
|
4235
4395
|
* @param generatorId - Unique identifier for the generator type
|
|
4236
4396
|
* @param inputSettings - Generator-specific input parameters matching the API schema
|
|
4237
4397
|
* @param output - Requested output settings for the generation
|
|
4238
|
-
* @param options - What the caller knows about the submission this
|
|
4239
|
-
* generation belongs to, see {@link SubmissionOptions}
|
|
4240
4398
|
* @returns Object containing the generation ID
|
|
4241
4399
|
*/
|
|
4242
|
-
generate: (generatorId: string, inputSettings: GenerationInputSettings, output: GenerationOutputSettings
|
|
4400
|
+
generate: (generatorId: string, inputSettings: GenerationInputSettings, output: GenerationOutputSettings) => {
|
|
4243
4401
|
generationId: string;
|
|
4244
4402
|
};
|
|
4245
4403
|
/**
|
|
@@ -4283,10 +4441,6 @@ export type AIGeneratorAPI = {
|
|
|
4283
4441
|
* generation whose create request has not been sent is taken back without the
|
|
4284
4442
|
* backend ever hearing about it.
|
|
4285
4443
|
*
|
|
4286
|
-
* Takes the submission rather than bare ids so this is also where the
|
|
4287
|
-
* preparation still running for it is dropped - callers never do that
|
|
4288
|
-
* themselves, and so cannot forget to.
|
|
4289
|
-
*
|
|
4290
4444
|
* @param submission - The submission to stop, from `createSubmissionTracker`.
|
|
4291
4445
|
* A caller without a tracker can pass `{ generationIds }`.
|
|
4292
4446
|
* @returns Promise resolving once every cancellation settled, listing the
|
|
@@ -4593,7 +4747,7 @@ export type AddSmartboardParams = {
|
|
|
4593
4747
|
} & {
|
|
4594
4748
|
position: AbsolutePosition | RelativePosition;
|
|
4595
4749
|
size: Dimensions;
|
|
4596
|
-
}
|
|
4750
|
+
} & Pick<SmartboardOptions, "generationSettings">;
|
|
4597
4751
|
/**
|
|
4598
4752
|
* Comprehensive font and styling properties for text customization and typography control.
|
|
4599
4753
|
*
|
|
@@ -4671,6 +4825,11 @@ export type AddTextParams = {
|
|
|
4671
4825
|
* **Default dimensions**: 200x50 pixels if not specified
|
|
4672
4826
|
*/
|
|
4673
4827
|
size: Dimensions;
|
|
4828
|
+
/**
|
|
4829
|
+
* When set, assigns the new text to this board instead of resolving the board
|
|
4830
|
+
* id via `getObjectBoardId`.
|
|
4831
|
+
*/
|
|
4832
|
+
boardId?: string;
|
|
4674
4833
|
};
|
|
4675
4834
|
/**
|
|
4676
4835
|
* Parameters for adding a new video to the design.
|
|
@@ -4758,6 +4917,11 @@ export type AnimateViewportToBoundsParams = ViewportAnimationSettings & ObjectPo
|
|
|
4758
4917
|
*/
|
|
4759
4918
|
export type AnimateViewportToCenterParams = ViewportAnimationSettings & ObjectPositionRect;
|
|
4760
4919
|
export type AnimationChannel = (typeof ANIMATION_CHANNELS)[number];
|
|
4920
|
+
/**
|
|
4921
|
+
* How a track combines with the object's own property: `add` is
|
|
4922
|
+
* `property + value`, `replace` sets it.
|
|
4923
|
+
*/
|
|
4924
|
+
export type AnimationComposite = "add" | "replace";
|
|
4761
4925
|
/**
|
|
4762
4926
|
* `cubic-bezier(x1, y1, x2, y2)`; x values within `[0, 1]`, y values may
|
|
4763
4927
|
* overshoot. A mutable tuple on purpose: `Normalized<>` cannot map `readonly`
|
|
@@ -4772,13 +4936,39 @@ export type AnimationCubicBezierEasing = {
|
|
|
4772
4936
|
y2: number
|
|
4773
4937
|
];
|
|
4774
4938
|
};
|
|
4775
|
-
export type AnimationEasing = AnimationEasingName | AnimationCubicBezierEasing;
|
|
4939
|
+
export type AnimationEasing = AnimationEasingName | AnimationCubicBezierEasing | AnimationStepsEasing | AnimationHoldEasing;
|
|
4776
4940
|
export type AnimationEasingName = (typeof ANIMATION_EASING_NAMES)[number];
|
|
4941
|
+
/** Keeps the keyframe value until the next keyframe. */
|
|
4942
|
+
export type AnimationHoldEasing = {
|
|
4943
|
+
type: "hold";
|
|
4944
|
+
};
|
|
4777
4945
|
/**
|
|
4778
4946
|
* Key of an animation in the design state, built from its
|
|
4779
4947
|
* {@link AnimationTarget}: `objectId` or `objectId/pathItemId`.
|
|
4780
4948
|
*/
|
|
4781
4949
|
export type AnimationKey = string;
|
|
4950
|
+
/**
|
|
4951
|
+
* Curve the target travels along, driven by the `offsetDistance` channel.
|
|
4952
|
+
* Offsets are added to the position, so the curve is relative to where the
|
|
4953
|
+
* target rests (usually ending at `0,0`), in its parent's units.
|
|
4954
|
+
*/
|
|
4955
|
+
export type AnimationMotionPath = {
|
|
4956
|
+
/**
|
|
4957
|
+
* SVG path data made of one absolute `M` followed by absolute `L` / `C`
|
|
4958
|
+
* commands, e.g. `'M -200 300 C -150 100 -50 0 0 0'`. A string rather than
|
|
4959
|
+
* points keeps it one atomic value in the design state.
|
|
4960
|
+
*/
|
|
4961
|
+
path: string;
|
|
4962
|
+
/** Rotates the target along the curve's tangent, on top of `rotate`. */
|
|
4963
|
+
autoRotate?: boolean;
|
|
4964
|
+
};
|
|
4965
|
+
export type AnimationShapeChannel = typeof ANIMATION_SHAPE_CHANNEL;
|
|
4966
|
+
/** `steps(count, position)`: jumps in `count` equal steps. */
|
|
4967
|
+
export type AnimationStepsEasing = {
|
|
4968
|
+
type: "steps";
|
|
4969
|
+
count: number;
|
|
4970
|
+
position: "start" | "end";
|
|
4971
|
+
};
|
|
4782
4972
|
export type Animations = Record<AnimationKey, NormalizedAnimation>;
|
|
4783
4973
|
/**
|
|
4784
4974
|
* Application state interface containing selection, viewport, active tool, and other UI state.
|
|
@@ -4790,25 +4980,27 @@ export type Animations = Record<AnimationKey, NormalizedAnimation>;
|
|
|
4790
4980
|
*/
|
|
4791
4981
|
export type AppState = {
|
|
4792
4982
|
/**
|
|
4793
|
-
*
|
|
4794
|
-
*
|
|
4795
|
-
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
*
|
|
4799
|
-
*
|
|
4800
|
-
|
|
4801
|
-
|
|
4802
|
-
|
|
4803
|
-
*
|
|
4804
|
-
|
|
4805
|
-
|
|
4806
|
-
|
|
4807
|
-
*
|
|
4983
|
+
* Every selected id, in selection order — the single stored selection list
|
|
4984
|
+
* every selection getter of {@link AppStateAPI} (including
|
|
4985
|
+
* `getAllSelectedObjectsIds`) is derived from.
|
|
4986
|
+
*
|
|
4987
|
+
* The list holds the full closure of the selection: selecting a board or a
|
|
4988
|
+
* group also lists everything nested inside it, in canvas render order. It
|
|
4989
|
+
* mixes all the kinds of things that can be selected:
|
|
4990
|
+
*
|
|
4991
|
+
* - board ids
|
|
4992
|
+
* - object ids
|
|
4993
|
+
* - group ids (structure nodes that are not objects themselves)
|
|
4994
|
+
* - `link__<inputBoardId>_<targetBoardId>` ids for the connection between a
|
|
4995
|
+
* smartboard input and its target
|
|
4996
|
+
* - `path__<childObjectId>` ids for a single sub-path of an illustration
|
|
4997
|
+
* - ids the design state does not know yet, passed through untouched
|
|
4998
|
+
*
|
|
4999
|
+
* A board's texture and background are not selectable on their own: they
|
|
5000
|
+
* exist only as layer ids, which {@link AppStateAPI.getSelectedLayersIds}
|
|
5001
|
+
* derives from the selected board.
|
|
4808
5002
|
*/
|
|
4809
|
-
|
|
4810
|
-
/** All selected objects including: objects, artboards and artboards' objects */
|
|
4811
|
-
allSelectedObjectsIds: string[];
|
|
5003
|
+
selectionIds: string[];
|
|
4812
5004
|
/**
|
|
4813
5005
|
* Active canvas mode after its mode-specific entry succeeds.
|
|
4814
5006
|
*
|
|
@@ -4830,6 +5022,12 @@ export type AppState = {
|
|
|
4830
5022
|
isViewOnlyMode: boolean;
|
|
4831
5023
|
/** Whether the loaded design contains objects outside the supported viewport bounds. */
|
|
4832
5024
|
hasLegacyOutOfBoundsObjects: boolean;
|
|
5025
|
+
/**
|
|
5026
|
+
* Canvas-owned: true when recoverable content exists but none is in view.
|
|
5027
|
+
* Excludes helpers and hidden/transparent objects; false in runtimes without
|
|
5028
|
+
* the renderer's content visibility stage and outside the default working mode.
|
|
5029
|
+
*/
|
|
5030
|
+
isContentOutOfView: boolean;
|
|
4833
5031
|
canvasSettings: SettingsType;
|
|
4834
5032
|
/** Last-used pen tool stroke/fill settings, applied to newly drawn paths. */
|
|
4835
5033
|
penToolSetting: {
|
|
@@ -4950,7 +5148,7 @@ export type BoundingRect = {
|
|
|
4950
5148
|
bottom: number;
|
|
4951
5149
|
right: number;
|
|
4952
5150
|
};
|
|
4953
|
-
/** Brand kit data exposed through the
|
|
5151
|
+
/** Brand kit data exposed through the `brandKit` capability. */
|
|
4954
5152
|
export type BrandKit = {
|
|
4955
5153
|
id: string;
|
|
4956
5154
|
name: string;
|
|
@@ -5052,6 +5250,16 @@ export type CanvasMode = {
|
|
|
5052
5250
|
} | {
|
|
5053
5251
|
mode: "inpaint";
|
|
5054
5252
|
targetId: string;
|
|
5253
|
+
}
|
|
5254
|
+
/**
|
|
5255
|
+
* A rich text object is being edited. Set by the canvas while the text is in
|
|
5256
|
+
* editing mode; it is not a `CanvasModeManager` mode. `range` holds the
|
|
5257
|
+
* selected characters and is absent until the canvas reports it.
|
|
5258
|
+
*/
|
|
5259
|
+
| {
|
|
5260
|
+
mode: "text-editing";
|
|
5261
|
+
targetId: string;
|
|
5262
|
+
range?: TextRange;
|
|
5055
5263
|
} | {
|
|
5056
5264
|
mode: "custom";
|
|
5057
5265
|
id: string;
|
|
@@ -5064,7 +5272,7 @@ export type CanvasMode = {
|
|
|
5064
5272
|
*
|
|
5065
5273
|
* @public
|
|
5066
5274
|
*/
|
|
5067
|
-
export type CanvasModeKind = "erase" | "erase-and-fill" | "crop" | "reframe" | "inpaint" | null;
|
|
5275
|
+
export type CanvasModeKind = "erase" | "erase-and-fill" | "crop" | "reframe" | "inpaint" | "text-editing" | null;
|
|
5068
5276
|
/**
|
|
5069
5277
|
* The index of a character in the rich text object.
|
|
5070
5278
|
*/
|
|
@@ -5148,6 +5356,10 @@ export type CreateBasicShapeInput = CreateElementWithPositionAndSize & {
|
|
|
5148
5356
|
*/
|
|
5149
5357
|
export type CreateBoardParams = Omit<CreateElementWithPositionAndSize, "size" | "boardId"> & {
|
|
5150
5358
|
title?: string;
|
|
5359
|
+
/**
|
|
5360
|
+
* Layout of the new artboard. Defaults to the standard layout.
|
|
5361
|
+
*/
|
|
5362
|
+
activeLayout?: ArtboardOptions["activeLayout"];
|
|
5151
5363
|
/**
|
|
5152
5364
|
* size required on artboard
|
|
5153
5365
|
*/
|
|
@@ -5564,6 +5776,7 @@ export type FullColor = {
|
|
|
5564
5776
|
visible: boolean;
|
|
5565
5777
|
};
|
|
5566
5778
|
export type FunctionType = (...args: never) => unknown;
|
|
5779
|
+
export type GenerateContentActionOrigin = (typeof GenerateContentActionOrigin)[keyof typeof GenerateContentActionOrigin];
|
|
5567
5780
|
/** Alias: capability name for AIGenerationInputSettings. @public */
|
|
5568
5781
|
export type GenerationInputSettings = AIGenerationInputSettings;
|
|
5569
5782
|
/** Alias: capability name for AIGenerationOutputSettings. @public */
|
|
@@ -5813,6 +6026,22 @@ export type JSONObject = {
|
|
|
5813
6026
|
[key: string]: JSONValue;
|
|
5814
6027
|
};
|
|
5815
6028
|
export type JSONValue = null | boolean | number | string | Array<JSONValue> | JSONObject;
|
|
6029
|
+
export type KeyframeBase = {
|
|
6030
|
+
id: string;
|
|
6031
|
+
/**
|
|
6032
|
+
* Easing of the segment that starts at this keyframe. Defaults to
|
|
6033
|
+
* {@link DEFAULT_KEYFRAME_EASING}, ignored on the last keyframe.
|
|
6034
|
+
*/
|
|
6035
|
+
easing?: AnimationEasing;
|
|
6036
|
+
};
|
|
6037
|
+
/**
|
|
6038
|
+
* Every field any mounting point's host context can carry. The extension-side
|
|
6039
|
+
* bridge is typed with it because it is one proxy shared by all entrypoints;
|
|
6040
|
+
* each entrypoint narrows it to the context its mounting point receives.
|
|
6041
|
+
*
|
|
6042
|
+
* @public
|
|
6043
|
+
*/
|
|
6044
|
+
export type KittlWidestContext = KittlEditorContext;
|
|
5816
6045
|
/**
|
|
5817
6046
|
* The predefined OpenType variation axes. However, a font can define custom
|
|
5818
6047
|
* axes using a four-character string.
|
|
@@ -5833,6 +6062,15 @@ export type LeftTopPosition = {
|
|
|
5833
6062
|
left: number;
|
|
5834
6063
|
top: number;
|
|
5835
6064
|
};
|
|
6065
|
+
/**
|
|
6066
|
+
* The derived selection lists readable through the `appState` subscribe
|
|
6067
|
+
* channel. None of them is stored in {@link AppState} (only the selection
|
|
6068
|
+
* closure `selectionIds` is); they are derived by the app state API, and the host bridge merges
|
|
6069
|
+
* them in before delivering updates (see `createExtensionAppStateStore` in
|
|
6070
|
+
* `@repo/sandbox-wrapper`), so published extensions can keep subscribing to
|
|
6071
|
+
* them by their legacy names.
|
|
6072
|
+
*/
|
|
6073
|
+
export type LegacySelectionKey = "selectedObjectsIds" | "selectedLayersIds" | "selectedArtboardIds" | "selectedArtboardsObjectIds" | "allSelectedObjectsIds";
|
|
5836
6074
|
/**
|
|
5837
6075
|
* The line height of the text.
|
|
5838
6076
|
*/
|
|
@@ -5928,8 +6166,6 @@ export type MicroEditorWorkflowSource = {
|
|
|
5928
6166
|
presetId: string;
|
|
5929
6167
|
/** Whether outputs from the workflow preset support layerization. */
|
|
5930
6168
|
isLayerizable: boolean;
|
|
5931
|
-
/** Whether this particular workflow result is ready for layerization. */
|
|
5932
|
-
readyToLayerize?: boolean;
|
|
5933
6169
|
/** Generated-content record associated with this workflow result. */
|
|
5934
6170
|
generatedContentId?: string;
|
|
5935
6171
|
/** Original upload id accepted by the image-spec API. */
|
|
@@ -6064,10 +6300,20 @@ export type NormalizeValue<T> = T extends null | undefined ? T : NonNullable<T>
|
|
|
6064
6300
|
* instead of trying to normalize the union as a whole.
|
|
6065
6301
|
*/
|
|
6066
6302
|
export type Normalized<T> = T extends null | undefined ? T : T extends Builtin ? T : T extends unknown[] | readonly unknown[] ? NormalizeArray<T> : T extends object ? NormalizeObject<T> : T;
|
|
6067
|
-
/** `
|
|
6068
|
-
export type NormalizedAnimation = Normalized<SerializedAnimation
|
|
6303
|
+
/** `tracks` becomes a record plus `tracksIndices` for ordering. */
|
|
6304
|
+
export type NormalizedAnimation = Normalized<Omit<SerializedAnimation, "tracks">> & {
|
|
6305
|
+
tracks: Record<string, NormalizedTrack>;
|
|
6306
|
+
tracksIndices: Record<string, string>;
|
|
6307
|
+
};
|
|
6069
6308
|
export type NormalizedBasicShapeObject = Normalized<BasicShapeSerializedObject>;
|
|
6070
6309
|
export type NormalizedBoard = NormalizedStandardBoard | NormalizedFloatingBoard;
|
|
6310
|
+
/**
|
|
6311
|
+
* `keyframes` becomes a record plus `keyframesIndices` for ordering. A record
|
|
6312
|
+
* has no first entry, so it holds any {@link SerializedKeyframe}.
|
|
6313
|
+
*/
|
|
6314
|
+
export type NormalizedChannelTrack = Normalized<Omit<SerializedChannelTrack, "keyframes"> & {
|
|
6315
|
+
keyframes: SerializedKeyframe[];
|
|
6316
|
+
}>;
|
|
6071
6317
|
export type NormalizedCombinedShapeObject = Normalized<CombinedShapeSerializedObject>;
|
|
6072
6318
|
export type NormalizedDesignState = {
|
|
6073
6319
|
boards: Record<ID, NormalizedBoard>;
|
|
@@ -6101,11 +6347,14 @@ export type NormalizedPathTextObject = Normalized<PathTextSerializedObject>;
|
|
|
6101
6347
|
* In the normalized form all object references are replaced by their ids.
|
|
6102
6348
|
*/
|
|
6103
6349
|
export type NormalizedRichTextObject = Normalized<RichTextSerializedObject>;
|
|
6350
|
+
/** `keyframes` becomes a record plus `keyframesIndices` for ordering. */
|
|
6351
|
+
export type NormalizedShapeTrack = Normalized<SerializedShapeTrack>;
|
|
6104
6352
|
/**
|
|
6105
6353
|
* The normalized version of a StandardBoard
|
|
6106
6354
|
*/
|
|
6107
6355
|
export type NormalizedStandardBoard<T extends ArtboardOptions = ArtboardOptions> = Normalized<BaseStandardBoard<T>>;
|
|
6108
6356
|
export type NormalizedStandardObject = NormalizedBasicShapeObject | NormalizedCombinedShapeObject | NormalizedIllustrationImageObject | NormalizedIllustrationObject | NormalizedLoadingCardObject | NormalizedMaskObject | NormalizedMockupDesignObject | NormalizedPathTextObject | NormalizedRichTextObject | NormalizedVideoObject;
|
|
6357
|
+
export type NormalizedTrack = NormalizedChannelTrack | NormalizedShapeTrack;
|
|
6109
6358
|
export type NormalizedVideoObject = Normalized<VideoSerializedObject>;
|
|
6110
6359
|
export type NullablePathTextShadowOptions = PathTextShadowOptions | {
|
|
6111
6360
|
type: null;
|
|
@@ -6333,6 +6582,8 @@ export type PlainInputSetting = {
|
|
|
6333
6582
|
isPremium?: boolean;
|
|
6334
6583
|
name: "combineBoards" | (string & {});
|
|
6335
6584
|
label?: string;
|
|
6585
|
+
/** Help text shown when hovering a boolean setting. */
|
|
6586
|
+
tooltip?: string;
|
|
6336
6587
|
disabled?: true;
|
|
6337
6588
|
} & ({
|
|
6338
6589
|
type: "selection";
|
|
@@ -6375,18 +6626,16 @@ export type PrintMargins = {
|
|
|
6375
6626
|
bottom: number;
|
|
6376
6627
|
left: number;
|
|
6377
6628
|
};
|
|
6629
|
+
/** Generator API exposed to iframe clients. Same as {@link AIGeneratorAPI}. */
|
|
6630
|
+
export type PublicAIGeneratorAPI = AIGeneratorAPI;
|
|
6631
|
+
/** App selectors cover the approved subscription fields within the full snapshot. */
|
|
6632
|
+
export type PublicAppSelectorState = Pick<PublicAppState, (typeof APP_STATE_SUBSCRIPTION_KEYS)[number]>;
|
|
6378
6633
|
/**
|
|
6379
|
-
*
|
|
6380
|
-
*
|
|
6634
|
+
* The shape of the state extensions can subscribe to over the `appState`
|
|
6635
|
+
* channel: the current {@link AppState} plus the five derived, read-only
|
|
6636
|
+
* {@link LegacySelectionKey} lists.
|
|
6381
6637
|
*/
|
|
6382
|
-
export type
|
|
6383
|
-
/** Starts a generation without accepting a caller-local AbortSignal. */
|
|
6384
|
-
generate: (generatorId: string, inputSettings: GenerationInputSettings, output: GenerationOutputSettings) => ReturnType<AIGeneratorAPI["generate"]>;
|
|
6385
|
-
/** Cancels a submission using only its serializable fields. */
|
|
6386
|
-
cancelGenerations: (submission: Pick<CancellableSubmission, "generationIds" | "until">) => ReturnType<AIGeneratorAPI["cancelGenerations"]>;
|
|
6387
|
-
};
|
|
6388
|
-
/** App selectors cover the approved subscription fields within the full snapshot. */
|
|
6389
|
-
export type PublicAppSelectorState = Pick<AppState, (typeof APP_STATE_SUBSCRIPTION_KEYS)[number]>;
|
|
6638
|
+
export type PublicAppState = AppState & Record<LegacySelectionKey, string[]>;
|
|
6390
6639
|
/**
|
|
6391
6640
|
* Brand kit methods sandboxed extensions can call through the public SDK.
|
|
6392
6641
|
* Read-only for now: image uploads into a brand kit need a write scope first.
|
|
@@ -7074,8 +7323,9 @@ export type SerialisedPhotoFilter = ({
|
|
|
7074
7323
|
export type SerializableCornerRadii = Record<string, Record<string, number>>;
|
|
7075
7324
|
export type SerializableObjectType = ObjectType.IllustrationImage | ObjectType.Illustration | ObjectType.Artboard | ObjectType.Smartboard | ObjectType.Videoboard | ObjectType.MockupBoard | ObjectType.PathText | ObjectType.RichText | ObjectType.MockupDesign | ObjectType.OverlayTexture | ObjectType.Mask | ObjectType.BasicShape | ObjectType.VectorPath | ObjectType.Guide | ObjectType.CombinedShape | ObjectType.LoadingCard | ObjectType.Video;
|
|
7076
7325
|
/**
|
|
7077
|
-
*
|
|
7078
|
-
* `getAnimationDuration`), so there is no separate
|
|
7326
|
+
* Tracks of one target, at most one per channel. The animation lasts until
|
|
7327
|
+
* its last keyframe (see `getAnimationDuration`), so there is no separate
|
|
7328
|
+
* duration to keep in sync.
|
|
7079
7329
|
*/
|
|
7080
7330
|
export type SerializedAnimation = {
|
|
7081
7331
|
/**
|
|
@@ -7086,22 +7336,77 @@ export type SerializedAnimation = {
|
|
|
7086
7336
|
x: number;
|
|
7087
7337
|
y: number;
|
|
7088
7338
|
};
|
|
7089
|
-
|
|
7339
|
+
motionPath?: AnimationMotionPath;
|
|
7340
|
+
/**
|
|
7341
|
+
* Distance from the viewer to the canvas plane for the 3D channels, in
|
|
7342
|
+
* canvas px, like CSS `perspective()`; positive. Defaults to `1000`. When
|
|
7343
|
+
* several animations apply to one object, the most specific one that sets
|
|
7344
|
+
* it wins.
|
|
7345
|
+
*/
|
|
7346
|
+
perspective?: number;
|
|
7347
|
+
tracks: SerializedTrack[];
|
|
7090
7348
|
};
|
|
7091
7349
|
export type SerializedAnimations = Record<AnimationKey, SerializedAnimation>;
|
|
7092
7350
|
export type SerializedBoard = SerializedStandardBoard | SerializedFloatingBoard;
|
|
7093
|
-
|
|
7351
|
+
/** Keyframes of one channel. */
|
|
7352
|
+
export type SerializedChannelTrack = {
|
|
7094
7353
|
id: string;
|
|
7354
|
+
channel: AnimationChannel;
|
|
7355
|
+
composite: AnimationComposite;
|
|
7356
|
+
/** Unique times; the fractional-index order only breaks ties. */
|
|
7357
|
+
keyframes: SerializedKeyframes;
|
|
7358
|
+
};
|
|
7359
|
+
/** Any keyframe of a track, see {@link SerializedKeyframes} for their order. */
|
|
7360
|
+
export type SerializedKeyframe<TValue = number> = SerializedStartKeyframe<TValue> | SerializedTimedKeyframe<TValue>;
|
|
7361
|
+
/**
|
|
7362
|
+
* Keyframes of a track. Only the first one may be a start keyframe without
|
|
7363
|
+
* `value`; every later keyframe has one. A track whose first keyframe comes
|
|
7364
|
+
* after `0` starts from the target's own value with
|
|
7365
|
+
* {@link DEFAULT_KEYFRAME_EASING}, as if it had a start keyframe without
|
|
7366
|
+
* value and easing.
|
|
7367
|
+
*/
|
|
7368
|
+
export type SerializedKeyframes<TValue = number> = [
|
|
7369
|
+
] | [
|
|
7370
|
+
SerializedKeyframe<TValue>,
|
|
7371
|
+
...SerializedTimedKeyframe<TValue>[]
|
|
7372
|
+
];
|
|
7373
|
+
export type SerializedObject = StandardSerializedObject | GuideSerializedObject;
|
|
7374
|
+
/**
|
|
7375
|
+
* Keyframe of the shape track: `value` is absolute SVG path data (`M L C Q
|
|
7376
|
+
* Z`). Lines, quadratics and cubics may morph into each other as long as the
|
|
7377
|
+
* structure (subpaths, segment count per subpath, closed flags) matches the
|
|
7378
|
+
* path's own; only positions interpolate. Every shape keyframe has a value,
|
|
7379
|
+
* since playback cannot read the path's own shape, and the track holds its
|
|
7380
|
+
* first shape before its first keyframe.
|
|
7381
|
+
*/
|
|
7382
|
+
export type SerializedShapeKeyframe = SerializedTimedKeyframe<string>;
|
|
7383
|
+
/** Keyframes of the path shape; it replaces the shape, so has no composite. */
|
|
7384
|
+
export type SerializedShapeTrack = {
|
|
7385
|
+
id: string;
|
|
7386
|
+
channel: AnimationShapeChannel;
|
|
7387
|
+
/** Unique times; the fractional-index order only breaks ties. */
|
|
7388
|
+
keyframes: SerializedShapeKeyframe[];
|
|
7389
|
+
};
|
|
7390
|
+
/**
|
|
7391
|
+
* Keyframe at the animation start. Without `value` it starts from the
|
|
7392
|
+
* target's own value, like a CSS animation without a `0%` keyframe, so it
|
|
7393
|
+
* can set only the easing of the first segment.
|
|
7394
|
+
*/
|
|
7395
|
+
export type SerializedStartKeyframe<TValue = number> = KeyframeBase & {
|
|
7396
|
+
time: 0;
|
|
7397
|
+
value?: TValue;
|
|
7398
|
+
};
|
|
7399
|
+
export type SerializedTimedKeyframe<TValue = number> = KeyframeBase & {
|
|
7095
7400
|
/** Offset from the animation start, integer milliseconds. */
|
|
7096
7401
|
time: number;
|
|
7097
|
-
/**
|
|
7098
|
-
|
|
7099
|
-
|
|
7100
|
-
|
|
7101
|
-
|
|
7102
|
-
|
|
7402
|
+
/**
|
|
7403
|
+
* Relative to the object, not to the previous keyframe: with `add` an
|
|
7404
|
+
* offset from the object's own property (e.g. `translateX: 10` is 10px right
|
|
7405
|
+
* of the object), with `replace` the absolute property value.
|
|
7406
|
+
*/
|
|
7407
|
+
value: TValue;
|
|
7103
7408
|
};
|
|
7104
|
-
export type
|
|
7409
|
+
export type SerializedTrack = SerializedChannelTrack | SerializedShapeTrack;
|
|
7105
7410
|
export type SetCanvasModeWithTargetOptions = {
|
|
7106
7411
|
/**
|
|
7107
7412
|
* Optional origin metadata for state propagation.
|
|
@@ -7111,6 +7416,11 @@ export type SetCanvasModeWithTargetOptions = {
|
|
|
7111
7416
|
* Optional id of the object that should enter the mode.
|
|
7112
7417
|
*/
|
|
7113
7418
|
targetId?: string | null;
|
|
7419
|
+
/**
|
|
7420
|
+
* Optional selected character range of the edited text. Only used by
|
|
7421
|
+
* `'text-editing'`.
|
|
7422
|
+
*/
|
|
7423
|
+
range?: TextRange;
|
|
7114
7424
|
};
|
|
7115
7425
|
/** Color updates to apply to one object. */
|
|
7116
7426
|
export type SetColorsParams = {
|
|
@@ -7190,6 +7500,7 @@ export type ShapeProperties = {
|
|
|
7190
7500
|
skewY?: BasicShapeSerializedObject["skewY"];
|
|
7191
7501
|
cornerRadii?: BasicShapeSerializedObject["cornerRadii"];
|
|
7192
7502
|
name?: BasicShapeSerializedObject["name"];
|
|
7503
|
+
defaultName?: BasicShapeSerializedObject["defaultName"];
|
|
7193
7504
|
shadowOptions?: BasicShapeSerializedObject["shadowOptions"];
|
|
7194
7505
|
fill?: NonNullable<BasicShapeSerializedObject["fill"]>;
|
|
7195
7506
|
fillColor?: NonNullable<BasicShapeSerializedObject["fill"]>[number]["value"];
|
|
@@ -7506,6 +7817,15 @@ export type TextProperties = {
|
|
|
7506
7817
|
*/
|
|
7507
7818
|
strokeWidth?: number;
|
|
7508
7819
|
};
|
|
7820
|
+
/**
|
|
7821
|
+
* Character range of the text being edited, in Fabric character indices.
|
|
7822
|
+
* A line break (`'\n'`) counts as one character, and `start === end` is a
|
|
7823
|
+
* caret without a selection.
|
|
7824
|
+
*/
|
|
7825
|
+
export type TextRange = {
|
|
7826
|
+
start: number;
|
|
7827
|
+
end: number;
|
|
7828
|
+
};
|
|
7509
7829
|
/**
|
|
7510
7830
|
* Parameters for changing the hidden state of an illustration path.
|
|
7511
7831
|
*
|
|
@@ -7526,6 +7846,9 @@ export type ToggleLockIllustrationPathParams = {
|
|
|
7526
7846
|
pathId: string;
|
|
7527
7847
|
locked: boolean;
|
|
7528
7848
|
};
|
|
7849
|
+
export type TrimTransparentEdgesParams = {
|
|
7850
|
+
id: IllustrationImageSerializedObject["id"];
|
|
7851
|
+
};
|
|
7529
7852
|
/** Preserves variant-specific object fields in design selectors. */
|
|
7530
7853
|
export type UnionToIntersection<U> = (U extends unknown ? (value: U) => void : never) extends (value: infer I) => void ? I : never;
|
|
7531
7854
|
/**
|
|
@@ -7593,6 +7916,9 @@ export type UpdateIllustrationParams = {
|
|
|
7593
7916
|
stroke?: IllustrationSerializedObject["stroke"];
|
|
7594
7917
|
strokeWidth?: IllustrationSerializedObject["strokeWidth"];
|
|
7595
7918
|
fill?: IllustrationSerializedObject["fill"];
|
|
7919
|
+
opacity?: IllustrationSerializedObject["opacity"];
|
|
7920
|
+
flipX?: IllustrationSerializedObject["flipX"];
|
|
7921
|
+
flipY?: IllustrationSerializedObject["flipY"];
|
|
7596
7922
|
};
|
|
7597
7923
|
/**
|
|
7598
7924
|
* Parameters for updating an existing image.
|
|
@@ -7614,6 +7940,23 @@ export type UpdateImageParams = {
|
|
|
7614
7940
|
strokeWidth?: IllustrationImageSerializedObject["strokeWidth"];
|
|
7615
7941
|
inpaintingStrokeWidth?: IllustrationImageSerializedObject["inpaintingStrokeWidth"];
|
|
7616
7942
|
inpaintingSelectionMode?: IllustrationImageSerializedObject["inpaintingSelectionMode"];
|
|
7943
|
+
opacity?: IllustrationImageSerializedObject["opacity"];
|
|
7944
|
+
flipX?: IllustrationImageSerializedObject["flipX"];
|
|
7945
|
+
flipY?: IllustrationImageSerializedObject["flipY"];
|
|
7946
|
+
/**
|
|
7947
|
+
* Photo filters to add or replace, keyed by filter id; `null` removes one.
|
|
7948
|
+
* Merged into the current filters. Every filter must end up with an index
|
|
7949
|
+
* in `filtersIndices`, and an image has at most one filter of each type.
|
|
7950
|
+
*/
|
|
7951
|
+
filters?: Record<string, NonNullable<NormalizedIllustrationImageObject["filters"]>[string] | null>;
|
|
7952
|
+
/**
|
|
7953
|
+
* Fractional index of each filter id, which sets the order the filters
|
|
7954
|
+
* apply in; `null` removes one. Merged into the current indices, so the
|
|
7955
|
+
* filters can be reordered without sending them.
|
|
7956
|
+
*/
|
|
7957
|
+
filtersIndices?: Record<string, string | null>;
|
|
7958
|
+
globalCompositeOperation?: IllustrationImageSerializedObject["globalCompositeOperation"];
|
|
7959
|
+
backgroundRestorePathBoundary?: IllustrationImageSerializedObject["backgroundRestorePathBoundary"];
|
|
7617
7960
|
} & GeneratableObject;
|
|
7618
7961
|
export type UpdateImageSourceParams = {
|
|
7619
7962
|
id: IllustrationImageSerializedObject["id"];
|
|
@@ -7753,6 +8096,36 @@ export type UpdateTextParams = {
|
|
|
7753
8096
|
left?: number;
|
|
7754
8097
|
top?: number;
|
|
7755
8098
|
angle?: number;
|
|
8099
|
+
/**
|
|
8100
|
+
* Opacity of the whole text element, from 0 (transparent) to 1 (opaque)
|
|
8101
|
+
*/
|
|
8102
|
+
opacity?: number;
|
|
8103
|
+
/**
|
|
8104
|
+
* Mirror the text horizontally
|
|
8105
|
+
*/
|
|
8106
|
+
flipX?: boolean;
|
|
8107
|
+
/**
|
|
8108
|
+
* Mirror the text vertically
|
|
8109
|
+
*/
|
|
8110
|
+
flipY?: boolean;
|
|
8111
|
+
/**
|
|
8112
|
+
* Width of the text box in pixels
|
|
8113
|
+
*/
|
|
8114
|
+
width?: number;
|
|
8115
|
+
/**
|
|
8116
|
+
* Height of the text box in pixels
|
|
8117
|
+
*/
|
|
8118
|
+
height?: number;
|
|
8119
|
+
/**
|
|
8120
|
+
* Per-character style overrides, in the compressed format the text
|
|
8121
|
+
* object stores. Replaces the stored overrides as a whole.
|
|
8122
|
+
*/
|
|
8123
|
+
styles?: RichTextCompressedStyles;
|
|
8124
|
+
/**
|
|
8125
|
+
* Transform (warp, circle, free form or free line) shaping the text, with
|
|
8126
|
+
* its points. Replaces the stored transform as a whole.
|
|
8127
|
+
*/
|
|
8128
|
+
activeTransformPlugin?: RichTextSerializedTransformPluginObject;
|
|
7756
8129
|
} & Partial<TextProperties>;
|
|
7757
8130
|
/**
|
|
7758
8131
|
* Parameters for updating texture properties.
|
|
@@ -7916,6 +8289,13 @@ export type VideoboardOptions = ConnectedArtboardOptions<ObjectType.Videoboard>
|
|
|
7916
8289
|
* @public
|
|
7917
8290
|
*/
|
|
7918
8291
|
export type Viewport = {
|
|
8292
|
+
/**
|
|
8293
|
+
* Viewport size in screen pixels, measured from the canvas container.
|
|
8294
|
+
*/
|
|
8295
|
+
pixelSize: {
|
|
8296
|
+
width: number;
|
|
8297
|
+
height: number;
|
|
8298
|
+
};
|
|
7919
8299
|
/**
|
|
7920
8300
|
* Viewport corners in canvas coordinates (derived from transform + canvas size).
|
|
7921
8301
|
* - tl: top-left
|
|
@@ -8008,12 +8388,15 @@ export type ViewportAPI = {
|
|
|
8008
8388
|
*/
|
|
8009
8389
|
setTransform(transform: Viewport["transform"], origin?: Origin): void;
|
|
8010
8390
|
/**
|
|
8011
|
-
* Returns the current viewport size in screen pixels
|
|
8391
|
+
* Returns the current viewport size in screen pixels, measured from the
|
|
8392
|
+
* canvas container.
|
|
8012
8393
|
*/
|
|
8013
8394
|
getPixelSize(): {
|
|
8014
8395
|
width: number;
|
|
8015
8396
|
height: number;
|
|
8016
8397
|
};
|
|
8398
|
+
/** Reads the canvas-owned {@link AppState.isContentOutOfView} flag. */
|
|
8399
|
+
isContentOutOfView(): boolean;
|
|
8017
8400
|
/**
|
|
8018
8401
|
* Returns the current viewport zoom level.
|
|
8019
8402
|
*/
|
|
@@ -8043,7 +8426,8 @@ export type ViewportAPI = {
|
|
|
8043
8426
|
*/
|
|
8044
8427
|
getCoords(): Viewport["coords"];
|
|
8045
8428
|
/**
|
|
8046
|
-
* Sets the viewport corner coordinates
|
|
8429
|
+
* Sets the viewport corner coordinates and, when supplied, its measured
|
|
8430
|
+
* screen-space size.
|
|
8047
8431
|
*
|
|
8048
8432
|
* This is primarily for internal synchronization. In normal usage, prefer
|
|
8049
8433
|
* updating the viewport via {@link set}, {@link setZoom}, or
|
|
@@ -8051,8 +8435,19 @@ export type ViewportAPI = {
|
|
|
8051
8435
|
*
|
|
8052
8436
|
* @param coords - The viewport corner coordinates to set
|
|
8053
8437
|
* @param origin - Optional origin metadata for state propagation
|
|
8438
|
+
* @param pixelSize - Canvas-container size measured with these coordinates
|
|
8439
|
+
* (legacy callers that omit it derive a size from coordinates and zoom)
|
|
8440
|
+
*/
|
|
8441
|
+
setCoords(coords: Viewport["coords"], origin?: Origin, pixelSize?: Viewport["pixelSize"]): void;
|
|
8442
|
+
/**
|
|
8443
|
+
* Publishes a viewport snapshot from the canvas renderer.
|
|
8444
|
+
*
|
|
8445
|
+
* Internal only — callers must obtain all fields from the same Fabric state.
|
|
8446
|
+
*
|
|
8447
|
+
* @param viewport - Transform, coordinates, and measured canvas size
|
|
8448
|
+
* @param origin - Optional origin metadata for state propagation
|
|
8054
8449
|
*/
|
|
8055
|
-
|
|
8450
|
+
setSnapshot(viewport: Viewport, origin?: Origin): void;
|
|
8056
8451
|
/**
|
|
8057
8452
|
* Returns the current viewport center in world space.
|
|
8058
8453
|
*/
|
|
@@ -8252,7 +8647,7 @@ export type WithOptsRemoved<T> = {
|
|
|
8252
8647
|
* There is no design on the website, so it gets the shared APIs, the shared
|
|
8253
8648
|
* host context and upload, plus the host website APIs.
|
|
8254
8649
|
*/
|
|
8255
|
-
type DashboardStandalonePageKittlSDK = KittlSDKLifecycle & KittlSDKSharedAPIs & KittlSDKContextAPI & KittlSDKUploadAPI &
|
|
8650
|
+
type DashboardStandalonePageKittlSDK = KittlSDKLifecycle & KittlSDKSharedAPIs & KittlSDKContextAPI & KittlSDKUploadAPI & KittlSDKBrandKitAPI & KittlSDKOpenMicroEditorAPI & KittlSDKOpenMainEditorAPI & KittlSDKFilePickerAPI;
|
|
8256
8651
|
|
|
8257
8652
|
export {
|
|
8258
8653
|
DashboardStandalonePageKittlSDK as KittlSDK,
|