@issuegraph/editor 0.10.0 → 0.23.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 (113) hide show
  1. package/README.md +38 -7
  2. package/dist/a11y/baseline.d.ts.map +1 -1
  3. package/dist/a11y/baseline.js +4 -0
  4. package/dist/a11y/baseline.js.map +1 -1
  5. package/dist/audit/findings.d.ts +107 -1
  6. package/dist/audit/findings.d.ts.map +1 -1
  7. package/dist/audit/findings.js +114 -7
  8. package/dist/audit/findings.js.map +1 -1
  9. package/dist/audit/panel.d.ts +277 -0
  10. package/dist/audit/panel.d.ts.map +1 -0
  11. package/dist/audit/panel.js +462 -0
  12. package/dist/audit/panel.js.map +1 -0
  13. package/dist/audit/refused.d.ts +99 -0
  14. package/dist/audit/refused.d.ts.map +1 -0
  15. package/dist/audit/refused.js +276 -0
  16. package/dist/audit/refused.js.map +1 -0
  17. package/dist/audit/styles.d.ts +1 -1
  18. package/dist/audit/styles.d.ts.map +1 -1
  19. package/dist/audit/styles.js +428 -0
  20. package/dist/audit/styles.js.map +1 -1
  21. package/dist/audit/surface.d.ts +54 -12
  22. package/dist/audit/surface.d.ts.map +1 -1
  23. package/dist/audit/surface.js +54 -14
  24. package/dist/audit/surface.js.map +1 -1
  25. package/dist/create/draft.d.ts +19 -0
  26. package/dist/create/draft.d.ts.map +1 -1
  27. package/dist/create/draft.js +21 -0
  28. package/dist/create/draft.js.map +1 -1
  29. package/dist/create/keys.d.ts +68 -8
  30. package/dist/create/keys.d.ts.map +1 -1
  31. package/dist/create/keys.js +43 -5
  32. package/dist/create/keys.js.map +1 -1
  33. package/dist/firstpass/render.d.ts.map +1 -1
  34. package/dist/firstpass/render.js +10 -9
  35. package/dist/firstpass/render.js.map +1 -1
  36. package/dist/index.d.ts +40 -15
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +35 -13
  39. package/dist/index.js.map +1 -1
  40. package/dist/overlay/render.d.ts +11 -3
  41. package/dist/overlay/render.d.ts.map +1 -1
  42. package/dist/overlay/render.js +24 -7
  43. package/dist/overlay/render.js.map +1 -1
  44. package/dist/overlay/request.d.ts +71 -0
  45. package/dist/overlay/request.d.ts.map +1 -0
  46. package/dist/overlay/request.js +129 -0
  47. package/dist/overlay/request.js.map +1 -0
  48. package/dist/overlay/styles.d.ts +1 -1
  49. package/dist/overlay/styles.d.ts.map +1 -1
  50. package/dist/overlay/styles.js +38 -7
  51. package/dist/overlay/styles.js.map +1 -1
  52. package/dist/reevaluate/parts.d.ts +130 -0
  53. package/dist/reevaluate/parts.d.ts.map +1 -0
  54. package/dist/reevaluate/parts.js +260 -0
  55. package/dist/reevaluate/parts.js.map +1 -0
  56. package/dist/reevaluate/render.d.ts +18 -11
  57. package/dist/reevaluate/render.d.ts.map +1 -1
  58. package/dist/reevaluate/render.js +21 -135
  59. package/dist/reevaluate/render.js.map +1 -1
  60. package/dist/reevaluate/styles.d.ts +1 -1
  61. package/dist/reevaluate/styles.d.ts.map +1 -1
  62. package/dist/reevaluate/styles.js +26 -0
  63. package/dist/reevaluate/styles.js.map +1 -1
  64. package/dist/reevaluate/view.d.ts +16 -1
  65. package/dist/reevaluate/view.d.ts.map +1 -1
  66. package/dist/reevaluate/view.js +21 -1
  67. package/dist/reevaluate/view.js.map +1 -1
  68. package/dist/reevaluate/words.d.ts +7 -0
  69. package/dist/reevaluate/words.d.ts.map +1 -1
  70. package/dist/scale/ladder.d.ts +62 -6
  71. package/dist/scale/ladder.d.ts.map +1 -1
  72. package/dist/scale/ladder.js +127 -16
  73. package/dist/scale/ladder.js.map +1 -1
  74. package/dist/scale/render.d.ts +44 -0
  75. package/dist/scale/render.d.ts.map +1 -1
  76. package/dist/scale/render.js +223 -30
  77. package/dist/scale/render.js.map +1 -1
  78. package/dist/scale/styles.d.ts +11 -5
  79. package/dist/scale/styles.d.ts.map +1 -1
  80. package/dist/scale/styles.js +185 -4
  81. package/dist/scale/styles.js.map +1 -1
  82. package/dist/workspace/host.d.ts +83 -1
  83. package/dist/workspace/host.d.ts.map +1 -1
  84. package/dist/workspace/host.js +197 -4
  85. package/dist/workspace/host.js.map +1 -1
  86. package/dist/workspace/inspector.d.ts +33 -7
  87. package/dist/workspace/inspector.d.ts.map +1 -1
  88. package/dist/workspace/inspector.js +15 -0
  89. package/dist/workspace/inspector.js.map +1 -1
  90. package/dist/workspace/mount.d.ts +23 -1
  91. package/dist/workspace/mount.d.ts.map +1 -1
  92. package/dist/workspace/mount.js +605 -20
  93. package/dist/workspace/mount.js.map +1 -1
  94. package/dist/workspace/rail.d.ts +5 -2
  95. package/dist/workspace/rail.d.ts.map +1 -1
  96. package/dist/workspace/rail.js.map +1 -1
  97. package/dist/workspace/render.d.ts +390 -3
  98. package/dist/workspace/render.d.ts.map +1 -1
  99. package/dist/workspace/render.js +924 -133
  100. package/dist/workspace/render.js.map +1 -1
  101. package/dist/workspace/selection.d.ts +11 -0
  102. package/dist/workspace/selection.d.ts.map +1 -1
  103. package/dist/workspace/selection.js +10 -0
  104. package/dist/workspace/selection.js.map +1 -1
  105. package/dist/workspace/skeleton.d.ts +33 -0
  106. package/dist/workspace/skeleton.d.ts.map +1 -0
  107. package/dist/workspace/skeleton.js +56 -0
  108. package/dist/workspace/skeleton.js.map +1 -0
  109. package/dist/workspace/styles.d.ts +1 -1
  110. package/dist/workspace/styles.d.ts.map +1 -1
  111. package/dist/workspace/styles.js +931 -19
  112. package/dist/workspace/styles.js.map +1 -1
  113. package/package.json +4 -4
