@shin1ohno/sage 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 (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +168 -0
  3. package/dist/config/loader.d.ts +37 -0
  4. package/dist/config/loader.d.ts.map +1 -0
  5. package/dist/config/loader.js +95 -0
  6. package/dist/config/loader.js.map +1 -0
  7. package/dist/config/storage/file-storage.d.ts +35 -0
  8. package/dist/config/storage/file-storage.d.ts.map +1 -0
  9. package/dist/config/storage/file-storage.js +76 -0
  10. package/dist/config/storage/file-storage.js.map +1 -0
  11. package/dist/config/storage/index.d.ts +8 -0
  12. package/dist/config/storage/index.d.ts.map +1 -0
  13. package/dist/config/storage/index.js +8 -0
  14. package/dist/config/storage/index.js.map +1 -0
  15. package/dist/config/storage/session-storage.d.ts +35 -0
  16. package/dist/config/storage/session-storage.d.ts.map +1 -0
  17. package/dist/config/storage/session-storage.js +44 -0
  18. package/dist/config/storage/session-storage.js.map +1 -0
  19. package/dist/config/storage/storage-factory.d.ts +32 -0
  20. package/dist/config/storage/storage-factory.d.ts.map +1 -0
  21. package/dist/config/storage/storage-factory.js +78 -0
  22. package/dist/config/storage/storage-factory.js.map +1 -0
  23. package/dist/core/index.d.ts +6 -0
  24. package/dist/core/index.d.ts.map +1 -0
  25. package/dist/core/index.js +6 -0
  26. package/dist/core/index.js.map +1 -0
  27. package/dist/core/sage-core.d.ts +80 -0
  28. package/dist/core/sage-core.d.ts.map +1 -0
  29. package/dist/core/sage-core.js +190 -0
  30. package/dist/core/sage-core.js.map +1 -0
  31. package/dist/index.d.ts +9 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +901 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/integrations/apple-reminders.d.ts +96 -0
  36. package/dist/integrations/apple-reminders.d.ts.map +1 -0
  37. package/dist/integrations/apple-reminders.js +250 -0
  38. package/dist/integrations/apple-reminders.js.map +1 -0
  39. package/dist/integrations/calendar-service.d.ts +126 -0
  40. package/dist/integrations/calendar-service.d.ts.map +1 -0
  41. package/dist/integrations/calendar-service.js +295 -0
  42. package/dist/integrations/calendar-service.js.map +1 -0
  43. package/dist/integrations/notion-mcp.d.ts +121 -0
  44. package/dist/integrations/notion-mcp.d.ts.map +1 -0
  45. package/dist/integrations/notion-mcp.js +281 -0
  46. package/dist/integrations/notion-mcp.js.map +1 -0
  47. package/dist/integrations/reminder-manager.d.ts +90 -0
  48. package/dist/integrations/reminder-manager.d.ts.map +1 -0
  49. package/dist/integrations/reminder-manager.js +182 -0
  50. package/dist/integrations/reminder-manager.js.map +1 -0
  51. package/dist/platform/adapter-factory.d.ts +22 -0
  52. package/dist/platform/adapter-factory.d.ts.map +1 -0
  53. package/dist/platform/adapter-factory.js +41 -0
  54. package/dist/platform/adapter-factory.js.map +1 -0
  55. package/dist/platform/adapters/mcp-adapter.d.ts +32 -0
  56. package/dist/platform/adapters/mcp-adapter.d.ts.map +1 -0
  57. package/dist/platform/adapters/mcp-adapter.js +52 -0
  58. package/dist/platform/adapters/mcp-adapter.js.map +1 -0
  59. package/dist/platform/adapters/skills-adapter-ios.d.ts +38 -0
  60. package/dist/platform/adapters/skills-adapter-ios.d.ts.map +1 -0
  61. package/dist/platform/adapters/skills-adapter-ios.js +59 -0
  62. package/dist/platform/adapters/skills-adapter-ios.js.map +1 -0
  63. package/dist/platform/adapters/skills-adapter-web.d.ts +36 -0
  64. package/dist/platform/adapters/skills-adapter-web.d.ts.map +1 -0
  65. package/dist/platform/adapters/skills-adapter-web.js +56 -0
  66. package/dist/platform/adapters/skills-adapter-web.js.map +1 -0
  67. package/dist/platform/detector.d.ts +60 -0
  68. package/dist/platform/detector.d.ts.map +1 -0
  69. package/dist/platform/detector.js +217 -0
  70. package/dist/platform/detector.js.map +1 -0
  71. package/dist/platform/index.d.ts +11 -0
  72. package/dist/platform/index.d.ts.map +1 -0
  73. package/dist/platform/index.js +11 -0
  74. package/dist/platform/index.js.map +1 -0
  75. package/dist/platform/types.d.ts +205 -0
  76. package/dist/platform/types.d.ts.map +1 -0
  77. package/dist/platform/types.js +33 -0
  78. package/dist/platform/types.js.map +1 -0
  79. package/dist/setup/questions.d.ts +15 -0
  80. package/dist/setup/questions.d.ts.map +1 -0
  81. package/dist/setup/questions.js +131 -0
  82. package/dist/setup/questions.js.map +1 -0
  83. package/dist/setup/wizard.d.ts +51 -0
  84. package/dist/setup/wizard.d.ts.map +1 -0
  85. package/dist/setup/wizard.js +210 -0
  86. package/dist/setup/wizard.js.map +1 -0
  87. package/dist/tools/analyze-tasks.d.ts +61 -0
  88. package/dist/tools/analyze-tasks.d.ts.map +1 -0
  89. package/dist/tools/analyze-tasks.js +258 -0
  90. package/dist/tools/analyze-tasks.js.map +1 -0
  91. package/dist/types/config.d.ts +126 -0
  92. package/dist/types/config.d.ts.map +1 -0
  93. package/dist/types/config.js +118 -0
  94. package/dist/types/config.js.map +1 -0
  95. package/dist/types/errors.d.ts +39 -0
  96. package/dist/types/errors.d.ts.map +1 -0
  97. package/dist/types/errors.js +83 -0
  98. package/dist/types/errors.js.map +1 -0
  99. package/dist/types/index.d.ts +7 -0
  100. package/dist/types/index.d.ts.map +1 -0
  101. package/dist/types/index.js +7 -0
  102. package/dist/types/index.js.map +1 -0
  103. package/dist/types/task.d.ts +69 -0
  104. package/dist/types/task.d.ts.map +1 -0
  105. package/dist/types/task.js +5 -0
  106. package/dist/types/task.js.map +1 -0
  107. package/dist/utils/estimation.d.ts +49 -0
  108. package/dist/utils/estimation.d.ts.map +1 -0
  109. package/dist/utils/estimation.js +244 -0
  110. package/dist/utils/estimation.js.map +1 -0
  111. package/dist/utils/priority.d.ts +68 -0
  112. package/dist/utils/priority.d.ts.map +1 -0
  113. package/dist/utils/priority.js +243 -0
  114. package/dist/utils/priority.js.map +1 -0
  115. package/dist/utils/retry.d.ts +62 -0
  116. package/dist/utils/retry.d.ts.map +1 -0
  117. package/dist/utils/retry.js +161 -0
  118. package/dist/utils/retry.js.map +1 -0
  119. package/dist/utils/stakeholders.d.ts +61 -0
  120. package/dist/utils/stakeholders.d.ts.map +1 -0
  121. package/dist/utils/stakeholders.js +301 -0
  122. package/dist/utils/stakeholders.js.map +1 -0
  123. package/dist/utils/task-splitter.d.ts +45 -0
  124. package/dist/utils/task-splitter.d.ts.map +1 -0
  125. package/dist/utils/task-splitter.js +321 -0
  126. package/dist/utils/task-splitter.js.map +1 -0
  127. package/package.json +66 -0
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Calendar Service
3
+ * macOS AppleScript integration for Calendar.app
4
+ * Requirements: 6.1-6.9
5
+ *
6
+ * 現行実装: macOS AppleScript経由
7
+ * 将来対応予定: iOS/iPadOS ネイティブ統合(Claude Skills APIがデバイスAPIへのアクセスを提供した時点)
8
+ */
9
+ import { retryWithBackoff, isRetryableError } from '../utils/retry.js';
10
+ /**
11
+ * Default retry options for calendar operations
12
+ */
13
+ const RETRY_OPTIONS = {
14
+ maxAttempts: 3,
15
+ initialDelay: 500,
16
+ maxDelay: 5000,
17
+ shouldRetry: isRetryableError,
18
+ };
19
+ /**
20
+ * Calendar Service
21
+ * Provides platform-adaptive calendar integration
22
+ */
23
+ export class CalendarService {
24
+ runAppleScript = null;
25
+ /**
26
+ * Detect the current platform
27
+ * Requirement: 6.1
28
+ */
29
+ async detectPlatform() {
30
+ // Check for macOS (Node.js environment)
31
+ if (typeof process !== 'undefined' && process.platform === 'darwin') {
32
+ return {
33
+ platform: 'macos',
34
+ availableMethods: ['applescript', 'caldav'],
35
+ recommendedMethod: 'applescript',
36
+ requiresPermission: true,
37
+ hasNativeAccess: true,
38
+ };
39
+ }
40
+ // Check for iOS/iPadOS (Skills environment)
41
+ if (typeof window !== 'undefined') {
42
+ const userAgent = window.navigator?.userAgent || '';
43
+ if (userAgent.includes('iPhone')) {
44
+ return {
45
+ platform: 'ios',
46
+ availableMethods: ['native'],
47
+ recommendedMethod: 'native',
48
+ requiresPermission: true,
49
+ hasNativeAccess: true,
50
+ };
51
+ }
52
+ if (userAgent.includes('iPad')) {
53
+ return {
54
+ platform: 'ipados',
55
+ availableMethods: ['native'],
56
+ recommendedMethod: 'native',
57
+ requiresPermission: true,
58
+ hasNativeAccess: true,
59
+ };
60
+ }
61
+ // Web browser
62
+ return {
63
+ platform: 'web',
64
+ availableMethods: ['ical_url', 'manual_input', 'outlook'],
65
+ recommendedMethod: 'manual_input',
66
+ requiresPermission: false,
67
+ hasNativeAccess: false,
68
+ };
69
+ }
70
+ return {
71
+ platform: 'unknown',
72
+ availableMethods: ['manual_input'],
73
+ recommendedMethod: 'manual_input',
74
+ requiresPermission: false,
75
+ hasNativeAccess: false,
76
+ };
77
+ }
78
+ /**
79
+ * Check if calendar integration is available
80
+ */
81
+ async isAvailable() {
82
+ const platform = await this.detectPlatform();
83
+ return platform.hasNativeAccess;
84
+ }
85
+ /**
86
+ * Fetch calendar events
87
+ * Requirement: 6.2, 6.3, 6.4
88
+ */
89
+ async fetchEvents(startDate, endDate) {
90
+ const platform = await this.detectPlatform();
91
+ switch (platform.recommendedMethod) {
92
+ case 'native':
93
+ return this.fetchNativeEvents(startDate, endDate);
94
+ case 'applescript':
95
+ return this.fetchAppleScriptEvents(startDate, endDate);
96
+ case 'manual_input':
97
+ default:
98
+ return [];
99
+ }
100
+ }
101
+ /**
102
+ * Fetch events via native iOS/iPadOS API
103
+ * 🔮 将来対応予定: Claude Skills APIがデバイスAPIへのアクセスを提供した時点で実装
104
+ * 現時点では window.claude?.calendar API は存在しません
105
+ * Requirement: 6.2
106
+ */
107
+ async fetchNativeEvents(_startDate, _endDate) {
108
+ // 🔮 将来対応予定: ネイティブ統合
109
+ // 現時点では、iOS/iPadOSでの実行時は空の配列を返す
110
+ console.warn('ネイティブCalendar統合は将来対応予定です。現在はmacOS AppleScriptのみサポートしています。');
111
+ return [];
112
+ }
113
+ /**
114
+ * Fetch events via AppleScript (macOS)
115
+ * Requirement: 6.3
116
+ */
117
+ async fetchAppleScriptEvents(startDate, endDate) {
118
+ try {
119
+ // Lazy load run-applescript
120
+ if (!this.runAppleScript) {
121
+ const module = await import('run-applescript');
122
+ this.runAppleScript = module.runAppleScript;
123
+ }
124
+ const script = this.buildFetchEventsScript(startDate, endDate);
125
+ // Use retry with exponential backoff for AppleScript execution
126
+ const result = await retryWithBackoff(async () => {
127
+ return await this.runAppleScript(script);
128
+ }, {
129
+ ...RETRY_OPTIONS,
130
+ onRetry: (error, attempt) => {
131
+ console.error(`AppleScript Calendar retry attempt ${attempt}: ${error.message}`);
132
+ },
133
+ });
134
+ return this.parseAppleScriptResult(result);
135
+ }
136
+ catch (error) {
137
+ console.error('AppleScript カレンダーエラー:', error);
138
+ return [];
139
+ }
140
+ }
141
+ /**
142
+ * Build AppleScript for fetching events
143
+ */
144
+ buildFetchEventsScript(startDate, endDate) {
145
+ return `
146
+ tell application "Calendar"
147
+ set startDate to date "${startDate}"
148
+ set endDate to date "${endDate}"
149
+ set eventList to ""
150
+
151
+ repeat with cal in calendars
152
+ set calEvents to (every event of cal whose start date ≥ startDate and start date ≤ endDate)
153
+ repeat with evt in calEvents
154
+ set eventInfo to (summary of evt) & "|" & (start date of evt as string) & "|" & (end date of evt as string) & "|" & (uid of evt)
155
+ set eventList to eventList & eventInfo & linefeed
156
+ end repeat
157
+ end repeat
158
+
159
+ return eventList
160
+ end tell`;
161
+ }
162
+ /**
163
+ * Parse AppleScript result into events
164
+ */
165
+ parseAppleScriptResult(output) {
166
+ if (!output || output.trim() === '') {
167
+ return [];
168
+ }
169
+ const events = [];
170
+ const lines = output.trim().split('\n');
171
+ for (const line of lines) {
172
+ const parts = line.split('|');
173
+ if (parts.length >= 4) {
174
+ events.push({
175
+ id: parts[3],
176
+ title: parts[0],
177
+ start: parts[1],
178
+ end: parts[2],
179
+ isAllDay: false,
180
+ source: 'applescript',
181
+ });
182
+ }
183
+ }
184
+ return events;
185
+ }
186
+ /**
187
+ * Find available slots from events
188
+ * Requirement: 6.4, 6.7
189
+ */
190
+ findAvailableSlotsFromEvents(events, taskDuration, workingHours, date) {
191
+ const slots = [];
192
+ const dateObj = new Date(date);
193
+ // Parse working hours
194
+ const [startHour, startMin] = workingHours.start.split(':').map(Number);
195
+ const [endHour, endMin] = workingHours.end.split(':').map(Number);
196
+ // Create working hours boundaries
197
+ const workStart = new Date(dateObj);
198
+ workStart.setHours(startHour, startMin, 0, 0);
199
+ const workEnd = new Date(dateObj);
200
+ workEnd.setHours(endHour, endMin, 0, 0);
201
+ // Filter events for this day
202
+ const dayEvents = events
203
+ .filter((e) => !e.isAllDay)
204
+ .map((e) => ({
205
+ start: new Date(e.start),
206
+ end: new Date(e.end),
207
+ title: e.title,
208
+ }))
209
+ .filter((e) => e.start >= workStart && e.start < workEnd)
210
+ .sort((a, b) => a.start.getTime() - b.start.getTime());
211
+ // If all-day event exists, no slots available
212
+ if (events.some((e) => e.isAllDay)) {
213
+ return [];
214
+ }
215
+ // Find gaps between events
216
+ let currentTime = workStart;
217
+ for (const event of dayEvents) {
218
+ const gapMinutes = (event.start.getTime() - currentTime.getTime()) / (1000 * 60);
219
+ if (gapMinutes >= taskDuration) {
220
+ slots.push({
221
+ start: currentTime.toISOString(),
222
+ end: event.start.toISOString(),
223
+ durationMinutes: gapMinutes,
224
+ suitability: 'good',
225
+ reason: `${Math.floor(gapMinutes)}分の空き時間`,
226
+ conflicts: [],
227
+ dayType: 'normal',
228
+ source: 'applescript',
229
+ });
230
+ }
231
+ currentTime = event.end > currentTime ? event.end : currentTime;
232
+ }
233
+ // Check remaining time after last event
234
+ const remainingMinutes = (workEnd.getTime() - currentTime.getTime()) / (1000 * 60);
235
+ if (remainingMinutes >= taskDuration) {
236
+ slots.push({
237
+ start: currentTime.toISOString(),
238
+ end: workEnd.toISOString(),
239
+ durationMinutes: remainingMinutes,
240
+ suitability: 'good',
241
+ reason: `${Math.floor(remainingMinutes)}分の空き時間`,
242
+ conflicts: [],
243
+ dayType: 'normal',
244
+ source: 'applescript',
245
+ });
246
+ }
247
+ return slots;
248
+ }
249
+ /**
250
+ * Calculate slot suitability based on day type
251
+ * Requirement: 6.5, 6.6, 6.8
252
+ */
253
+ calculateSuitability(slot, config) {
254
+ const date = new Date(slot.start);
255
+ const dayName = date.toLocaleDateString('en-US', { weekday: 'long' });
256
+ let suitability = 'good';
257
+ let dayType = 'normal';
258
+ let reason = slot.reason;
259
+ if (config.deepWorkDays.includes(dayName)) {
260
+ suitability = 'excellent';
261
+ dayType = 'deep-work';
262
+ reason = `${dayName}は深い作業に最適な日です`;
263
+ }
264
+ else if (config.meetingHeavyDays.includes(dayName)) {
265
+ suitability = 'acceptable';
266
+ dayType = 'meeting-heavy';
267
+ reason = `${dayName}は会議が多い日です`;
268
+ }
269
+ return {
270
+ ...slot,
271
+ suitability,
272
+ dayType,
273
+ reason,
274
+ };
275
+ }
276
+ /**
277
+ * Generate manual input prompt for web fallback
278
+ * Requirement: 6.9
279
+ */
280
+ generateManualInputPrompt(startDate, endDate) {
281
+ return `📅 カレンダー情報を手動で入力してください
282
+
283
+ 期間: ${startDate} 〜 ${endDate}
284
+
285
+ 以下の形式で予定を教えてください:
286
+ - 予定名: 開始時間 - 終了時間
287
+
288
+ 例:
289
+ - 会議: 10:00 - 11:00
290
+ - ランチ: 12:00 - 13:00
291
+
292
+ これにより、空き時間を計算して最適なタスク実行時間を提案します。`;
293
+ }
294
+ }
295
+ //# sourceMappingURL=calendar-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-service.js","sourceRoot":"","sources":["../../src/integrations/calendar-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Notion MCP Service
3
+ * Notion integration via MCP Server
4
+ * Requirements: 8.1-8.5
5
+ *
6
+ * 現行実装: Notion MCP Server経由(Desktop/Code)
7
+ * 将来対応予定: iOS/iPadOS Notion Connector統合(Claude Skills APIが対応した時点)
8
+ */
9
+ /**
10
+ * Notion platform info
11
+ */
12
+ export interface NotionPlatformInfo {
13
+ platform: 'mcp' | 'connector' | 'web' | 'unknown';
14
+ method: 'mcp' | 'connector' | 'fallback';
15
+ available: boolean;
16
+ }
17
+ /**
18
+ * Notion page request
19
+ */
20
+ export interface NotionPageRequest {
21
+ databaseId: string;
22
+ title: string;
23
+ properties: Record<string, any>;
24
+ content?: NotionBlock[];
25
+ }
26
+ /**
27
+ * Notion block
28
+ */
29
+ export interface NotionBlock {
30
+ type: 'paragraph' | 'heading' | 'bulleted_list_item';
31
+ content: string;
32
+ }
33
+ /**
34
+ * Notion page result
35
+ */
36
+ export interface NotionPageResult {
37
+ success: boolean;
38
+ method?: 'mcp' | 'connector' | 'fallback';
39
+ pageId?: string;
40
+ pageUrl?: string;
41
+ error?: string;
42
+ fallbackText?: string;
43
+ }
44
+ /**
45
+ * Task info for template generation
46
+ */
47
+ export interface TaskInfo {
48
+ title: string;
49
+ priority?: string;
50
+ deadline?: string;
51
+ stakeholders?: string[];
52
+ estimatedMinutes?: number;
53
+ description?: string;
54
+ }
55
+ /**
56
+ * MCP request format
57
+ */
58
+ export interface MCPRequest {
59
+ method: string;
60
+ params: {
61
+ name: string;
62
+ arguments: Record<string, any>;
63
+ };
64
+ }
65
+ /**
66
+ * Notion MCP Service
67
+ * Provides platform-adaptive Notion integration
68
+ * - Desktop/Code: MCP経由
69
+ * - iOS/iPadOS: Notion Connector経由
70
+ * - Web: フォールバック
71
+ */
72
+ export declare class NotionMCPService {
73
+ /**
74
+ * Detect the current platform for Notion integration
75
+ */
76
+ detectPlatform(): Promise<NotionPlatformInfo>;
77
+ /**
78
+ * Check if Notion integration is available
79
+ */
80
+ isAvailable(): Promise<boolean>;
81
+ /**
82
+ * Create a page in Notion
83
+ * Routes to appropriate integration based on platform
84
+ * Requirement: 8.1, 8.2, 8.3
85
+ */
86
+ createPage(request: NotionPageRequest): Promise<NotionPageResult>;
87
+ /**
88
+ * Create page via MCP (Desktop/Code)
89
+ */
90
+ private createPageViaMCP;
91
+ /**
92
+ * Create page via Notion Connector (iOS/iPadOS Skills)
93
+ * 🔮 将来対応予定: Claude Skills APIがデバイスAPIへのアクセスを提供した時点で実装
94
+ * 現時点では window.claude?.notion API は存在しません
95
+ * Requirement: 8.1, 8.2
96
+ */
97
+ private createPageViaConnector;
98
+ /**
99
+ * Build MCP request for Notion page creation
100
+ */
101
+ buildMCPRequest(request: NotionPageRequest): MCPRequest;
102
+ /**
103
+ * Build Notion block format
104
+ */
105
+ private buildNotionBlock;
106
+ /**
107
+ * Build Notion properties format
108
+ */
109
+ buildNotionProperties(taskInfo: TaskInfo): Record<string, any>;
110
+ /**
111
+ * Generate fallback template for manual Notion copy
112
+ * Requirement: 8.4
113
+ */
114
+ generateFallbackTemplate(taskInfo: TaskInfo): string;
115
+ /**
116
+ * Determine if a task should be synced to Notion based on deadline
117
+ * Requirement: 8.1 (8日以上先のタスク)
118
+ */
119
+ shouldSyncToNotion(deadline: string | undefined, thresholdDays?: number): boolean;
120
+ }
121
+ //# sourceMappingURL=notion-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-mcp.d.ts","sourceRoot":"","sources":["../../src/integrations/notion-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,SAAS,CAAC;IAClD,MAAM,EAAE,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC;IACzC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,oBAAoB,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAChC,CAAC;CACH;AAED;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA2BnD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC;;;;OAIG;IACG,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsBvE;;OAEG;YACW,gBAAgB;IAyC9B;;;;;OAKG;YACW,sBAAsB;IAepC;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU;IAgBvD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA4C9D;;;OAGG;IACH,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IA6BpD;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,GAAE,MAAU,GAAG,OAAO;CAYrF"}