@easyling/sanity-connector 0.0.1 → 0.0.2-rc.1
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/.tsbuildinfo +1 -1
- package/package.json +18 -12
- package/dist/actions/bulkTranslate.d.ts +0 -7
- package/dist/actions/bulkTranslate.d.ts.map +0 -1
- package/dist/actions/bulkTranslate.js +0 -543
- package/dist/actions/bulkTranslate.js.map +0 -1
- package/dist/actions/manageDNTFields.d.ts +0 -12
- package/dist/actions/manageDNTFields.d.ts.map +0 -1
- package/dist/actions/manageDNTFields.js +0 -100
- package/dist/actions/manageDNTFields.js.map +0 -1
- package/dist/actions/translateDocument.d.ts +0 -7
- package/dist/actions/translateDocument.d.ts.map +0 -1
- package/dist/actions/translateDocument.js +0 -256
- package/dist/actions/translateDocument.js.map +0 -1
- package/dist/components/RadioWithDefault.d.ts +0 -17
- package/dist/components/RadioWithDefault.d.ts.map +0 -1
- package/dist/components/RadioWithDefault.js +0 -29
- package/dist/components/RadioWithDefault.js.map +0 -1
- package/dist/components/auth/AuthNavbar.d.ts +0 -18
- package/dist/components/auth/AuthNavbar.d.ts.map +0 -1
- package/dist/components/auth/AuthNavbar.js +0 -15
- package/dist/components/auth/AuthNavbar.js.map +0 -1
- package/dist/components/auth/AuthStatus.d.ts +0 -27
- package/dist/components/auth/AuthStatus.d.ts.map +0 -1
- package/dist/components/auth/AuthStatus.js +0 -82
- package/dist/components/auth/AuthStatus.js.map +0 -1
- package/dist/components/auth/AuthStatusWrapper.d.ts +0 -15
- package/dist/components/auth/AuthStatusWrapper.d.ts.map +0 -1
- package/dist/components/auth/AuthStatusWrapper.js +0 -39
- package/dist/components/auth/AuthStatusWrapper.js.map +0 -1
- package/dist/components/auth/MigrationPrompt.d.ts +0 -20
- package/dist/components/auth/MigrationPrompt.d.ts.map +0 -1
- package/dist/components/auth/MigrationPrompt.js +0 -16
- package/dist/components/auth/MigrationPrompt.js.map +0 -1
- package/dist/components/auth/MigrationPromptWrapper.d.ts +0 -14
- package/dist/components/auth/MigrationPromptWrapper.d.ts.map +0 -1
- package/dist/components/auth/MigrationPromptWrapper.js +0 -16
- package/dist/components/auth/MigrationPromptWrapper.js.map +0 -1
- package/dist/components/auth/OAuthCallback.d.ts +0 -20
- package/dist/components/auth/OAuthCallback.d.ts.map +0 -1
- package/dist/components/auth/OAuthCallback.js +0 -12
- package/dist/components/auth/OAuthCallback.js.map +0 -1
- package/dist/components/auth/index.d.ts +0 -15
- package/dist/components/auth/index.d.ts.map +0 -1
- package/dist/components/auth/index.js +0 -12
- package/dist/components/auth/index.js.map +0 -1
- package/dist/components/config/LocaleConfigTool.d.ts +0 -17
- package/dist/components/config/LocaleConfigTool.d.ts.map +0 -1
- package/dist/components/config/LocaleConfigTool.js +0 -186
- package/dist/components/config/LocaleConfigTool.js.map +0 -1
- package/dist/components/config/LocaleConfigToolWrapper.d.ts +0 -13
- package/dist/components/config/LocaleConfigToolWrapper.d.ts.map +0 -1
- package/dist/components/config/LocaleConfigToolWrapper.js +0 -26
- package/dist/components/config/LocaleConfigToolWrapper.js.map +0 -1
- package/dist/components/config/OAuthConfig.d.ts +0 -26
- package/dist/components/config/OAuthConfig.d.ts.map +0 -1
- package/dist/components/config/OAuthConfig.js +0 -152
- package/dist/components/config/OAuthConfig.js.map +0 -1
- package/dist/components/config/OAuthConfigWrapper.d.ts +0 -13
- package/dist/components/config/OAuthConfigWrapper.d.ts.map +0 -1
- package/dist/components/config/OAuthConfigWrapper.js +0 -41
- package/dist/components/config/OAuthConfigWrapper.js.map +0 -1
- package/dist/components/config/PasswordInput.d.ts +0 -14
- package/dist/components/config/PasswordInput.d.ts.map +0 -1
- package/dist/components/config/PasswordInput.js +0 -23
- package/dist/components/config/PasswordInput.js.map +0 -1
- package/dist/components/config/index.d.ts +0 -9
- package/dist/components/config/index.d.ts.map +0 -1
- package/dist/components/config/index.js +0 -8
- package/dist/components/config/index.js.map +0 -1
- package/dist/components/config/localeConfigToolDefinition.d.ts +0 -13
- package/dist/components/config/localeConfigToolDefinition.d.ts.map +0 -1
- package/dist/components/config/localeConfigToolDefinition.js +0 -19
- package/dist/components/config/localeConfigToolDefinition.js.map +0 -1
- package/dist/components/config/oauthConfigToolDefinition.d.ts +0 -13
- package/dist/components/config/oauthConfigToolDefinition.d.ts.map +0 -1
- package/dist/components/config/oauthConfigToolDefinition.js +0 -19
- package/dist/components/config/oauthConfigToolDefinition.js.map +0 -1
- package/dist/components/dialogs/ConfirmationDialog.d.ts +0 -21
- package/dist/components/dialogs/ConfirmationDialog.d.ts.map +0 -1
- package/dist/components/dialogs/ConfirmationDialog.js +0 -28
- package/dist/components/dialogs/ConfirmationDialog.js.map +0 -1
- package/dist/components/dialogs/ErrorDialog.d.ts +0 -21
- package/dist/components/dialogs/ErrorDialog.d.ts.map +0 -1
- package/dist/components/dialogs/ErrorDialog.js +0 -28
- package/dist/components/dialogs/ErrorDialog.js.map +0 -1
- package/dist/components/dialogs/LocaleSelectionDialog.d.ts +0 -41
- package/dist/components/dialogs/LocaleSelectionDialog.d.ts.map +0 -1
- package/dist/components/dialogs/LocaleSelectionDialog.js +0 -117
- package/dist/components/dialogs/LocaleSelectionDialog.js.map +0 -1
- package/dist/components/dialogs/SuccessDialog.d.ts +0 -19
- package/dist/components/dialogs/SuccessDialog.d.ts.map +0 -1
- package/dist/components/dialogs/SuccessDialog.js +0 -37
- package/dist/components/dialogs/SuccessDialog.js.map +0 -1
- package/dist/components/dialogs/index.d.ts +0 -12
- package/dist/components/dialogs/index.d.ts.map +0 -1
- package/dist/components/dialogs/index.js +0 -8
- package/dist/components/dialogs/index.js.map +0 -1
- package/dist/components/dnt/DNTFieldBadge.d.ts +0 -16
- package/dist/components/dnt/DNTFieldBadge.d.ts.map +0 -1
- package/dist/components/dnt/DNTFieldBadge.js +0 -56
- package/dist/components/dnt/DNTFieldBadge.js.map +0 -1
- package/dist/components/dnt/DNTFieldComponent.d.ts +0 -17
- package/dist/components/dnt/DNTFieldComponent.d.ts.map +0 -1
- package/dist/components/dnt/DNTFieldComponent.js +0 -21
- package/dist/components/dnt/DNTFieldComponent.js.map +0 -1
- package/dist/components/dnt/DNTFieldInput.d.ts +0 -14
- package/dist/components/dnt/DNTFieldInput.d.ts.map +0 -1
- package/dist/components/dnt/DNTFieldInput.js +0 -76
- package/dist/components/dnt/DNTFieldInput.js.map +0 -1
- package/dist/components/dnt/index.d.ts +0 -7
- package/dist/components/dnt/index.d.ts.map +0 -1
- package/dist/components/dnt/index.js +0 -7
- package/dist/components/dnt/index.js.map +0 -1
- package/dist/config/index.d.ts +0 -6
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -6
- package/dist/config/index.js.map +0 -1
- package/dist/config/pluginConfig.d.ts +0 -163
- package/dist/config/pluginConfig.d.ts.map +0 -1
- package/dist/config/pluginConfig.js +0 -548
- package/dist/config/pluginConfig.js.map +0 -1
- package/dist/index.d.ts +0 -12
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -12
- package/dist/index.js.map +0 -1
- package/dist/plugin.d.ts +0 -3
- package/dist/plugin.d.ts.map +0 -1
- package/dist/plugin.js +0 -137
- package/dist/plugin.js.map +0 -1
- package/dist/services/authStateManager.d.ts +0 -94
- package/dist/services/authStateManager.d.ts.map +0 -1
- package/dist/services/authStateManager.js +0 -208
- package/dist/services/authStateManager.js.map +0 -1
- package/dist/services/contentExtractor.d.ts +0 -95
- package/dist/services/contentExtractor.d.ts.map +0 -1
- package/dist/services/contentExtractor.js +0 -516
- package/dist/services/contentExtractor.js.map +0 -1
- package/dist/services/dialogService.d.ts +0 -96
- package/dist/services/dialogService.d.ts.map +0 -1
- package/dist/services/dialogService.js +0 -244
- package/dist/services/dialogService.js.map +0 -1
- package/dist/services/dntServiceManager.d.ts +0 -44
- package/dist/services/dntServiceManager.d.ts.map +0 -1
- package/dist/services/dntServiceManager.js +0 -74
- package/dist/services/dntServiceManager.js.map +0 -1
- package/dist/services/dntStorageAdapter.d.ts +0 -73
- package/dist/services/dntStorageAdapter.d.ts.map +0 -1
- package/dist/services/dntStorageAdapter.js +0 -192
- package/dist/services/dntStorageAdapter.js.map +0 -1
- package/dist/services/documentCreationService.d.ts +0 -139
- package/dist/services/documentCreationService.d.ts.map +0 -1
- package/dist/services/documentCreationService.js +0 -938
- package/dist/services/documentCreationService.js.map +0 -1
- package/dist/services/localeService.d.ts +0 -160
- package/dist/services/localeService.d.ts.map +0 -1
- package/dist/services/localeService.js +0 -300
- package/dist/services/localeService.js.map +0 -1
- package/dist/services/localeStorageAdapter.d.ts +0 -42
- package/dist/services/localeStorageAdapter.d.ts.map +0 -1
- package/dist/services/localeStorageAdapter.js +0 -107
- package/dist/services/localeStorageAdapter.js.map +0 -1
- package/dist/services/oauthConfigStorage.d.ts +0 -46
- package/dist/services/oauthConfigStorage.d.ts.map +0 -1
- package/dist/services/oauthConfigStorage.js +0 -122
- package/dist/services/oauthConfigStorage.js.map +0 -1
- package/dist/services/oauthService.d.ts +0 -48
- package/dist/services/oauthService.d.ts.map +0 -1
- package/dist/services/oauthService.js +0 -71
- package/dist/services/oauthService.js.map +0 -1
- package/dist/services/oauthServiceManager.d.ts +0 -189
- package/dist/services/oauthServiceManager.d.ts.map +0 -1
- package/dist/services/oauthServiceManager.js +0 -380
- package/dist/services/oauthServiceManager.js.map +0 -1
- package/dist/services/tokenStorage.d.ts +0 -54
- package/dist/services/tokenStorage.d.ts.map +0 -1
- package/dist/services/tokenStorage.js +0 -140
- package/dist/services/tokenStorage.js.map +0 -1
- package/dist/services/translationService.d.ts +0 -374
- package/dist/services/translationService.d.ts.map +0 -1
- package/dist/services/translationService.js +0 -687
- package/dist/services/translationService.js.map +0 -1
- package/dist/services/unifiedConfigStorage.d.ts +0 -124
- package/dist/services/unifiedConfigStorage.d.ts.map +0 -1
- package/dist/services/unifiedConfigStorage.js +0 -304
- package/dist/services/unifiedConfigStorage.js.map +0 -1
- package/dist/test-utils.d.ts +0 -9
- package/dist/test-utils.d.ts.map +0 -1
- package/dist/test-utils.js +0 -13
- package/dist/test-utils.js.map +0 -1
- package/dist/types/dialog.d.ts +0 -107
- package/dist/types/dialog.d.ts.map +0 -1
- package/dist/types/dialog.js +0 -6
- package/dist/types/dialog.js.map +0 -1
- package/dist/types/dnt.d.ts +0 -84
- package/dist/types/dnt.d.ts.map +0 -1
- package/dist/types/dnt.js +0 -5
- package/dist/types/dnt.js.map +0 -1
- package/dist/types/index.d.ts +0 -12
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +0 -1
- package/dist/types/locale.d.ts +0 -116
- package/dist/types/locale.d.ts.map +0 -1
- package/dist/types/locale.js +0 -189
- package/dist/types/locale.js.map +0 -1
- package/dist/types/oauth.d.ts +0 -90
- package/dist/types/oauth.d.ts.map +0 -1
- package/dist/types/oauth.js +0 -62
- package/dist/types/oauth.js.map +0 -1
- package/dist/types/pluginConfig.d.ts +0 -45
- package/dist/types/pluginConfig.d.ts.map +0 -1
- package/dist/types/pluginConfig.js +0 -6
- package/dist/types/pluginConfig.js.map +0 -1
- package/dist/types/translation.d.ts +0 -122
- package/dist/types/translation.d.ts.map +0 -1
- package/dist/types/translation.js +0 -6
- package/dist/types/translation.js.map +0 -1
- package/dist/utils/htmlFormatter.d.ts +0 -66
- package/dist/utils/htmlFormatter.d.ts.map +0 -1
- package/dist/utils/htmlFormatter.js +0 -191
- package/dist/utils/htmlFormatter.js.map +0 -1
- package/dist/utils/index.d.ts +0 -15
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -16
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -105
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -229
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/oauthErrorFeedback.d.ts +0 -76
- package/dist/utils/oauthErrorFeedback.d.ts.map +0 -1
- package/dist/utils/oauthErrorFeedback.js +0 -134
- package/dist/utils/oauthErrorFeedback.js.map +0 -1
- package/dist/utils/oauthLogger.d.ts +0 -176
- package/dist/utils/oauthLogger.d.ts.map +0 -1
- package/dist/utils/oauthLogger.js +0 -282
- package/dist/utils/oauthLogger.js.map +0 -1
- package/dist/utils/validator.d.ts +0 -67
- package/dist/utils/validator.d.ts.map +0 -1
- package/dist/utils/validator.js +0 -390
- package/dist/utils/validator.js.map +0 -1
|
@@ -1,516 +0,0 @@
|
|
|
1
|
-
import { getDNTStorage } from './dntServiceManager';
|
|
2
|
-
export class ContentExtractor {
|
|
3
|
-
/**
|
|
4
|
-
* Infer the Sanity field type from a value
|
|
5
|
-
*
|
|
6
|
-
* @param value - The field value to inspect
|
|
7
|
-
* @returns The inferred Sanity type string
|
|
8
|
-
*/
|
|
9
|
-
inferSanityType(value) {
|
|
10
|
-
if (value === null || value === undefined) {
|
|
11
|
-
return 'undefined';
|
|
12
|
-
}
|
|
13
|
-
// Check for Sanity-specific object types
|
|
14
|
-
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
15
|
-
const obj = value;
|
|
16
|
-
// Sanity objects have a _type field
|
|
17
|
-
if (obj._type) {
|
|
18
|
-
return obj._type;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
// Check primitive types
|
|
22
|
-
if (typeof value === 'string') {
|
|
23
|
-
return 'string';
|
|
24
|
-
}
|
|
25
|
-
if (typeof value === 'number') {
|
|
26
|
-
return 'number';
|
|
27
|
-
}
|
|
28
|
-
if (typeof value === 'boolean') {
|
|
29
|
-
return 'boolean';
|
|
30
|
-
}
|
|
31
|
-
if (Array.isArray(value)) {
|
|
32
|
-
return 'array';
|
|
33
|
-
}
|
|
34
|
-
if (typeof value === 'object') {
|
|
35
|
-
return 'object';
|
|
36
|
-
}
|
|
37
|
-
return 'unknown';
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Extract content from a single Sanity document and convert to HTML
|
|
41
|
-
*/
|
|
42
|
-
async extractDocumentContent(document) {
|
|
43
|
-
if (!document || !document._id) {
|
|
44
|
-
throw new Error('Invalid document provided');
|
|
45
|
-
}
|
|
46
|
-
const htmlContent = this.convertToHtml(document);
|
|
47
|
-
return htmlContent;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Convert Sanity document content to HTML format
|
|
51
|
-
*/
|
|
52
|
-
convertToHtml(content) {
|
|
53
|
-
if (!content) {
|
|
54
|
-
return '';
|
|
55
|
-
}
|
|
56
|
-
let html = '';
|
|
57
|
-
// Handle different field types
|
|
58
|
-
for (const [key, value] of Object.entries(content)) {
|
|
59
|
-
// Skip system fields
|
|
60
|
-
if (key.startsWith('_')) {
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
if (value) {
|
|
64
|
-
html += this.processField(key, value);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return html.trim();
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Extract structured content with separated body, title, slug, and fields
|
|
71
|
-
* Also applies DNT preferences if available
|
|
72
|
-
*/
|
|
73
|
-
async extractStructuredContent(document) {
|
|
74
|
-
if (!document || !document._id) {
|
|
75
|
-
throw new Error('Invalid document provided');
|
|
76
|
-
}
|
|
77
|
-
const title = this.extractTitle(document);
|
|
78
|
-
const slug = this.extractSlug(document);
|
|
79
|
-
const { bodyContent, fields } = this.separateContentAndFields(document);
|
|
80
|
-
// Apply DNT preferences from storage based on document type
|
|
81
|
-
const documentType = document._type || 'document';
|
|
82
|
-
const enhancedFields = await this.applyDNTPreferences(documentType, fields);
|
|
83
|
-
return {
|
|
84
|
-
documentId: document._id,
|
|
85
|
-
title,
|
|
86
|
-
htmlContent: bodyContent,
|
|
87
|
-
slug,
|
|
88
|
-
fields: enhancedFields
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Apply DNT preferences to extracted fields based on document type
|
|
93
|
-
* Now uses document-type-based configuration that applies to all documents of the same type
|
|
94
|
-
*/
|
|
95
|
-
async applyDNTPreferences(documentType, fields) {
|
|
96
|
-
try {
|
|
97
|
-
// Get DNT storage instance
|
|
98
|
-
const dntStorage = getDNTStorage();
|
|
99
|
-
// Get DNT field configuration for this document type
|
|
100
|
-
const dntFields = await dntStorage.getFieldsForType(documentType);
|
|
101
|
-
if (!dntFields || Object.keys(dntFields).length === 0) {
|
|
102
|
-
// No DNT configuration for this document type, return fields as-is
|
|
103
|
-
return fields;
|
|
104
|
-
}
|
|
105
|
-
// Apply DNT preferences to fields (fields already have type information from extraction)
|
|
106
|
-
const enhancedFields = {};
|
|
107
|
-
for (const [fieldPath, fieldValue] of Object.entries(fields)) {
|
|
108
|
-
const isDNT = dntFields[fieldPath] || false;
|
|
109
|
-
// Fields should already be in TranslatableField format with type set
|
|
110
|
-
if (fieldValue && typeof fieldValue === 'object' && 'value' in fieldValue) {
|
|
111
|
-
const typedField = fieldValue;
|
|
112
|
-
enhancedFields[fieldPath] = {
|
|
113
|
-
...typedField,
|
|
114
|
-
dnt: isDNT
|
|
115
|
-
// type is already set from separateContentAndFields()
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
// Fallback: if for some reason a field isn't wrapped yet, wrap it now
|
|
120
|
-
enhancedFields[fieldPath] = {
|
|
121
|
-
value: fieldValue,
|
|
122
|
-
dnt: isDNT,
|
|
123
|
-
type: this.inferSanityType(fieldValue)
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return enhancedFields;
|
|
128
|
-
}
|
|
129
|
-
catch (error) {
|
|
130
|
-
console.warn(`Failed to apply DNT preferences for document type ${documentType}:`, error);
|
|
131
|
-
// Return original fields if preferences can't be loaded
|
|
132
|
-
return fields;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Extract content from multiple documents for bulk operations
|
|
137
|
-
*/
|
|
138
|
-
async extractBulkContent(documents) {
|
|
139
|
-
const results = [];
|
|
140
|
-
for (const document of documents) {
|
|
141
|
-
try {
|
|
142
|
-
const htmlContent = await this.extractDocumentContent(document);
|
|
143
|
-
const title = this.extractTitle(document);
|
|
144
|
-
results.push({
|
|
145
|
-
documentId: document._id,
|
|
146
|
-
title,
|
|
147
|
-
htmlContent
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
catch (error) {
|
|
151
|
-
console.warn(`Failed to extract content from document ${document._id}:`, error);
|
|
152
|
-
// Continue processing other documents
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
return results;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Extract structured content from multiple documents
|
|
159
|
-
*/
|
|
160
|
-
async extractBulkStructuredContent(documents) {
|
|
161
|
-
const results = [];
|
|
162
|
-
for (const document of documents) {
|
|
163
|
-
try {
|
|
164
|
-
const structuredContent = await this.extractStructuredContent(document);
|
|
165
|
-
results.push(structuredContent);
|
|
166
|
-
}
|
|
167
|
-
catch (error) {
|
|
168
|
-
console.warn(`Failed to extract structured content from document ${document?._id || 'unknown'}:`, error);
|
|
169
|
-
// Continue processing other documents
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
return results;
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Process individual fields based on their type
|
|
176
|
-
*/
|
|
177
|
-
processField(fieldName, fieldValue) {
|
|
178
|
-
if (fieldValue === null || fieldValue === undefined) {
|
|
179
|
-
return '';
|
|
180
|
-
}
|
|
181
|
-
// Handle arrays (like portable text blocks)
|
|
182
|
-
if (Array.isArray(fieldValue)) {
|
|
183
|
-
return this.processArray(fieldName, fieldValue);
|
|
184
|
-
}
|
|
185
|
-
// Handle objects
|
|
186
|
-
if (typeof fieldValue === 'object') {
|
|
187
|
-
return this.processObject(fieldName, fieldValue);
|
|
188
|
-
}
|
|
189
|
-
// Handle primitive values
|
|
190
|
-
if (typeof fieldValue === 'string' || typeof fieldValue === 'number') {
|
|
191
|
-
return this.wrapInHtml(fieldName, String(fieldValue));
|
|
192
|
-
}
|
|
193
|
-
return '';
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Process array fields (like portable text blocks)
|
|
197
|
-
*/
|
|
198
|
-
processArray(fieldName, array) {
|
|
199
|
-
let html = '';
|
|
200
|
-
// Check if this is a list structure
|
|
201
|
-
const isListArray = array.every(item => item && typeof item === 'object' && item._type === 'block' &&
|
|
202
|
-
(item.listItem === 'bullet' || item.listItem === 'number'));
|
|
203
|
-
if (isListArray) {
|
|
204
|
-
// Handle as a list
|
|
205
|
-
const listType = array[0]?.listItem === 'number' ? 'ol' : 'ul';
|
|
206
|
-
html += `<${listType}>`;
|
|
207
|
-
for (const item of array) {
|
|
208
|
-
if (item._type === 'block') {
|
|
209
|
-
const content = this.processPortableTextBlockContent(item);
|
|
210
|
-
html += `<li>${content}</li>`;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
html += `</${listType}>`;
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
// Process as regular array
|
|
217
|
-
for (const item of array) {
|
|
218
|
-
if (item && typeof item === 'object') {
|
|
219
|
-
// Handle portable text blocks
|
|
220
|
-
if (item._type === 'block') {
|
|
221
|
-
html += this.processPortableTextBlock(item);
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
// Handle other array items
|
|
225
|
-
html += this.processObject(fieldName, item);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
// Handle primitive array items
|
|
230
|
-
html += this.wrapInHtml('item', String(item));
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
return html;
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* Process portable text blocks and convert to HTML
|
|
238
|
-
*/
|
|
239
|
-
processPortableTextBlock(block) {
|
|
240
|
-
const content = this.processPortableTextBlockContent(block);
|
|
241
|
-
// Wrap in appropriate HTML tag based on block style
|
|
242
|
-
const style = block.style || 'normal';
|
|
243
|
-
switch (style) {
|
|
244
|
-
case 'h1':
|
|
245
|
-
return `<h1>${content}</h1>`;
|
|
246
|
-
case 'h2':
|
|
247
|
-
return `<h2>${content}</h2>`;
|
|
248
|
-
case 'h3':
|
|
249
|
-
return `<h3>${content}</h3>`;
|
|
250
|
-
case 'h4':
|
|
251
|
-
return `<h4>${content}</h4>`;
|
|
252
|
-
case 'h5':
|
|
253
|
-
return `<h5>${content}</h5>`;
|
|
254
|
-
case 'h6':
|
|
255
|
-
return `<h6>${content}</h6>`;
|
|
256
|
-
case 'blockquote':
|
|
257
|
-
return `<blockquote>${content}</blockquote>`;
|
|
258
|
-
default:
|
|
259
|
-
return `<p>${content}</p>`;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Extract content from portable text block children
|
|
264
|
-
*/
|
|
265
|
-
processPortableTextBlockContent(block) {
|
|
266
|
-
if (!block.children || !Array.isArray(block.children)) {
|
|
267
|
-
return '';
|
|
268
|
-
}
|
|
269
|
-
let content = '';
|
|
270
|
-
// Extract text from children
|
|
271
|
-
for (const child of block.children) {
|
|
272
|
-
if (child._type === 'span' && child.text) {
|
|
273
|
-
let text = child.text;
|
|
274
|
-
// Apply formatting marks
|
|
275
|
-
if (child.marks && Array.isArray(child.marks)) {
|
|
276
|
-
for (const mark of child.marks) {
|
|
277
|
-
if (typeof mark === 'string') {
|
|
278
|
-
// Simple marks
|
|
279
|
-
switch (mark) {
|
|
280
|
-
case 'strong':
|
|
281
|
-
text = `<strong>${text}</strong>`;
|
|
282
|
-
break;
|
|
283
|
-
case 'em':
|
|
284
|
-
text = `<em>${text}</em>`;
|
|
285
|
-
break;
|
|
286
|
-
case 'underline':
|
|
287
|
-
text = `<u>${text}</u>`;
|
|
288
|
-
break;
|
|
289
|
-
case 'code':
|
|
290
|
-
text = `<code>${text}</code>`;
|
|
291
|
-
break;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
else if (typeof mark === 'object' && mark._type === 'link') {
|
|
295
|
-
// Link annotations
|
|
296
|
-
const href = mark.href || '#';
|
|
297
|
-
text = `<a href="${this.escapeHtml(href)}">${text}</a>`;
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
content += text;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
return content;
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Process object fields
|
|
308
|
-
*/
|
|
309
|
-
processObject(fieldName, obj) {
|
|
310
|
-
let html = '';
|
|
311
|
-
// Handle references
|
|
312
|
-
if (obj._type === 'reference' && obj._ref) {
|
|
313
|
-
return `<span data-reference="${obj._ref}">Referenced content</span>`;
|
|
314
|
-
}
|
|
315
|
-
// Handle images
|
|
316
|
-
if (obj._type === 'image') {
|
|
317
|
-
const alt = obj.alt || 'Image';
|
|
318
|
-
const caption = obj.caption || '';
|
|
319
|
-
return `<figure><img alt="${this.escapeHtml(alt)}" />${caption ? `<figcaption>${this.escapeHtml(caption)}</figcaption>` : ''}</figure>`;
|
|
320
|
-
}
|
|
321
|
-
// Handle files
|
|
322
|
-
if (obj._type === 'file') {
|
|
323
|
-
const title = obj.title || 'File';
|
|
324
|
-
return `<a href="#" data-file-ref="${obj.asset?._ref || ''}">${this.escapeHtml(title)}</a>`;
|
|
325
|
-
}
|
|
326
|
-
// Handle URLs
|
|
327
|
-
if (obj._type === 'url') {
|
|
328
|
-
const href = obj.href || '#';
|
|
329
|
-
const text = obj.text || href;
|
|
330
|
-
return `<a href="${this.escapeHtml(href)}">${this.escapeHtml(text)}</a>`;
|
|
331
|
-
}
|
|
332
|
-
// Handle geopoints
|
|
333
|
-
if (obj._type === 'geopoint') {
|
|
334
|
-
const lat = obj.lat || 0;
|
|
335
|
-
const lng = obj.lng || 0;
|
|
336
|
-
const alt = obj.alt || '';
|
|
337
|
-
return `<span data-geopoint data-lat="${lat}" data-lng="${lng}" ${alt ? `data-alt="${alt}"` : ''}>Location: ${lat}, ${lng}</span>`;
|
|
338
|
-
}
|
|
339
|
-
// Handle slugs
|
|
340
|
-
if (obj._type === 'slug') {
|
|
341
|
-
const current = obj.current || '';
|
|
342
|
-
return `<span data-slug="${this.escapeHtml(current)}">${this.escapeHtml(current)}</span>`;
|
|
343
|
-
}
|
|
344
|
-
// Handle dates
|
|
345
|
-
if (obj._type === 'date' || obj._type === 'datetime') {
|
|
346
|
-
const dateValue = obj.value || obj;
|
|
347
|
-
if (typeof dateValue === 'string') {
|
|
348
|
-
const date = new Date(dateValue);
|
|
349
|
-
return `<time datetime="${dateValue}">${date.toLocaleDateString()}</time>`;
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
// Handle color objects
|
|
353
|
-
if (obj._type === 'color') {
|
|
354
|
-
const hex = obj.hex || '#000000';
|
|
355
|
-
const alpha = obj.alpha !== undefined ? obj.alpha : 1;
|
|
356
|
-
return `<span data-color="${hex}" data-alpha="${alpha}" style="color: ${hex}">Color: ${hex}</span>`;
|
|
357
|
-
}
|
|
358
|
-
// Handle spans with annotations (links, etc.)
|
|
359
|
-
if (obj._type === 'span' && obj.marks && Array.isArray(obj.marks)) {
|
|
360
|
-
let text = obj.text || '';
|
|
361
|
-
// Apply formatting marks
|
|
362
|
-
for (const mark of obj.marks) {
|
|
363
|
-
if (typeof mark === 'string') {
|
|
364
|
-
// Simple marks like 'strong', 'em', etc.
|
|
365
|
-
switch (mark) {
|
|
366
|
-
case 'strong':
|
|
367
|
-
text = `<strong>${text}</strong>`;
|
|
368
|
-
break;
|
|
369
|
-
case 'em':
|
|
370
|
-
text = `<em>${text}</em>`;
|
|
371
|
-
break;
|
|
372
|
-
case 'underline':
|
|
373
|
-
text = `<u>${text}</u>`;
|
|
374
|
-
break;
|
|
375
|
-
case 'code':
|
|
376
|
-
text = `<code>${text}</code>`;
|
|
377
|
-
break;
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
else if (typeof mark === 'object' && mark._type === 'link') {
|
|
381
|
-
// Link annotations
|
|
382
|
-
const href = mark.href || '#';
|
|
383
|
-
text = `<a href="${this.escapeHtml(href)}">${text}</a>`;
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
return text;
|
|
387
|
-
}
|
|
388
|
-
// Handle other objects recursively
|
|
389
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
390
|
-
if (!key.startsWith('_') && value) {
|
|
391
|
-
html += this.processField(key, value);
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
return html;
|
|
395
|
-
}
|
|
396
|
-
/**
|
|
397
|
-
* Wrap content in HTML with field name as class
|
|
398
|
-
*/
|
|
399
|
-
wrapInHtml(fieldName, content) {
|
|
400
|
-
const safeFieldName = fieldName.replace(/[^a-zA-Z0-9-_]/g, '');
|
|
401
|
-
return `<div class="field-${safeFieldName}">${this.escapeHtml(content)}</div>`;
|
|
402
|
-
}
|
|
403
|
-
/**
|
|
404
|
-
* Separate main content from metadata fields
|
|
405
|
-
* All fields are immediately wrapped in TranslatableField format with type information
|
|
406
|
-
*/
|
|
407
|
-
separateContentAndFields(document) {
|
|
408
|
-
const contentFields = ['body', 'content', 'text', 'description', 'excerpt'];
|
|
409
|
-
const metadataFields = ['title', 'slug', '_id', '_type', '_createdAt', '_updatedAt', '_rev'];
|
|
410
|
-
let bodyContent = '';
|
|
411
|
-
const fields = {};
|
|
412
|
-
for (const [key, value] of Object.entries(document)) {
|
|
413
|
-
// Skip system fields
|
|
414
|
-
if (key.startsWith('_')) {
|
|
415
|
-
continue;
|
|
416
|
-
}
|
|
417
|
-
// Skip title and slug as they're handled separately
|
|
418
|
-
if (key === 'title' || key === 'slug') {
|
|
419
|
-
continue;
|
|
420
|
-
}
|
|
421
|
-
if (value) {
|
|
422
|
-
// Check if this is a main content field
|
|
423
|
-
if (contentFields.includes(key)) {
|
|
424
|
-
bodyContent += this.processField(key, value);
|
|
425
|
-
}
|
|
426
|
-
else {
|
|
427
|
-
// Add to fields as TranslatableField with type information
|
|
428
|
-
let extractedValue;
|
|
429
|
-
let fieldType;
|
|
430
|
-
if (typeof value === 'object' && value !== null && '_type' in value && value._type === 'slug') {
|
|
431
|
-
extractedValue = value.current || '';
|
|
432
|
-
fieldType = 'slug';
|
|
433
|
-
}
|
|
434
|
-
else if (typeof value === 'object' && value !== null && '_type' in value && (value._type === 'date' || value._type === 'datetime')) {
|
|
435
|
-
extractedValue = value.value || value;
|
|
436
|
-
fieldType = value._type;
|
|
437
|
-
}
|
|
438
|
-
else if (Array.isArray(value) && value.every(item => item && typeof item === 'object' && item._type === 'block')) {
|
|
439
|
-
// If it's portable text but not in a content field, treat as metadata
|
|
440
|
-
extractedValue = this.processArray(key, value);
|
|
441
|
-
fieldType = 'block';
|
|
442
|
-
}
|
|
443
|
-
else {
|
|
444
|
-
extractedValue = value;
|
|
445
|
-
fieldType = this.inferSanityType(value);
|
|
446
|
-
}
|
|
447
|
-
// Wrap in TranslatableField format with type
|
|
448
|
-
fields[key] = {
|
|
449
|
-
value: extractedValue,
|
|
450
|
-
dnt: false, // Default to translatable; will be overridden by applyDNTPreferences if needed
|
|
451
|
-
type: fieldType
|
|
452
|
-
};
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
// If no main content found, fall back to processing all non-metadata fields
|
|
457
|
-
if (!bodyContent.trim()) {
|
|
458
|
-
for (const [key, value] of Object.entries(document)) {
|
|
459
|
-
if (!key.startsWith('_') && !metadataFields.includes(key) && value) {
|
|
460
|
-
bodyContent += this.processField(key, value);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
return { bodyContent: bodyContent.trim(), fields };
|
|
465
|
-
}
|
|
466
|
-
/**
|
|
467
|
-
* Extract slug from document
|
|
468
|
-
*/
|
|
469
|
-
extractSlug(document) {
|
|
470
|
-
// Check for slug field
|
|
471
|
-
if (document.slug) {
|
|
472
|
-
if (typeof document.slug === 'object' && document.slug !== null && '_type' in document.slug && document.slug._type === 'slug') {
|
|
473
|
-
return document.slug.current || '';
|
|
474
|
-
}
|
|
475
|
-
if (typeof document.slug === 'string') {
|
|
476
|
-
return document.slug;
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
// Check for other slug-like fields
|
|
480
|
-
const slugFields = ['slug', 'path', 'url', 'permalink'];
|
|
481
|
-
for (const field of slugFields) {
|
|
482
|
-
if (document[field]) {
|
|
483
|
-
if (typeof document[field] === 'object' && document[field] !== null && '_type' in document[field] && document[field]._type === 'slug') {
|
|
484
|
-
return document[field].current || '';
|
|
485
|
-
}
|
|
486
|
-
if (typeof document[field] === 'string') {
|
|
487
|
-
return document[field];
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
return '';
|
|
492
|
-
}
|
|
493
|
-
/**
|
|
494
|
-
* Extract title from document
|
|
495
|
-
*/
|
|
496
|
-
extractTitle(document) {
|
|
497
|
-
// Try common title fields
|
|
498
|
-
const titleFields = ['title', 'name', 'heading', 'label'];
|
|
499
|
-
for (const field of titleFields) {
|
|
500
|
-
if (document[field] && typeof document[field] === 'string') {
|
|
501
|
-
return document[field];
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
// Fallback to document type and ID
|
|
505
|
-
return `${document._type} (${document._id})`;
|
|
506
|
-
}
|
|
507
|
-
/**
|
|
508
|
-
* Escape HTML special characters
|
|
509
|
-
*/
|
|
510
|
-
escapeHtml(text) {
|
|
511
|
-
const div = document.createElement('div');
|
|
512
|
-
div.textContent = text;
|
|
513
|
-
return div.innerHTML;
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
//# sourceMappingURL=contentExtractor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contentExtractor.js","sourceRoot":"","sources":["../../src/services/contentExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dialog management service with React state management
|
|
3
|
-
* Requirements: 3.1, 3.2, 3.5, 3.6, 3.7
|
|
4
|
-
*
|
|
5
|
-
* Centralized dialog management with queue support for multiple simultaneous dialogs
|
|
6
|
-
*/
|
|
7
|
-
import React, { ReactNode } from 'react';
|
|
8
|
-
import type { DialogManager, ConfirmationDialogOptions, SuccessDialogOptions, ErrorDialogOptions, LocaleSelectionDialogOptions, LocaleSelectionResult } from '../types/dialog';
|
|
9
|
-
/**
|
|
10
|
-
* Dialog types for queue management
|
|
11
|
-
*/
|
|
12
|
-
type DialogType = 'confirmation' | 'success' | 'error' | 'localeSelection';
|
|
13
|
-
/**
|
|
14
|
-
* Dialog options union type
|
|
15
|
-
*/
|
|
16
|
-
type DialogOptions = ConfirmationDialogOptions | SuccessDialogOptions | ErrorDialogOptions | LocaleSelectionDialogOptions;
|
|
17
|
-
/**
|
|
18
|
-
* Dialog queue item structure
|
|
19
|
-
*/
|
|
20
|
-
interface DialogQueueItem {
|
|
21
|
-
id: string;
|
|
22
|
-
type: DialogType;
|
|
23
|
-
options: DialogOptions;
|
|
24
|
-
resolve?: (value: unknown) => void;
|
|
25
|
-
reject?: (error: Error) => void;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Dialog context state
|
|
29
|
-
*/
|
|
30
|
-
interface DialogContextState {
|
|
31
|
-
currentDialog: DialogQueueItem | null;
|
|
32
|
-
dialogQueue: DialogQueueItem[];
|
|
33
|
-
showConfirmation: (options: ConfirmationDialogOptions) => Promise<boolean>;
|
|
34
|
-
showLocaleSelection: (options: LocaleSelectionDialogOptions) => Promise<LocaleSelectionResult>;
|
|
35
|
-
showSuccess: (options: SuccessDialogOptions) => void;
|
|
36
|
-
showError: (options: ErrorDialogOptions) => Promise<boolean>;
|
|
37
|
-
closeAll: () => void;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Hook to access dialog service from React components
|
|
41
|
-
*/
|
|
42
|
-
export declare const useDialogService: () => DialogContextState;
|
|
43
|
-
/**
|
|
44
|
-
* Dialog Provider Props
|
|
45
|
-
*/
|
|
46
|
-
interface DialogProviderProps {
|
|
47
|
-
children: ReactNode;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Dialog Provider Component
|
|
51
|
-
* Manages dialog state and queue for the entire application
|
|
52
|
-
*/
|
|
53
|
-
export declare const DialogProvider: React.FC<DialogProviderProps>;
|
|
54
|
-
/**
|
|
55
|
-
* Singleton DialogService class for non-React contexts
|
|
56
|
-
* Note: This requires the DialogProvider to be mounted in the React tree
|
|
57
|
-
*/
|
|
58
|
-
export declare class DialogService implements DialogManager {
|
|
59
|
-
private static instance;
|
|
60
|
-
private contextRef;
|
|
61
|
-
private constructor();
|
|
62
|
-
/**
|
|
63
|
-
* Get singleton instance
|
|
64
|
-
*/
|
|
65
|
-
static getInstance(): DialogService;
|
|
66
|
-
/**
|
|
67
|
-
* Set the context reference (called by DialogProvider)
|
|
68
|
-
*/
|
|
69
|
-
setContext(context: DialogContextState): void;
|
|
70
|
-
/**
|
|
71
|
-
* Show a confirmation dialog
|
|
72
|
-
*/
|
|
73
|
-
showConfirmation(options: ConfirmationDialogOptions): Promise<boolean>;
|
|
74
|
-
/**
|
|
75
|
-
* Show a locale selection dialog
|
|
76
|
-
*/
|
|
77
|
-
showLocaleSelection(options: LocaleSelectionDialogOptions): Promise<LocaleSelectionResult>;
|
|
78
|
-
/**
|
|
79
|
-
* Show a success notification
|
|
80
|
-
*/
|
|
81
|
-
showSuccess(options: SuccessDialogOptions): void;
|
|
82
|
-
/**
|
|
83
|
-
* Show an error dialog
|
|
84
|
-
*/
|
|
85
|
-
showError(options: ErrorDialogOptions): Promise<boolean>;
|
|
86
|
-
/**
|
|
87
|
-
* Close all open dialogs
|
|
88
|
-
*/
|
|
89
|
-
closeAll(): void;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Export singleton instance for convenience
|
|
93
|
-
*/
|
|
94
|
-
export declare const dialogService: DialogService;
|
|
95
|
-
export {};
|
|
96
|
-
//# sourceMappingURL=dialogService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dialogService.d.ts","sourceRoot":"","sources":["../../src/services/dialogService.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EAAoD,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3F,OAAO,KAAK,EACV,aAAa,EACb,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAMzB;;GAEG;AACH,KAAK,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,iBAAiB,CAAC;AAE3E;;GAEG;AACH,KAAK,aAAa,GACd,yBAAyB,GACzB,oBAAoB,GACpB,kBAAkB,GAClB,4BAA4B,CAAC;AAEjC;;GAEG;AACH,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,UAAU,kBAAkB;IAC1B,aAAa,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,gBAAgB,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3E,mBAAmB,EAAE,CAAC,OAAO,EAAE,4BAA4B,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC/F,WAAW,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACrD,SAAS,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAOD;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAO,kBAMnC,CAAC;AAEF;;GAEG;AACH,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA6NxD,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAc,YAAW,aAAa;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,UAAU,CAAmC;IAErD,OAAO;IAEP;;OAEG;WACW,WAAW,IAAI,aAAa;IAO1C;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAIpD;;OAEG;IACU,gBAAgB,CAC3B,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,OAAO,CAAC;IAOnB;;OAEG;IACU,mBAAmB,CAC9B,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,qBAAqB,CAAC;IAOjC;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAOvD;;OAEG;IACU,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrE;;OAEG;IACI,QAAQ,IAAI,IAAI;CAMxB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,eAA8B,CAAC"}
|