@basementstudio/sanity-ai-image-plugin 0.0.1 → 0.1.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 (110) hide show
  1. package/README.md +281 -257
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +3 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/presets/article-featured-image.d.ts +3 -0
  7. package/dist/presets/article-featured-image.d.ts.map +1 -0
  8. package/dist/presets/article-featured-image.js +17 -0
  9. package/dist/presets/article-featured-image.js.map +1 -0
  10. package/dist/server/constants.d.ts +6 -0
  11. package/dist/server/constants.d.ts.map +1 -0
  12. package/{src/server/constants.ts → dist/server/constants.js} +17 -20
  13. package/dist/server/constants.js.map +1 -0
  14. package/dist/server/handle-request.d.ts +5 -0
  15. package/dist/server/handle-request.d.ts.map +1 -0
  16. package/dist/server/handle-request.js +122 -0
  17. package/dist/server/handle-request.js.map +1 -0
  18. package/dist/server/types.d.ts +28 -0
  19. package/dist/server/types.d.ts.map +1 -0
  20. package/dist/server/types.js +2 -0
  21. package/dist/server/types.js.map +1 -0
  22. package/dist/server/utils.d.ts +50 -0
  23. package/dist/server/utils.d.ts.map +1 -0
  24. package/dist/server/utils.js +274 -0
  25. package/dist/server/utils.js.map +1 -0
  26. package/dist/server.d.ts +3 -0
  27. package/dist/server.d.ts.map +1 -0
  28. package/dist/server.js +3 -0
  29. package/dist/server.js.map +1 -0
  30. package/dist/studio/components/asset-source.d.ts +4 -0
  31. package/dist/studio/components/asset-source.d.ts.map +1 -0
  32. package/dist/studio/components/asset-source.js +163 -0
  33. package/dist/studio/components/asset-source.js.map +1 -0
  34. package/dist/studio/components/generate-button-input.d.ts +8 -0
  35. package/dist/studio/components/generate-button-input.d.ts.map +1 -0
  36. package/dist/studio/components/generate-button-input.js +186 -0
  37. package/dist/studio/components/generate-button-input.js.map +1 -0
  38. package/dist/studio/components/input-router.d.ts +7 -0
  39. package/dist/studio/components/input-router.d.ts.map +1 -0
  40. package/dist/studio/components/input-router.js +21 -0
  41. package/dist/studio/components/input-router.js.map +1 -0
  42. package/dist/studio/files.d.ts +9 -0
  43. package/dist/studio/files.d.ts.map +1 -0
  44. package/dist/studio/files.js +86 -0
  45. package/dist/studio/files.js.map +1 -0
  46. package/dist/studio/plugin.d.ts +3 -0
  47. package/dist/studio/plugin.d.ts.map +1 -0
  48. package/dist/studio/plugin.js +47 -0
  49. package/dist/studio/plugin.js.map +1 -0
  50. package/dist/studio/settings/schema.d.ts +8 -0
  51. package/dist/studio/settings/schema.d.ts.map +1 -0
  52. package/dist/studio/settings/schema.js +110 -0
  53. package/dist/studio/settings/schema.js.map +1 -0
  54. package/dist/studio/settings/tool.d.ts +3 -0
  55. package/dist/studio/settings/tool.d.ts.map +1 -0
  56. package/dist/studio/settings/tool.js +292 -0
  57. package/dist/studio/settings/tool.js.map +1 -0
  58. package/dist/studio/settings-data.d.ts +24 -0
  59. package/dist/studio/settings-data.d.ts.map +1 -0
  60. package/dist/studio/settings-data.js +99 -0
  61. package/dist/studio/settings-data.js.map +1 -0
  62. package/dist/studio/shared-secret.d.ts +9 -0
  63. package/dist/studio/shared-secret.d.ts.map +1 -0
  64. package/dist/studio/shared-secret.js +37 -0
  65. package/dist/studio/shared-secret.js.map +1 -0
  66. package/dist/utils/config.d.ts +3 -0
  67. package/dist/utils/config.d.ts.map +1 -0
  68. package/dist/utils/config.js +41 -0
  69. package/dist/utils/config.js.map +1 -0
  70. package/dist/utils/context-fields.d.ts +16 -0
  71. package/dist/utils/context-fields.d.ts.map +1 -0
  72. package/dist/utils/context-fields.js +104 -0
  73. package/dist/utils/context-fields.js.map +1 -0
  74. package/dist/utils/document-paths.d.ts +10 -0
  75. package/dist/utils/document-paths.d.ts.map +1 -0
  76. package/dist/utils/document-paths.js +33 -0
  77. package/dist/utils/document-paths.js.map +1 -0
  78. package/dist/utils/models.d.ts +22 -0
  79. package/dist/utils/models.d.ts.map +1 -0
  80. package/dist/utils/models.js +76 -0
  81. package/dist/utils/models.js.map +1 -0
  82. package/dist/utils/prompts.d.ts +2 -0
  83. package/dist/utils/prompts.d.ts.map +1 -0
  84. package/dist/utils/prompts.js +7 -0
  85. package/dist/utils/prompts.js.map +1 -0
  86. package/dist/utils/shared.d.ts +82 -0
  87. package/dist/utils/shared.d.ts.map +1 -0
  88. package/dist/utils/shared.js +13 -0
  89. package/dist/utils/shared.js.map +1 -0
  90. package/package.json +73 -67
  91. package/src/index.ts +0 -23
  92. package/src/presets/article-featured-image.ts +0 -23
  93. package/src/server/handle-request.ts +0 -207
  94. package/src/server/types.ts +0 -30
  95. package/src/server/utils.ts +0 -395
  96. package/src/server.ts +0 -14
  97. package/src/studio/components/asset-source.tsx +0 -297
  98. package/src/studio/components/generate-button-input.tsx +0 -380
  99. package/src/studio/components/input-router.tsx +0 -41
  100. package/src/studio/files.ts +0 -114
  101. package/src/studio/plugin.tsx +0 -54
  102. package/src/studio/settings/schema.ts +0 -122
  103. package/src/studio/settings/tool.tsx +0 -587
  104. package/src/studio/settings-data.ts +0 -172
  105. package/src/utils/config.ts +0 -55
  106. package/src/utils/context-fields.ts +0 -172
  107. package/src/utils/document-paths.ts +0 -51
  108. package/src/utils/models.ts +0 -126
  109. package/src/utils/prompts.ts +0 -6
  110. package/src/utils/shared.ts +0 -88
