@stoneforge/quarry 1.12.0 → 1.14.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 (199) hide show
  1. package/README.md +2 -0
  2. package/dist/api/quarry-api.d.ts +9 -1
  3. package/dist/api/quarry-api.d.ts.map +1 -1
  4. package/dist/api/quarry-api.js +21 -2
  5. package/dist/api/quarry-api.js.map +1 -1
  6. package/dist/api/types.d.ts +8 -1
  7. package/dist/api/types.d.ts.map +1 -1
  8. package/dist/api/types.js.map +1 -1
  9. package/dist/cli/commands/auto-link-helper.d.ts +33 -0
  10. package/dist/cli/commands/auto-link-helper.d.ts.map +1 -0
  11. package/dist/cli/commands/auto-link-helper.js +74 -0
  12. package/dist/cli/commands/auto-link-helper.js.map +1 -0
  13. package/dist/cli/commands/crud.d.ts +3 -0
  14. package/dist/cli/commands/crud.d.ts.map +1 -1
  15. package/dist/cli/commands/crud.js +144 -15
  16. package/dist/cli/commands/crud.js.map +1 -1
  17. package/dist/cli/commands/docs.js +2 -2
  18. package/dist/cli/commands/docs.js.map +1 -1
  19. package/dist/cli/commands/document.js +1 -1
  20. package/dist/cli/commands/document.js.map +1 -1
  21. package/dist/cli/commands/entity.js +1 -1
  22. package/dist/cli/commands/entity.js.map +1 -1
  23. package/dist/cli/commands/external-sync.d.ts +18 -0
  24. package/dist/cli/commands/external-sync.d.ts.map +1 -0
  25. package/dist/cli/commands/external-sync.js +2499 -0
  26. package/dist/cli/commands/external-sync.js.map +1 -0
  27. package/dist/cli/commands/library.js +1 -1
  28. package/dist/cli/commands/library.js.map +1 -1
  29. package/dist/cli/commands/message.js +2 -2
  30. package/dist/cli/commands/message.js.map +1 -1
  31. package/dist/cli/commands/serve.d.ts.map +1 -1
  32. package/dist/cli/commands/serve.js +2 -0
  33. package/dist/cli/commands/serve.js.map +1 -1
  34. package/dist/cli/commands/task.d.ts.map +1 -1
  35. package/dist/cli/commands/task.js +7 -4
  36. package/dist/cli/commands/task.js.map +1 -1
  37. package/dist/cli/commands/team.js +1 -1
  38. package/dist/cli/commands/team.js.map +1 -1
  39. package/dist/cli/commands/workflow.js +1 -1
  40. package/dist/cli/commands/workflow.js.map +1 -1
  41. package/dist/cli/runner.d.ts.map +1 -1
  42. package/dist/cli/runner.js +3 -0
  43. package/dist/cli/runner.js.map +1 -1
  44. package/dist/cli/utils/progress.d.ts +30 -0
  45. package/dist/cli/utils/progress.d.ts.map +1 -0
  46. package/dist/cli/utils/progress.js +47 -0
  47. package/dist/cli/utils/progress.js.map +1 -0
  48. package/dist/config/config.d.ts.map +1 -1
  49. package/dist/config/config.js +34 -0
  50. package/dist/config/config.js.map +1 -1
  51. package/dist/config/defaults.d.ts +13 -1
  52. package/dist/config/defaults.d.ts.map +1 -1
  53. package/dist/config/defaults.js +22 -0
  54. package/dist/config/defaults.js.map +1 -1
  55. package/dist/config/file.d.ts.map +1 -1
  56. package/dist/config/file.js +71 -0
  57. package/dist/config/file.js.map +1 -1
  58. package/dist/config/index.d.ts +3 -3
  59. package/dist/config/index.d.ts.map +1 -1
  60. package/dist/config/index.js +2 -2
  61. package/dist/config/index.js.map +1 -1
  62. package/dist/config/merge.d.ts.map +1 -1
  63. package/dist/config/merge.js +52 -1
  64. package/dist/config/merge.js.map +1 -1
  65. package/dist/config/types.d.ts +68 -1
  66. package/dist/config/types.d.ts.map +1 -1
  67. package/dist/config/types.js +33 -0
  68. package/dist/config/types.js.map +1 -1
  69. package/dist/config/validation.d.ts.map +1 -1
  70. package/dist/config/validation.js +64 -1
  71. package/dist/config/validation.js.map +1 -1
  72. package/dist/external-sync/adapters/document-sync-adapter.d.ts +150 -0
  73. package/dist/external-sync/adapters/document-sync-adapter.d.ts.map +1 -0
  74. package/dist/external-sync/adapters/document-sync-adapter.js +325 -0
  75. package/dist/external-sync/adapters/document-sync-adapter.js.map +1 -0
  76. package/dist/external-sync/adapters/task-sync-adapter.d.ts +177 -0
  77. package/dist/external-sync/adapters/task-sync-adapter.d.ts.map +1 -0
  78. package/dist/external-sync/adapters/task-sync-adapter.js +353 -0
  79. package/dist/external-sync/adapters/task-sync-adapter.js.map +1 -0
  80. package/dist/external-sync/auto-link.d.ts +66 -0
  81. package/dist/external-sync/auto-link.d.ts.map +1 -0
  82. package/dist/external-sync/auto-link.js +98 -0
  83. package/dist/external-sync/auto-link.js.map +1 -0
  84. package/dist/external-sync/conflict-resolver.d.ts +170 -0
  85. package/dist/external-sync/conflict-resolver.d.ts.map +1 -0
  86. package/dist/external-sync/conflict-resolver.js +580 -0
  87. package/dist/external-sync/conflict-resolver.js.map +1 -0
  88. package/dist/external-sync/index.d.ts +23 -0
  89. package/dist/external-sync/index.d.ts.map +1 -0
  90. package/dist/external-sync/index.js +24 -0
  91. package/dist/external-sync/index.js.map +1 -0
  92. package/dist/external-sync/provider-registry.d.ts +113 -0
  93. package/dist/external-sync/provider-registry.d.ts.map +1 -0
  94. package/dist/external-sync/provider-registry.js +205 -0
  95. package/dist/external-sync/provider-registry.js.map +1 -0
  96. package/dist/external-sync/providers/folder/folder-document-adapter.d.ts +97 -0
  97. package/dist/external-sync/providers/folder/folder-document-adapter.d.ts.map +1 -0
  98. package/dist/external-sync/providers/folder/folder-document-adapter.js +261 -0
  99. package/dist/external-sync/providers/folder/folder-document-adapter.js.map +1 -0
  100. package/dist/external-sync/providers/folder/folder-fs.d.ts +146 -0
  101. package/dist/external-sync/providers/folder/folder-fs.d.ts.map +1 -0
  102. package/dist/external-sync/providers/folder/folder-fs.js +300 -0
  103. package/dist/external-sync/providers/folder/folder-fs.js.map +1 -0
  104. package/dist/external-sync/providers/folder/folder-provider.d.ts +28 -0
  105. package/dist/external-sync/providers/folder/folder-provider.d.ts.map +1 -0
  106. package/dist/external-sync/providers/folder/folder-provider.js +87 -0
  107. package/dist/external-sync/providers/folder/folder-provider.js.map +1 -0
  108. package/dist/external-sync/providers/folder/index.d.ts +11 -0
  109. package/dist/external-sync/providers/folder/index.d.ts.map +1 -0
  110. package/dist/external-sync/providers/folder/index.js +13 -0
  111. package/dist/external-sync/providers/folder/index.js.map +1 -0
  112. package/dist/external-sync/providers/github/github-api.d.ts +271 -0
  113. package/dist/external-sync/providers/github/github-api.d.ts.map +1 -0
  114. package/dist/external-sync/providers/github/github-api.js +366 -0
  115. package/dist/external-sync/providers/github/github-api.js.map +1 -0
  116. package/dist/external-sync/providers/github/github-field-map.d.ts +76 -0
  117. package/dist/external-sync/providers/github/github-field-map.d.ts.map +1 -0
  118. package/dist/external-sync/providers/github/github-field-map.js +157 -0
  119. package/dist/external-sync/providers/github/github-field-map.js.map +1 -0
  120. package/dist/external-sync/providers/github/github-provider.d.ts +36 -0
  121. package/dist/external-sync/providers/github/github-provider.d.ts.map +1 -0
  122. package/dist/external-sync/providers/github/github-provider.js +212 -0
  123. package/dist/external-sync/providers/github/github-provider.js.map +1 -0
  124. package/dist/external-sync/providers/github/github-task-adapter.d.ts +135 -0
  125. package/dist/external-sync/providers/github/github-task-adapter.d.ts.map +1 -0
  126. package/dist/external-sync/providers/github/github-task-adapter.js +374 -0
  127. package/dist/external-sync/providers/github/github-task-adapter.js.map +1 -0
  128. package/dist/external-sync/providers/github/index.d.ts +12 -0
  129. package/dist/external-sync/providers/github/index.d.ts.map +1 -0
  130. package/dist/external-sync/providers/github/index.js +15 -0
  131. package/dist/external-sync/providers/github/index.js.map +1 -0
  132. package/dist/external-sync/providers/index.d.ts +13 -0
  133. package/dist/external-sync/providers/index.d.ts.map +1 -0
  134. package/dist/external-sync/providers/index.js +15 -0
  135. package/dist/external-sync/providers/index.js.map +1 -0
  136. package/dist/external-sync/providers/linear/index.d.ts +19 -0
  137. package/dist/external-sync/providers/linear/index.d.ts.map +1 -0
  138. package/dist/external-sync/providers/linear/index.js +19 -0
  139. package/dist/external-sync/providers/linear/index.js.map +1 -0
  140. package/dist/external-sync/providers/linear/linear-api.d.ts +252 -0
  141. package/dist/external-sync/providers/linear/linear-api.d.ts.map +1 -0
  142. package/dist/external-sync/providers/linear/linear-api.js +522 -0
  143. package/dist/external-sync/providers/linear/linear-api.js.map +1 -0
  144. package/dist/external-sync/providers/linear/linear-field-map.d.ts +135 -0
  145. package/dist/external-sync/providers/linear/linear-field-map.d.ts.map +1 -0
  146. package/dist/external-sync/providers/linear/linear-field-map.js +338 -0
  147. package/dist/external-sync/providers/linear/linear-field-map.js.map +1 -0
  148. package/dist/external-sync/providers/linear/linear-provider.d.ts +52 -0
  149. package/dist/external-sync/providers/linear/linear-provider.d.ts.map +1 -0
  150. package/dist/external-sync/providers/linear/linear-provider.js +169 -0
  151. package/dist/external-sync/providers/linear/linear-provider.js.map +1 -0
  152. package/dist/external-sync/providers/linear/linear-task-adapter.d.ts +190 -0
  153. package/dist/external-sync/providers/linear/linear-task-adapter.d.ts.map +1 -0
  154. package/dist/external-sync/providers/linear/linear-task-adapter.js +521 -0
  155. package/dist/external-sync/providers/linear/linear-task-adapter.js.map +1 -0
  156. package/dist/external-sync/providers/linear/linear-types.d.ts +114 -0
  157. package/dist/external-sync/providers/linear/linear-types.d.ts.map +1 -0
  158. package/dist/external-sync/providers/linear/linear-types.js +10 -0
  159. package/dist/external-sync/providers/linear/linear-types.js.map +1 -0
  160. package/dist/external-sync/providers/notion/index.d.ts +19 -0
  161. package/dist/external-sync/providers/notion/index.d.ts.map +1 -0
  162. package/dist/external-sync/providers/notion/index.js +20 -0
  163. package/dist/external-sync/providers/notion/index.js.map +1 -0
  164. package/dist/external-sync/providers/notion/notion-api.d.ts +253 -0
  165. package/dist/external-sync/providers/notion/notion-api.d.ts.map +1 -0
  166. package/dist/external-sync/providers/notion/notion-api.js +492 -0
  167. package/dist/external-sync/providers/notion/notion-api.js.map +1 -0
  168. package/dist/external-sync/providers/notion/notion-blocks.d.ts +93 -0
  169. package/dist/external-sync/providers/notion/notion-blocks.d.ts.map +1 -0
  170. package/dist/external-sync/providers/notion/notion-blocks.js +773 -0
  171. package/dist/external-sync/providers/notion/notion-blocks.js.map +1 -0
  172. package/dist/external-sync/providers/notion/notion-document-adapter.d.ts +176 -0
  173. package/dist/external-sync/providers/notion/notion-document-adapter.d.ts.map +1 -0
  174. package/dist/external-sync/providers/notion/notion-document-adapter.js +413 -0
  175. package/dist/external-sync/providers/notion/notion-document-adapter.js.map +1 -0
  176. package/dist/external-sync/providers/notion/notion-provider.d.ts +57 -0
  177. package/dist/external-sync/providers/notion/notion-provider.d.ts.map +1 -0
  178. package/dist/external-sync/providers/notion/notion-provider.js +159 -0
  179. package/dist/external-sync/providers/notion/notion-provider.js.map +1 -0
  180. package/dist/external-sync/providers/notion/notion-types.d.ts +388 -0
  181. package/dist/external-sync/providers/notion/notion-types.d.ts.map +1 -0
  182. package/dist/external-sync/providers/notion/notion-types.js +47 -0
  183. package/dist/external-sync/providers/notion/notion-types.js.map +1 -0
  184. package/dist/external-sync/sync-engine.d.ts +364 -0
  185. package/dist/external-sync/sync-engine.d.ts.map +1 -0
  186. package/dist/external-sync/sync-engine.js +1154 -0
  187. package/dist/external-sync/sync-engine.js.map +1 -0
  188. package/dist/index.d.ts +1 -0
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +2 -0
  191. package/dist/index.js.map +1 -1
  192. package/dist/server/index.js +8 -8
  193. package/dist/server/index.js.map +1 -1
  194. package/dist/services/inbox.js +1 -1
  195. package/dist/sync/hash.d.ts +5 -0
  196. package/dist/sync/hash.d.ts.map +1 -1
  197. package/dist/sync/hash.js +21 -2
  198. package/dist/sync/hash.js.map +1 -1
  199. package/package.json +10 -12
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Linear Task Sync Adapter
3
+ *
4
+ * Implements the TaskSyncAdapter interface for Linear issue operations.
5
+ * Maps between Stoneforge ExternalTask/ExternalTaskInput and Linear's
6
+ * GraphQL API using the LinearApiClient.
7
+ *
8
+ * Key design points:
9
+ * - Caches workflow states per team (fetched on first use)
10
+ * - Builds bidirectional lookup maps: stateTypeToStateId and stateIdToType
11
+ * - Refreshes state cache when a stateId lookup fails
12
+ * - Uses native Linear priority (0-4) instead of label-based priority
13
+ * - Maps status via workflow state TYPE, not state name
14
+ */
15
+ import type { Timestamp } from '@stoneforge/core';
16
+ import type { TaskSyncAdapter, ExternalTask, ExternalTaskInput, TaskFieldMapConfig } from '@stoneforge/core';
17
+ import type { LinearApiClient } from './linear-api.js';
18
+ import type { LinearStateType } from './linear-field-map.js';
19
+ /**
20
+ * TaskSyncAdapter implementation for Linear.
21
+ *
22
+ * Provides bidirectional sync between Stoneforge tasks and Linear issues.
23
+ * Uses workflow state caching for efficient status mapping and handles
24
+ * Linear's native priority field directly (no label convention needed).
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const client = new LinearApiClient({ apiKey: 'lin_api_...' });
29
+ * const adapter = new LinearTaskAdapter(client);
30
+ *
31
+ * // Fetch a single issue
32
+ * const issue = await adapter.getIssue('ENG', 'uuid-here');
33
+ *
34
+ * // List recent changes
35
+ * const issues = await adapter.listIssuesSince('ENG', '2024-01-01T00:00:00Z');
36
+ * ```
37
+ */
38
+ export declare class LinearTaskAdapter implements TaskSyncAdapter {
39
+ private readonly api;
40
+ /** Cached workflow states keyed by team ID */
41
+ private stateCacheByTeam;
42
+ /** Cached team lookups keyed by team key (e.g., "ENG") */
43
+ private teamByKey;
44
+ /** Cached label name→ID lookup (workspace-level) */
45
+ private labelsByName;
46
+ /** Whether labels have been fetched from the API */
47
+ private labelsCached;
48
+ constructor(api: LinearApiClient);
49
+ /**
50
+ * Fetch a single Linear issue by external ID (UUID) and convert to ExternalTask.
51
+ *
52
+ * @param project - Team key (e.g., "ENG")
53
+ * @param externalId - Linear issue UUID
54
+ * @returns ExternalTask or null if not found
55
+ */
56
+ getIssue(project: string, externalId: string): Promise<ExternalTask | null>;
57
+ /**
58
+ * List Linear issues updated since a given timestamp.
59
+ *
60
+ * @param project - Team key (e.g., "ENG")
61
+ * @param since - ISO 8601 timestamp
62
+ * @returns Array of ExternalTask
63
+ */
64
+ listIssuesSince(project: string, since: Timestamp): Promise<ExternalTask[]>;
65
+ /**
66
+ * Create a new issue in Linear.
67
+ *
68
+ * Resolves the team key to a team ID, maps ExternalTaskInput fields to
69
+ * Linear mutation input (title, description, priority, stateId), and
70
+ * calls the API to create the issue.
71
+ *
72
+ * @param project - Team key (e.g., "ENG")
73
+ * @param issue - ExternalTaskInput with the fields to set
74
+ * @returns The created ExternalTask
75
+ */
76
+ createIssue(project: string, issue: ExternalTaskInput): Promise<ExternalTask>;
77
+ /**
78
+ * Update an existing issue in Linear.
79
+ *
80
+ * Maps partial ExternalTaskInput to Linear mutation input and calls
81
+ * the API to update the issue.
82
+ *
83
+ * @param project - Team key (e.g., "ENG")
84
+ * @param externalId - Linear issue UUID
85
+ * @param updates - Partial ExternalTaskInput with fields to update
86
+ * @returns The updated ExternalTask
87
+ */
88
+ updateIssue(project: string, externalId: string, updates: Partial<ExternalTaskInput>): Promise<ExternalTask>;
89
+ /**
90
+ * Returns the Linear-specific TaskFieldMapConfig.
91
+ */
92
+ getFieldMapConfig(): TaskFieldMapConfig;
93
+ /**
94
+ * Converts a Linear issue API response to the normalized ExternalTask format.
95
+ *
96
+ * Injects a synthetic sf:status:* label based on the workflow state type.
97
+ * This allows the generic field mapping system (stateToStatus) to extract
98
+ * granular statuses without the sync engine needing Linear-specific logic.
99
+ */
100
+ private linearIssueToExternalTask;
101
+ /**
102
+ * Builds a CreateIssueInput from an ExternalTaskInput.
103
+ */
104
+ private buildCreateInput;
105
+ /**
106
+ * Builds an UpdateIssueInput from a partial ExternalTaskInput.
107
+ */
108
+ private buildUpdateInput;
109
+ /**
110
+ * Resolves a team key (e.g., "ENG") to a LinearTeam object.
111
+ * Caches the team lookup.
112
+ */
113
+ private resolveTeam;
114
+ /**
115
+ * Gets or creates the workflow state cache for a team.
116
+ * Fetches workflow states from the API on first use.
117
+ */
118
+ private getStateCache;
119
+ /**
120
+ * Fetches workflow states from the API and rebuilds the cache.
121
+ */
122
+ private refreshStateCache;
123
+ /**
124
+ * Resolves a Linear workflow state type to a state ID.
125
+ * Uses the cached states, refreshing if the type is not found.
126
+ */
127
+ private resolveStateId;
128
+ /**
129
+ * Resolves a Linear state ID to a workflow state type.
130
+ * Uses the cached states, refreshing if the ID is not found.
131
+ */
132
+ resolveStateType(teamId: string, stateId: string): Promise<LinearStateType | undefined>;
133
+ /**
134
+ * Filters input labels to only those that should be synced as Linear labels.
135
+ *
136
+ * All label types are now synced to Linear for lossless round-tripping:
137
+ * - sf:priority:* labels (synced alongside native priority for round-tripping)
138
+ * - sf:status:* labels (synced alongside native workflow states for round-tripping)
139
+ * - "blocked" label (synced as a Linear label)
140
+ * - sf:type:* labels (task type — Linear has no native type concept)
141
+ * - User tags (non-prefixed labels)
142
+ *
143
+ * This method exists as an extension point for future label filtering needs.
144
+ */
145
+ private filterSyncableLabels;
146
+ /**
147
+ * Resolves a label name to a Linear label ID.
148
+ * Uses the label cache, fetching from the API on first call.
149
+ * Creates the label if it doesn't exist.
150
+ *
151
+ * @param labelName - The label name to resolve
152
+ * @param teamId - Team ID to associate with a newly created label
153
+ * @returns The label ID, or undefined if resolution fails
154
+ */
155
+ private resolveLabelId;
156
+ /**
157
+ * Resolves all syncable labels from an ExternalTaskInput to Linear label IDs.
158
+ * All labels (including sf:priority:* and sf:status:*) are synced to Linear
159
+ * for lossless round-tripping alongside native fields.
160
+ *
161
+ * @param teamId - Team ID for label creation
162
+ * @param labels - Input labels from ExternalTaskInput
163
+ * @returns Array of resolved Linear label IDs
164
+ */
165
+ private resolveInputLabelIds;
166
+ /**
167
+ * Computes the new labelIds for an issue update by comparing the desired
168
+ * labels against the current issue's labels on Linear.
169
+ *
170
+ * Handles all label types:
171
+ * - "blocked" label (added/removed based on blocked status)
172
+ * - sf:type:* labels (task type synced as Linear labels)
173
+ * - sf:priority:* labels (synced alongside native priority for lossless round-tripping)
174
+ * - sf:status:* labels (synced alongside native workflow states for lossless round-tripping)
175
+ * - User tags (synced as Linear labels)
176
+ *
177
+ * Returns undefined if no label change is needed (avoids unnecessary writes).
178
+ *
179
+ * @param teamId - Team ID (for label creation if needed)
180
+ * @param externalId - Issue UUID to fetch current labels from
181
+ * @param desiredLabels - The full set of desired labels from ExternalTaskInput
182
+ * @returns New labelIds array, or undefined if no change needed
183
+ */
184
+ private computeLabelIds;
185
+ /**
186
+ * Fetches all workspace labels and populates the label cache.
187
+ */
188
+ private refreshLabelCache;
189
+ }
190
+ //# sourceMappingURL=linear-task-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-task-adapter.d.ts","sourceRoot":"","sources":["../../../../src/external-sync/providers/linear/linear-task-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAgD7D;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IAEtC,8CAA8C;IAC9C,OAAO,CAAC,gBAAgB,CAAyC;IAEjE,0DAA0D;IAC1D,OAAO,CAAC,SAAS,CAAiC;IAElD,oDAAoD;IACpD,OAAO,CAAC,YAAY,CAA6B;IAEjD,oDAAoD;IACpD,OAAO,CAAC,YAAY,CAAS;gBAEjB,GAAG,EAAE,eAAe;IAQhC;;;;;;OAMG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IASjF;;;;;;OAMG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAKjF;;;;;;;;;;OAUG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBnF;;;;;;;;;;OAUG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAClC,OAAO,CAAC,YAAY,CAAC;IA0BxB;;OAEG;IACH,iBAAiB,IAAI,kBAAkB;IAQvC;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IA2DjC;;OAEG;YACW,gBAAgB;IA4D9B;;OAEG;YACW,gBAAgB;IA0D9B;;;OAGG;YACW,WAAW;IAuBzB;;;OAGG;YACW,aAAa;IAS3B;;OAEG;YACW,iBAAiB;IA2B/B;;;OAGG;YACW,cAAc;IAmB5B;;;OAGG;IACG,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAoBvC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;;;;;;;OAQG;YACW,cAAc;IAmC5B;;;;;;;;OAQG;YACW,oBAAoB;IAwBlC;;;;;;;;;;;;;;;;;OAiBG;YACW,eAAe;IA+B7B;;OAEG;YACW,iBAAiB;CAQhC"}