photon-grid-core 2.0.0 → 2.0.4

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 (175) hide show
  1. package/README.md +3 -3
  2. package/cell-selection/cell-selection-engine.d.ts.map +1 -1
  3. package/cell-selection/cell-selection-engine.js +11 -9
  4. package/cell-selection/cell-selection-engine.js.map +1 -1
  5. package/chart/range-chart-controller.d.ts +10 -0
  6. package/chart/range-chart-controller.d.ts.map +1 -1
  7. package/chart/range-chart-controller.js +22 -2
  8. package/chart/range-chart-controller.js.map +1 -1
  9. package/column-groups/column-group-drag-handler.d.ts.map +1 -1
  10. package/column-groups/column-group-drag-handler.js +64 -25
  11. package/column-groups/column-group-drag-handler.js.map +1 -1
  12. package/column-groups/column-group-header-builder.d.ts.map +1 -1
  13. package/column-groups/column-group-header-builder.js +7 -5
  14. package/column-groups/column-group-header-builder.js.map +1 -1
  15. package/column-groups/display-group-drag-handler.d.ts +7 -3
  16. package/column-groups/display-group-drag-handler.d.ts.map +1 -1
  17. package/column-groups/display-group-drag-handler.js +46 -7
  18. package/column-groups/display-group-drag-handler.js.map +1 -1
  19. package/column-groups/display-group-header-builder.d.ts +1 -1
  20. package/column-groups/display-group-header-builder.d.ts.map +1 -1
  21. package/column-groups/display-group-header-builder.js +9 -7
  22. package/column-groups/display-group-header-builder.js.map +1 -1
  23. package/core/column-model.d.ts +88 -5
  24. package/core/column-model.d.ts.map +1 -1
  25. package/core/column-model.js +215 -3
  26. package/core/column-model.js.map +1 -1
  27. package/core/create-grid.d.ts +54 -0
  28. package/core/create-grid.d.ts.map +1 -0
  29. package/core/create-grid.js +70 -0
  30. package/core/create-grid.js.map +1 -0
  31. package/core/grid-api.d.ts +10 -2
  32. package/core/grid-api.d.ts.map +1 -1
  33. package/core/grid-api.js +10 -0
  34. package/core/grid-api.js.map +1 -1
  35. package/core/grid-core.d.ts +7 -0
  36. package/core/grid-core.d.ts.map +1 -1
  37. package/core/grid-core.js +29 -8
  38. package/core/grid-core.js.map +1 -1
  39. package/core/grid-store.d.ts +5 -5
  40. package/core/grid-store.d.ts.map +1 -1
  41. package/core/pointer-utils.d.ts +59 -0
  42. package/core/pointer-utils.d.ts.map +1 -0
  43. package/core/pointer-utils.js +59 -0
  44. package/core/pointer-utils.js.map +1 -0
  45. package/drag-drop/drag-drop-engine.d.ts.map +1 -1
  46. package/drag-drop/drag-drop-engine.js +8 -8
  47. package/drag-drop/drag-drop-engine.js.map +1 -1
  48. package/engines/editing/cell-editor-engine.js +1 -1
  49. package/engines/editing/cell-editor-engine.js.map +1 -1
  50. package/index.d.ts +8 -3
  51. package/index.d.ts.map +1 -1
  52. package/index.js +4 -1
  53. package/index.js.map +1 -1
  54. package/package.json +1 -1
  55. package/photon-ai/index.d.ts +2 -0
  56. package/photon-ai/index.d.ts.map +1 -1
  57. package/photon-ai/index.js +2 -0
  58. package/photon-ai/index.js.map +1 -1
  59. package/photon-ai/photon-ai-panel.d.ts +40 -0
  60. package/photon-ai/photon-ai-panel.d.ts.map +1 -1
  61. package/photon-ai/photon-ai-panel.js +163 -8
  62. package/photon-ai/photon-ai-panel.js.map +1 -1
  63. package/photon-ai/photon-ai-service.d.ts +38 -1
  64. package/photon-ai/photon-ai-service.d.ts.map +1 -1
  65. package/photon-ai/photon-ai-service.js +72 -1
  66. package/photon-ai/photon-ai-service.js.map +1 -1
  67. package/photon-ai/provider/ai-provider.types.d.ts +174 -0
  68. package/photon-ai/provider/ai-provider.types.d.ts.map +1 -0
  69. package/photon-ai/provider/ai-provider.types.js +42 -0
  70. package/photon-ai/provider/ai-provider.types.js.map +1 -0
  71. package/photon-ai/provider/command-normalizer.d.ts +36 -0
  72. package/photon-ai/provider/command-normalizer.d.ts.map +1 -0
  73. package/photon-ai/provider/command-normalizer.js +120 -0
  74. package/photon-ai/provider/command-normalizer.js.map +1 -0
  75. package/photon-ai/provider/grid-context-builder.d.ts +37 -0
  76. package/photon-ai/provider/grid-context-builder.d.ts.map +1 -0
  77. package/photon-ai/provider/grid-context-builder.js +96 -0
  78. package/photon-ai/provider/grid-context-builder.js.map +1 -0
  79. package/photon-ai/provider/http-ai-provider.d.ts +42 -0
  80. package/photon-ai/provider/http-ai-provider.d.ts.map +1 -0
  81. package/photon-ai/provider/http-ai-provider.js +125 -0
  82. package/photon-ai/provider/http-ai-provider.js.map +1 -0
  83. package/photon-ai/provider/index.d.ts +30 -0
  84. package/photon-ai/provider/index.d.ts.map +1 -0
  85. package/photon-ai/provider/index.js +42 -0
  86. package/photon-ai/provider/index.js.map +1 -0
  87. package/photon-ai/provider/presets.d.ts +29 -0
  88. package/photon-ai/provider/presets.d.ts.map +1 -0
  89. package/photon-ai/provider/presets.js +110 -0
  90. package/photon-ai/provider/presets.js.map +1 -0
  91. package/photon-ai/provider/response-parsing.d.ts +22 -0
  92. package/photon-ai/provider/response-parsing.d.ts.map +1 -0
  93. package/photon-ai/provider/response-parsing.js +79 -0
  94. package/photon-ai/provider/response-parsing.js.map +1 -0
  95. package/photon-ai/provider/system-prompt.d.ts +26 -0
  96. package/photon-ai/provider/system-prompt.d.ts.map +1 -0
  97. package/photon-ai/provider/system-prompt.js +82 -0
  98. package/photon-ai/provider/system-prompt.js.map +1 -0
  99. package/photon-grid.min.js +497 -56
  100. package/renderer/body-renderer.d.ts +23 -0
  101. package/renderer/body-renderer.d.ts.map +1 -1
  102. package/renderer/body-renderer.js +102 -24
  103. package/renderer/body-renderer.js.map +1 -1
  104. package/renderer/column-chooser.d.ts +82 -0
  105. package/renderer/column-chooser.d.ts.map +1 -0
  106. package/renderer/column-chooser.js +335 -0
  107. package/renderer/column-chooser.js.map +1 -0
  108. package/renderer/column-menu.d.ts.map +1 -1
  109. package/renderer/column-menu.js +32 -20
  110. package/renderer/column-menu.js.map +1 -1
  111. package/renderer/column-style-manager.d.ts +27 -0
  112. package/renderer/column-style-manager.d.ts.map +1 -1
  113. package/renderer/column-style-manager.js +47 -0
  114. package/renderer/column-style-manager.js.map +1 -1
  115. package/renderer/detail-row-renderer.d.ts.map +1 -1
  116. package/renderer/detail-row-renderer.js +8 -6
  117. package/renderer/detail-row-renderer.js.map +1 -1
  118. package/renderer/grid-renderer.d.ts +10 -0
  119. package/renderer/grid-renderer.d.ts.map +1 -1
  120. package/renderer/grid-renderer.js +64 -20
  121. package/renderer/grid-renderer.js.map +1 -1
  122. package/renderer/group-drop-zone.js +14 -14
  123. package/renderer/group-drop-zone.js.map +1 -1
  124. package/renderer/header-renderer.d.ts +65 -0
  125. package/renderer/header-renderer.d.ts.map +1 -1
  126. package/renderer/header-renderer.js +347 -44
  127. package/renderer/header-renderer.js.map +1 -1
  128. package/renderer/row-animator.js +3 -3
  129. package/renderer/row-drag-renderer.js +6 -6
  130. package/renderer/row-drag-renderer.js.map +1 -1
  131. package/renderer/scroll-controller.d.ts +40 -0
  132. package/renderer/scroll-controller.d.ts.map +1 -1
  133. package/renderer/scroll-controller.js +184 -0
  134. package/renderer/scroll-controller.js.map +1 -1
  135. package/styles/base/column-chooser.css.d.ts +13 -0
  136. package/styles/base/column-chooser.css.d.ts.map +1 -0
  137. package/styles/base/column-chooser.css.js +241 -0
  138. package/styles/base/column-chooser.css.js.map +1 -0
  139. package/styles/base/column-context-menu.css.d.ts +1 -1
  140. package/styles/base/column-context-menu.css.d.ts.map +1 -1
  141. package/styles/base/column-context-menu.css.js +10 -0
  142. package/styles/base/column-context-menu.css.js.map +1 -1
  143. package/styles/base/filter.css.d.ts +1 -1
  144. package/styles/base/filter.css.js +1 -1
  145. package/styles/base/header.css.d.ts +1 -1
  146. package/styles/base/header.css.d.ts.map +1 -1
  147. package/styles/base/header.css.js +19 -0
  148. package/styles/base/header.css.js.map +1 -1
  149. package/styles/base/photon-ai.css.d.ts +1 -1
  150. package/styles/base/photon-ai.css.d.ts.map +1 -1
  151. package/styles/base/photon-ai.css.js +65 -0
  152. package/styles/base/photon-ai.css.js.map +1 -1
  153. package/styles/base/scrollbars.css.d.ts +1 -1
  154. package/styles/base/scrollbars.css.d.ts.map +1 -1
  155. package/styles/base/scrollbars.css.js +50 -4
  156. package/styles/base/scrollbars.css.js.map +1 -1
  157. package/styles/base/touch.css.d.ts +23 -0
  158. package/styles/base/touch.css.d.ts.map +1 -0
  159. package/styles/base/touch.css.js +85 -0
  160. package/styles/base/touch.css.js.map +1 -0
  161. package/styles/base-styles.d.ts.map +1 -1
  162. package/styles/base-styles.js +4 -0
  163. package/styles/base-styles.js.map +1 -1
  164. package/styles/themes/theme-dark.d.ts +1 -1
  165. package/styles/themes/theme-dark.d.ts.map +1 -1
  166. package/styles/themes/theme-dark.js +3 -0
  167. package/styles/themes/theme-dark.js.map +1 -1
  168. package/types/column.types.d.ts +36 -0
  169. package/types/column.types.d.ts.map +1 -1
  170. package/types/grid.types.d.ts +3 -2
  171. package/types/grid.types.d.ts.map +1 -1
  172. package/types/photon-ai.types.d.ts +125 -5
  173. package/types/photon-ai.types.d.ts.map +1 -1
  174. package/types/photon-ai.types.js +18 -1
  175. package/types/photon-ai.types.js.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-parsing.js","sourceRoot":"","sources":["../../../src/photon-ai/provider/response-parsing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,GAItB,MAAM,qBAAqB,CAAC;AAE7B;;;;;GAKG;AAEH,kHAAkH;AAClH,MAAM,UAAU,mBAAmB,CAAC,OAAwB;IAC1D,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,sBAAsB,OAAO,CAAC,WAAW,EAAE,CAAC;AACjG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,qBAAqB,CAAC,iBAAiB,CAAC,eAAe,EAAE,uCAAuC,CAAC,CAAC;IAC9G,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,qBAAqB,CAC7B,iBAAiB,CAAC,eAAe,EACjC,6DAA6D,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,mJAAmJ;AACnJ,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,qBAAqB,CAAC,iBAAiB,CAAC,eAAe,EAAE,2CAA2C,CAAC,CAAC;IAClH,CAAC;IAED,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,IAAI,qBAAqB,CAC7B,iBAAiB,CAAC,eAAe,EACjC,6DAA6D,CAC9D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC1D,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,SAAS;QAC9D,MAAM,MAAM,GACV,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;YACzD,CAAC,CAAE,MAAM,CAAC,MAAkC;YAC5C,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kIAAkI;AAClI,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { PhotonGridContext } from './ai-provider.types';