@@ -0,0 +1,277 @@
1
+ /**
2
+ * §17d's findings panel: the three RELATIONSHIP findings, as a list.
3
+ *
4
+ * `./surface.ts` draws the ambient half — the persistent header count and the
5
+ * left-bar on an affected rail row. Neither says what was found. This module
6
+ * draws the list, so a reader who sees a count has somewhere to read it.
7
+ *
8
+ * ## Three classes, not four — the fourth is `./refused.ts`'
9
+ *
10
+ * `encoding-refused` is drawn OUTSIDE this panel, and SPEC is why: a refusal is
11
+ * *"surfaced on the issue itself, because until it parses the issue has no
12
+ * edges at all and would otherwise look simply unencoded"*. The other three
13
+ * say something about a relationship that exists; that one says the
14
+ * relationships cannot be read.
15
+ *
16
+ * SO THERE ARE TWO COUNTS NOW, AND THEY ARE DIFFERENT NUMBERS ON PURPOSE.
17
+ * `./surface.ts`'s ambient count stays every finding — it is the persistent
18
+ * control, it sits in the workspace chrome beside both surfaces, and a reader
19
+ * works through all four classes. The count in THIS panel's head is this
20
+ * panel's own cards, because it is enclosed by the list it counts. See
21
+ * {@link renderAuditPanel}.
22
+ *
23
+ * ## It is the module `./surface.ts` predicted
24
+ *
25
+ * That file's rule is *"findings travel as data; whatever lists them owns their
26
+ * escaping"*, and it is still true of it: `renderAuditHeader` concatenates by
27
+ * hand and is safe because the only value reaching it is a COUNT. A `detail` is
28
+ * not a number — it is prose about issues a host supplied — so this module is
29
+ * the lister that owns the escaping, and it owns it the way every other leaf in
30
+ * this package does: it builds an {@link ElementSpec} tree and the caller renders
31
+ * it through the viewer's `renderMarkup`. Nothing here writes a tag.
32
+ *
33
+ * ## The card is THREE lines, or FOUR when the finding carries a walk
34
+ *
35
+ * The frame draws a chip, a title, a mono line of the refs, and a prose
36
+ * paragraph. This module long drew three, on this argument: `AuditFinding.detail`
37
+ * ALREADY OPENS WITH THE MEMBERS — `${members.join(' · ')} form a blocked-by
38
+ * cycle; …` — so *"drawing a members line beside it prints every reference
39
+ * twice"*.
40
+ *
41
+ * THAT ARGUMENT WAS RIGHT ABOUT A LINE THE FRAME DOES NOT DRAW. The frame's
42
+ * third line is `#544 → #551 → #560 → #544` — a WALK, not the `·`-joined set
43
+ * the sentence opens with. Calling it "a mono line of the refs" was the slip:
44
+ * the line that was declined and the line drawn below are not the same line, and
45
+ * the refs are the only thing they have in common.
46
+ *
47
+ * SO THE COST IS CONCEDED RATHER THAN ARGUED AWAY. On a card that carries a
48
+ * walk the refs really do appear twice, and the head three times. What buys it
49
+ * is the one thing the sentence cannot say: `#544 · #551 · #560` does not say
50
+ * who waits on whom, and a stuck group's ordering is the first thing a groomer
51
+ * needs in order to pick an edge to cut. Direction appears nowhere else on the
52
+ * card.
53
+ *
54
+ * `detail` IS LEFT BYTE-IDENTICAL, and composing the walk INTO it was the
55
+ * alternative. It is rejected on §17d rather than on the accessible name — a
56
+ * walk-composed sentence would be collision-free by the same construction the
57
+ * current one is, so that cost is not real. The reason is that the frame draws a
58
+ * SEPARATE line and this section is delivered as a frame/implementation pair, so
59
+ * folding it into the sentence deviates from the artifact the work is measured
60
+ * against; and it would give `detail` two shapes, since a component §6.6
61
+ * declines to order has no walk to compose.
62
+ *
63
+ * THE ARROW GLYPH IS `aria-hidden`, AND THAT IS A GAP RATHER THAN A WIN. The
64
+ * only thing the line adds is direction, and the glyph does not carry it: `→`
65
+ * announces as "right arrow", not "waits on". Announcing the line anyway would
66
+ * repeat three refs `detail` has just named, in a form that has lost the reason
67
+ * it was drawn — the same trade `renderAuditPanel`'s `◆` makes below. The
68
+ * remaining options were a visually-hidden utility this package does not have,
69
+ * or an `aria-label` on a `p` with no role, which is not reliably announced. So
70
+ * a screen reader hears exactly what it heard before this line existed, and the
71
+ * ordering is genuinely lost to it. Filed, not resolved here.
72
+ *
73
+ * THE TITLE IS PER CLASS, AND THE FRAME'S ARE PER FINDING. `AuditFinding` has no
74
+ * title field, and this package appends numbers rather than interpolating them
75
+ * (`WorkspaceWords.whyRank` records why), so a per-finding title would need a
76
+ * template language this package has twice refused to ship. Four fixed titles
77
+ * keep the frame's type hierarchy at no cost to the data model; the difference
78
+ * is a stated deviation rather than a silent one.
79
+ *
80
+ * ## The chip carries `data-ig-audit-kind`, NEVER `data-ig-audit`
81
+ *
82
+ * `./styles.ts` ends with an UNQUALIFIED `[data-ig-audit]` rule — deliberately,
83
+ * because it lands on a row the viewer rendered and this layer may not rewrite
84
+ * that row's `class`. So an element out here carrying the same attribute picks
85
+ * up the rail's 2px gold left-bar whatever hue it was given, and the four-hue
86
+ * chip mapping would draw one gold bar on all four. The severity attribute stays
87
+ * reserved for the rail rows it was scoped for.
88
+ *
89
+ * ## There is no filter control here, and that is SPEC's call rather than a cut
90
+ *
91
+ * The frame's panel header carries `filter the rail to these`. SPEC §17a gives
92
+ * the workspace *"an audit **filter** … for focus; an audit **mode** does not"*,
93
+ * and §17d gives the header count one job — *"always the same click"*. That is
94
+ * one control, which `./surface.ts` already draws and which is on screen beside
95
+ * this panel. A second element on `data-ig-audit-filter` would be a second
96
+ * TOGGLE for one boolean (`workspace/host.ts` flips rather than sets), one
97
+ * announcing `aria-pressed` and one not.
98
+ *
99
+ * The frame needs its own because it draws the panel STANDALONE, with no
100
+ * workspace header in the artboard. Composed, it has one.
101
+ *
102
+ * ## `Show the loop` is in, because §17d's rule is navigation
103
+ *
104
+ * `./surface.ts` states the section's own doctrine: *"every finding is a
105
+ * judgment call, so the surface offers navigation and never a remedy."* The
106
+ * frame's other three buttons are remedies and are deferred. Without this one
107
+ * the panel is a paragraph you cannot act on or navigate from, sitting at the
108
+ * top of a column whose whole job is the selection.
109
+ *
110
+ * IT PUBLISHES `reveal-issue`, NOT the `select-issue` the inspector's hold rows
111
+ * use, and the difference is the whole of the control's safety. `select-issue`
112
+ * is a POINTER: with a relationship draft awaiting its target, `workspace/host
113
+ * .ts` reads a pointer as CHOOSING that target and emits the create proposal.
114
+ * So "go and look" would have declared a relationship — a write, from the one
115
+ * surface whose stated rule is that it never offers one. `reveal-issue` moves
116
+ * the selection and abandons the draft, and can produce no edit at all.
117
+ *
118
+ * AND IT IS DRAWN ONLY FOR A LOADED MEMBER — see {@link navigableMember}.
119
+ *
120
+ * @see https://github.com/autnmy/issuegraph/blob/main/SPEC.md
121
+ */
122
+ import { type ElementSpec } from '@issuegraph/viewer';
123
+ import type { AuditClass } from './findings.ts';
124
+ import type { AuditOverlay } from './surface.ts';
125
+ /**
126
+ * The attribute a severity chip carries.
127
+ *
128
+ * ITS OWN NAME RATHER THAN `AUDIT_SEVERITY_ATTRIBUTE`, for the reason in this
129
+ * module's header: that one is matched by an unqualified rule meant for rail
130
+ * rows, and a chip wearing it would draw the ambient bar.
131
+ */
132
+ export declare const AUDIT_KIND_ATTRIBUTE = "data-ig-audit-kind";
133
+ /**
134
+ * The words this package will not invent.
135
+ *
136
+ * TOTAL RECORDS OVER {@link AuditClass}, the shape `AUDIT_CLASS_SPECS` already
137
+ * uses, so adding a fifth class is a type error here rather than a chip that
138
+ * silently draws its own key.
139
+ */
140
+ export interface AuditWords {
141
+ /** Reads the panel's header after the count — the frame's `encoding problems`. */
142
+ readonly heading: string;
143
+ /** The chip on each card. The frame's `cycle`, `stale`, `dead ref`, `refused`. */
144
+ readonly classes: Readonly<Record<AuditClass, string>>;
145
+ /**
146
+ * The card's title line.
147
+ *
148
+ * ONE PER CLASS. See this module's header for why the frame's per-finding
149
+ * titles are not reconstructible.
150
+ */
151
+ readonly titles: Readonly<Record<AuditClass, string>>;
152
+ /** The navigation control on each card — the frame's `Show the loop`. */
153
+ readonly show: string;
154
+ /**
155
+ * The panel head's filter control — the frame's `filter the rail to these`.
156
+ *
157
+ * IT LIVES HERE NOW RATHER THAN IN THE HEADER. §17d draws it in the panel
158
+ * head, and `RULINGS.md` §3 gives the header count one job instead: anchoring
159
+ * this overlay. One control, one meaning, each.
160
+ */
161
+ readonly filter: string;
162
+ /**
163
+ * §17d's REMEDIES, one label per control the frame draws.
164
+ *
165
+ * `RULINGS.md` §3 makes these required and forbids auto-fix in the same
166
+ * breath: *"Every button it draws costs one deliberate human keystroke."*
167
+ * None of them writes. Each selects the finding's subject and hands the work
168
+ * to the inspector, which already owns every edit affordance — so the label
169
+ * names the reader's INTENT and the inspector performs it.
170
+ *
171
+ * ONE RECORD, NOT ONE PER CLASS, because the frame gives each class its own
172
+ * wording rather than a shared verb: a `blocked-by` is removed, a
173
+ * `duplicate-of` is repointed, and a cycle is neither.
174
+ */
175
+ readonly remedies: AuditRemedyWords;
176
+ /**
177
+ * The refused block's own heading — the frame's `Encoding refused`.
178
+ *
179
+ * THE LAST THREE BELONG TO `./refused.ts`, AND THEY LIVE HERE ANYWAY. §17d is
180
+ * one section and its words are one record: a host wiring the audit supplies
181
+ * `AuditWords` once, and splitting a second record off for the fourth class
182
+ * would let a host supply half a section. `classes` and `titles` are already
183
+ * total over `AuditClass`, which includes `encoding-refused` — so the words
184
+ * for that class were never going to sit anywhere else.
185
+ */
186
+ readonly refusedHeading: string;
187
+ /** The outward link's label. The package draws the `↗`. */
188
+ readonly refusedOpen: string;
189
+ /** The reveal control's label — the frame's `Rewrite from editor`. */
190
+ readonly refusedRewrite: string;
191
+ }
192
+ /**
193
+ * The four remedy labels §17d draws, and no others.
194
+ *
195
+ * NOT TOTAL OVER `AuditClass`, unlike `classes` and `titles`. The frame gives
196
+ * `cycle` one remedy, `stale-blocker` two, `dead-duplicate-ref` one and
197
+ * `encoding-refused` none — the refusal's own controls are `refusedOpen` and
198
+ * `refusedRewrite`, which already exist. A record keyed by class would make a
199
+ * host supply a label for a button nothing draws.
200
+ */
201
+ export interface AuditRemedyWords {
202
+ /** The frame's `pick one edge to drop`, on a cycle. */
203
+ readonly pickEdge: string;
204
+ /** The frame's `Remove the edge`, on a stale blocker. */
205
+ readonly removeEdge: string;
206
+ /**
207
+ * The frame's `Keep as history`, on a stale blocker and nowhere else.
208
+ *
209
+ * Drawn from {@link AuditFinding.keepAsHistory}, which the class table
210
+ * already sets — `true` for `stale-blocker` alone. The field predates this
211
+ * control and was waiting for it.
212
+ */
213
+ readonly keepAsHistory: string;
214
+ /** The frame's `Repoint or clear`, on a dead duplicate ref. */
215
+ readonly repoint: string;
216
+ }
217
+ export interface AuditPanelOptions {
218
+ readonly words: AuditWords;
219
+ /**
220
+ * The edge ids the drawn surface actually holds.
221
+ *
222
+ * THE SAME ARGUMENT `known` MAKES ONE FIELD UP, and it needs its own field
223
+ * for the reason a review round proved: the endpoints do not answer it. Two
224
+ * issues can both be on the drawn page while the edge between them is NOT —
225
+ * `mount.ts` deliberately preserves such omissions — and a remedy gated on
226
+ * the ends alone then publishes `select-edge` for an edge the host cannot
227
+ * resolve, leaving the reader with a button that clears their selection and
228
+ * opens an inspector with no subject.
229
+ *
230
+ * That was the first fix's mistake: "both ends drawn" is a PROXY for "the
231
+ * edge is drawn", and this is the thing itself.
232
+ */
233
+ readonly edges: ReadonlySet<string>;
234
+ /**
235
+ * Whether the rail is currently narrowed to these findings.
236
+ *
237
+ * The panel DRAWS the state and never holds it: §2's ruling makes the filter
238
+ * a thing the reader can see is on and clear in one click, and the host owns
239
+ * which rows the rail is showing.
240
+ */
241
+ readonly filtered?: boolean | undefined;
242
+ /**
243
+ * The keys the surface being drawn actually carries, so navigation can only
244
+ * name somewhere the reader can arrive.
245
+ *
246
+ * REQUIRED, AND IT IS THE CALLER'S ANSWER RATHER THAN ONE DERIVED HERE. The
247
+ * audit reads a document that is not always the document on screen: a host
248
+ * audits the whole repository it holds and renders a page of it — the demo's
249
+ * own projection audits `held` while drawing `landed`, which can be empty —
250
+ * so a ref present in `AuditInput.document` may still have no row to reach.
251
+ * The overlay cannot see that difference, and neither can this module.
252
+ *
253
+ * THE SAME SET AND THE SAME RULE `holdRow` ALREADY USES. A hold's subject
254
+ * control is withheld for "a subject the inspector could not resolve", which
255
+ * is this question asked one panel over; `renderWorkspace` computes the set
256
+ * once, off the NORMALIZED document it draws, and hands it to both.
257
+ */
258
+ readonly known: ReadonlySet<string>;
259
+ }
260
+ /**
261
+ * The panel, or `null` when there is nothing to list.
262
+ *
263
+ * `null` RATHER THAN AN EMPTY PANEL, and it is not the same decision as the
264
+ * header count's. The count is drawn at zero on purpose — `./surface.ts`:
265
+ * *"a control that appears when there is bad news is a control the eye has to
266
+ * re-find"* — because it IS the control. A list of nothing is not a control; it
267
+ * is a heading over an empty region in a column whose space belongs to the
268
+ * selection. So the ambient half stays put at zero and the list goes away.
269
+ *
270
+ * IT IS THE LISTED FINDINGS THAT DECIDE, NOT `overlay.findings`. A document
271
+ * whose only findings are encoding refusals has a non-zero count, a bar on
272
+ * every affected row, and NOTHING for this panel to list — so it draws the
273
+ * refused block and no panel at all. Testing the overlay instead would have
274
+ * drawn a panel whose head said `2` above an empty list.
275
+ */
276
+ export declare function renderAuditPanel(overlay: AuditOverlay, options: AuditPanelOptions): ElementSpec | null;
277
+ //# sourceMappingURL=panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/audit/panel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwHG;AAGH,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,oBAAoB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,eAAe,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC;;;;;;;;;OASG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,2DAA2D;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AAuQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CAgGpB"}