@@ -0,0 +1,37 @@
1
+ import { SHARED_SECRET_KEY, SHARED_SECRET_NAMESPACE, SETTINGS_TOOL_TITLE, } from "../utils/shared";
2
+ const STUDIO_SECRETS_DOCUMENT_TYPE = "pluginSecrets";
3
+ export function getSharedSecretValue(secrets) {
4
+ const sharedSecret = secrets?.sharedSecret;
5
+ if (typeof sharedSecret !== "string") {
6
+ return null;
7
+ }
8
+ const normalizedSharedSecret = sharedSecret.trim();
9
+ return normalizedSharedSecret ? normalizedSharedSecret : null;
10
+ }
11
+ export function getMissingSharedSecretMessage() {
12
+ return `${SETTINGS_TOOL_TITLE} shared secret is not configured. Open the ${SETTINGS_TOOL_TITLE} settings tool and add it before generating images.`;
13
+ }
14
+ export async function saveAiImagePluginSharedSecret(client, sharedSecret) {
15
+ const normalizedSharedSecret = sharedSecret.trim();
16
+ if (!normalizedSharedSecret) {
17
+ throw new Error("Enter a shared secret before saving.");
18
+ }
19
+ const documentId = `secrets.${SHARED_SECRET_NAMESPACE}`;
20
+ await client
21
+ .transaction()
22
+ .createIfNotExists({
23
+ _id: documentId,
24
+ _type: STUDIO_SECRETS_DOCUMENT_TYPE,
25
+ })
26
+ .patch(client.patch(documentId).set({
27
+ secrets: {
28
+ [SHARED_SECRET_KEY]: normalizedSharedSecret,
29
+ },
30
+ }))
31
+ .commit({
32
+ tag: "secrets.store",
33
+ visibility: "sync",
34
+ });
35
+ }
36
+ export { SHARED_SECRET_HEADER_NAME, SHARED_SECRET_KEY, SHARED_SECRET_NAMESPACE, } from "../utils/shared";
37
+ //# sourceMappingURL=shared-secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-secret.js","sourceRoot":"","sources":["../../src/studio/shared-secret.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAGxB,MAAM,4BAA4B,GAAG,eAAe,CAAA;AAMpD,MAAM,UAAU,oBAAoB,CAClC,OAA8B;IAE9B,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAA;IAE1C,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,sBAAsB,GAAG,YAAY,CAAC,IAAI,EAAE,CAAA;IAElD,OAAO,sBAAsB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO,GAAG,mBAAmB,8CAA8C,mBAAmB,qDAAqD,CAAA;AACrJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,MAAoB,EACpB,YAAoB;IAEpB,MAAM,sBAAsB,GAAG,YAAY,CAAC,IAAI,EAAE,CAAA;IAElD,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,uBAAuB,EAAE,CAAA;IAEvD,MAAM,MAAM;SACT,WAAW,EAAE;SACb,iBAAiB,CAAC;QACjB,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,4BAA4B;KACpC,CAAC;SACD,KAAK,CACJ,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC;QAC3B,OAAO,EAAE;YACP,CAAC,iBAAiB,CAAC,EAAE,sBAAsB;SAC5C;KACF,CAAC,CACH;SACA,MAAM,CAAC;QACN,GAAG,EAAE,eAAe;QACpB,UAAU,EAAE,MAAM;KACnB,CAAC,CAAA;AACN,CAAC;AAED,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { type PluginOptions, type ResolvedOptions } from "./shared";
2
+ export declare function normalizeOptions(options: PluginOptions): ResolvedOptions;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,UAAU,CAAA;AAEjB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe,CA4CxE"}
@@ -0,0 +1,41 @@
1
+ import { normalizeAllowedAiImageModels } from "./models";
2
+ import { DEFAULT_API_ENDPOINT, DEFAULT_ASSET_SOURCE_TARGET_ID, SETTINGS_TOOL_NAME, SETTINGS_TOOL_TITLE, } from "./shared";
3
+ export function normalizeOptions(options) {
4
+ const assetSource = options.assetSource === false ||
5
+ (typeof options.assetSource === "object" &&
6
+ options.assetSource.enabled === false)
7
+ ? null
8
+ : {
9
+ id: typeof options.assetSource === "object"
10
+ ? options.assetSource.id || DEFAULT_ASSET_SOURCE_TARGET_ID
11
+ : DEFAULT_ASSET_SOURCE_TARGET_ID,
12
+ type: "assetSource",
13
+ title: typeof options.assetSource === "object"
14
+ ? options.assetSource.title || "Image Asset Source"
15
+ : "Image Asset Source",
16
+ ...(typeof options.assetSource === "object" &&
17
+ options.assetSource.description
18
+ ? { description: options.assetSource.description }
19
+ : {
20
+ description: "Adds AI Image Plugin to the image asset picker.",
21
+ }),
22
+ promptLabel: typeof options.assetSource === "object"
23
+ ? options.assetSource.promptLabel || "Prompt"
24
+ : "Prompt",
25
+ promptPlaceholder: typeof options.assetSource === "object"
26
+ ? options.assetSource.promptPlaceholder ||
27
+ "Turn these references into a clean homepage hero image with warm daylight and subtle depth."
28
+ : "Turn these references into a clean homepage hero image with warm daylight and subtle depth.",
29
+ };
30
+ return {
31
+ apiEndpoint: options.apiEndpoint || DEFAULT_API_ENDPOINT,
32
+ apiVersion: options.apiVersion,
33
+ allowedModels: normalizeAllowedAiImageModels(options.allowedModels),
34
+ assetSourceTarget: assetSource,
35
+ registerSettingsSchemaType: options.settingsTool?.registerSchemaType === true,
36
+ settingsToolName: options.settingsTool?.name || SETTINGS_TOOL_NAME,
37
+ settingsToolTitle: options.settingsTool?.title || SETTINGS_TOOL_TITLE,
38
+ targets: options.targets || [],
39
+ };
40
+ }
41
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,kBAAkB,EAClB,mBAAmB,GAGpB,MAAM,UAAU,CAAA;AAEjB,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,MAAM,WAAW,GACf,OAAO,CAAC,WAAW,KAAK,KAAK;QAC7B,CAAC,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;YACtC,OAAO,CAAC,WAAW,CAAC,OAAO,KAAK,KAAK,CAAC;QACtC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC;YACE,EAAE,EACA,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;gBACrC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,8BAA8B;gBAC1D,CAAC,CAAC,8BAA8B;YACpC,IAAI,EAAE,aAAsB;YAC5B,KAAK,EACH,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;gBACrC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,oBAAoB;gBACnD,CAAC,CAAC,oBAAoB;YAC1B,GAAG,CAAC,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;gBAC3C,OAAO,CAAC,WAAW,CAAC,WAAW;gBAC7B,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE;gBAClD,CAAC,CAAC;oBACE,WAAW,EAAE,iDAAiD;iBAC/D,CAAC;YACN,WAAW,EACT,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;gBACrC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,IAAI,QAAQ;gBAC7C,CAAC,CAAC,QAAQ;YACd,iBAAiB,EACf,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;gBACrC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,iBAAiB;oBACrC,6FAA6F;gBAC/F,CAAC,CAAC,6FAA6F;SACpG,CAAA;IAEP,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,oBAAoB;QACxD,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,aAAa,EAAE,6BAA6B,CAAC,OAAO,CAAC,aAAa,CAAC;QACnE,iBAAiB,EAAE,WAAW;QAC9B,0BAA0B,EACxB,OAAO,CAAC,YAAY,EAAE,kBAAkB,KAAK,IAAI;QACnD,gBAAgB,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,kBAAkB;QAClE,iBAAiB,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,IAAI,mBAAmB;QACrE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;KAC/B,CAAA;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type SelectableContextField = {
2
+ label: string;
3
+ path: string;
4
+ typeName: string;
5
+ };
6
+ export declare function getSelectableContextFields(documentSchema: unknown): SelectableContextField[];
7
+ export declare function getDefaultSelectedContextFieldPaths(options: {
8
+ selectableContextFields: SelectableContextField[];
9
+ suggestedContextFieldPaths: string[] | undefined;
10
+ }): string[];
11
+ export declare function serializeContextFieldValue(value: unknown): string | null;
12
+ export declare function buildContextFieldPrompt(options: {
13
+ contextFieldPaths: string[];
14
+ documentValue: Record<string, unknown> | undefined;
15
+ }): string | null;
16
+ //# sourceMappingURL=context-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-fields.d.ts","sourceRoot":"","sources":["../../src/utils/context-fields.ts"],"names":[],"mappings":"AA4BA,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AA6CD,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,OAAO,GACtB,sBAAsB,EAAE,CAsB1B;AAED,wBAAgB,mCAAmC,CAAC,OAAO,EAAE;IAC3D,uBAAuB,EAAE,sBAAsB,EAAE,CAAA;IACjD,0BAA0B,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CACjD,GAAG,MAAM,EAAE,CAQX;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA8BxE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;CACnD,GAAG,MAAM,GAAG,IAAI,CAoBhB"}
@@ -0,0 +1,104 @@
1
+ import { getValueAtPath } from "./document-paths";
2
+ const SUPPORTED_CONTEXT_FIELD_TYPES = new Set([
3
+ "string",
4
+ "text",
5
+ "number",
6
+ "boolean",
7
+ "date",
8
+ "datetime",
9
+ "slug",
10
+ ]);
11
+ function getDocumentSchemaFields(documentSchema) {
12
+ if (!documentSchema || typeof documentSchema !== "object") {
13
+ return [];
14
+ }
15
+ const fields = documentSchema.fields;
16
+ return Array.isArray(fields) ? fields : [];
17
+ }
18
+ function formatFieldNameAsLabel(fieldName) {
19
+ const normalizedFieldName = fieldName
20
+ .replace(/([a-z0-9])([A-Z])/g, "$1 $2")
21
+ .replace(/[_-]+/g, " ")
22
+ .trim()
23
+ .replace(/\s+/g, " ");
24
+ if (!normalizedFieldName) {
25
+ return fieldName;
26
+ }
27
+ return (normalizedFieldName.charAt(0).toUpperCase() +
28
+ normalizedFieldName.slice(1).toLowerCase());
29
+ }
30
+ function isSimpleStringArrayField(field) {
31
+ if (field.type?.name !== "array" || !Array.isArray(field.type.of)) {
32
+ return false;
33
+ }
34
+ if (field.type.of.length === 0) {
35
+ return false;
36
+ }
37
+ return field.type.of.every((member) => {
38
+ const memberTypeName = member?.type?.name || member?.name;
39
+ return memberTypeName === "string";
40
+ });
41
+ }
42
+ export function getSelectableContextFields(documentSchema) {
43
+ return getDocumentSchemaFields(documentSchema).flatMap((field) => {
44
+ if (!field?.name || !field.type?.name) {
45
+ return [];
46
+ }
47
+ const isSupportedScalarField = SUPPORTED_CONTEXT_FIELD_TYPES.has(field.type.name);
48
+ if (!isSupportedScalarField && !isSimpleStringArrayField(field)) {
49
+ return [];
50
+ }
51
+ return [
52
+ {
53
+ label: field.title || formatFieldNameAsLabel(field.name),
54
+ path: field.name,
55
+ typeName: field.type.name,
56
+ },
57
+ ];
58
+ });
59
+ }
60
+ export function getDefaultSelectedContextFieldPaths(options) {
61
+ const suggestedFieldPaths = new Set((options.suggestedContextFieldPaths || []).filter(Boolean));
62
+ return options.selectableContextFields
63
+ .filter((field) => suggestedFieldPaths.has(field.path))
64
+ .map((field) => field.path);
65
+ }
66
+ export function serializeContextFieldValue(value) {
67
+ if (typeof value === "string") {
68
+ const trimmedValue = value.trim();
69
+ return trimmedValue || null;
70
+ }
71
+ if (typeof value === "number" || typeof value === "boolean") {
72
+ return String(value);
73
+ }
74
+ if (Array.isArray(value)) {
75
+ const serializedValues = value
76
+ .map((item) => (typeof item === "string" ? item.trim() : null))
77
+ .filter((item) => Boolean(item));
78
+ return serializedValues.length > 0 ? serializedValues.join(", ") : null;
79
+ }
80
+ if (value && typeof value === "object") {
81
+ const currentValue = value.current;
82
+ if (typeof currentValue === "string") {
83
+ const trimmedValue = currentValue.trim();
84
+ return trimmedValue || null;
85
+ }
86
+ }
87
+ return null;
88
+ }
89
+ export function buildContextFieldPrompt(options) {
90
+ if (!options.documentValue || options.contextFieldPaths.length === 0) {
91
+ return null;
92
+ }
93
+ const promptLines = options.contextFieldPaths
94
+ .map((fieldPath) => {
95
+ const serializedValue = serializeContextFieldValue(getValueAtPath(options.documentValue, fieldPath));
96
+ if (!serializedValue) {
97
+ return `The field titled "${fieldPath}" is empty.`;
98
+ }
99
+ return `The value of field "${fieldPath}" is '${serializedValue}'.`;
100
+ })
101
+ .filter((line) => Boolean(line));
102
+ return promptLines.length > 0 ? promptLines.join("\n") : null;
103
+ }
104
+ //# sourceMappingURL=context-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-fields.js","sourceRoot":"","sources":["../../src/utils/context-fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Path } from "sanity";
2
+ import type { GenerateButtonTarget } from "./shared";
3
+ export declare function pathToFieldPath(path: Path): string;
4
+ export declare function getValueAtPath(value: Record<string, unknown> | undefined, path: string | undefined): unknown;
5
+ export declare function doesTargetMatchField(options: {
6
+ documentType: string | undefined;
7
+ path: Path;
8
+ target: GenerateButtonTarget;
9
+ }): boolean;
10
+ //# sourceMappingURL=document-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-paths.d.ts","sourceRoot":"","sources":["../../src/utils/document-paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAClC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAEpD,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAelD;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,OAAO,CAYT;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,oBAAoB,CAAA;CAC7B,GAAG,OAAO,CASV"}
@@ -0,0 +1,33 @@
1
+ export function pathToFieldPath(path) {
2
+ return path
3
+ .map((segment) => {
4
+ if (typeof segment === "string" || typeof segment === "number") {
5
+ return String(segment);
6
+ }
7
+ if (segment && typeof segment === "object" && "_key" in segment) {
8
+ return String(segment._key);
9
+ }
10
+ return "";
11
+ })
12
+ .filter(Boolean)
13
+ .join(".");
14
+ }
15
+ export function getValueAtPath(value, path) {
16
+ if (!value || !path) {
17
+ return undefined;
18
+ }
19
+ return path.split(".").reduce((currentValue, segment) => {
20
+ if (!currentValue || typeof currentValue !== "object") {
21
+ return undefined;
22
+ }
23
+ return currentValue[segment];
24
+ }, value);
25
+ }
26
+ export function doesTargetMatchField(options) {
27
+ if (!options.documentType) {
28
+ return false;
29
+ }
30
+ return (options.documentType === options.target.documentType &&
31
+ pathToFieldPath(options.path) === options.target.fieldPath);
32
+ }
33
+ //# sourceMappingURL=document-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-paths.js","sourceRoot":"","sources":["../../src/utils/document-paths.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,eAAe,CAAC,IAAU;IACxC,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACf,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;QAED,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YAChE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;QAED,OAAO,EAAE,CAAA;IACX,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAA0C,EAC1C,IAAwB;IAExB,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE;QAC/D,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAQ,YAAwC,CAAC,OAAO,CAAC,CAAA;IAC3D,CAAC,EAAE,KAAK,CAAC,CAAA;AACX,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAIpC;IACC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,CACL,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,YAAY;QACpD,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,SAAS,CAC3D,CAAA;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ export declare const SUPPORTED_AI_IMAGE_MODELS: readonly ["gemini-2.5-flash-image", "gemini-3.1-flash-image-preview", "gpt-image-1"];
2
+ export type SupportedAiImageModelId = (typeof SUPPORTED_AI_IMAGE_MODELS)[number];
3
+ export type SupportedAiImageProvider = "google" | "openai";
4
+ export type SupportedAiImageModelDefinition = {
5
+ defaultAspectRatio?: string;
6
+ defaultSize?: string;
7
+ id: SupportedAiImageModelId;
8
+ provider: SupportedAiImageProvider;
9
+ supportsReferenceImages: boolean;
10
+ title: string;
11
+ };
12
+ export declare const DEFAULT_SUPPORTED_AI_IMAGE_MODEL: SupportedAiImageModelId;
13
+ export declare function getSupportedAiImageModelDefinition(modelId: SupportedAiImageModelId): SupportedAiImageModelDefinition;
14
+ export declare function getSupportedAiImageModelOptions(modelIds: readonly SupportedAiImageModelId[]): Array<{
15
+ title: string;
16
+ value: SupportedAiImageModelId;
17
+ }>;
18
+ export declare function isSupportedAiImageModelId(value: string): value is SupportedAiImageModelId;
19
+ export declare function normalizeAllowedAiImageModels(allowedModels?: readonly string[]): SupportedAiImageModelId[];
20
+ export declare function getDefaultAllowedAiImageModel(allowedModels: readonly SupportedAiImageModelId[]): SupportedAiImageModelId;
21
+ export declare function resolveAllowedAiImageModel(modelId: string | null | undefined, allowedModels: readonly SupportedAiImageModelId[]): SupportedAiImageModelId;
22
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/utils/models.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,sFAI5B,CAAA;AAEV,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEhF,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE1D,MAAM,MAAM,+BAA+B,GAAG;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,EAAE,EAAE,uBAAuB,CAAA;IAC3B,QAAQ,EAAE,wBAAwB,CAAA;IAClC,uBAAuB,EAAE,OAAO,CAAA;IAChC,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,gCAAgC,EAAE,uBACrB,CAAA;AAiC1B,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,uBAAuB,GAC/B,+BAA+B,CAEjC;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,SAAS,uBAAuB,EAAE,GAC3C,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,CAAC,CAS1D;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,uBAAuB,CAIlC;AAED,wBAAgB,6BAA6B,CAC3C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,GAChC,uBAAuB,EAAE,CA0B3B;AAED,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,SAAS,uBAAuB,EAAE,GAChD,uBAAuB,CAEzB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,aAAa,EAAE,SAAS,uBAAuB,EAAE,GAChD,uBAAuB,CAMzB"}
@@ -0,0 +1,76 @@
1
+ export const SUPPORTED_AI_IMAGE_MODELS = [
2
+ "gemini-2.5-flash-image",
3
+ "gemini-3.1-flash-image-preview",
4
+ "gpt-image-1",
5
+ ];
6
+ export const DEFAULT_SUPPORTED_AI_IMAGE_MODEL = "gemini-2.5-flash-image";
7
+ const SUPPORTED_AI_IMAGE_MODEL_DEFINITIONS = [
8
+ {
9
+ defaultAspectRatio: "1:1",
10
+ id: "gemini-2.5-flash-image",
11
+ provider: "google",
12
+ supportsReferenceImages: true,
13
+ title: "Google Gemini 2.5 Flash Image",
14
+ },
15
+ {
16
+ defaultAspectRatio: "1:1",
17
+ id: "gemini-3.1-flash-image-preview",
18
+ provider: "google",
19
+ supportsReferenceImages: true,
20
+ title: "Google Gemini 3.1 Flash Image Preview",
21
+ },
22
+ {
23
+ defaultSize: "1024x1024",
24
+ id: "gpt-image-1",
25
+ provider: "openai",
26
+ supportsReferenceImages: true,
27
+ title: "OpenAI GPT Image 1",
28
+ },
29
+ ];
30
+ const SUPPORTED_AI_IMAGE_MODEL_DEFINITION_MAP = Object.fromEntries(SUPPORTED_AI_IMAGE_MODEL_DEFINITIONS.map((modelDefinition) => [
31
+ modelDefinition.id,
32
+ modelDefinition,
33
+ ]));
34
+ export function getSupportedAiImageModelDefinition(modelId) {
35
+ return SUPPORTED_AI_IMAGE_MODEL_DEFINITION_MAP[modelId];
36
+ }
37
+ export function getSupportedAiImageModelOptions(modelIds) {
38
+ return modelIds.map((modelId) => {
39
+ const modelDefinition = getSupportedAiImageModelDefinition(modelId);
40
+ return {
41
+ title: modelDefinition.title,
42
+ value: modelDefinition.id,
43
+ };
44
+ });
45
+ }
46
+ export function isSupportedAiImageModelId(value) {
47
+ return SUPPORTED_AI_IMAGE_MODELS.includes(value);
48
+ }
49
+ export function normalizeAllowedAiImageModels(allowedModels) {
50
+ if (!allowedModels) {
51
+ return [DEFAULT_SUPPORTED_AI_IMAGE_MODEL];
52
+ }
53
+ if (allowedModels.length === 0) {
54
+ throw new Error("AI Image Plugin requires at least one allowed model in allowedModels.");
55
+ }
56
+ const normalizedAllowedModels = [];
57
+ for (const allowedModel of allowedModels) {
58
+ if (!isSupportedAiImageModelId(allowedModel)) {
59
+ throw new Error(`AI Image Plugin does not support the model "${allowedModel}".`);
60
+ }
61
+ if (!normalizedAllowedModels.includes(allowedModel)) {
62
+ normalizedAllowedModels.push(allowedModel);
63
+ }
64
+ }
65
+ return normalizedAllowedModels;
66
+ }
67
+ export function getDefaultAllowedAiImageModel(allowedModels) {
68
+ return allowedModels[0] ?? DEFAULT_SUPPORTED_AI_IMAGE_MODEL;
69
+ }
70
+ export function resolveAllowedAiImageModel(modelId, allowedModels) {
71
+ if (modelId && allowedModels.includes(modelId)) {
72
+ return modelId;
73
+ }
74
+ return getDefaultAllowedAiImageModel(allowedModels);
75
+ }
76
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/utils/models.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,wBAAwB;IACxB,gCAAgC;IAChC,aAAa;CACL,CAAA;AAeV,MAAM,CAAC,MAAM,gCAAgC,GAC3C,wBAAwB,CAAA;AAE1B,MAAM,oCAAoC,GAAG;IAC3C;QACE,kBAAkB,EAAE,KAAK;QACzB,EAAE,EAAE,wBAAwB;QAC5B,QAAQ,EAAE,QAAQ;QAClB,uBAAuB,EAAE,IAAI;QAC7B,KAAK,EAAE,+BAA+B;KACvC;IACD;QACE,kBAAkB,EAAE,KAAK;QACzB,EAAE,EAAE,gCAAgC;QACpC,QAAQ,EAAE,QAAQ;QAClB,uBAAuB,EAAE,IAAI;QAC7B,KAAK,EAAE,uCAAuC;KAC/C;IACD;QACE,WAAW,EAAE,WAAW;QACxB,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE,QAAQ;QAClB,uBAAuB,EAAE,IAAI;QAC7B,KAAK,EAAE,oBAAoB;KAC5B;CAC4D,CAAA;AAE/D,MAAM,uCAAuC,GAAG,MAAM,CAAC,WAAW,CAChE,oCAAoC,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC;IAC5D,eAAe,CAAC,EAAE;IAClB,eAAe;CAChB,CAAC,CACiE,CAAA;AAErE,MAAM,UAAU,kCAAkC,CAChD,OAAgC;IAEhC,OAAO,uCAAuC,CAAC,OAAO,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,QAA4C;IAE5C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,eAAe,GAAG,kCAAkC,CAAC,OAAO,CAAC,CAAA;QAEnE,OAAO;YACL,KAAK,EAAE,eAAe,CAAC,KAAK;YAC5B,KAAK,EAAE,eAAe,CAAC,EAAE;SAC1B,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAAa;IAEb,OACE,yBACD,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,aAAiC;IAEjC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,gCAAgC,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAA;IACH,CAAC;IAED,MAAM,uBAAuB,GAA8B,EAAE,CAAA;IAE7D,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,+CAA+C,YAAY,IAAI,CAChE,CAAA;QACH,CAAC;QAED,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACpD,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,uBAAuB,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,aAAiD;IAEjD,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,gCAAgC,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAkC,EAClC,aAAiD;IAEjD,IAAI,OAAO,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAkC,CAAC,EAAE,CAAC;QAC1E,OAAO,OAAkC,CAAA;IAC3C,CAAC;IAED,OAAO,6BAA6B,CAAC,aAAa,CAAC,CAAA;AACrD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function composePrompt(parts: Array<string | null | undefined>): string;
2
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,CAK7E"}
@@ -0,0 +1,7 @@
1
+ export function composePrompt(parts) {
2
+ return parts
3
+ .map((part) => part?.trim())
4
+ .filter((part) => Boolean(part))
5
+ .join("\n\n");
6
+ }
7
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,KAAuC;IACnE,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;SAC3B,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC/C,IAAI,CAAC,MAAM,CAAC,CAAA;AACjB,CAAC"}
@@ -0,0 +1,82 @@
1
+ import type { SupportedAiImageModelId } from "./models";
2
+ export declare const SOURCE_NAME = "ai-image-plugin";
3
+ export declare const SOURCE_TITLE = "AI Image Plugin";
4
+ export declare const SETTINGS_DOCUMENT_ID = "aiImagePlugin.settings";
5
+ export declare const SETTINGS_SCHEMA_TYPE = "aiImagePluginSettings";
6
+ export declare const SETTINGS_TOOL_NAME = "ai-image-plugin-settings";
7
+ export declare const SETTINGS_TOOL_TITLE = "AI Image Plugin";
8
+ export declare const DEFAULT_API_ENDPOINT = "/api/ai-image-plugin";
9
+ export declare const DEFAULT_ASSET_SOURCE_TARGET_ID = "ai-image-plugin-asset-source";
10
+ export declare const MAX_REFERENCE_IMAGES = 5;
11
+ export declare const SHARED_SECRET_NAMESPACE = "ai-image-plugin";
12
+ export declare const SHARED_SECRET_KEY = "sharedSecret";
13
+ export declare const SHARED_SECRET_HEADER_NAME = "x-ai-image-plugin-secret";
14
+ export type StoredImage = {
15
+ asset?: {
16
+ _id?: string;
17
+ _ref?: string;
18
+ originalFilename?: string;
19
+ url?: string;
20
+ };
21
+ };
22
+ export type SettingsTargetConfigValue = {
23
+ prompt?: string;
24
+ referenceImages?: StoredImage[];
25
+ targetId?: string;
26
+ };
27
+ export type SettingsValue = {
28
+ globalModel?: SupportedAiImageModelId;
29
+ globalPrompt?: string;
30
+ globalReferenceImages?: StoredImage[];
31
+ targetConfigs?: SettingsTargetConfigValue[];
32
+ };
33
+ export type GenerateButtonTarget = {
34
+ description?: string;
35
+ dialogTitle?: string;
36
+ documentType: string;
37
+ fieldPath: string;
38
+ id: string;
39
+ promptLabel?: string;
40
+ promptPlaceholder?: string;
41
+ suggestedContextFieldPaths?: string[];
42
+ title?: string;
43
+ type: "generateButton";
44
+ };
45
+ export type AssetSourceTarget = {
46
+ description?: string;
47
+ id: string;
48
+ promptLabel?: string;
49
+ promptPlaceholder?: string;
50
+ title?: string;
51
+ type: "assetSource";
52
+ };
53
+ export type PluginOptions = {
54
+ apiEndpoint?: string;
55
+ apiVersion: string;
56
+ allowedModels?: SupportedAiImageModelId[];
57
+ assetSource?: boolean | {
58
+ description?: string;
59
+ enabled?: boolean;
60
+ id?: string;
61
+ promptLabel?: string;
62
+ promptPlaceholder?: string;
63
+ title?: string;
64
+ };
65
+ settingsTool?: {
66
+ name?: string;
67
+ registerSchemaType?: boolean;
68
+ title?: string;
69
+ };
70
+ targets?: GenerateButtonTarget[];
71
+ };
72
+ export type ResolvedOptions = {
73
+ apiEndpoint: string;
74
+ apiVersion: string;
75
+ allowedModels: SupportedAiImageModelId[];
76
+ assetSourceTarget: AssetSourceTarget | null;
77
+ registerSettingsSchemaType: boolean;
78
+ settingsToolName: string;
79
+ settingsToolTitle: string;
80
+ targets: GenerateButtonTarget[];
81
+ };
82
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/utils/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export const SOURCE_NAME = "ai-image-plugin";
2
+ export const SOURCE_TITLE = "AI Image Plugin";
3
+ export const SETTINGS_DOCUMENT_ID = "aiImagePlugin.settings";
4
+ export const SETTINGS_SCHEMA_TYPE = "aiImagePluginSettings";
5
+ export const SETTINGS_TOOL_NAME = "ai-image-plugin-settings";
6
+ export const SETTINGS_TOOL_TITLE = "AI Image Plugin";
7
+ export const DEFAULT_API_ENDPOINT = "/api/ai-image-plugin";
8
+ export const DEFAULT_ASSET_SOURCE_TARGET_ID = "ai-image-plugin-asset-source";
9
+ export const MAX_REFERENCE_IMAGES = 5;
10
+ export const SHARED_SECRET_NAMESPACE = "ai-image-plugin";
11
+ export const SHARED_SECRET_KEY = "sharedSecret";
12
+ export const SHARED_SECRET_HEADER_NAME = "x-ai-image-plugin-secret";
13
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/utils/shared.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAA;AAC5C,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAA;AAC7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAA;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAA;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,0BAA0B,CAAA;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAA;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAA;AAC1D,MAAM,CAAC,MAAM,8BAA8B,GAAG,8BAA8B,CAAA;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAA;AACrC,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAA;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAA;AAC/C,MAAM,CAAC,MAAM,yBAAyB,GAAG,0BAA0B,CAAA"}