2
+ /**
3
+ * Assembles the system instruction sent to a generative provider. This is the
4
+ * "rules of the game": the assistant's role, the **exact** JSON output
5
+ * contract, and the parameter conventions for turning an intent key into an
6
+ * executable command.
7
+ *
8
+ * It deliberately contains no grid-specific data (columns, live state) — that
9
+ * travels separately as the structured {@link PhotonGridContext} so it can be
10
+ * serialized once and reasoned over as data. Keeping the two apart means the
11
+ * instruction is stable and cache-friendly while the context changes per
12
+ * prompt.
13
+ *
14
+ * The output contract matches {@link import('./ai-provider.types').PhotonAIGeneration}
15
+ * exactly, so a well-formed response drops straight into the existing command
16
+ * pipeline with no bespoke parsing.
17
+ */
18
+ export declare function buildSystemInstruction(extraInstruction?: string): string;
19
+ /**
20
+ * Serializes the structured grid context into the compact, labelled block a
21
+ * provider sends alongside the user's command. Kept out of
22
+ * {@link buildSystemInstruction} so the two can be transmitted as distinct
23
+ * request parts (system rules vs. per-prompt data).
24
+ */
25
+ export declare function serializeGridContext(context: PhotonGridContext): string;
26
+ //# sourceMappingURL=system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../../src/photon-ai/provider/system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAmDxE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAOvE"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Assembles the system instruction sent to a generative provider. This is the
3
+ * "rules of the game": the assistant's role, the **exact** JSON output
4
+ * contract, and the parameter conventions for turning an intent key into an
5
+ * executable command.
6
+ *
7
+ * It deliberately contains no grid-specific data (columns, live state) — that
8
+ * travels separately as the structured {@link PhotonGridContext} so it can be
9
+ * serialized once and reasoned over as data. Keeping the two apart means the
10
+ * instruction is stable and cache-friendly while the context changes per
11
+ * prompt.
12
+ *
13
+ * The output contract matches {@link import('./ai-provider.types').PhotonAIGeneration}
14
+ * exactly, so a well-formed response drops straight into the existing command
15
+ * pipeline with no bespoke parsing.
16
+ */
17
+ export function buildSystemInstruction(extraInstruction) {
18
+ const base = [
19
+ 'You are Photon AI, the built-in assistant for Photon Grid, an enterprise data grid.',
20
+ 'Your job: translate the user\'s natural-language request into concrete grid actions,',
21
+ 'and/or answer questions about the grid using the provided context.',
22
+ '',
23
+ 'You will be given, as JSON:',
24
+ ' • capabilities — the ONLY actions you may emit (each has a "type" key and a description),',
25
+ ' • columns — every column with its colId, header, data type, and flags,',
26
+ ' • state — the grid\'s current sort, filters, grouping, row/selection counts.',
27
+ '',
28
+ 'RESPOND WITH A SINGLE JSON OBJECT, and nothing else, matching this shape:',
29
+ '{',
30
+ ' "actions": [ { "type": <capability type>, "params": { ... } } ],',
31
+ ' "reply": <short, friendly, first-person sentence describing what you did or answering the question>',
32
+ '}',
33
+ '',
34
+ 'RULES:',
35
+ ' 1. "type" MUST be one of the capability "type" values verbatim. Never invent an action.',
36
+ ' 2. Reference columns ONLY by their exact "colId" from the columns list (not the header text).',
37
+ ' 3. A request may map to MULTIPLE actions (e.g. "hide id and sort by price desc") — list them in order.',
38
+ ' 4. If the request is a question about the grid (counts, current sort/filter, etc.), answer it in',
39
+ ' "reply" using the state/columns context and return "actions": []. Prefer the matching info',
40
+ ' capability (e.g. rowCount, sortInfo) when one exists.',
41
+ ' 5. If you cannot map the request to any capability, return "actions": [] and explain briefly in "reply".',
42
+ ' 6. Never include markdown, code fences, comments, or trailing text outside the JSON object.',
43
+ ' 7. Keep "reply" concise (one or two sentences) and never expose colIds or internal jargon to the user.',
44
+ '',
45
+ 'PARAMETER CONVENTIONS (params object per action type):',
46
+ ' • Single-column actions — sortAscending, sortDescending, hideColumn, showColumn, selectColumn,',
47
+ ' moveColumnToStart, moveColumnToEnd: { "colId": "<colId>" }',
48
+ ' • Multi-column actions — pinLeft, pinRight, unpin, groupBy: { "colIds": ["<colId>", ...] }',
49
+ ' • applyFilter: { "colId": "<colId>", "operator": <operator>, "value": <typed value>, "valueTo": <typed value, only for inRange> }',
50
+ ' • pinHalf: { "sides": ["left"] | ["right"] | ["left", "right"] }',
51
+ ' • Row-index actions — selectRow, expandRow, collapseRow: { "index": <1-based row number> }',
52
+ ' • Every other action (clearSort, clearFilters, unpinAll, hideAllColumns, showAllColumns, ungroup,',
53
+ ' expandAllGroups, collapseAllGroups, clearSelection, selectAllCells, copyAllCells, and all info',
54
+ ' actions): {}',
55
+ '',
56
+ 'FILTER OPERATORS by column type:',
57
+ ' • string: contains, notContains, equals, notEquals, startsWith, endsWith, blank, notBlank',
58
+ ' • number/currency/percentage: equals, notEquals, greaterThan, greaterThanOrEqual, lessThan,',
59
+ ' lessThanOrEqual, inRange (needs value + valueTo)',
60
+ ' • date/time: equals, before, after, inRange (needs value + valueTo). Dates as ISO strings "YYYY-MM-DD".',
61
+ ' • boolean: equals with value true/false',
62
+ ' • dropdown: equals with value taken from that column\'s "options" list',
63
+ ' Emit numbers as JSON numbers, booleans as JSON booleans, dates as ISO strings — never quote a number.',
64
+ ].join('\n');
65
+ const extra = extraInstruction?.trim();
66
+ return extra ? `${base}\n\nADDITIONAL INSTRUCTIONS:\n${extra}` : base;
67
+ }
68
+ /**
69
+ * Serializes the structured grid context into the compact, labelled block a
70
+ * provider sends alongside the user's command. Kept out of
71
+ * {@link buildSystemInstruction} so the two can be transmitted as distinct
72
+ * request parts (system rules vs. per-prompt data).
73
+ */
74
+ export function serializeGridContext(context) {
75
+ return [
76
+ 'GRID CONTEXT:',
77
+ `capabilities: ${JSON.stringify(context.capabilities)}`,
78
+ `columns: ${JSON.stringify(context.columns)}`,
79
+ `state: ${JSON.stringify(context.state)}`,
80
+ ].join('\n');
81
+ }
82
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../../src/photon-ai/provider/system-prompt.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,sBAAsB,CAAC,gBAAyB;IAC9D,MAAM,IAAI,GAAG;QACX,qFAAqF;QACrF,sFAAsF;QACtF,oEAAoE;QACpE,EAAE;QACF,6BAA6B;QAC7B,6FAA6F;QAC7F,0EAA0E;QAC1E,gFAAgF;QAChF,EAAE;QACF,2EAA2E;QAC3E,GAAG;QACH,oEAAoE;QACpE,uGAAuG;QACvG,GAAG;QACH,EAAE;QACF,QAAQ;QACR,2FAA2F;QAC3F,iGAAiG;QACjG,0GAA0G;QAC1G,oGAAoG;QACpG,iGAAiG;QACjG,4DAA4D;QAC5D,4GAA4G;QAC5G,+FAA+F;QAC/F,0GAA0G;QAC1G,EAAE;QACF,wDAAwD;QACxD,kGAAkG;QAClG,gEAAgE;QAChE,8FAA8F;QAC9F,qIAAqI;QACrI,oEAAoE;QACpE,8FAA8F;QAC9F,qGAAqG;QACrG,oGAAoG;QACpG,kBAAkB;QAClB,EAAE;QACF,kCAAkC;QAClC,6FAA6F;QAC7F,+FAA+F;QAC/F,sDAAsD;QACtD,2GAA2G;QAC3G,2CAA2C;QAC3C,0EAA0E;QAC1E,yGAAyG;KAC1G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,KAAK,GAAG,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACvC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,iCAAiC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA0B;IAC7D,OAAO;QACL,eAAe;QACf,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QACvD,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC7C,UAAU,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;KAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}