@plenustech/design-system 0.2.3 → 0.2.5

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 (233) hide show
  1. package/README.md +8 -0
  2. package/dist/components/actions/ButtonTile/ButtonTile.module.css.cjs +1 -1
  3. package/dist/components/actions/ButtonTile/ButtonTile.module.css.js +10 -10
  4. package/dist/components/actions/Toolbar/Toolbar.cjs +1 -1
  5. package/dist/components/actions/Toolbar/Toolbar.cjs.map +1 -1
  6. package/dist/components/actions/Toolbar/Toolbar.js +64 -53
  7. package/dist/components/actions/Toolbar/Toolbar.js.map +1 -1
  8. package/dist/components/charts/ChartGauge/ChartGauge.cjs +2 -0
  9. package/dist/components/charts/ChartGauge/ChartGauge.cjs.map +1 -0
  10. package/dist/components/charts/ChartGauge/ChartGauge.js +307 -0
  11. package/dist/components/charts/ChartGauge/ChartGauge.js.map +1 -0
  12. package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs +2 -0
  13. package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs.map +1 -0
  14. package/dist/components/charts/ChartGauge/ChartGauge.module.css.js +76 -0
  15. package/dist/components/charts/ChartGauge/ChartGauge.module.css.js.map +1 -0
  16. package/dist/components/charts/ChartGauge/gaugeLayout.cjs +2 -0
  17. package/dist/components/charts/ChartGauge/gaugeLayout.cjs.map +1 -0
  18. package/dist/components/charts/ChartGauge/gaugeLayout.js +107 -0
  19. package/dist/components/charts/ChartGauge/gaugeLayout.js.map +1 -0
  20. package/dist/components/charts/ChartGauge/gaugeReading.cjs +2 -0
  21. package/dist/components/charts/ChartGauge/gaugeReading.cjs.map +1 -0
  22. package/dist/components/charts/ChartGauge/gaugeReading.js +112 -0
  23. package/dist/components/charts/ChartGauge/gaugeReading.js.map +1 -0
  24. package/dist/components/charts/ChartGauge/gaugeScale.cjs +2 -0
  25. package/dist/components/charts/ChartGauge/gaugeScale.cjs.map +1 -0
  26. package/dist/components/charts/ChartGauge/gaugeScale.js +57 -0
  27. package/dist/components/charts/ChartGauge/gaugeScale.js.map +1 -0
  28. package/dist/components/charts/ChartMap/ChartMap.cjs +2 -0
  29. package/dist/components/charts/ChartMap/ChartMap.cjs.map +1 -0
  30. package/dist/components/charts/ChartMap/ChartMap.js +523 -0
  31. package/dist/components/charts/ChartMap/ChartMap.js.map +1 -0
  32. package/dist/components/charts/ChartMap/ChartMap.module.css.cjs +2 -0
  33. package/dist/components/charts/ChartMap/ChartMap.module.css.cjs.map +1 -0
  34. package/dist/components/charts/ChartMap/ChartMap.module.css.js +124 -0
  35. package/dist/components/charts/ChartMap/ChartMap.module.css.js.map +1 -0
  36. package/dist/components/charts/ChartMap/ChartMapLegend.cjs +2 -0
  37. package/dist/components/charts/ChartMap/ChartMapLegend.cjs.map +1 -0
  38. package/dist/components/charts/ChartMap/ChartMapLegend.js +102 -0
  39. package/dist/components/charts/ChartMap/ChartMapLegend.js.map +1 -0
  40. package/dist/components/charts/ChartMap/ChartMapTable.cjs +2 -0
  41. package/dist/components/charts/ChartMap/ChartMapTable.cjs.map +1 -0
  42. package/dist/components/charts/ChartMap/ChartMapTable.js +118 -0
  43. package/dist/components/charts/ChartMap/ChartMapTable.js.map +1 -0
  44. package/dist/components/charts/ChartMap/mapGeometry.cjs +2 -0
  45. package/dist/components/charts/ChartMap/mapGeometry.cjs.map +1 -0
  46. package/dist/components/charts/ChartMap/mapGeometry.js +113 -0
  47. package/dist/components/charts/ChartMap/mapGeometry.js.map +1 -0
  48. package/dist/components/charts/ChartMap/mapLabels.cjs +2 -0
  49. package/dist/components/charts/ChartMap/mapLabels.cjs.map +1 -0
  50. package/dist/components/charts/ChartMap/mapLabels.js +80 -0
  51. package/dist/components/charts/ChartMap/mapLabels.js.map +1 -0
  52. package/dist/components/charts/ChartMap/mapScales.cjs +2 -0
  53. package/dist/components/charts/ChartMap/mapScales.cjs.map +1 -0
  54. package/dist/components/charts/ChartMap/mapScales.js +131 -0
  55. package/dist/components/charts/ChartMap/mapScales.js.map +1 -0
  56. package/dist/components/charts/ChartMap/polylabel.cjs +2 -0
  57. package/dist/components/charts/ChartMap/polylabel.cjs.map +1 -0
  58. package/dist/components/charts/ChartMap/polylabel.js +50 -0
  59. package/dist/components/charts/ChartMap/polylabel.js.map +1 -0
  60. package/dist/components/charts/ChartTimeline/ChartTimeline.cjs +2 -0
  61. package/dist/components/charts/ChartTimeline/ChartTimeline.cjs.map +1 -0
  62. package/dist/components/charts/ChartTimeline/ChartTimeline.js +703 -0
  63. package/dist/components/charts/ChartTimeline/ChartTimeline.js.map +1 -0
  64. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs +2 -0
  65. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs.map +1 -0
  66. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js +124 -0
  67. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js.map +1 -0
  68. package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs +2 -0
  69. package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs.map +1 -0
  70. package/dist/components/charts/ChartTimeline/ChartTimelineTable.js +42 -0
  71. package/dist/components/charts/ChartTimeline/ChartTimelineTable.js.map +1 -0
  72. package/dist/components/charts/ChartTimeline/timelineLayout.cjs +2 -0
  73. package/dist/components/charts/ChartTimeline/timelineLayout.cjs.map +1 -0
  74. package/dist/components/charts/ChartTimeline/timelineLayout.js +109 -0
  75. package/dist/components/charts/ChartTimeline/timelineLayout.js.map +1 -0
  76. package/dist/components/charts/ChartTimeline/timelineTime.cjs +2 -0
  77. package/dist/components/charts/ChartTimeline/timelineTime.cjs.map +1 -0
  78. package/dist/components/charts/ChartTimeline/timelineTime.js +91 -0
  79. package/dist/components/charts/ChartTimeline/timelineTime.js.map +1 -0
  80. package/dist/components/charts/ChartTimeline/timelineTooltip.cjs +2 -0
  81. package/dist/components/charts/ChartTimeline/timelineTooltip.cjs.map +1 -0
  82. package/dist/components/charts/ChartTimeline/timelineTooltip.js +77 -0
  83. package/dist/components/charts/ChartTimeline/timelineTooltip.js.map +1 -0
  84. package/dist/components/charts/core/ChartLegend.cjs +1 -1
  85. package/dist/components/charts/core/ChartLegend.cjs.map +1 -1
  86. package/dist/components/charts/core/ChartLegend.js +37 -25
  87. package/dist/components/charts/core/ChartLegend.js.map +1 -1
  88. package/dist/components/charts/core/useChartMetrics.cjs +1 -1
  89. package/dist/components/charts/core/useChartMetrics.cjs.map +1 -1
  90. package/dist/components/charts/core/useChartMetrics.js +20 -25
  91. package/dist/components/charts/core/useChartMetrics.js.map +1 -1
  92. package/dist/components/data-display/CodeBlock/syntax.cjs +10 -3
  93. package/dist/components/data-display/CodeBlock/syntax.cjs.map +1 -1
  94. package/dist/components/data-display/CodeBlock/syntax.js +68 -48
  95. package/dist/components/data-display/CodeBlock/syntax.js.map +1 -1
  96. package/dist/components/data-display/List/List.cjs.map +1 -1
  97. package/dist/components/data-display/List/List.js.map +1 -1
  98. package/dist/components/data-display/List/List.module.css.cjs +1 -1
  99. package/dist/components/data-display/List/List.module.css.js +34 -24
  100. package/dist/components/data-display/List/List.module.css.js.map +1 -1
  101. package/dist/components/data-display/List/ListingOptions.cjs +1 -1
  102. package/dist/components/data-display/List/ListingOptions.cjs.map +1 -1
  103. package/dist/components/data-display/List/ListingOptions.js +98 -74
  104. package/dist/components/data-display/List/ListingOptions.js.map +1 -1
  105. package/dist/components/data-display/List/useListing.cjs.map +1 -1
  106. package/dist/components/data-display/List/useListing.js.map +1 -1
  107. package/dist/components/data-display/Timeline/Timeline.cjs +1 -1
  108. package/dist/components/data-display/Timeline/Timeline.cjs.map +1 -1
  109. package/dist/components/data-display/Timeline/Timeline.js +6 -6
  110. package/dist/components/data-display/Timeline/Timeline.js.map +1 -1
  111. package/dist/components/data-display/Timeline/Timeline.module.css.cjs +1 -1
  112. package/dist/components/data-display/Timeline/Timeline.module.css.js +18 -16
  113. package/dist/components/data-display/Timeline/Timeline.module.css.js.map +1 -1
  114. package/dist/components/forms/Checkbox/Checkbox.module.css.cjs +1 -1
  115. package/dist/components/forms/Checkbox/Checkbox.module.css.js +5 -5
  116. package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.cjs +1 -1
  117. package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.js +1 -1
  118. package/dist/components/forms/ComboBox/ComboBox.cjs.map +1 -1
  119. package/dist/components/forms/ComboBox/ComboBox.js.map +1 -1
  120. package/dist/components/forms/Field/Field.cjs +1 -1
  121. package/dist/components/forms/Field/Field.cjs.map +1 -1
  122. package/dist/components/forms/Field/Field.js +22 -22
  123. package/dist/components/forms/Field/Field.js.map +1 -1
  124. package/dist/components/forms/Field/Field.module.css.cjs +1 -1
  125. package/dist/components/forms/Field/Field.module.css.js +19 -17
  126. package/dist/components/forms/Field/Field.module.css.js.map +1 -1
  127. package/dist/components/forms/InputText/InputText.cjs +1 -1
  128. package/dist/components/forms/InputText/InputText.cjs.map +1 -1
  129. package/dist/components/forms/InputText/InputText.js +24 -24
  130. package/dist/components/forms/InputText/InputText.js.map +1 -1
  131. package/dist/components/forms/InputText/InputText.module.css.cjs +1 -1
  132. package/dist/components/forms/InputText/InputText.module.css.js +9 -7
  133. package/dist/components/forms/InputText/InputText.module.css.js.map +1 -1
  134. package/dist/components/forms/RadioGroup/RadioGroup.module.css.cjs +1 -1
  135. package/dist/components/forms/RadioGroup/RadioGroup.module.css.js +4 -4
  136. package/dist/components/forms/Select/Select.cjs.map +1 -1
  137. package/dist/components/forms/Select/Select.js.map +1 -1
  138. package/dist/components/forms/Switch/Switch.module.css.cjs +1 -1
  139. package/dist/components/forms/Switch/Switch.module.css.js +6 -6
  140. package/dist/components/icons/suite.cjs +1 -0
  141. package/dist/components/icons/suite.js +10894 -0
  142. package/dist/components/navigation/Pagination/Pagination.cjs +1 -1
  143. package/dist/components/navigation/Pagination/Pagination.cjs.map +1 -1
  144. package/dist/components/navigation/Pagination/Pagination.js +71 -44
  145. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  146. package/dist/components/navigation/Pagination/Pagination.module.css.cjs +1 -1
  147. package/dist/components/navigation/Pagination/Pagination.module.css.js +18 -14
  148. package/dist/components/navigation/Pagination/Pagination.module.css.js.map +1 -1
  149. package/dist/components/navigation/TabsNav/TabsNav.cjs +2 -0
  150. package/dist/components/navigation/TabsNav/TabsNav.cjs.map +1 -0
  151. package/dist/components/navigation/TabsNav/TabsNav.js +21 -0
  152. package/dist/components/navigation/TabsNav/TabsNav.js.map +1 -0
  153. package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs +2 -0
  154. package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs.map +1 -0
  155. package/dist/components/navigation/TabsNav/TabsNav.module.css.js +18 -0
  156. package/dist/components/navigation/TabsNav/TabsNav.module.css.js.map +1 -0
  157. package/dist/components/overlays/Dialog/Dialog.cjs.map +1 -1
  158. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  159. package/dist/components/overlays/Dialog/DialogFrame.cjs +1 -1
  160. package/dist/components/overlays/Dialog/DialogFrame.cjs.map +1 -1
  161. package/dist/components/overlays/Dialog/DialogFrame.js +30 -30
  162. package/dist/components/overlays/Dialog/DialogFrame.js.map +1 -1
  163. package/dist/components/overlays/Drawer/Drawer.cjs.map +1 -1
  164. package/dist/components/overlays/Drawer/Drawer.js.map +1 -1
  165. package/dist/components/overlays/Menu/Menu.cjs +1 -1
  166. package/dist/components/overlays/Menu/Menu.cjs.map +1 -1
  167. package/dist/components/overlays/Menu/Menu.js +37 -36
  168. package/dist/components/overlays/Menu/Menu.js.map +1 -1
  169. package/dist/components/overlays/Menu/keyShortcuts.cjs +2 -0
  170. package/dist/components/overlays/Menu/keyShortcuts.cjs.map +1 -0
  171. package/dist/components/overlays/Menu/keyShortcuts.js +55 -0
  172. package/dist/components/overlays/Menu/keyShortcuts.js.map +1 -0
  173. package/dist/components/overlays/Tooltip/Tooltip.cjs +1 -1
  174. package/dist/components/overlays/Tooltip/Tooltip.cjs.map +1 -1
  175. package/dist/components/overlays/Tooltip/Tooltip.js +81 -56
  176. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  177. package/dist/design-system.css +1 -1
  178. package/dist/icons.cjs +2 -0
  179. package/dist/icons.cjs.map +1 -0
  180. package/dist/icons.js +2054 -0
  181. package/dist/icons.js.map +1 -0
  182. package/dist/index.cjs +1 -1
  183. package/dist/index.js +184 -174
  184. package/dist/index.js.map +1 -1
  185. package/dist/types/components/charts/ChartGauge/ChartGauge.d.ts +83 -0
  186. package/dist/types/components/charts/ChartGauge/gaugeLayout.d.ts +64 -0
  187. package/dist/types/components/charts/ChartGauge/gaugeReading.d.ts +97 -0
  188. package/dist/types/components/charts/ChartGauge/gaugeScale.d.ts +38 -0
  189. package/dist/types/components/charts/ChartGauge/index.d.ts +2 -0
  190. package/dist/types/components/charts/ChartMap/ChartMap.d.ts +104 -0
  191. package/dist/types/components/charts/ChartMap/ChartMapLegend.d.ts +44 -0
  192. package/dist/types/components/charts/ChartMap/ChartMapTable.d.ts +38 -0
  193. package/dist/types/components/charts/ChartMap/index.d.ts +4 -0
  194. package/dist/types/components/charts/ChartMap/mapGeometry.d.ts +56 -0
  195. package/dist/types/components/charts/ChartMap/mapLabels.d.ts +51 -0
  196. package/dist/types/components/charts/ChartMap/mapScales.d.ts +76 -0
  197. package/dist/types/components/charts/ChartMap/polylabel.d.ts +9 -0
  198. package/dist/types/components/charts/ChartTimeline/ChartTimeline.d.ts +137 -0
  199. package/dist/types/components/charts/ChartTimeline/ChartTimelineTable.d.ts +25 -0
  200. package/dist/types/components/charts/ChartTimeline/index.d.ts +2 -0
  201. package/dist/types/components/charts/ChartTimeline/timelineLayout.d.ts +70 -0
  202. package/dist/types/components/charts/ChartTimeline/timelineTime.d.ts +16 -0
  203. package/dist/types/components/charts/ChartTimeline/timelineTooltip.d.ts +45 -0
  204. package/dist/types/components/charts/core/ChartLegend.d.ts +3 -1
  205. package/dist/types/components/data-display/CodeBlock/syntax.d.ts +1 -1
  206. package/dist/types/components/data-display/List/List.d.ts +1 -1
  207. package/dist/types/components/data-display/List/useListing.d.ts +7 -1
  208. package/dist/types/components/data-display/Timeline/Timeline.d.ts +4 -1
  209. package/dist/types/components/data-display/Timeline/index.d.ts +1 -1
  210. package/dist/types/components/forms/ComboBox/ComboBox.d.ts +7 -1
  211. package/dist/types/components/forms/Field/Field.d.ts +1 -1
  212. package/dist/types/components/forms/InputText/InputText.d.ts +1 -1
  213. package/dist/types/components/forms/Select/Select.d.ts +5 -1
  214. package/dist/types/components/icons/suite.d.ts +2051 -0
  215. package/dist/types/components/navigation/Pagination/Pagination.d.ts +13 -1
  216. package/dist/types/components/navigation/Pagination/index.d.ts +1 -1
  217. package/dist/types/components/navigation/TabsNav/TabsNav.d.ts +20 -0
  218. package/dist/types/components/navigation/TabsNav/index.d.ts +2 -0
  219. package/dist/types/components/overlays/Dialog/Dialog.d.ts +19 -7
  220. package/dist/types/components/overlays/Dialog/DialogFrame.d.ts +8 -2
  221. package/dist/types/components/overlays/Drawer/Drawer.d.ts +2 -2
  222. package/dist/types/components/overlays/Menu/Menu.d.ts +3 -1
  223. package/dist/types/components/overlays/Menu/keyShortcuts.d.ts +2 -0
  224. package/dist/types/components/overlays/Tooltip/Tooltip.d.ts +26 -5
  225. package/dist/types/icons.d.ts +6 -0
  226. package/dist/types/index.d.ts +11 -3
  227. package/dist/types/utils/formatters/formatarDuracao.d.ts +5 -0
  228. package/dist/types/utils/formatters/index.d.ts +1 -0
  229. package/dist/utils/formatters/formatarDuracao.cjs +2 -0
  230. package/dist/utils/formatters/formatarDuracao.cjs.map +1 -0
  231. package/dist/utils/formatters/formatarDuracao.js +10 -0
  232. package/dist/utils/formatters/formatarDuracao.js.map +1 -0
  233. package/package.json +10 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polylabel.cjs","sources":["../../../../src/components/charts/ChartMap/polylabel.ts"],"sourcesContent":["export type Point = readonly [number, number];\nexport type Ring = readonly Point[];\n\ninterface Cell {\n /** Distancia do centro da celula ate a borda: positiva dentro do poligono, negativa fora. */\n distance: number;\n half: number;\n /** O maior valor que um ponto da celula ainda pode alcancar. */\n potential: number;\n x: number;\n y: number;\n}\n\nfunction segmentDistanceSquared(x: number, y: number, [ax, ay]: Point, [bx, by]: Point) {\n const dx = bx - ax;\n const dy = by - ay;\n const t = dx === 0 && dy === 0 ? 0 : Math.max(0, Math.min(1, ((x - ax) * dx + (y - ay) * dy) / (dx * dx + dy * dy)));\n const px = ax + dx * t;\n const py = ay + dy * t;\n\n return (x - px) ** 2 + (y - py) ** 2;\n}\n\n/** Distancia ate a borda mais proxima, com o sinal de dentro ou fora; furos contam como borda. */\nexport function signedDistance(x: number, y: number, rings: readonly Ring[]) {\n let inside = false;\n let nearest = Infinity;\n\n for (const ring of rings) {\n for (let i = 0, j = ring.length - 1; i < ring.length; j = i, i += 1) {\n const [ax, ay] = ring[i];\n const [bx, by] = ring[j];\n\n if (ay > y !== by > y && x < ((bx - ax) * (y - ay)) / (by - ay) + ax) {\n inside = !inside;\n }\n\n nearest = Math.min(nearest, segmentDistanceSquared(x, y, ring[i], ring[j]));\n }\n }\n\n return (inside ? 1 : -1) * Math.sqrt(nearest);\n}\n\nfunction cellAt(x: number, y: number, half: number, rings: readonly Ring[]): Cell {\n const distance = signedDistance(x, y, rings);\n return { distance, half, potential: distance + half * Math.SQRT2, x, y };\n}\n\n/**\n * Centro visual do poligono: o ponto interno mais distante das bordas, achado por subdivisao, como o polylabel do\n * Mapbox. Num \"L\" ou num litoral recortado, o centroide cai fora ou colado na borda; este ponto, nao.\n */\nexport function polylabel(rings: readonly Ring[], precision = 1): Point {\n let [x0, y0, x1, y1] = [Infinity, Infinity, -Infinity, -Infinity];\n\n for (const [x, y] of rings[0] ?? []) {\n [x0, y0, x1, y1] = [Math.min(x0, x), Math.min(y0, y), Math.max(x1, x), Math.max(y1, y)];\n }\n\n const side = Math.min(x1 - x0, y1 - y0);\n\n if (!(side > 0)) {\n return Number.isFinite(x0) ? [x0, y0] : [0, 0];\n }\n\n // Fila em ordem crescente de potencial: a celula mais promissora sai do fim.\n const queue: Cell[] = [];\n const enqueue = (cell: Cell) => {\n let low = 0;\n let high = queue.length;\n\n while (low < high) {\n const middle = (low + high) >> 1;\n\n if (queue[middle].potential < cell.potential) {\n low = middle + 1;\n } else {\n high = middle;\n }\n }\n\n queue.splice(low, 0, cell);\n };\n\n for (let x = x0; x < x1; x += side) {\n for (let y = y0; y < y1; y += side) {\n enqueue(cellAt(x + side / 2, y + side / 2, side / 2, rings));\n }\n }\n\n let best = cellAt((x0 + x1) / 2, (y0 + y1) / 2, 0, rings);\n\n while (queue.length > 0) {\n const cell = queue.pop()!;\n\n if (cell.distance > best.distance) {\n best = cell;\n }\n\n if (cell.potential - best.distance <= precision) {\n continue;\n }\n\n const half = cell.half / 2;\n enqueue(cellAt(cell.x - half, cell.y - half, half, rings));\n enqueue(cellAt(cell.x + half, cell.y - half, half, rings));\n enqueue(cellAt(cell.x - half, cell.y + half, half, rings));\n enqueue(cellAt(cell.x + half, cell.y + half, half, rings));\n }\n\n return [best.x, best.y];\n}\n"],"names":["segmentDistanceSquared","x","y","ax","ay","bx","by","dx","dy","t","px","py","signedDistance","rings","inside","nearest","ring","i","j","cellAt","half","distance","polylabel","precision","x0","y0","x1","y1","side","queue","enqueue","cell","low","high","middle","best"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ function y(i, f, [o, l], [s, a]) {
2
+ const e = s - o, c = a - l, h = e === 0 && c === 0 ? 0 : Math.max(0, Math.min(1, ((i - o) * e + (f - l) * c) / (e * e + c * c))), u = o + e * h, n = l + c * h;
3
+ return (i - u) ** 2 + (f - n) ** 2;
4
+ }
5
+ function m(i, f, o) {
6
+ let l = !1, s = 1 / 0;
7
+ for (const a of o)
8
+ for (let e = 0, c = a.length - 1; e < a.length; c = e, e += 1) {
9
+ const [h, u] = a[e], [n, t] = a[c];
10
+ u > f != t > f && i < (n - h) * (f - u) / (t - u) + h && (l = !l), s = Math.min(s, y(i, f, a[e], a[c]));
11
+ }
12
+ return (l ? 1 : -1) * Math.sqrt(s);
13
+ }
14
+ function r(i, f, o, l) {
15
+ const s = m(i, f, l);
16
+ return { distance: s, half: o, potential: s + o * Math.SQRT2, x: i, y: f };
17
+ }
18
+ function p(i, f = 1) {
19
+ let [o, l, s, a] = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
20
+ for (const [n, t] of i[0] ?? [])
21
+ [o, l, s, a] = [Math.min(o, n), Math.min(l, t), Math.max(s, n), Math.max(a, t)];
22
+ const e = Math.min(s - o, a - l);
23
+ if (!(e > 0))
24
+ return Number.isFinite(o) ? [o, l] : [0, 0];
25
+ const c = [], h = (n) => {
26
+ let t = 0, d = c.length;
27
+ for (; t < d; ) {
28
+ const x = t + d >> 1;
29
+ c[x].potential < n.potential ? t = x + 1 : d = x;
30
+ }
31
+ c.splice(t, 0, n);
32
+ };
33
+ for (let n = o; n < s; n += e)
34
+ for (let t = l; t < a; t += e)
35
+ h(r(n + e / 2, t + e / 2, e / 2, i));
36
+ let u = r((o + s) / 2, (l + a) / 2, 0, i);
37
+ for (; c.length > 0; ) {
38
+ const n = c.pop();
39
+ if (n.distance > u.distance && (u = n), n.potential - u.distance <= f)
40
+ continue;
41
+ const t = n.half / 2;
42
+ h(r(n.x - t, n.y - t, t, i)), h(r(n.x + t, n.y - t, t, i)), h(r(n.x - t, n.y + t, t, i)), h(r(n.x + t, n.y + t, t, i));
43
+ }
44
+ return [u.x, u.y];
45
+ }
46
+ export {
47
+ p as polylabel,
48
+ m as signedDistance
49
+ };
50
+ //# sourceMappingURL=polylabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polylabel.js","sources":["../../../../src/components/charts/ChartMap/polylabel.ts"],"sourcesContent":["export type Point = readonly [number, number];\nexport type Ring = readonly Point[];\n\ninterface Cell {\n /** Distancia do centro da celula ate a borda: positiva dentro do poligono, negativa fora. */\n distance: number;\n half: number;\n /** O maior valor que um ponto da celula ainda pode alcancar. */\n potential: number;\n x: number;\n y: number;\n}\n\nfunction segmentDistanceSquared(x: number, y: number, [ax, ay]: Point, [bx, by]: Point) {\n const dx = bx - ax;\n const dy = by - ay;\n const t = dx === 0 && dy === 0 ? 0 : Math.max(0, Math.min(1, ((x - ax) * dx + (y - ay) * dy) / (dx * dx + dy * dy)));\n const px = ax + dx * t;\n const py = ay + dy * t;\n\n return (x - px) ** 2 + (y - py) ** 2;\n}\n\n/** Distancia ate a borda mais proxima, com o sinal de dentro ou fora; furos contam como borda. */\nexport function signedDistance(x: number, y: number, rings: readonly Ring[]) {\n let inside = false;\n let nearest = Infinity;\n\n for (const ring of rings) {\n for (let i = 0, j = ring.length - 1; i < ring.length; j = i, i += 1) {\n const [ax, ay] = ring[i];\n const [bx, by] = ring[j];\n\n if (ay > y !== by > y && x < ((bx - ax) * (y - ay)) / (by - ay) + ax) {\n inside = !inside;\n }\n\n nearest = Math.min(nearest, segmentDistanceSquared(x, y, ring[i], ring[j]));\n }\n }\n\n return (inside ? 1 : -1) * Math.sqrt(nearest);\n}\n\nfunction cellAt(x: number, y: number, half: number, rings: readonly Ring[]): Cell {\n const distance = signedDistance(x, y, rings);\n return { distance, half, potential: distance + half * Math.SQRT2, x, y };\n}\n\n/**\n * Centro visual do poligono: o ponto interno mais distante das bordas, achado por subdivisao, como o polylabel do\n * Mapbox. Num \"L\" ou num litoral recortado, o centroide cai fora ou colado na borda; este ponto, nao.\n */\nexport function polylabel(rings: readonly Ring[], precision = 1): Point {\n let [x0, y0, x1, y1] = [Infinity, Infinity, -Infinity, -Infinity];\n\n for (const [x, y] of rings[0] ?? []) {\n [x0, y0, x1, y1] = [Math.min(x0, x), Math.min(y0, y), Math.max(x1, x), Math.max(y1, y)];\n }\n\n const side = Math.min(x1 - x0, y1 - y0);\n\n if (!(side > 0)) {\n return Number.isFinite(x0) ? [x0, y0] : [0, 0];\n }\n\n // Fila em ordem crescente de potencial: a celula mais promissora sai do fim.\n const queue: Cell[] = [];\n const enqueue = (cell: Cell) => {\n let low = 0;\n let high = queue.length;\n\n while (low < high) {\n const middle = (low + high) >> 1;\n\n if (queue[middle].potential < cell.potential) {\n low = middle + 1;\n } else {\n high = middle;\n }\n }\n\n queue.splice(low, 0, cell);\n };\n\n for (let x = x0; x < x1; x += side) {\n for (let y = y0; y < y1; y += side) {\n enqueue(cellAt(x + side / 2, y + side / 2, side / 2, rings));\n }\n }\n\n let best = cellAt((x0 + x1) / 2, (y0 + y1) / 2, 0, rings);\n\n while (queue.length > 0) {\n const cell = queue.pop()!;\n\n if (cell.distance > best.distance) {\n best = cell;\n }\n\n if (cell.potential - best.distance <= precision) {\n continue;\n }\n\n const half = cell.half / 2;\n enqueue(cellAt(cell.x - half, cell.y - half, half, rings));\n enqueue(cellAt(cell.x + half, cell.y - half, half, rings));\n enqueue(cellAt(cell.x - half, cell.y + half, half, rings));\n enqueue(cellAt(cell.x + half, cell.y + half, half, rings));\n }\n\n return [best.x, best.y];\n}\n"],"names":["segmentDistanceSquared","x","y","ax","ay","bx","by","dx","dy","t","px","py","signedDistance","rings","inside","nearest","ring","i","j","cellAt","half","distance","polylabel","precision","x0","y0","x1","y1","side","queue","enqueue","cell","low","high","middle","best"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),G=require("d3-array"),T=require("react"),ss=require("../../../utils/formatters/formatarDuracao.cjs"),ns=require("./ChartTimelineTable.cjs"),E=require("./timelineLayout.cjs"),_=require("./timelineTime.cjs"),rs=require("./timelineTooltip.cjs"),r=require("./ChartTimeline.module.css.cjs"),xt=require("../core/useChartMetrics.cjs"),pt=require("../core/useSeriesToggle.cjs"),Ie=require("../palette/seriesColor.cjs"),os=require("../scales/scales.cjs"),Q=require("../core/measureText.cjs"),as=require("../core/Grid.cjs"),mt=require("../core/spacing.cjs"),ls=require("../ChartTooltip/ChartTooltip.cjs"),is=require("../core/ChartLegend.cjs"),cs=require("../../actions/Button/Button.cjs"),ds=require("../../feedback/EmptyState/EmptyState.cjs"),Nt=require("../../icons/icons.cjs"),wt=require("../core/shapes.cjs"),yt=require("../../../utils/formatters/formatarNumero.cjs"),us={sm:{bar:14,row:26},md:{bar:20,row:36}},hs=40,fs=32,gs=3,xs=28,Z=6,ps=24,ms=6,ws=20,J=6,ue=4,ys=10,bs=14,vs=200,bt=10,js=22,Ns=12;function vt(h,g,m,y=!0){const x=h?0:m,p=g||!y?0:m;return[x,p,p,x]}function jt({clippedEnd:h,clippedStart:g}){return g&&h?"começa antes e continua depois do eixo":g?"começa antes do eixo":h?"continua depois do eixo":void 0}function Ts({height:h,width:g,x:m,y},x){const p=x==="end"?m+g-3:m+3,u=x==="end"?p-4:p+4;return`M${u},${y+3}L${p},${y+h/2}L${u},${y+h-3}`}function Ms(h,g,m,y){if(y!=="hidden"){if(Q.measureLabel(h,m)+bt<=g)return h;if(!(y==="auto"||g<js))return Q.truncateToWidth(h,m,g-bt)||void 0}}function $s(h){return`repeating-linear-gradient(45deg, ${h} 0 1.5px, var(--pl-color-surface-muted) 1.5px 4px)`}function ks({accent:h,axisPosition:g="top",bands:m,collapsedGroups:y,collapsibleGroups:x=!0,compactSummary:p="below",defaultCollapsedGroups:u,defaultHiddenSeries:B,density:ee="md",domain:te,emptyMessage:Tt="Sem dados no período",emptyRowLabel:he="Sem registro",formatTick:Mt,formatTime:Ee,formatTooltipValue:$t,formatValue:se=ss.formatarDuracao,groups:_e=[],hiddenSeries:kt,highlightOnHover:Lt=!1,legend:ne="top",legendAlign:St="left",markers:Ae,mergeConsecutive:Ce=!0,minPlotWidth:De=360,onCollapsedGroupsChange:Ot,onHiddenSeriesChange:Rt,onSegmentClick:A,overlap:qe="stack",referenceLines:He=[],rowBands:Pe,rowGap:Fe=4,rowLabelWidth:fe="auto",rowSummary:ge,rows:xe,segmentLabel:Bt="duration",segmentLabelAlign:pe="center",segments:Ue,series:C,showGrid:It=!0,showProgress:K=!0,showSegmentLabels:Et="auto",showTooltip:_t=!0,states:D,statesEnd:re,timeScale:b="calendar",title:me,xAxis:we="visible"}){var gt;const Ge=T.useId(),Ke=T.useId(),We=T.useId().replace(/[^\w-]/g,""),q=xt.useChartMetrics(),oe=xt.useChartMetrics(),ye=pt.useSeriesToggle({defaultHiddenSeries:B,hiddenSeries:kt,onHiddenSeriesChange:Rt}),Ye=pt.useSeriesToggle({defaultHiddenSeries:u,hiddenSeries:y,onHiddenSeriesChange:Ot}),[W,L]=T.useState(null),[At,ze]=T.useState(null),[Xe,be]=T.useState(null),[Ve,Ct]=T.useState(!1),ve=T.useRef(new Map),v=A!==void 0,je=T.useMemo(()=>Ie.resolveSeriesColors(C,{accent:h}),[h,C]),ae=new Map;C.forEach((e,s)=>{ae.has(e.label)||ae.set(e.label,je[s])});const I=e=>ae.get(e),le=e=>ae.has(e)&&!ye.isHidden(e),Dt=T.useMemo(()=>{const e=l=>_.toPosition(l,b),s=(Pe??[]).flatMap(l=>{const N=E.toRange(l.start,l.end,b);return N?[{...N,row:l.row,series:l.series}]:[]}),t=(Ae??[]).flatMap(l=>{const N=e(l.time);return Number.isFinite(N)?[{...l,position:N}]:[]}),o=D?[]:E.toTimelineSegments(Ue??[],b),i=D?[...D.map(l=>e(l.time)),...re===void 0?[]:[e(re)]]:o.flatMap(l=>[l.start,l.end]),a=te==null?void 0:te.map(e),c=a&&a[0]<a[1]?[a[0],a[1]]:_.autoDomain([...i,...s.flatMap(l=>[l.start,l.end]),...t.map(l=>l.position)],b),d=D?E.toTimelineSegments(E.statesToSegments(D,re??c[1],Ce,b),b):o;return{allMarkers:t,allRowBands:s,allSegments:d,range:c}},[te,Ae,Ce,Pe,Ue,D,re,b]),{allMarkers:Ne,allRowBands:Ze,allSegments:Je,range:M}=Dt,H=e=>_.durationMs(e.start,e.end,b),P=e=>{const s=b==="dayHours"&&e>24?e-24:e;return Ee?Ee(_.toDate(s,b)):_.formatPosition(s,b)},Te=Je.filter(e=>le(e.series)),Me=Ze.filter(e=>le(e.series)),Qe=Ne.filter(e=>le(e.series)),$e=(m??[]).flatMap(e=>{const s=E.toRange(e.start,e.end,b);return s&&le(e.series)?[{...e,...s}]:[]}),et=G.group(Te,e=>e.row),tt=new Set(Je.map(e=>e.row)),st=new Set([...tt,...Ze.map(e=>e.row),...Ne.map(e=>e.row)]),nt=xe.length===0||st.size===0,rt=q.width>0&&q.width<De+vs,ie=ge?rt?p:"right":"none",$=us[ee],F=ie==="below"?Math.max($.row,hs):$.row,ke=$.bar+gs,{height:qt,items:U}=E.layoutTimeline({groupHeight:xs,groups:_e,isCollapsed:x?Ye.isHidden:()=>!1,laneStep:ke,overlap:qe,rowGap:Fe,rowHeight:F,rows:xe,segments:Te}),ot=e=>[...et.get(e.key)??[]].sort((s,t)=>s.start-t.start||s.end-t.end),at=E.rowsInDisplayOrder(xe,_e),Le=new Map(ge?at.map(e=>[e.key,ge(e,ot(e).map(s=>s.source))]):[]),Se=we==="hidden"?0:ps,Y=g==="top",z=Y?Se:0,Ht=He.length>0||$e.some(e=>e.label),k=z+(Ht?ws:ms),X=k+qt,lt=X+J+(Y?0:Se),S=Math.max(oe.width,De),w=os.linearScale({domain:{max:M[1],min:M[0]},nice:!1,range:[ys,S-bs]}),j=w(M[0]),O=w(M[1]),it=_.timeTicks(M,b,O-j,Mt),ce=q.font,Oe=q.radius;function Pt(e,s,t){const o=w(e.start),i=w(e.end),a=Math.max(o,j),c=Math.min(i,O);if(c<=a)return;const d=c-a>4?1:0;return{clippedEnd:i>O+.5,clippedStart:o<j-.5,height:$.bar,row:s,segment:e,width:Math.max(c-a-d*2,2),x:a+d,y:t+(F-$.bar)/2+e.lane*ke}}const ct=new Map(U.flatMap(e=>e.kind==="row"?[[e.row.key,e.segments.flatMap(s=>Pt(s,e.row,k+e.y)??[])]]:[])),V=[...ct.values()].filter(e=>e.length>0),Re=V.flat(),Ft=Re.some(e=>e.segment.id===Xe)?Xe:(gt=Re[0])==null?void 0:gt.segment.id,R=Re.find(e=>e.segment.id===At),dt=Lt?(W==null?void 0:W.kind)==="segment"?W.segment.series:R==null?void 0:R.segment.series:void 0;function Ut(e){var s;e&&(be(e.segment.id),(s=ve.current.get(e.segment.id))==null||s.focus())}function Gt(e,s){const t=V.findIndex(d=>d.includes(s)),o=V[t],i=o.indexOf(s);if(e.key==="Enter"||e.key===" "){e.preventDefault(),A==null||A(s.segment.source,s.row);return}const a=d=>d&&G.least(d,l=>Math.abs(l.segment.start-s.segment.start)),c={ArrowDown:a(V[t+1]),ArrowLeft:o[i-1],ArrowRight:o[i+1],ArrowUp:a(V[t-1]),End:o.at(-1),Home:o[0]};e.key in c&&(e.preventDefault(),Ut(c[e.key]))}const Kt=e=>{const{row:s,segment:t}=e;return[s.label,t.series,t.label!==t.series?t.label:void 0,`${P(t.start)} a ${P(t.end)}`,se(H(t)),K&&t.progress!==void 0?`${yt.formatarPercentual(t.progress)} concluído`:void 0,jt(e)].filter(Boolean).join(", ")};function Wt(e){const{segment:s}=e,t=s.id,o=I(s.series)??"currentColor",i=Ie.textColorOn(o),a=K?s.progress:void 0,c=Ms(Bt==="label"?s.label??s.series:se(H(s)),e.width,ce,Et),d={center:"middle",end:"end",start:"start"},l=pe==="start"?e.x+5:pe==="end"?e.x+e.width-5:e.x+e.width/2,N=a===void 0||(l-e.x)/e.width<=a;return n.jsxs("g",{"aria-label":Kt(e),className:`${r.default.segment} ${v?r.default.clickable:""} ${dt!==void 0&&dt!==s.series?r.default.dimmed:""}`,onBlur:v?()=>ze(null):void 0,onClick:A?()=>{be(t),A(s.source,e.row)}:void 0,onFocus:v?()=>{ze(t),be(t)}:void 0,onKeyDown:v?f=>Gt(f,e):void 0,onMouseEnter:()=>L({clip:jt(e),kind:"segment",row:e.row,segment:s}),onMouseLeave:()=>L(null),ref:v?f=>{f?ve.current.set(t,f):ve.current.delete(t)}:void 0,role:v?"button":void 0,tabIndex:v?t===Ft?0:-1:void 0,children:[n.jsx("path",{className:qe==="overlay"?r.default.barOverlay:void 0,d:wt.roundedBarPath(e.x,e.y,e.width,e.height,vt(e.clippedStart,e.clippedEnd,Oe)),fill:o,fillOpacity:a===void 0?void 0:.3}),a!==void 0&&a>0&&n.jsx("path",{d:wt.roundedBarPath(e.x,e.y,Math.max(e.width*a,2),e.height,vt(e.clippedStart,e.clippedEnd,Oe,a>=1)),fill:o}),e.width>=Ns&&["start","end"].filter(f=>f==="start"?e.clippedStart:e.clippedEnd).map(f=>n.jsx("path",{className:r.default.clipMark,d:Ts(e,f),stroke:i},f)),c!==void 0&&n.jsx("text",{className:r.default.segmentLabel,dominantBaseline:"central",fill:N?i:"var(--pl-color-text)",textAnchor:d[pe],x:l,y:e.y+e.height/2,children:c})]},t)}function Yt(e){const s=k+e.y,{row:t}=e,o=s+(F-$.bar)/2-ue,i=$.bar+(e.laneCount-1)*ke+ue*2;return n.jsxs("g",{"aria-hidden":"true",children:[n.jsx("rect",{className:r.default.track,height:i,rx:ue,width:O-j,x:j,y:o}),Me.filter(a=>a.row===t.key).map((a,c)=>{const d=Math.max(w(a.start),j),l=Math.min(w(a.end),O);return l>d?n.jsx("rect",{fill:I(a.series),height:i,rx:ue,width:l-d,x:d,y:o},c):null}),!st.has(t.key)&&n.jsx("text",{className:r.default.emptyRowText,dominantBaseline:"central",x:j+8,y:s+F/2,children:he}),n.jsx("rect",{className:r.default.hoverArea,height:e.height,onMouseEnter:()=>L({empty:!tt.has(t.key),kind:"row",row:t,rowBands:Me.filter(a=>a.row===t.key),segments:et.get(t.key)??[]}),onMouseLeave:()=>L(null),width:S,x:0,y:s})]},t.key)}function zt(e,{height:s,row:t,y:o}){if(e.position<M[0]||e.position>M[1])return null;const i=I(e.series),a=k+o,c=w(e.position),d=a+F/2,l=e.shape??"line";return n.jsxs("g",{children:[l==="line"&&n.jsx("rect",{className:r.default.marker,fill:i,height:$.bar+6,rx:1,width:2,x:c-1,y:d-$.bar/2-3}),l==="dot"&&n.jsx("circle",{className:r.default.marker,cx:c,cy:d,fill:i,r:4}),l==="diamond"&&n.jsx("path",{className:r.default.marker,d:`M${c},${d-6}L${c+6},${d}L${c},${d+6}L${c-6},${d}Z`,fill:i}),n.jsx("rect",{className:r.default.hoverArea,height:s,onMouseEnter:()=>L({kind:"marker",marker:e,row:t}),onMouseLeave:()=>L(null),width:10,x:c-5,y:a})]},`${t.key}-${Ne.indexOf(e)}`)}function Xt(e){const s=k+e.y,t=s+e.height/2-Z/2,o=e.segments.length>0,i=o?Math.max(w(G.min(e.segments,f=>f.start)??0),j):0,a=o?Math.min(w(G.max(e.segments,f=>f.end)??0),O):0,c=e.segments.filter(f=>f.progress!==void 0),d=G.sum(c,H),l=G.sum(c,f=>H(f)*(f.progress??0)),N=Math.max(a-i,2);return n.jsxs("g",{"aria-hidden":"true",children:[o&&a>i&&n.jsxs("g",{className:r.default.passThrough,children:[n.jsx("rect",{className:r.default.groupBar,height:Z,rx:Z/2,width:N,x:i,y:t}),K&&l>0&&d>0&&n.jsx("rect",{className:r.default.groupProgress,height:Z,rx:Z/2,width:Math.max(N*l/d,2),x:i,y:t})]}),n.jsx("rect",{className:r.default.hoverArea,height:e.height,onMouseEnter:()=>L({collapsed:e.collapsed,group:e.group,kind:"group",rowCount:e.rows.length,segments:e.segments}),onMouseLeave:()=>L(null),width:S,x:0,y:s})]},`group-${e.group.key}`)}const Vt=(e,s)=>{const t=Q.measureLabel(s,ce)/2;return e-t<0?"start":e+t>S?"end":"middle"},de=Y?Se-.5:X+J+.5,ut=n.jsxs("svg",{"aria-describedby":v?Ke:void 0,"aria-labelledby":Ge,className:r.default.canvas,height:lt,role:v?"group":"img",viewBox:`0 0 ${S} ${lt}`,width:S,children:[n.jsx("defs",{children:$e.map((e,s)=>n.jsx("pattern",{height:6,id:`${We}-${s}`,patternTransform:"rotate(45)",patternUnits:"userSpaceOnUse",width:6,children:n.jsx("line",{className:r.default.hatchLine,stroke:I(e.series),x1:0,x2:0,y1:0,y2:6})},s))}),U.map(e=>e.kind==="row"?Yt(e):null),n.jsx("g",{"aria-hidden":"true",className:r.default.passThrough,children:$e.map((e,s)=>{const t=Math.max(w(e.start),j),o=Math.min(w(e.end),O);return o<=t?null:n.jsxs("g",{children:[n.jsx("rect",{fill:`url(#${We}-${s})`,height:X+J-z,width:o-t,x:t,y:z}),e.label&&Q.measureLabel(e.label,ce)+8<=o-t&&n.jsx("text",{className:r.default.bandLabel,x:t+4,y:k-7,children:e.label})]},s)})}),It&&n.jsx("g",{className:r.default.passThrough,transform:`translate(0 ${z})`,children:n.jsx(as.Grid,{length:X+J-z,lines:it.map(e=>Math.round(w(e.position))+.5),orientation:"vertical"})}),U.map(e=>e.kind==="group"?Xt(e):null),n.jsx("g",{children:[...ct.values()].flat().map(Wt)}),n.jsx("g",{"aria-hidden":"true",children:U.flatMap(e=>e.kind==="row"?Qe.filter(s=>s.row===e.row.key).map(s=>zt(s,e)):[])}),n.jsx("g",{"aria-hidden":"true",className:r.default.passThrough,children:He.map((e,s)=>{const t=_.toPosition(e.time,b);if(!(t>=M[0]&&t<=M[1]))return null;const o=Math.round(w(t))+.5,i=o+4+Q.measureLabel(e.label,ce)<=S-2,a=e.intent?Ie.INTENT_TOKENS[e.intent]:"var(--pl-color-text-secondary)";return n.jsxs("g",{children:[n.jsx("line",{className:r.default.referenceLine,stroke:a,x1:o,x2:o,y1:k-16,y2:X+J}),n.jsx("text",{className:r.default.referenceLabel,textAnchor:i?"start":"end",x:i?o+4:o-4,y:k-7,children:e.label})]},s)})}),we!=="hidden"&&n.jsxs("g",{"aria-hidden":"true",className:`${r.default.passThrough} ${we==="onHover"?r.default.axisOnHover:""}`,children:[n.jsx("line",{className:r.default.axisLine,x1:j,x2:O,y1:de,y2:de}),it.map(e=>n.jsx("text",{className:r.default.axisLabel,dominantBaseline:Y?"auto":"hanging",textAnchor:Vt(w(e.position),e.label),x:w(e.position),y:Y?de-mt.CHART_LABEL_OFFSET:de+mt.CHART_LABEL_OFFSET,children:e.label},e.position))]}),R&&n.jsx("rect",{"aria-hidden":"true",className:r.default.focusRing,height:R.height+6,rx:Oe,width:R.width+6,x:R.x-3,y:R.y-3})]}),Zt=rs.timelineTooltip(W,{colorOf:I,duration:H,emptyRowLabel:he,formatDuration:$t??se,formatInstant:P,seriesOrder:C.map(e=>e.label),showProgress:K}),Be=S>oe.width+1,Jt=fe!=="auto"?r.default.labelsFixed:rt?ie==="below"?r.default.labelsCompactWithSummary:r.default.labelsCompact:"",ht={gap:Fe,paddingTop:k},Qt=n.jsxs("div",{className:r.default.body,children:[n.jsx(Ls,{className:Jt,collapsibleGroups:x,items:U,onToggleGroup:Ye.toggle,style:{...ht,width:fe==="auto"?void 0:fe},summaries:ie==="below"?Le:void 0}),n.jsx("div",{"aria-label":Be&&!v?`${me}, área rolável de lado`:void 0,className:r.default.scroll,ref:oe.ref,role:Be&&!v?"region":void 0,tabIndex:Be&&!v?0:void 0,children:oe.width>0&&(_t?n.jsx(ls.ChartTooltip,{...Zt,children:ut}):ut)}),ie==="right"&&n.jsx(Ss,{inline:F<fs,items:U,style:ht,summaries:Le})]});function es(){const e=(s,t,o,i)=>({color:I(s)??"transparent",duration:se(H(o)),end:P(o.end),name:t,progress:i===void 0?void 0:yt.formatarPercentual(i),start:P(o.start)});return at.map(s=>({description:s.description,entries:[...Me.filter(t=>t.row===s.key).map(t=>e(t.series,`${t.series} (referência)`,t)),...ot(s).map(t=>e(t.series,t.label&&t.label!==t.series?`${t.series}: ${t.label}`:t.series,t,t.progress)),...Qe.filter(t=>t.row===s.key).map(t=>({color:I(t.series)??"transparent",duration:"instante",end:"—",name:t.label?`${t.series}: ${t.label}`:t.series,start:P(t.position)}))],key:s.key,label:s.label,summary:Le.get(s.key)}))}const ts=new Set((m??[]).map(e=>e.series)),ft=ne!=="none"&&C.length>=2&&n.jsx(is.ChartLegend,{align:St,entries:C.map((e,s)=>({color:ts.has(e.label)?$s(je[s]):je[s],hidden:ye.isHidden(e.label),label:e.label})),onToggle:ye.toggle,position:ne});return n.jsxs("figure",{className:r.default.figure,children:[n.jsxs("figcaption",{className:r.default.header,children:[n.jsx("span",{className:r.default.title,id:Ge,children:me}),!nt&&n.jsx(cs.Button,{"aria-pressed":Ve,onClick:()=>Ct(e=>!e),size:"sm",variant:"secondary",children:"Ver como tabela"})]}),v&&n.jsx("span",{className:r.default.visuallyHidden,id:Ke,children:"Use as setas para percorrer os intervalos."}),ne==="top"&&ft,n.jsx("div",{className:r.default.plot,ref:q.ref,children:nt?n.jsx("div",{className:r.default.empty,children:n.jsx(ds.EmptyState,{icon:n.jsx(Nt.IconChartBar,{}),size:"sm",title:Tt})}):q.width===0?null:Ve?n.jsx(ns.ChartTimelineTable,{emptyRowLabel:he,rows:es(),showProgress:K&&Te.some(e=>e.progress!==void 0),title:me}):Qt}),ne==="bottom"&&ft]})}function Ls({className:h,collapsibleGroups:g,items:m,onToggleGroup:y,style:x,summaries:p}){return n.jsx("div",{className:`${r.default.labels} ${h}`,style:x,children:m.map(u=>{if(u.kind==="group"){const ee=n.jsxs(n.Fragment,{children:[g&&n.jsx(Nt.IconChevronDown,{className:`${r.default.chevron} ${u.collapsed?r.default.chevronCollapsed:""}`}),n.jsx("span",{className:r.default.groupName,children:u.group.label}),n.jsxs("span",{className:r.default.groupCount,children:["(",u.rows.length,")"]})]});return n.jsx("div",{className:r.default.groupLabel,style:{height:u.height},children:g?n.jsx("button",{"aria-expanded":!u.collapsed,className:r.default.groupButton,onClick:()=>y(u.group.key),type:"button",children:ee}):n.jsx("span",{className:r.default.groupText,children:ee})},`group-${u.group.key}`)}const B=p==null?void 0:p.get(u.row.key);return n.jsxs("div",{className:`${r.default.rowLabel} ${u.child?r.default.childLabel:""}`,style:{height:u.height},children:[n.jsxs("span",{className:r.default.labelLine,children:[n.jsx("span",{className:r.default.labelText,title:u.row.label,children:u.row.label})," ",u.row.description&&n.jsx("span",{className:r.default.labelDescription,children:u.row.description})]}),B&&n.jsx("span",{className:r.default.labelSummary,children:B.subtitle?`${B.title} · ${B.subtitle}`:B.title})]},u.row.key)})})}function Ss({inline:h,items:g,style:m,summaries:y}){return n.jsx("div",{className:r.default.summary,style:m,children:g.map(x=>{const p=x.kind==="row"?y.get(x.row.key):void 0;return n.jsx("div",{className:`${r.default.summaryItem} ${h?r.default.summaryInline:""}`,style:{height:x.height},children:p&&n.jsxs(n.Fragment,{children:[n.jsx("span",{className:r.default.summaryTitle,children:p.title}),p.subtitle&&n.jsx("span",{className:r.default.summarySubtitle,children:p.subtitle})]})},x.kind==="row"?x.row.key:`group-${x.group.key}`)})})}exports.ChartTimeline=ks;
2
+ //# sourceMappingURL=ChartTimeline.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartTimeline.cjs","sources":["../../../../src/components/charts/ChartTimeline/ChartTimeline.tsx"],"sourcesContent":["import { group as groupBy, least, max, min, sum } from 'd3-array';\nimport { useId, useMemo, useRef, useState, type CSSProperties, type KeyboardEvent } from 'react';\nimport { Button } from '../../actions/Button';\nimport { EmptyState } from '../../feedback/EmptyState';\nimport { IconChartBar, IconChevronDown } from '../../icons';\nimport { ChartTooltip } from '../ChartTooltip';\nimport {\n CHART_LABEL_OFFSET,\n ChartLegend,\n Grid,\n measureLabel,\n roundedBarPath,\n truncateToWidth,\n useChartMetrics,\n useSeriesToggle,\n type AxisVisibility,\n type ChartLegendAlign,\n type CornerRadii,\n type LabelFont,\n} from '../core';\nimport { INTENT_TOKENS, resolveSeriesColors, textColorOn, type SeriesAppearance, type SeriesIntent } from '../palette';\nimport { linearScale } from '../scales';\nimport { formatarPercentual } from '../../../utils/formatters';\nimport { formatarDuracao } from '../../../utils/formatters/formatarDuracao';\nimport { ChartTimelineTable, type TimelineTableEntry, type TimelineTableRow } from './ChartTimelineTable';\nimport {\n layoutTimeline,\n rowsInDisplayOrder,\n statesToSegments,\n toRange,\n toTimelineSegments,\n type PlacedSegment,\n type TimelineItem,\n type TimelineRange,\n} from './timelineLayout';\nimport { autoDomain, durationMs, formatPosition, timeTicks, toDate, toPosition } from './timelineTime';\nimport { timelineTooltip, type TimelineMarker, type TimelineRowBand, type TimelineTarget } from './timelineTooltip';\nimport styles from './ChartTimeline.module.css';\n\n/** Em `calendar`, `Date` ou milissegundos desde a epoca; em `dayHours`, `Date` pela hora do dia ou a hora decimal. */\nexport type ChartTimelineTime = Date | number;\nexport type ChartTimelineScale = 'calendar' | 'dayHours';\nexport type ChartTimelineOverlap = 'stack' | 'overlay';\nexport type ChartTimelineDensity = 'sm' | 'md';\nexport type ChartTimelineSegmentLabels = 'auto' | 'visible' | 'hidden';\nexport type ChartTimelineSegmentLabelContent = 'duration' | 'label';\nexport type ChartTimelineLabelAlign = 'start' | 'center' | 'end';\nexport type ChartTimelineMarkerShape = 'line' | 'dot' | 'diamond';\n\nexport interface ChartTimelineRow {\n description?: string;\n /** Chave do grupo a que a linha pertence. */\n group?: string;\n /** Identifica a linha; o `label` pode repetir. */\n key: string;\n label: string;\n}\n\nexport interface ChartTimelineGroup {\n key: string;\n label: string;\n}\n\nexport interface ChartTimelineSeries extends SeriesAppearance {\n label: string;\n}\n\nexport interface ChartTimelineSegment {\n end: ChartTimelineTime;\n /** Nome do intervalo, como a reuniao ou o responsavel. */\n label?: string;\n /** De 0 a 1. */\n progress?: number;\n /** `key` da linha. */\n row: string;\n /** `label` da serie. */\n series: string;\n start: ChartTimelineTime;\n}\n\nexport interface ChartTimelineState {\n row: string;\n /** `label` da serie. */\n state: string;\n time: ChartTimelineTime;\n}\n\nexport interface ChartTimelineRowBand {\n end: ChartTimelineTime;\n row: string;\n series: string;\n start: ChartTimelineTime;\n}\n\nexport interface ChartTimelineBand {\n end: ChartTimelineTime;\n label?: string;\n series: string;\n start: ChartTimelineTime;\n}\n\nexport interface ChartTimelineMarker {\n label?: string;\n row: string;\n series: string;\n shape?: ChartTimelineMarkerShape;\n time: ChartTimelineTime;\n}\n\nexport interface ChartTimelineReferenceLine {\n intent?: SeriesIntent;\n label: string;\n time: ChartTimelineTime;\n}\n\nexport interface ChartTimelineSummary {\n subtitle?: string;\n title: string;\n}\n\nexport interface ChartTimelineProps {\n /** Cor de tema que abre a paleta das séries sem cor nem intenção, como nos demais gráficos. */\n accent?: string;\n axisPosition?: 'top' | 'bottom';\n /** Faixas globais, hachuradas em todas as linhas, como o adicional noturno ou o fim de semana. */\n bands?: readonly ChartTimelineBand[];\n collapsedGroups?: readonly string[];\n collapsibleGroups?: boolean;\n /** Em largura estreita, o resumo vai para baixo do rotulo ou sai. */\n compactSummary?: 'below' | 'hidden';\n defaultCollapsedGroups?: readonly string[];\n defaultHiddenSeries?: readonly string[];\n density?: ChartTimelineDensity;\n /** Faixa fixa do eixo. Sem ela, do primeiro ao ultimo instante, arredondada a hora ou ao dia. */\n domain?: readonly [ChartTimelineTime, ChartTimelineTime];\n emptyMessage?: string;\n emptyRowLabel?: string;\n formatTick?: (time: Date) => string;\n formatTime?: (time: Date) => string;\n formatTooltipValue?: (durationMs: number) => string;\n /** Formato das duracoes no rotulo da barra, na descricao e na tabela. */\n formatValue?: (durationMs: number) => string;\n groups?: readonly ChartTimelineGroup[];\n hiddenSeries?: readonly string[];\n highlightOnHover?: boolean;\n legend?: 'top' | 'bottom' | 'none';\n legendAlign?: ChartLegendAlign;\n markers?: readonly ChartTimelineMarker[];\n mergeConsecutive?: boolean;\n /** Abaixo dessa largura, o desenho rola de lado dentro do conteiner, com rotulos e resumo fixos. */\n minPlotWidth?: number;\n onCollapsedGroupsChange?: (collapsed: readonly string[]) => void;\n onHiddenSeriesChange?: (hidden: readonly string[]) => void;\n /** Com ele, os intervalos viram botoes e entram no teclado. */\n onSegmentClick?: (segment: ChartTimelineSegment, row: ChartTimelineRow) => void;\n overlap?: ChartTimelineOverlap;\n referenceLines?: readonly ChartTimelineReferenceLine[];\n rowBands?: readonly ChartTimelineRowBand[];\n rowGap?: number;\n rowLabelWidth?: number | 'auto';\n /** Coluna de resumo, calculada sobre os intervalos visiveis da linha: a legenda filtra a leitura inteira. */\n rowSummary?: (row: ChartTimelineRow, segments: readonly ChartTimelineSegment[]) => ChartTimelineSummary | undefined;\n rows: readonly ChartTimelineRow[];\n segmentLabel?: ChartTimelineSegmentLabelContent;\n segmentLabelAlign?: ChartTimelineLabelAlign;\n segments?: readonly ChartTimelineSegment[];\n series: readonly ChartTimelineSeries[];\n showGrid?: boolean;\n showProgress?: boolean;\n showSegmentLabels?: ChartTimelineSegmentLabels;\n showTooltip?: boolean;\n /** Alternativa a `segments`: cada mudanca de estado vale ate a seguinte. */\n states?: readonly ChartTimelineState[];\n /** Fim do ultimo estado de cada linha, como o instante atual. Sem ele, o fim do eixo. */\n statesEnd?: ChartTimelineTime;\n timeScale?: ChartTimelineScale;\n title: string;\n xAxis?: AxisVisibility;\n}\n\nconst DENSITY: Record<ChartTimelineDensity, { bar: number; row: number }> = {\n sm: { bar: 14, row: 26 },\n md: { bar: 20, row: 36 },\n};\n\nconst ROW_WITH_SUMMARY_BELOW = 40;\n/** Abaixo dessa altura de linha, titulo e subtitulo do resumo dividem a mesma linha. */\nconst STACKED_SUMMARY_ROW = 32;\nconst LANE_GAP = 3;\nconst GROUP_HEIGHT = 28;\nconst GROUP_BAR = 6;\nconst AXIS_HEIGHT = 24;\nconst TOP_ROOM = 6;\nconst LABELED_TOP_ROOM = 20;\nconst BOTTOM_ROOM = 6;\nconst TRACK_PADDING = 4;\nconst PLOT_START = 10;\nconst PLOT_END = 14;\n/** O que rotulos e resumo ao lado pedem alem da largura minima do desenho; abaixo disso, o resumo muda de lugar. */\nconst SIDE_COLUMNS_ROOM = 200;\nconst LABEL_PADDING = 10;\nconst MIN_LABELED_BAR = 22;\nconst MIN_CLIP_MARK_BAR = 12;\n\ninterface SegmentShape {\n clippedEnd: boolean;\n clippedStart: boolean;\n height: number;\n row: ChartTimelineRow;\n segment: PlacedSegment;\n width: number;\n x: number;\n y: number;\n}\n\n/** O canto da ponta cortada fica reto: arredondado, o intervalo pareceria terminar ali. */\nfunction cornersOf(clippedStart: boolean, clippedEnd: boolean, radius: number, closedEnd = true): CornerRadii {\n const start = clippedStart ? 0 : radius;\n const end = clippedEnd || !closedEnd ? 0 : radius;\n\n return [start, end, end, start];\n}\n\nfunction clipNote({ clippedEnd, clippedStart }: SegmentShape) {\n if (clippedStart && clippedEnd) {\n return 'começa antes e continua depois do eixo';\n }\n\n if (clippedStart) {\n return 'começa antes do eixo';\n }\n\n return clippedEnd ? 'continua depois do eixo' : undefined;\n}\n\n/** Seta para fora na ponta cortada. */\nfunction clipMarkPath({ height, width, x, y }: SegmentShape, side: 'start' | 'end') {\n const tip = side === 'end' ? x + width - 3 : x + 3;\n const back = side === 'end' ? tip - 4 : tip + 4;\n\n return `M${back},${y + 3}L${tip},${y + height / 2}L${back},${y + height - 3}`;\n}\n\n/** Rotulo dentro da barra: `auto` so quando cabe inteiro; `visible` corta com reticencias o que nao cabe. */\nfunction fitLabel(text: string, width: number, font: LabelFont, mode: ChartTimelineSegmentLabels) {\n if (mode === 'hidden') {\n return undefined;\n }\n\n if (measureLabel(text, font) + LABEL_PADDING <= width) {\n return text;\n }\n\n if (mode === 'auto' || width < MIN_LABELED_BAR) {\n return undefined;\n }\n\n return truncateToWidth(text, font, width - LABEL_PADDING) || undefined;\n}\n\nfunction hatch(color: string) {\n return `repeating-linear-gradient(45deg, ${color} 0 1.5px, var(--pl-color-surface-muted) 1.5px 4px)`;\n}\n\n/**\n * Barras de intervalo em linhas sobre um eixo de tempo continuo: quem fez o que, de quando ate quando. O desenho e\n * imagem nomeada pelo titulo; com `onSegmentClick`, um grupo cujos intervalos sao botoes de tabulacao movel. A leitura\n * medida a medida esta na visao em tabela.\n */\nexport function ChartTimeline({\n accent,\n axisPosition = 'top',\n bands,\n collapsedGroups,\n collapsibleGroups = true,\n compactSummary = 'below',\n defaultCollapsedGroups,\n defaultHiddenSeries,\n density = 'md',\n domain,\n emptyMessage = 'Sem dados no período',\n emptyRowLabel = 'Sem registro',\n formatTick,\n formatTime,\n formatTooltipValue,\n formatValue = formatarDuracao,\n groups = [],\n hiddenSeries,\n highlightOnHover = false,\n legend = 'top',\n legendAlign = 'left',\n markers,\n mergeConsecutive = true,\n minPlotWidth = 360,\n onCollapsedGroupsChange,\n onHiddenSeriesChange,\n onSegmentClick,\n overlap = 'stack',\n referenceLines = [],\n rowBands,\n rowGap = 4,\n rowLabelWidth = 'auto',\n rowSummary,\n rows,\n segmentLabel = 'duration',\n segmentLabelAlign = 'center',\n segments,\n series,\n showGrid = true,\n showProgress = true,\n showSegmentLabels = 'auto',\n showTooltip = true,\n states,\n statesEnd,\n timeScale = 'calendar',\n title,\n xAxis = 'visible',\n}: ChartTimelineProps) {\n const titleId = useId();\n const hintId = useId();\n const patternPrefix = useId().replace(/[^\\w-]/g, '');\n const outer = useChartMetrics();\n const plot = useChartMetrics();\n const seriesToggle = useSeriesToggle({ defaultHiddenSeries, hiddenSeries, onHiddenSeriesChange });\n // Recolher grupo e o mesmo controle da legenda: estado proprio ou do produto, pela chave.\n const groupToggle = useSeriesToggle({\n defaultHiddenSeries: defaultCollapsedGroups,\n hiddenSeries: collapsedGroups,\n onHiddenSeriesChange: onCollapsedGroupsChange,\n });\n const [target, setTarget] = useState<TimelineTarget | null>(null);\n const [focusedId, setFocusedId] = useState<number | null>(null);\n const [tabStopId, setTabStopId] = useState<number | null>(null);\n const [tableView, setTableView] = useState(false);\n const segmentNodes = useRef(new Map<number, SVGGElement>());\n const interactive = onSegmentClick !== undefined;\n\n const colors = useMemo(() => resolveSeriesColors(series, { accent }), [accent, series]);\n const colorByLabel = new Map<string, string>();\n series.forEach((entry, index) => {\n // Rotulo repetido e a mesma serie, como na legenda dos demais graficos: vale a primeira cor.\n if (!colorByLabel.has(entry.label)) {\n colorByLabel.set(entry.label, colors[index]);\n }\n });\n const colorOf = (label: string) => colorByLabel.get(label);\n const isVisible = (label: string) => colorByLabel.has(label) && !seriesToggle.isHidden(label);\n\n const data = useMemo(() => {\n const position = (time: ChartTimelineTime) => toPosition(time, timeScale);\n const allRowBands = (rowBands ?? []).flatMap((band): TimelineRowBand[] => {\n const range = toRange(band.start, band.end, timeScale);\n return range ? [{ ...range, row: band.row, series: band.series }] : [];\n });\n const allMarkers = (markers ?? []).flatMap((marker): TimelineMarker[] => {\n const markerPosition = position(marker.time);\n return Number.isFinite(markerPosition) ? [{ ...marker, position: markerPosition }] : [];\n });\n const given = states ? [] : toTimelineSegments(segments ?? [], timeScale);\n const instants = states\n ? [...states.map((state) => position(state.time)), ...(statesEnd === undefined ? [] : [position(statesEnd)])]\n : given.flatMap((segment) => [segment.start, segment.end]);\n const fixed = domain?.map(position);\n const range: [number, number] =\n fixed && fixed[0] < fixed[1]\n ? [fixed[0], fixed[1]]\n : autoDomain(\n [\n ...instants,\n ...allRowBands.flatMap((band) => [band.start, band.end]),\n ...allMarkers.map((marker) => marker.position),\n ],\n timeScale,\n );\n const allSegments = states\n ? toTimelineSegments(statesToSegments(states, statesEnd ?? range[1], mergeConsecutive, timeScale), timeScale)\n : given;\n\n return { allMarkers, allRowBands, allSegments, range };\n }, [domain, markers, mergeConsecutive, rowBands, segments, states, statesEnd, timeScale]);\n\n const { allMarkers, allRowBands, allSegments, range: timeRange } = data;\n const duration = (range: TimelineRange) => durationMs(range.start, range.end, timeScale);\n const formatInstant = (position: number) => {\n // O fim de um intervalo que cruzou a meia-noite e lido no dia seguinte.\n const time = timeScale === 'dayHours' && position > 24 ? position - 24 : position;\n return formatTime ? formatTime(toDate(time, timeScale)) : formatPosition(time, timeScale);\n };\n\n const visibleSegments = allSegments.filter((segment) => isVisible(segment.series));\n const visibleRowBands = allRowBands.filter((band) => isVisible(band.series));\n const visibleMarkers = allMarkers.filter((marker) => isVisible(marker.series));\n const visibleBands = (bands ?? []).flatMap((band) => {\n const range = toRange(band.start, band.end, timeScale);\n return range && isVisible(band.series) ? [{ ...band, ...range }] : [];\n });\n const segmentsByRow = groupBy(visibleSegments, (segment) => segment.row);\n const rowsWithSegments = new Set(allSegments.map((segment) => segment.row));\n const rowsWithData = new Set([\n ...rowsWithSegments,\n ...allRowBands.map((band) => band.row),\n ...allMarkers.map((marker) => marker.row),\n ]);\n const empty = rows.length === 0 || rowsWithData.size === 0;\n\n const compact = outer.width > 0 && outer.width < minPlotWidth + SIDE_COLUMNS_ROOM;\n const summaryMode = !rowSummary ? 'none' : compact ? compactSummary : 'right';\n const size = DENSITY[density];\n const rowHeight = summaryMode === 'below' ? Math.max(size.row, ROW_WITH_SUMMARY_BELOW) : size.row;\n const laneStep = size.bar + LANE_GAP;\n const { height: rowsHeight, items } = layoutTimeline({\n groupHeight: GROUP_HEIGHT,\n groups,\n isCollapsed: collapsibleGroups ? groupToggle.isHidden : () => false,\n laneStep,\n overlap,\n rowGap,\n rowHeight,\n rows,\n segments: visibleSegments,\n });\n\n const rowSegments = (row: ChartTimelineRow) =>\n [...(segmentsByRow.get(row.key) ?? [])].sort((a, b) => a.start - b.start || a.end - b.end);\n const orderedRows = rowsInDisplayOrder(rows, groups);\n const summaries = new Map(\n rowSummary\n ? orderedRows.map((row) => [row.key, rowSummary(row, rowSegments(row).map((segment) => segment.source))])\n : [],\n );\n\n const axisHeight = xAxis === 'hidden' ? 0 : AXIS_HEIGHT;\n const axisOnTop = axisPosition === 'top';\n const plotTop = axisOnTop ? axisHeight : 0;\n const labeledTop = referenceLines.length > 0 || visibleBands.some((band) => band.label);\n const rowsTop = plotTop + (labeledTop ? LABELED_TOP_ROOM : TOP_ROOM);\n const rowsBottom = rowsTop + rowsHeight;\n const svgHeight = rowsBottom + BOTTOM_ROOM + (axisOnTop ? 0 : axisHeight);\n const svgWidth = Math.max(plot.width, minPlotWidth);\n const x = linearScale({\n domain: { max: timeRange[1], min: timeRange[0] },\n nice: false,\n range: [PLOT_START, svgWidth - PLOT_END],\n });\n const xStart = x(timeRange[0]);\n const xEnd = x(timeRange[1]);\n const ticks = timeTicks(timeRange, timeScale, xEnd - xStart, formatTick);\n const font = outer.font;\n const radius = outer.radius;\n\n function shapeOf(segment: PlacedSegment, row: ChartTimelineRow, top: number): SegmentShape | undefined {\n const rawStart = x(segment.start);\n const rawEnd = x(segment.end);\n const start = Math.max(rawStart, xStart);\n const end = Math.min(rawEnd, xEnd);\n\n if (end <= start) {\n return undefined;\n }\n\n // Um pixel de folga de cada lado separa intervalos encostados.\n const gap = end - start > 4 ? 1 : 0;\n\n return {\n clippedEnd: rawEnd > xEnd + 0.5,\n clippedStart: rawStart < xStart - 0.5,\n height: size.bar,\n row,\n segment,\n width: Math.max(end - start - gap * 2, 2),\n x: start + gap,\n y: top + (rowHeight - size.bar) / 2 + segment.lane * laneStep,\n };\n }\n\n const shapesByRow = new Map(\n items.flatMap((item) =>\n item.kind === 'row'\n ? [\n [\n item.row.key,\n item.segments.flatMap((segment) => shapeOf(segment, item.row, rowsTop + item.y) ?? []),\n ] as const,\n ]\n : [],\n ),\n );\n const navigableRows = [...shapesByRow.values()].filter((shapes) => shapes.length > 0);\n const focusable = navigableRows.flat();\n const tabStop = focusable.some((shape) => shape.segment.id === tabStopId) ? tabStopId : focusable[0]?.segment.id;\n const focusedShape = focusable.find((shape) => shape.segment.id === focusedId);\n const emphasizedSeries = !highlightOnHover\n ? undefined\n : target?.kind === 'segment'\n ? target.segment.series\n : focusedShape?.segment.series;\n\n function focusSegment(shape: SegmentShape | undefined) {\n if (shape) {\n setTabStopId(shape.segment.id);\n segmentNodes.current.get(shape.segment.id)?.focus();\n }\n }\n\n function handleSegmentKeyDown(event: KeyboardEvent<SVGGElement>, shape: SegmentShape) {\n const rowIndex = navigableRows.findIndex((shapes) => shapes.includes(shape));\n const inRow = navigableRows[rowIndex];\n const index = inRow.indexOf(shape);\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onSegmentClick?.(shape.segment.source, shape.row);\n return;\n }\n\n const nearestIn = (shapes: readonly SegmentShape[] | undefined) =>\n shapes && least(shapes, (candidate) => Math.abs(candidate.segment.start - shape.segment.start));\n const destinations: Record<string, SegmentShape | undefined> = {\n ArrowDown: nearestIn(navigableRows[rowIndex + 1]),\n ArrowLeft: inRow[index - 1],\n ArrowRight: inRow[index + 1],\n ArrowUp: nearestIn(navigableRows[rowIndex - 1]),\n End: inRow.at(-1),\n Home: inRow[0],\n };\n\n if (event.key in destinations) {\n event.preventDefault();\n focusSegment(destinations[event.key]);\n }\n }\n\n const describe = (shape: SegmentShape) => {\n const { row, segment } = shape;\n\n return [\n row.label,\n segment.series,\n segment.label !== segment.series ? segment.label : undefined,\n `${formatInstant(segment.start)} a ${formatInstant(segment.end)}`,\n formatValue(duration(segment)),\n showProgress && segment.progress !== undefined ? `${formatarPercentual(segment.progress)} concluído` : undefined,\n clipNote(shape),\n ]\n .filter(Boolean)\n .join(', ');\n };\n\n function renderSegment(shape: SegmentShape) {\n const { segment } = shape;\n const id = segment.id;\n const color = colorOf(segment.series) ?? 'currentColor';\n const onColor = textColorOn(color);\n const progress = showProgress ? segment.progress : undefined;\n const text = fitLabel(\n segmentLabel === 'label' ? (segment.label ?? segment.series) : formatValue(duration(segment)),\n shape.width,\n font,\n showSegmentLabels,\n );\n const anchor = { center: 'middle', end: 'end', start: 'start' } as const;\n const textX =\n segmentLabelAlign === 'start'\n ? shape.x + 5\n : segmentLabelAlign === 'end'\n ? shape.x + shape.width - 5\n : shape.x + shape.width / 2;\n const overFill = progress === undefined || (textX - shape.x) / shape.width <= progress;\n\n return (\n <g\n aria-label={describe(shape)}\n className={`${styles.segment} ${interactive ? styles.clickable : ''} ${\n emphasizedSeries !== undefined && emphasizedSeries !== segment.series ? styles.dimmed : ''\n }`}\n key={id}\n onBlur={interactive ? () => setFocusedId(null) : undefined}\n onClick={\n onSegmentClick\n ? () => {\n setTabStopId(id);\n onSegmentClick(segment.source, shape.row);\n }\n : undefined\n }\n onFocus={\n interactive\n ? () => {\n setFocusedId(id);\n setTabStopId(id);\n }\n : undefined\n }\n onKeyDown={interactive ? (event) => handleSegmentKeyDown(event, shape) : undefined}\n onMouseEnter={() => setTarget({ clip: clipNote(shape), kind: 'segment', row: shape.row, segment })}\n onMouseLeave={() => setTarget(null)}\n ref={\n interactive\n ? (node) => {\n if (node) {\n segmentNodes.current.set(id, node);\n } else {\n segmentNodes.current.delete(id);\n }\n }\n : undefined\n }\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? (id === tabStop ? 0 : -1) : undefined}\n >\n <path\n className={overlap === 'overlay' ? styles.barOverlay : undefined}\n d={roundedBarPath(\n shape.x,\n shape.y,\n shape.width,\n shape.height,\n cornersOf(shape.clippedStart, shape.clippedEnd, radius),\n )}\n fill={color}\n fillOpacity={progress === undefined ? undefined : 0.3}\n />\n {progress !== undefined && progress > 0 && (\n <path\n d={roundedBarPath(\n shape.x,\n shape.y,\n Math.max(shape.width * progress, 2),\n shape.height,\n cornersOf(shape.clippedStart, shape.clippedEnd, radius, progress >= 1),\n )}\n fill={color}\n />\n )}\n {shape.width >= MIN_CLIP_MARK_BAR &&\n (['start', 'end'] as const)\n .filter((side) => (side === 'start' ? shape.clippedStart : shape.clippedEnd))\n .map((side) => (\n <path className={styles.clipMark} d={clipMarkPath(shape, side)} key={side} stroke={onColor} />\n ))}\n {text !== undefined && (\n <text\n className={styles.segmentLabel}\n dominantBaseline=\"central\"\n fill={overFill ? onColor : 'var(--pl-color-text)'}\n textAnchor={anchor[segmentLabelAlign]}\n x={textX}\n y={shape.y + shape.height / 2}\n >\n {text}\n </text>\n )}\n </g>\n );\n }\n\n function renderRow(item: Extract<TimelineItem, { kind: 'row' }>) {\n const top = rowsTop + item.y;\n const { row } = item;\n const trackY = top + (rowHeight - size.bar) / 2 - TRACK_PADDING;\n const trackHeight = size.bar + (item.laneCount - 1) * laneStep + TRACK_PADDING * 2;\n\n return (\n <g aria-hidden=\"true\" key={row.key}>\n <rect\n className={styles.track}\n height={trackHeight}\n rx={TRACK_PADDING}\n width={xEnd - xStart}\n x={xStart}\n y={trackY}\n />\n {visibleRowBands\n .filter((band) => band.row === row.key)\n .map((band, index) => {\n const start = Math.max(x(band.start), xStart);\n const end = Math.min(x(band.end), xEnd);\n\n return end > start ? (\n <rect\n fill={colorOf(band.series)}\n height={trackHeight}\n key={index}\n rx={TRACK_PADDING}\n width={end - start}\n x={start}\n y={trackY}\n />\n ) : null;\n })}\n {!rowsWithData.has(row.key) && (\n <text className={styles.emptyRowText} dominantBaseline=\"central\" x={xStart + 8} y={top + rowHeight / 2}>\n {emptyRowLabel}\n </text>\n )}\n <rect\n className={styles.hoverArea}\n height={item.height}\n onMouseEnter={() =>\n setTarget({\n empty: !rowsWithSegments.has(row.key),\n kind: 'row',\n row,\n rowBands: visibleRowBands.filter((band) => band.row === row.key),\n segments: segmentsByRow.get(row.key) ?? [],\n })\n }\n onMouseLeave={() => setTarget(null)}\n width={svgWidth}\n x={0}\n y={top}\n />\n </g>\n );\n }\n\n function renderMarker(marker: TimelineMarker, { height, row, y }: Extract<TimelineItem, { kind: 'row' }>) {\n if (marker.position < timeRange[0] || marker.position > timeRange[1]) {\n return null;\n }\n\n const color = colorOf(marker.series);\n const top = rowsTop + y;\n const cx = x(marker.position);\n const cy = top + rowHeight / 2;\n const shape = marker.shape ?? 'line';\n\n return (\n <g key={`${row.key}-${allMarkers.indexOf(marker)}`}>\n {shape === 'line' && (\n <rect\n className={styles.marker}\n fill={color}\n height={size.bar + 6}\n rx={1}\n width={2}\n x={cx - 1}\n y={cy - size.bar / 2 - 3}\n />\n )}\n {shape === 'dot' && <circle className={styles.marker} cx={cx} cy={cy} fill={color} r={4} />}\n {shape === 'diamond' && (\n <path\n className={styles.marker}\n d={`M${cx},${cy - 6}L${cx + 6},${cy}L${cx},${cy + 6}L${cx - 6},${cy}Z`}\n fill={color}\n />\n )}\n <rect\n className={styles.hoverArea}\n height={height}\n onMouseEnter={() => setTarget({ kind: 'marker', marker, row })}\n onMouseLeave={() => setTarget(null)}\n width={10}\n x={cx - 5}\n y={top}\n />\n </g>\n );\n }\n\n function renderGroupBar(item: Extract<TimelineItem, { kind: 'group' }>) {\n const top = rowsTop + item.y;\n const barY = top + item.height / 2 - GROUP_BAR / 2;\n const drawn = item.segments.length > 0;\n const start = drawn ? Math.max(x(min(item.segments, (segment) => segment.start) ?? 0), xStart) : 0;\n const end = drawn ? Math.min(x(max(item.segments, (segment) => segment.end) ?? 0), xEnd) : 0;\n const withProgress = item.segments.filter((segment) => segment.progress !== undefined);\n const total = sum(withProgress, duration);\n const done = sum(withProgress, (segment) => duration(segment) * (segment.progress ?? 0));\n const width = Math.max(end - start, 2);\n\n return (\n <g aria-hidden=\"true\" key={`group-${item.group.key}`}>\n {drawn && end > start && (\n <g className={styles.passThrough}>\n <rect className={styles.groupBar} height={GROUP_BAR} rx={GROUP_BAR / 2} width={width} x={start} y={barY} />\n {showProgress && done > 0 && total > 0 && (\n <rect\n className={styles.groupProgress}\n height={GROUP_BAR}\n rx={GROUP_BAR / 2}\n width={Math.max((width * done) / total, 2)}\n x={start}\n y={barY}\n />\n )}\n </g>\n )}\n <rect\n className={styles.hoverArea}\n height={item.height}\n onMouseEnter={() =>\n setTarget({\n collapsed: item.collapsed,\n group: item.group,\n kind: 'group',\n rowCount: item.rows.length,\n segments: item.segments,\n })\n }\n onMouseLeave={() => setTarget(null)}\n width={svgWidth}\n x={0}\n y={top}\n />\n </g>\n );\n }\n\n const tickAnchor = (position: number, label: string) => {\n const half = measureLabel(label, font) / 2;\n return position - half < 0 ? 'start' : position + half > svgWidth ? 'end' : 'middle';\n };\n const axisLineY = axisOnTop ? axisHeight - 0.5 : rowsBottom + BOTTOM_ROOM + 0.5;\n\n const svg = (\n <svg\n aria-describedby={interactive ? hintId : undefined}\n aria-labelledby={titleId}\n className={styles.canvas}\n height={svgHeight}\n role={interactive ? 'group' : 'img'}\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n width={svgWidth}\n >\n <defs>\n {visibleBands.map((band, index) => (\n <pattern\n height={6}\n id={`${patternPrefix}-${index}`}\n key={index}\n patternTransform=\"rotate(45)\"\n patternUnits=\"userSpaceOnUse\"\n width={6}\n >\n <line className={styles.hatchLine} stroke={colorOf(band.series)} x1={0} x2={0} y1={0} y2={6} />\n </pattern>\n ))}\n </defs>\n\n {items.map((item) => (item.kind === 'row' ? renderRow(item) : null))}\n\n <g aria-hidden=\"true\" className={styles.passThrough}>\n {visibleBands.map((band, index) => {\n const start = Math.max(x(band.start), xStart);\n const end = Math.min(x(band.end), xEnd);\n\n if (end <= start) {\n return null;\n }\n\n return (\n <g key={index}>\n <rect\n fill={`url(#${patternPrefix}-${index})`}\n height={rowsBottom + BOTTOM_ROOM - plotTop}\n width={end - start}\n x={start}\n y={plotTop}\n />\n {band.label && measureLabel(band.label, font) + 8 <= end - start && (\n <text className={styles.bandLabel} x={start + 4} y={rowsTop - 7}>\n {band.label}\n </text>\n )}\n </g>\n );\n })}\n </g>\n\n {showGrid && (\n <g className={styles.passThrough} transform={`translate(0 ${plotTop})`}>\n <Grid\n length={rowsBottom + BOTTOM_ROOM - plotTop}\n lines={ticks.map((tick) => Math.round(x(tick.position)) + 0.5)}\n orientation=\"vertical\"\n />\n </g>\n )}\n\n {items.map((item) => (item.kind === 'group' ? renderGroupBar(item) : null))}\n\n <g>{[...shapesByRow.values()].flat().map(renderSegment)}</g>\n\n <g aria-hidden=\"true\">\n {items.flatMap((item) =>\n item.kind === 'row'\n ? visibleMarkers.filter((marker) => marker.row === item.row.key).map((marker) => renderMarker(marker, item))\n : [],\n )}\n </g>\n\n <g aria-hidden=\"true\" className={styles.passThrough}>\n {referenceLines.map((line, index) => {\n const position = toPosition(line.time, timeScale);\n\n if (!(position >= timeRange[0] && position <= timeRange[1])) {\n return null;\n }\n\n const lineX = Math.round(x(position)) + 0.5;\n const toTheRight = lineX + 4 + measureLabel(line.label, font) <= svgWidth - 2;\n const color = line.intent ? INTENT_TOKENS[line.intent] : 'var(--pl-color-text-secondary)';\n\n return (\n <g key={index}>\n <line\n className={styles.referenceLine}\n stroke={color}\n x1={lineX}\n x2={lineX}\n y1={rowsTop - 16}\n y2={rowsBottom + BOTTOM_ROOM}\n />\n <text\n className={styles.referenceLabel}\n textAnchor={toTheRight ? 'start' : 'end'}\n x={toTheRight ? lineX + 4 : lineX - 4}\n y={rowsTop - 7}\n >\n {line.label}\n </text>\n </g>\n );\n })}\n </g>\n\n {xAxis !== 'hidden' && (\n <g aria-hidden=\"true\" className={`${styles.passThrough} ${xAxis === 'onHover' ? styles.axisOnHover : ''}`}>\n <line className={styles.axisLine} x1={xStart} x2={xEnd} y1={axisLineY} y2={axisLineY} />\n {ticks.map((tick) => (\n <text\n className={styles.axisLabel}\n dominantBaseline={axisOnTop ? 'auto' : 'hanging'}\n key={tick.position}\n textAnchor={tickAnchor(x(tick.position), tick.label)}\n x={x(tick.position)}\n y={axisOnTop ? axisLineY - CHART_LABEL_OFFSET : axisLineY + CHART_LABEL_OFFSET}\n >\n {tick.label}\n </text>\n ))}\n </g>\n )}\n\n {focusedShape && (\n <rect\n aria-hidden=\"true\"\n className={styles.focusRing}\n height={focusedShape.height + 6}\n rx={radius}\n width={focusedShape.width + 6}\n x={focusedShape.x - 3}\n y={focusedShape.y - 3}\n />\n )}\n </svg>\n );\n\n const tooltip = timelineTooltip(target, {\n colorOf,\n duration,\n emptyRowLabel,\n formatDuration: formatTooltipValue ?? formatValue,\n formatInstant,\n seriesOrder: series.map((entry) => entry.label),\n showProgress,\n });\n\n const scrolls = svgWidth > plot.width + 1;\n const labelsClass =\n rowLabelWidth !== 'auto'\n ? styles.labelsFixed\n : compact\n ? summaryMode === 'below'\n ? styles.labelsCompactWithSummary\n : styles.labelsCompact\n : '';\n const columnStyle = { gap: rowGap, paddingTop: rowsTop };\n\n const body = (\n <div className={styles.body}>\n <TimelineLabels\n className={labelsClass}\n collapsibleGroups={collapsibleGroups}\n items={items}\n onToggleGroup={groupToggle.toggle}\n style={{ ...columnStyle, width: rowLabelWidth === 'auto' ? undefined : rowLabelWidth }}\n summaries={summaryMode === 'below' ? summaries : undefined}\n />\n\n <div\n aria-label={scrolls && !interactive ? `${title}, área rolável de lado` : undefined}\n className={styles.scroll}\n ref={plot.ref}\n role={scrolls && !interactive ? 'region' : undefined}\n tabIndex={scrolls && !interactive ? 0 : undefined}\n >\n {plot.width > 0 && (showTooltip ? <ChartTooltip {...tooltip}>{svg}</ChartTooltip> : svg)}\n </div>\n\n {summaryMode === 'right' && (\n <TimelineSummaries\n inline={rowHeight < STACKED_SUMMARY_ROW}\n items={items}\n style={columnStyle}\n summaries={summaries}\n />\n )}\n </div>\n );\n\n function tableRows(): TimelineTableRow[] {\n const entry = (seriesLabel: string, name: string, range: TimelineRange, progress?: number): TimelineTableEntry => ({\n color: colorOf(seriesLabel) ?? 'transparent',\n duration: formatValue(duration(range)),\n end: formatInstant(range.end),\n name,\n progress: progress === undefined ? undefined : formatarPercentual(progress),\n start: formatInstant(range.start),\n });\n\n return orderedRows.map((row) => ({\n description: row.description,\n entries: [\n ...visibleRowBands\n .filter((band) => band.row === row.key)\n .map((band) => entry(band.series, `${band.series} (referência)`, band)),\n ...rowSegments(row).map((segment) =>\n entry(\n segment.series,\n segment.label && segment.label !== segment.series ? `${segment.series}: ${segment.label}` : segment.series,\n segment,\n segment.progress,\n ),\n ),\n ...visibleMarkers\n .filter((marker) => marker.row === row.key)\n .map((marker) => ({\n color: colorOf(marker.series) ?? 'transparent',\n duration: 'instante',\n end: '—',\n name: marker.label ? `${marker.series}: ${marker.label}` : marker.series,\n start: formatInstant(marker.position),\n })),\n ],\n key: row.key,\n label: row.label,\n summary: summaries.get(row.key),\n }));\n }\n\n const hatchedSeries = new Set((bands ?? []).map((band) => band.series));\n const legendView = legend !== 'none' && series.length >= 2 && (\n <ChartLegend\n align={legendAlign}\n entries={series.map((entry, index) => ({\n // A faixa global e hachurada no desenho, e a amostra repete a hachura.\n color: hatchedSeries.has(entry.label) ? hatch(colors[index]) : colors[index],\n hidden: seriesToggle.isHidden(entry.label),\n label: entry.label,\n }))}\n onToggle={seriesToggle.toggle}\n position={legend}\n />\n );\n\n return (\n <figure className={styles.figure}>\n <figcaption className={styles.header}>\n <span className={styles.title} id={titleId}>\n {title}\n </span>\n {!empty && (\n <Button\n aria-pressed={tableView}\n onClick={() => setTableView((current) => !current)}\n size=\"sm\"\n variant=\"secondary\"\n >\n Ver como tabela\n </Button>\n )}\n </figcaption>\n\n {interactive && (\n <span className={styles.visuallyHidden} id={hintId}>\n Use as setas para percorrer os intervalos.\n </span>\n )}\n\n {legend === 'top' && legendView}\n\n <div className={styles.plot} ref={outer.ref}>\n {empty ? (\n <div className={styles.empty}>\n <EmptyState icon={<IconChartBar />} size=\"sm\" title={emptyMessage} />\n </div>\n ) : outer.width === 0 ? null : tableView ? (\n <ChartTimelineTable\n emptyRowLabel={emptyRowLabel}\n rows={tableRows()}\n showProgress={showProgress && visibleSegments.some((segment) => segment.progress !== undefined)}\n title={title}\n />\n ) : (\n body\n )}\n </div>\n\n {legend === 'bottom' && legendView}\n </figure>\n );\n}\n\ninterface TimelineLabelsProps {\n className: string;\n collapsibleGroups: boolean;\n items: readonly TimelineItem[];\n onToggleGroup: (groupKey: string) => void;\n style: CSSProperties;\n /** Resumo abaixo do rotulo, na largura estreita. */\n summaries?: ReadonlyMap<string, ChartTimelineSummary | undefined>;\n}\n\n/** Coluna dos rotulos, em texto, cada item na altura da sua linha no desenho. O cabecalho do grupo recolhe o grupo. */\nfunction TimelineLabels({ className, collapsibleGroups, items, onToggleGroup, style, summaries }: TimelineLabelsProps) {\n return (\n <div className={`${styles.labels} ${className}`} style={style}>\n {items.map((item) => {\n if (item.kind === 'group') {\n const content = (\n <>\n {collapsibleGroups && (\n <IconChevronDown className={`${styles.chevron} ${item.collapsed ? styles.chevronCollapsed : ''}`} />\n )}\n <span className={styles.groupName}>{item.group.label}</span>\n <span className={styles.groupCount}>({item.rows.length})</span>\n </>\n );\n\n return (\n <div className={styles.groupLabel} key={`group-${item.group.key}`} style={{ height: item.height }}>\n {collapsibleGroups ? (\n <button\n aria-expanded={!item.collapsed}\n className={styles.groupButton}\n onClick={() => onToggleGroup(item.group.key)}\n type=\"button\"\n >\n {content}\n </button>\n ) : (\n <span className={styles.groupText}>{content}</span>\n )}\n </div>\n );\n }\n\n const summary = summaries?.get(item.row.key);\n\n return (\n <div\n className={`${styles.rowLabel} ${item.child ? styles.childLabel : ''}`}\n key={item.row.key}\n style={{ height: item.height }}\n >\n <span className={styles.labelLine}>\n <span className={styles.labelText} title={item.row.label}>\n {item.row.label}\n </span>{' '}\n {item.row.description && <span className={styles.labelDescription}>{item.row.description}</span>}\n </span>\n {summary && (\n <span className={styles.labelSummary}>\n {summary.subtitle ? `${summary.title} · ${summary.subtitle}` : summary.title}\n </span>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\ninterface TimelineSummariesProps {\n /** Titulo e subtitulo na mesma linha, quando ela e baixa demais para empilhar os dois. */\n inline: boolean;\n items: readonly TimelineItem[];\n style: CSSProperties;\n summaries: ReadonlyMap<string, ChartTimelineSummary | undefined>;\n}\n\nfunction TimelineSummaries({ inline, items, style, summaries }: TimelineSummariesProps) {\n return (\n <div className={styles.summary} style={style}>\n {items.map((item) => {\n const summary = item.kind === 'row' ? summaries.get(item.row.key) : undefined;\n\n return (\n <div\n className={`${styles.summaryItem} ${inline ? styles.summaryInline : ''}`}\n key={item.kind === 'row' ? item.row.key : `group-${item.group.key}`}\n style={{ height: item.height }}\n >\n {summary && (\n <>\n <span className={styles.summaryTitle}>{summary.title}</span>\n {summary.subtitle && <span className={styles.summarySubtitle}>{summary.subtitle}</span>}\n </>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["DENSITY","ROW_WITH_SUMMARY_BELOW","STACKED_SUMMARY_ROW","LANE_GAP","GROUP_HEIGHT","GROUP_BAR","AXIS_HEIGHT","TOP_ROOM","LABELED_TOP_ROOM","BOTTOM_ROOM","TRACK_PADDING","PLOT_START","PLOT_END","SIDE_COLUMNS_ROOM","LABEL_PADDING","MIN_LABELED_BAR","MIN_CLIP_MARK_BAR","cornersOf","clippedStart","clippedEnd","radius","closedEnd","start","end","clipNote","clipMarkPath","height","width","x","side","tip","back","fitLabel","text","font","mode","measureLabel","truncateToWidth","hatch","color","ChartTimeline","accent","axisPosition","bands","collapsedGroups","collapsibleGroups","compactSummary","defaultCollapsedGroups","defaultHiddenSeries","density","domain","emptyMessage","emptyRowLabel","formatTick","formatTime","formatTooltipValue","formatValue","formatarDuracao","groups","hiddenSeries","highlightOnHover","legend","legendAlign","markers","mergeConsecutive","minPlotWidth","onCollapsedGroupsChange","onHiddenSeriesChange","onSegmentClick","overlap","referenceLines","rowBands","rowGap","rowLabelWidth","rowSummary","rows","segmentLabel","segmentLabelAlign","segments","series","showGrid","showProgress","showSegmentLabels","showTooltip","states","statesEnd","timeScale","title","xAxis","titleId","useId","hintId","patternPrefix","outer","useChartMetrics","plot","seriesToggle","useSeriesToggle","groupToggle","target","setTarget","useState","focusedId","setFocusedId","tabStopId","setTabStopId","tableView","setTableView","segmentNodes","useRef","interactive","colors","useMemo","resolveSeriesColors","colorByLabel","entry","index","colorOf","label","isVisible","data","position","time","toPosition","allRowBands","band","range","toRange","allMarkers","marker","markerPosition","given","toTimelineSegments","instants","state","segment","fixed","autoDomain","allSegments","statesToSegments","timeRange","duration","durationMs","formatInstant","toDate","formatPosition","visibleSegments","visibleRowBands","visibleMarkers","visibleBands","segmentsByRow","groupBy","rowsWithSegments","rowsWithData","empty","compact","summaryMode","size","rowHeight","laneStep","rowsHeight","items","layoutTimeline","rowSegments","row","a","b","orderedRows","rowsInDisplayOrder","summaries","axisHeight","axisOnTop","plotTop","labeledTop","rowsTop","rowsBottom","svgHeight","svgWidth","linearScale","xStart","xEnd","ticks","timeTicks","shapeOf","top","rawStart","rawEnd","gap","shapesByRow","item","navigableRows","shapes","focusable","tabStop","shape","_a","focusedShape","emphasizedSeries","focusSegment","handleSegmentKeyDown","event","rowIndex","inRow","nearestIn","least","candidate","destinations","describe","formatarPercentual","renderSegment","id","onColor","textColorOn","progress","anchor","textX","overFill","jsxs","styles","node","jsx","roundedBarPath","renderRow","trackY","trackHeight","renderMarker","y","cx","cy","renderGroupBar","barY","drawn","min","max","withProgress","total","sum","done","tickAnchor","half","axisLineY","svg","Grid","tick","line","lineX","toTheRight","INTENT_TOKENS","CHART_LABEL_OFFSET","tooltip","timelineTooltip","scrolls","labelsClass","columnStyle","body","TimelineLabels","ChartTooltip","TimelineSummaries","tableRows","seriesLabel","name","hatchedSeries","legendView","ChartLegend","Button","current","EmptyState","IconChartBar","ChartTimelineTable","className","onToggleGroup","style","content","Fragment","IconChevronDown","summary","inline"],"mappings":"m9BAoLMA,GAAsE,CAC1E,GAAI,CAAE,IAAK,GAAI,IAAK,EAAA,EACpB,GAAI,CAAE,IAAK,GAAI,IAAK,EAAA,CACtB,EAEMC,GAAyB,GAEzBC,GAAsB,GACtBC,GAAW,EACXC,GAAe,GACfC,EAAY,EACZC,GAAc,GACdC,GAAW,EACXC,GAAmB,GACnBC,EAAc,EACdC,GAAgB,EAChBC,GAAa,GACbC,GAAW,GAEXC,GAAoB,IACpBC,GAAgB,GAChBC,GAAkB,GAClBC,GAAoB,GAc1B,SAASC,GAAUC,EAAuBC,EAAqBC,EAAgBC,EAAY,GAAmB,CAC5G,MAAMC,EAAQJ,EAAe,EAAIE,EAC3BG,EAAMJ,GAAc,CAACE,EAAY,EAAID,EAE3C,MAAO,CAACE,EAAOC,EAAKA,EAAKD,CAAK,CAChC,CAEA,SAASE,GAAS,CAAE,WAAAL,EAAY,aAAAD,GAA8B,CAC5D,OAAIA,GAAgBC,EACX,yCAGLD,EACK,uBAGFC,EAAa,0BAA4B,MAClD,CAGA,SAASM,GAAa,CAAE,OAAAC,EAAQ,MAAAC,EAAO,EAAAC,EAAG,CAAA,EAAmBC,EAAuB,CAClF,MAAMC,EAAMD,IAAS,MAAQD,EAAID,EAAQ,EAAIC,EAAI,EAC3CG,EAAOF,IAAS,MAAQC,EAAM,EAAIA,EAAM,EAE9C,MAAO,IAAIC,CAAI,IAAI,EAAI,CAAC,IAAID,CAAG,IAAI,EAAIJ,EAAS,CAAC,IAAIK,CAAI,IAAI,EAAIL,EAAS,CAAC,EAC7E,CAGA,SAASM,GAASC,EAAcN,EAAeO,EAAiBC,EAAkC,CAChG,GAAIA,IAAS,SAIb,IAAIC,EAAAA,aAAaH,EAAMC,CAAI,EAAIpB,IAAiBa,EAC9C,OAAOM,EAGT,GAAI,EAAAE,IAAS,QAAUR,EAAQZ,IAI/B,OAAOsB,EAAAA,gBAAgBJ,EAAMC,EAAMP,EAAQb,EAAa,GAAK,OAC/D,CAEA,SAASwB,GAAMC,EAAe,CAC5B,MAAO,oCAAoCA,CAAK,oDAClD,CAOO,SAASC,GAAc,CAC5B,OAAAC,EACA,aAAAC,EAAe,MACf,MAAAC,EACA,gBAAAC,EACA,kBAAAC,EAAoB,GACpB,eAAAC,EAAiB,QACjB,uBAAAC,EACA,oBAAAC,EACA,QAAAC,GAAU,KACV,OAAAC,GACA,aAAAC,GAAe,uBACf,cAAAC,GAAgB,eAChB,WAAAC,GACA,WAAAC,GACA,mBAAAC,GACA,YAAAC,GAAcC,GAAAA,gBACd,OAAAC,GAAS,CAAA,EACT,aAAAC,GACA,iBAAAC,GAAmB,GACnB,OAAAC,GAAS,MACT,YAAAC,GAAc,OACd,QAAAC,GACA,iBAAAC,GAAmB,GACnB,aAAAC,GAAe,IACf,wBAAAC,GACA,qBAAAC,GACA,eAAAC,EACA,QAAAC,GAAU,QACV,eAAAC,GAAiB,CAAA,EACjB,SAAAC,GACA,OAAAC,GAAS,EACT,cAAAC,GAAgB,OAChB,WAAAC,GACA,KAAAC,GACA,aAAAC,GAAe,WACf,kBAAAC,GAAoB,SACpB,SAAAC,GACA,OAAAC,EACA,SAAAC,GAAW,GACX,aAAAC,EAAe,GACf,kBAAAC,GAAoB,OACpB,YAAAC,GAAc,GACd,OAAAC,EACA,UAAAC,GACA,UAAAC,EAAY,WACZ,MAAAC,GACA,MAAAC,GAAQ,SACV,EAAuB,QACrB,MAAMC,GAAUC,EAAAA,MAAA,EACVC,GAASD,EAAAA,MAAA,EACTE,GAAgBF,EAAAA,MAAA,EAAQ,QAAQ,UAAW,EAAE,EAC7CG,EAAQC,GAAAA,gBAAA,EACRC,GAAOD,GAAAA,gBAAA,EACPE,GAAeC,GAAAA,gBAAgB,CAAE,oBAAAjD,EAAqB,aAAAW,GAAc,qBAAAQ,GAAsB,EAE1F+B,GAAcD,GAAAA,gBAAgB,CAClC,oBAAqBlD,EACrB,aAAcH,EACd,qBAAsBsB,EAAA,CACvB,EACK,CAACiC,EAAQC,CAAS,EAAIC,EAAAA,SAAgC,IAAI,EAC1D,CAACC,GAAWC,EAAY,EAAIF,EAAAA,SAAwB,IAAI,EACxD,CAACG,GAAWC,EAAY,EAAIJ,EAAAA,SAAwB,IAAI,EACxD,CAACK,GAAWC,EAAY,EAAIN,EAAAA,SAAS,EAAK,EAC1CO,GAAeC,EAAAA,OAAO,IAAI,GAA0B,EACpDC,EAAc1C,IAAmB,OAEjC2C,GAASC,EAAAA,QAAQ,IAAMC,GAAAA,oBAAoBlC,EAAQ,CAAE,OAAAtC,CAAA,CAAQ,EAAG,CAACA,EAAQsC,CAAM,CAAC,EAChFmC,OAAmB,IACzBnC,EAAO,QAAQ,CAACoC,EAAOC,IAAU,CAE1BF,GAAa,IAAIC,EAAM,KAAK,GAC/BD,GAAa,IAAIC,EAAM,MAAOJ,GAAOK,CAAK,CAAC,CAE/C,CAAC,EACD,MAAMC,EAAWC,GAAkBJ,GAAa,IAAII,CAAK,EACnDC,GAAaD,GAAkBJ,GAAa,IAAII,CAAK,GAAK,CAACtB,GAAa,SAASsB,CAAK,EAEtFE,GAAOR,EAAAA,QAAQ,IAAM,CACzB,MAAMS,EAAYC,GAA4BC,EAAAA,WAAWD,EAAMpC,CAAS,EAClEsC,GAAerD,IAAY,CAAA,GAAI,QAASsD,GAA4B,CACxE,MAAMC,EAAQC,EAAAA,QAAQF,EAAK,MAAOA,EAAK,IAAKvC,CAAS,EACrD,OAAOwC,EAAQ,CAAC,CAAE,GAAGA,EAAO,IAAKD,EAAK,IAAK,OAAQA,EAAK,MAAA,CAAQ,EAAI,CAAA,CACtE,CAAC,EACKG,GAAcjE,IAAW,CAAA,GAAI,QAASkE,GAA6B,CACvE,MAAMC,EAAiBT,EAASQ,EAAO,IAAI,EAC3C,OAAO,OAAO,SAASC,CAAc,EAAI,CAAC,CAAE,GAAGD,EAAQ,SAAUC,CAAA,CAAgB,EAAI,CAAA,CACvF,CAAC,EACKC,EAAQ/C,EAAS,CAAA,EAAKgD,EAAAA,mBAAmBtD,IAAY,CAAA,EAAIQ,CAAS,EAClE+C,EAAWjD,EACb,CAAC,GAAGA,EAAO,IAAKkD,GAAUb,EAASa,EAAM,IAAI,CAAC,EAAG,GAAIjD,KAAc,OAAY,CAAA,EAAK,CAACoC,EAASpC,EAAS,CAAC,CAAE,EAC1G8C,EAAM,QAASI,GAAY,CAACA,EAAQ,MAAOA,EAAQ,GAAG,CAAC,EACrDC,EAAQtF,IAAA,YAAAA,GAAQ,IAAIuE,GACpBK,EACJU,GAASA,EAAM,CAAC,EAAIA,EAAM,CAAC,EACvB,CAACA,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EACnBC,EAAAA,WACE,CACE,GAAGJ,EACH,GAAGT,EAAY,QAASC,GAAS,CAACA,EAAK,MAAOA,EAAK,GAAG,CAAC,EACvD,GAAGG,EAAW,IAAKC,GAAWA,EAAO,QAAQ,CAAA,EAE/C3C,CAAA,EAEFoD,EAActD,EAChBgD,EAAAA,mBAAmBO,EAAAA,iBAAiBvD,EAAQC,IAAayC,EAAM,CAAC,EAAG9D,GAAkBsB,CAAS,EAAGA,CAAS,EAC1G6C,EAEJ,MAAO,CAAE,WAAAH,EAAY,YAAAJ,EAAa,YAAAc,EAAa,MAAAZ,CAAA,CACjD,EAAG,CAAC5E,GAAQa,GAASC,GAAkBO,GAAUO,GAAUM,EAAQC,GAAWC,CAAS,CAAC,EAElF,CAAE,WAAA0C,GAAY,YAAAJ,GAAa,YAAAc,GAAa,MAAOE,GAAcpB,GAC7DqB,EAAYf,GAAyBgB,EAAAA,WAAWhB,EAAM,MAAOA,EAAM,IAAKxC,CAAS,EACjFyD,EAAiBtB,GAAqB,CAE1C,MAAMC,EAAOpC,IAAc,YAAcmC,EAAW,GAAKA,EAAW,GAAKA,EACzE,OAAOnE,GAAaA,GAAW0F,EAAAA,OAAOtB,EAAMpC,CAAS,CAAC,EAAI2D,EAAAA,eAAevB,EAAMpC,CAAS,CAC1F,EAEM4D,GAAkBR,GAAY,OAAQH,GAAYhB,GAAUgB,EAAQ,MAAM,CAAC,EAC3EY,GAAkBvB,GAAY,OAAQC,GAASN,GAAUM,EAAK,MAAM,CAAC,EACrEuB,GAAiBpB,GAAW,OAAQC,GAAWV,GAAUU,EAAO,MAAM,CAAC,EACvEoB,IAAgB1G,GAAS,CAAA,GAAI,QAASkF,GAAS,CACnD,MAAMC,EAAQC,EAAAA,QAAQF,EAAK,MAAOA,EAAK,IAAKvC,CAAS,EACrD,OAAOwC,GAASP,GAAUM,EAAK,MAAM,EAAI,CAAC,CAAE,GAAGA,EAAM,GAAGC,CAAA,CAAO,EAAI,CAAA,CACrE,CAAC,EACKwB,GAAgBC,EAAAA,MAAQL,GAAkBX,GAAYA,EAAQ,GAAG,EACjEiB,GAAmB,IAAI,IAAId,GAAY,IAAKH,GAAYA,EAAQ,GAAG,CAAC,EACpEkB,OAAmB,IAAI,CAC3B,GAAGD,GACH,GAAG5B,GAAY,IAAKC,GAASA,EAAK,GAAG,EACrC,GAAGG,GAAW,IAAKC,GAAWA,EAAO,GAAG,CAAA,CACzC,EACKyB,GAAQ/E,GAAK,SAAW,GAAK8E,GAAa,OAAS,EAEnDE,GAAU9D,EAAM,MAAQ,GAAKA,EAAM,MAAQ5B,GAAepD,GAC1D+I,GAAelF,GAAsBiF,GAAU7G,EAAiB,QAApC,OAC5B+G,EAAO7J,GAAQiD,EAAO,EACtB6G,EAAYF,KAAgB,QAAU,KAAK,IAAIC,EAAK,IAAK5J,EAAsB,EAAI4J,EAAK,IACxFE,GAAWF,EAAK,IAAM1J,GACtB,CAAE,OAAQ6J,GAAY,MAAAC,CAAA,EAAUC,EAAAA,eAAe,CACnD,YAAa9J,GACb,OAAAsD,GACA,YAAab,EAAoBqD,GAAY,SAAW,IAAM,GAC9D,SAAA6D,GACA,QAAA1F,GACA,OAAAG,GACA,UAAAsF,EACA,KAAAnF,GACA,SAAUuE,EAAA,CACX,EAEKiB,GAAeC,GACnB,CAAC,GAAId,GAAc,IAAIc,EAAI,GAAG,GAAK,CAAA,CAAG,EAAE,KAAK,CAACC,EAAGC,IAAMD,EAAE,MAAQC,EAAE,OAASD,EAAE,IAAMC,EAAE,GAAG,EACrFC,GAAcC,EAAAA,mBAAmB7F,GAAMjB,EAAM,EAC7C+G,GAAY,IAAI,IACpB/F,GACI6F,GAAY,IAAKH,GAAQ,CAACA,EAAI,IAAK1F,GAAW0F,EAAKD,GAAYC,CAAG,EAAE,IAAK7B,GAAYA,EAAQ,MAAM,CAAC,CAAC,CAAC,EACtG,CAAA,CAAC,EAGDmC,GAAalF,KAAU,SAAW,EAAIlF,GACtCqK,EAAYjI,IAAiB,MAC7BkI,EAAUD,EAAYD,GAAa,EACnCG,GAAavG,GAAe,OAAS,GAAK+E,GAAa,KAAMxB,GAASA,EAAK,KAAK,EAChFiD,EAAUF,GAAWC,GAAarK,GAAmBD,IACrDwK,EAAaD,EAAUd,GACvBgB,GAAYD,EAAatK,GAAekK,EAAY,EAAID,IACxDO,EAAW,KAAK,IAAIlF,GAAK,MAAO9B,EAAY,EAC5CrC,EAAIsJ,GAAAA,YAAY,CACpB,OAAQ,CAAE,IAAKtC,EAAU,CAAC,EAAG,IAAKA,EAAU,CAAC,CAAA,EAC7C,KAAM,GACN,MAAO,CAACjI,GAAYsK,EAAWrK,EAAQ,CAAA,CACxC,EACKuK,EAASvJ,EAAEgH,EAAU,CAAC,CAAC,EACvBwC,EAAOxJ,EAAEgH,EAAU,CAAC,CAAC,EACrByC,GAAQC,EAAAA,UAAU1C,EAAWtD,EAAW8F,EAAOD,EAAQ9H,EAAU,EACjEnB,GAAO2D,EAAM,KACbzE,GAASyE,EAAM,OAErB,SAAS0F,GAAQhD,EAAwB6B,EAAuBoB,EAAuC,CACrG,MAAMC,EAAW7J,EAAE2G,EAAQ,KAAK,EAC1BmD,EAAS9J,EAAE2G,EAAQ,GAAG,EACtBjH,EAAQ,KAAK,IAAImK,EAAUN,CAAM,EACjC5J,EAAM,KAAK,IAAImK,EAAQN,CAAI,EAEjC,GAAI7J,GAAOD,EACT,OAIF,MAAMqK,EAAMpK,EAAMD,EAAQ,EAAI,EAAI,EAElC,MAAO,CACL,WAAYoK,EAASN,EAAO,GAC5B,aAAcK,EAAWN,EAAS,GAClC,OAAQtB,EAAK,IACb,IAAAO,EACA,QAAA7B,EACA,MAAO,KAAK,IAAIhH,EAAMD,EAAQqK,EAAM,EAAG,CAAC,EACxC,EAAGrK,EAAQqK,EACX,EAAGH,GAAO1B,EAAYD,EAAK,KAAO,EAAItB,EAAQ,KAAOwB,EAAA,CAEzD,CAEA,MAAM6B,GAAc,IAAI,IACtB3B,EAAM,QAAS4B,GACbA,EAAK,OAAS,MACV,CACE,CACEA,EAAK,IAAI,IACTA,EAAK,SAAS,QAAStD,GAAYgD,GAAQhD,EAASsD,EAAK,IAAKf,EAAUe,EAAK,CAAC,GAAK,CAAA,CAAE,CAAA,CACvF,EAEF,CAAA,CAAC,CACP,EAEIC,EAAgB,CAAC,GAAGF,GAAY,OAAA,CAAQ,EAAE,OAAQG,GAAWA,EAAO,OAAS,CAAC,EAC9EC,GAAYF,EAAc,KAAA,EAC1BG,GAAUD,GAAU,KAAME,GAAUA,EAAM,QAAQ,KAAO1F,EAAS,EAAIA,IAAY2F,GAAAH,GAAU,CAAC,IAAX,YAAAG,GAAc,QAAQ,GACxGC,EAAeJ,GAAU,KAAME,GAAUA,EAAM,QAAQ,KAAO5F,EAAS,EACvE+F,GAAoBzI,IAEtBuC,GAAA,YAAAA,EAAQ,QAAS,UACfA,EAAO,QAAQ,OACfiG,GAAA,YAAAA,EAAc,QAAQ,OAHxB,OAKJ,SAASE,GAAaJ,EAAiC,OACjDA,IACFzF,GAAayF,EAAM,QAAQ,EAAE,GAC7BC,EAAAvF,GAAa,QAAQ,IAAIsF,EAAM,QAAQ,EAAE,IAAzC,MAAAC,EAA4C,QAEhD,CAEA,SAASI,GAAqBC,EAAmCN,EAAqB,CACpF,MAAMO,EAAWX,EAAc,UAAWC,GAAWA,EAAO,SAASG,CAAK,CAAC,EACrEQ,EAAQZ,EAAcW,CAAQ,EAC9BrF,EAAQsF,EAAM,QAAQR,CAAK,EAEjC,GAAIM,EAAM,MAAQ,SAAWA,EAAM,MAAQ,IAAK,CAC9CA,EAAM,eAAA,EACNpI,GAAA,MAAAA,EAAiB8H,EAAM,QAAQ,OAAQA,EAAM,KAC7C,MACF,CAEA,MAAMS,EAAaZ,GACjBA,GAAUa,EAAAA,MAAMb,EAASc,GAAc,KAAK,IAAIA,EAAU,QAAQ,MAAQX,EAAM,QAAQ,KAAK,CAAC,EAC1FY,EAAyD,CAC7D,UAAWH,EAAUb,EAAcW,EAAW,CAAC,CAAC,EAChD,UAAWC,EAAMtF,EAAQ,CAAC,EAC1B,WAAYsF,EAAMtF,EAAQ,CAAC,EAC3B,QAASuF,EAAUb,EAAcW,EAAW,CAAC,CAAC,EAC9C,IAAKC,EAAM,GAAG,EAAE,EAChB,KAAMA,EAAM,CAAC,CAAA,EAGXF,EAAM,OAAOM,IACfN,EAAM,eAAA,EACNF,GAAaQ,EAAaN,EAAM,GAAG,CAAC,EAExC,CAEA,MAAMO,GAAYb,GAAwB,CACxC,KAAM,CAAE,IAAA9B,EAAK,QAAA7B,CAAA,EAAY2D,EAEzB,MAAO,CACL9B,EAAI,MACJ7B,EAAQ,OACRA,EAAQ,QAAUA,EAAQ,OAASA,EAAQ,MAAQ,OACnD,GAAGQ,EAAcR,EAAQ,KAAK,CAAC,MAAMQ,EAAcR,EAAQ,GAAG,CAAC,GAC/D/E,GAAYqF,EAASN,CAAO,CAAC,EAC7BtD,GAAgBsD,EAAQ,WAAa,OAAY,GAAGyE,sBAAmBzE,EAAQ,QAAQ,CAAC,aAAe,OACvG/G,GAAS0K,CAAK,CAAA,EAEb,OAAO,OAAO,EACd,KAAK,IAAI,CACd,EAEA,SAASe,GAAcf,EAAqB,CAC1C,KAAM,CAAE,QAAA3D,GAAY2D,EACdgB,EAAK3E,EAAQ,GACbhG,EAAQ8E,EAAQkB,EAAQ,MAAM,GAAK,eACnC4E,EAAUC,GAAAA,YAAY7K,CAAK,EAC3B8K,EAAWpI,EAAesD,EAAQ,SAAW,OAC7CtG,EAAOD,GACX4C,KAAiB,QAAW2D,EAAQ,OAASA,EAAQ,OAAU/E,GAAYqF,EAASN,CAAO,CAAC,EAC5F2D,EAAM,MACNhK,GACAgD,EAAA,EAEIoI,EAAS,CAAE,OAAQ,SAAU,IAAK,MAAO,MAAO,OAAA,EAChDC,EACJ1I,KAAsB,QAClBqH,EAAM,EAAI,EACVrH,KAAsB,MACpBqH,EAAM,EAAIA,EAAM,MAAQ,EACxBA,EAAM,EAAIA,EAAM,MAAQ,EAC1BsB,EAAWH,IAAa,SAAcE,EAAQrB,EAAM,GAAKA,EAAM,OAASmB,EAE9E,OACEI,EAAAA,KAAC,IAAA,CACC,aAAYV,GAASb,CAAK,EAC1B,UAAW,GAAGwB,EAAAA,QAAO,OAAO,IAAI5G,EAAc4G,EAAAA,QAAO,UAAY,EAAE,IACjErB,KAAqB,QAAaA,KAAqB9D,EAAQ,OAASmF,UAAO,OAAS,EAC1F,GAEA,OAAQ5G,EAAc,IAAMP,GAAa,IAAI,EAAI,OACjD,QACEnC,EACI,IAAM,CACJqC,GAAayG,CAAE,EACf9I,EAAemE,EAAQ,OAAQ2D,EAAM,GAAG,CAC1C,EACA,OAEN,QACEpF,EACI,IAAM,CACJP,GAAa2G,CAAE,EACfzG,GAAayG,CAAE,CACjB,EACA,OAEN,UAAWpG,EAAe0F,GAAUD,GAAqBC,EAAON,CAAK,EAAI,OACzE,aAAc,IAAM9F,EAAU,CAAE,KAAM5E,GAAS0K,CAAK,EAAG,KAAM,UAAW,IAAKA,EAAM,IAAK,QAAA3D,EAAS,EACjG,aAAc,IAAMnC,EAAU,IAAI,EAClC,IACEU,EACK6G,GAAS,CACJA,EACF/G,GAAa,QAAQ,IAAIsG,EAAIS,CAAI,EAEjC/G,GAAa,QAAQ,OAAOsG,CAAE,CAElC,EACA,OAEN,KAAMpG,EAAc,SAAW,OAC/B,SAAUA,EAAeoG,IAAOjB,GAAU,EAAI,GAAM,OAEpD,SAAA,CAAA2B,EAAAA,IAAC,OAAA,CACC,UAAWvJ,KAAY,UAAYqJ,EAAAA,QAAO,WAAa,OACvD,EAAGG,GAAAA,eACD3B,EAAM,EACNA,EAAM,EACNA,EAAM,MACNA,EAAM,OACNjL,GAAUiL,EAAM,aAAcA,EAAM,WAAY9K,EAAM,CAAA,EAExD,KAAMmB,EACN,YAAa8K,IAAa,OAAY,OAAY,EAAA,CAAA,EAEnDA,IAAa,QAAaA,EAAW,GACpCO,EAAAA,IAAC,OAAA,CACC,EAAGC,GAAAA,eACD3B,EAAM,EACNA,EAAM,EACN,KAAK,IAAIA,EAAM,MAAQmB,EAAU,CAAC,EAClCnB,EAAM,OACNjL,GAAUiL,EAAM,aAAcA,EAAM,WAAY9K,GAAQiM,GAAY,CAAC,CAAA,EAEvE,KAAM9K,CAAA,CAAA,EAGT2J,EAAM,OAASlL,IACb,CAAC,QAAS,KAAK,EACb,OAAQa,GAAUA,IAAS,QAAUqK,EAAM,aAAeA,EAAM,UAAW,EAC3E,IAAKrK,GACJ+L,EAAAA,IAAC,OAAA,CAAK,UAAWF,EAAAA,QAAO,SAAU,EAAGjM,GAAayK,EAAOrK,CAAI,EAAc,OAAQsL,CAAA,EAAdtL,CAAuB,CAC7F,EACJI,IAAS,QACR2L,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,aAClB,iBAAiB,UACjB,KAAMF,EAAWL,EAAU,uBAC3B,WAAYG,EAAOzI,EAAiB,EACpC,EAAG0I,EACH,EAAGrB,EAAM,EAAIA,EAAM,OAAS,EAE3B,SAAAjK,CAAA,CAAA,CACH,CAAA,EA3EGiL,CAAA,CA+EX,CAEA,SAASY,GAAUjC,EAA8C,CAC/D,MAAML,EAAMV,EAAUe,EAAK,EACrB,CAAE,IAAAzB,GAAQyB,EACVkC,EAASvC,GAAO1B,EAAYD,EAAK,KAAO,EAAInJ,GAC5CsN,EAAcnE,EAAK,KAAOgC,EAAK,UAAY,GAAK9B,GAAWrJ,GAAgB,EAEjF,OACE+M,EAAAA,KAAC,IAAA,CAAE,cAAY,OACb,SAAA,CAAAG,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,MAClB,OAAQM,EACR,GAAItN,GACJ,MAAO0K,EAAOD,EACd,EAAGA,EACH,EAAG4C,CAAA,CAAA,EAEJ5E,GACE,OAAQtB,GAASA,EAAK,MAAQuC,EAAI,GAAG,EACrC,IAAI,CAACvC,EAAMT,IAAU,CACpB,MAAM9F,EAAQ,KAAK,IAAIM,EAAEiG,EAAK,KAAK,EAAGsD,CAAM,EACtC5J,EAAM,KAAK,IAAIK,EAAEiG,EAAK,GAAG,EAAGuD,CAAI,EAEtC,OAAO7J,EAAMD,EACXsM,EAAAA,IAAC,OAAA,CACC,KAAMvG,EAAQQ,EAAK,MAAM,EACzB,OAAQmG,EAER,GAAItN,GACJ,MAAOa,EAAMD,EACb,EAAGA,EACH,EAAGyM,CAAA,EAJE3G,CAAA,EAML,IACN,CAAC,EACF,CAACqC,GAAa,IAAIW,EAAI,GAAG,GACxBwD,EAAAA,IAAC,QAAK,UAAWF,EAAAA,QAAO,aAAc,iBAAiB,UAAU,EAAGvC,EAAS,EAAG,EAAGK,EAAM1B,EAAY,EAClG,SAAA1G,GACH,EAEFwK,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,UAClB,OAAQ7B,EAAK,OACb,aAAc,IACZzF,EAAU,CACR,MAAO,CAACoD,GAAiB,IAAIY,EAAI,GAAG,EACpC,KAAM,MACN,IAAAA,EACA,SAAUjB,GAAgB,OAAQtB,GAASA,EAAK,MAAQuC,EAAI,GAAG,EAC/D,SAAUd,GAAc,IAAIc,EAAI,GAAG,GAAK,CAAA,CAAC,CAC1C,EAEH,aAAc,IAAMhE,EAAU,IAAI,EAClC,MAAO6E,EACP,EAAG,EACH,EAAGO,CAAA,CAAA,CACL,CAAA,EAhDyBpB,EAAI,GAiD/B,CAEJ,CAEA,SAAS6D,GAAahG,EAAwB,CAAE,OAAAvG,EAAQ,IAAA0I,EAAK,EAAA8D,GAA6C,CACxG,GAAIjG,EAAO,SAAWW,EAAU,CAAC,GAAKX,EAAO,SAAWW,EAAU,CAAC,EACjE,OAAO,KAGT,MAAMrG,EAAQ8E,EAAQY,EAAO,MAAM,EAC7BuD,EAAMV,EAAUoD,EAChBC,EAAKvM,EAAEqG,EAAO,QAAQ,EACtBmG,EAAK5C,EAAM1B,EAAY,EACvBoC,EAAQjE,EAAO,OAAS,OAE9B,cACG,IAAA,CACE,SAAA,CAAAiE,IAAU,QACT0B,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,OAClB,KAAMnL,EACN,OAAQsH,EAAK,IAAM,EACnB,GAAI,EACJ,MAAO,EACP,EAAGsE,EAAK,EACR,EAAGC,EAAKvE,EAAK,IAAM,EAAI,CAAA,CAAA,EAG1BqC,IAAU,OAAS0B,EAAAA,IAAC,SAAA,CAAO,UAAWF,EAAAA,QAAO,OAAQ,GAAAS,EAAQ,GAAAC,EAAQ,KAAM7L,EAAO,EAAG,CAAA,CAAG,EACxF2J,IAAU,WACT0B,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,OAClB,EAAG,IAAIS,CAAE,IAAIC,EAAK,CAAC,IAAID,EAAK,CAAC,IAAIC,CAAE,IAAID,CAAE,IAAIC,EAAK,CAAC,IAAID,EAAK,CAAC,IAAIC,CAAE,IACnE,KAAM7L,CAAA,CAAA,EAGVqL,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,UAClB,OAAAhM,EACA,aAAc,IAAM0E,EAAU,CAAE,KAAM,SAAU,OAAA6B,EAAQ,IAAAmC,EAAK,EAC7D,aAAc,IAAMhE,EAAU,IAAI,EAClC,MAAO,GACP,EAAG+H,EAAK,EACR,EAAG3C,CAAA,CAAA,CACL,GA5BM,GAAGpB,EAAI,GAAG,IAAIpC,GAAW,QAAQC,CAAM,CAAC,EA6BhD,CAEJ,CAEA,SAASoG,GAAexC,EAAgD,CACtE,MAAML,EAAMV,EAAUe,EAAK,EACrByC,EAAO9C,EAAMK,EAAK,OAAS,EAAIxL,EAAY,EAC3CkO,EAAQ1C,EAAK,SAAS,OAAS,EAC/BvK,EAAQiN,EAAQ,KAAK,IAAI3M,EAAE4M,EAAAA,IAAI3C,EAAK,SAAWtD,GAAYA,EAAQ,KAAK,GAAK,CAAC,EAAG4C,CAAM,EAAI,EAC3F5J,EAAMgN,EAAQ,KAAK,IAAI3M,EAAE6M,EAAAA,IAAI5C,EAAK,SAAWtD,GAAYA,EAAQ,GAAG,GAAK,CAAC,EAAG6C,CAAI,EAAI,EACrFsD,EAAe7C,EAAK,SAAS,OAAQtD,GAAYA,EAAQ,WAAa,MAAS,EAC/EoG,EAAQC,EAAAA,IAAIF,EAAc7F,CAAQ,EAClCgG,EAAOD,EAAAA,IAAIF,EAAenG,GAAYM,EAASN,CAAO,GAAKA,EAAQ,UAAY,EAAE,EACjF5G,EAAQ,KAAK,IAAIJ,EAAMD,EAAO,CAAC,EAErC,OACEmM,EAAAA,KAAC,IAAA,CAAE,cAAY,OACZ,SAAA,CAAAc,GAAShN,EAAMD,GACdmM,OAAC,IAAA,CAAE,UAAWC,EAAAA,QAAO,YACnB,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,UAAWF,EAAAA,QAAO,SAAU,OAAQrN,EAAW,GAAIA,EAAY,EAAG,MAAAsB,EAAc,EAAGL,EAAO,EAAGgN,EAAM,EACxGrJ,GAAgB4J,EAAO,GAAKF,EAAQ,GACnCf,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,cAClB,OAAQrN,EACR,GAAIA,EAAY,EAChB,MAAO,KAAK,IAAKsB,EAAQkN,EAAQF,EAAO,CAAC,EACzC,EAAGrN,EACH,EAAGgN,CAAA,CAAA,CACL,EAEJ,EAEFV,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,UAClB,OAAQ7B,EAAK,OACb,aAAc,IACZzF,EAAU,CACR,UAAWyF,EAAK,UAChB,MAAOA,EAAK,MACZ,KAAM,QACN,SAAUA,EAAK,KAAK,OACpB,SAAUA,EAAK,QAAA,CAChB,EAEH,aAAc,IAAMzF,EAAU,IAAI,EAClC,MAAO6E,EACP,EAAG,EACH,EAAGO,CAAA,CAAA,CACL,CAAA,EAhCyB,SAASK,EAAK,MAAM,GAAG,EAiClD,CAEJ,CAEA,MAAMiD,GAAa,CAACrH,EAAkBH,IAAkB,CACtD,MAAMyH,EAAO3M,EAAAA,aAAakF,EAAOpF,EAAI,EAAI,EACzC,OAAOuF,EAAWsH,EAAO,EAAI,QAAUtH,EAAWsH,EAAO9D,EAAW,MAAQ,QAC9E,EACM+D,GAAYrE,EAAYD,GAAa,GAAMK,EAAatK,EAAc,GAEtEwO,GACJxB,EAAAA,KAAC,MAAA,CACC,mBAAkB3G,EAAcnB,GAAS,OACzC,kBAAiBF,GACjB,UAAWiI,EAAAA,QAAO,OAClB,OAAQ1C,GACR,KAAMlE,EAAc,QAAU,MAC9B,QAAS,OAAOmE,CAAQ,IAAID,EAAS,GACrC,MAAOC,EAEP,SAAA,CAAA2C,MAAC,OAAA,CACE,SAAAvE,GAAa,IAAI,CAACxB,EAAMT,IACvBwG,EAAAA,IAAC,UAAA,CACC,OAAQ,EACR,GAAI,GAAGhI,EAAa,IAAIwB,CAAK,GAE7B,iBAAiB,aACjB,aAAa,iBACb,MAAO,EAEP,eAAC,OAAA,CAAK,UAAWsG,EAAAA,QAAO,UAAW,OAAQrG,EAAQQ,EAAK,MAAM,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAA,CAAG,CAAA,EALxFT,CAAA,CAOR,EACH,EAEC6C,EAAM,IAAK4B,GAAUA,EAAK,OAAS,MAAQiC,GAAUjC,CAAI,EAAI,IAAK,EAEnE+B,EAAAA,IAAC,IAAA,CAAE,cAAY,OAAO,UAAWF,EAAAA,QAAO,YACrC,SAAArE,GAAa,IAAI,CAACxB,EAAMT,IAAU,CACjC,MAAM9F,EAAQ,KAAK,IAAIM,EAAEiG,EAAK,KAAK,EAAGsD,CAAM,EACtC5J,EAAM,KAAK,IAAIK,EAAEiG,EAAK,GAAG,EAAGuD,CAAI,EAEtC,OAAI7J,GAAOD,EACF,YAIN,IAAA,CACC,SAAA,CAAAsM,EAAAA,IAAC,OAAA,CACC,KAAM,QAAQhI,EAAa,IAAIwB,CAAK,IACpC,OAAQ2D,EAAatK,EAAcmK,EACnC,MAAOrJ,EAAMD,EACb,EAAGA,EACH,EAAGsJ,CAAA,CAAA,EAEJ/C,EAAK,OAASzF,eAAayF,EAAK,MAAO3F,EAAI,EAAI,GAAKX,EAAMD,GACzDsM,EAAAA,IAAC,QAAK,UAAWF,UAAO,UAAW,EAAGpM,EAAQ,EAAG,EAAGwJ,EAAU,EAC3D,SAAAjD,EAAK,KAAA,CACR,CAAA,CAAA,EAXIT,CAaR,CAEJ,CAAC,CAAA,CACH,EAECpC,UACE,IAAA,CAAE,UAAW0I,EAAAA,QAAO,YAAa,UAAW,eAAe9C,CAAO,IACjE,SAAAgD,EAAAA,IAACsB,GAAAA,KAAA,CACC,OAAQnE,EAAatK,EAAcmK,EACnC,MAAOS,GAAM,IAAK8D,GAAS,KAAK,MAAMvN,EAAEuN,EAAK,QAAQ,CAAC,EAAI,EAAG,EAC7D,YAAY,UAAA,CAAA,EAEhB,EAGDlF,EAAM,IAAK4B,GAAUA,EAAK,OAAS,QAAUwC,GAAexC,CAAI,EAAI,IAAK,EAE1E+B,EAAAA,IAAC,IAAA,CAAG,SAAA,CAAC,GAAGhC,GAAY,OAAA,CAAQ,EAAE,KAAA,EAAO,IAAIqB,EAAa,CAAA,CAAE,EAExDW,EAAAA,IAAC,IAAA,CAAE,cAAY,OACZ,SAAA3D,EAAM,QAAS4B,GACdA,EAAK,OAAS,MACVzC,GAAe,OAAQnB,GAAWA,EAAO,MAAQ4D,EAAK,IAAI,GAAG,EAAE,IAAK5D,GAAWgG,GAAahG,EAAQ4D,CAAI,CAAC,EACzG,CAAA,CAAC,EAET,EAEA+B,EAAAA,IAAC,IAAA,CAAE,cAAY,OAAO,UAAWF,EAAAA,QAAO,YACrC,SAAApJ,GAAe,IAAI,CAAC8K,EAAMhI,IAAU,CACnC,MAAMK,EAAWE,EAAAA,WAAWyH,EAAK,KAAM9J,CAAS,EAEhD,GAAI,EAAEmC,GAAYmB,EAAU,CAAC,GAAKnB,GAAYmB,EAAU,CAAC,GACvD,OAAO,KAGT,MAAMyG,EAAQ,KAAK,MAAMzN,EAAE6F,CAAQ,CAAC,EAAI,GAClC6H,EAAaD,EAAQ,EAAIjN,EAAAA,aAAagN,EAAK,MAAOlN,EAAI,GAAK+I,EAAW,EACtE1I,EAAQ6M,EAAK,OAASG,GAAAA,cAAcH,EAAK,MAAM,EAAI,iCAEzD,cACG,IAAA,CACC,SAAA,CAAAxB,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,cAClB,OAAQnL,EACR,GAAI8M,EACJ,GAAIA,EACJ,GAAIvE,EAAU,GACd,GAAIC,EAAatK,CAAA,CAAA,EAEnBmN,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,eAClB,WAAY4B,EAAa,QAAU,MACnC,EAAGA,EAAaD,EAAQ,EAAIA,EAAQ,EACpC,EAAGvE,EAAU,EAEZ,SAAAsE,EAAK,KAAA,CAAA,CACR,CAAA,EAhBMhI,CAiBR,CAEJ,CAAC,CAAA,CACH,EAEC5B,KAAU,UACTiI,EAAAA,KAAC,IAAA,CAAE,cAAY,OAAO,UAAW,GAAGC,EAAAA,QAAO,WAAW,IAAIlI,KAAU,UAAYkI,EAAAA,QAAO,YAAc,EAAE,GACrG,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,UAAWF,EAAAA,QAAO,SAAU,GAAIvC,EAAQ,GAAIC,EAAM,GAAI4D,GAAW,GAAIA,EAAA,CAAW,EACrF3D,GAAM,IAAK8D,GACVvB,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,UAClB,iBAAkB/C,EAAY,OAAS,UAEvC,WAAYmE,GAAWlN,EAAEuN,EAAK,QAAQ,EAAGA,EAAK,KAAK,EACnD,EAAGvN,EAAEuN,EAAK,QAAQ,EAClB,EAAGxE,EAAYqE,GAAYQ,GAAAA,mBAAqBR,GAAYQ,GAAAA,mBAE3D,SAAAL,EAAK,KAAA,EALDA,EAAK,QAAA,CAOb,CAAA,EACH,EAGD/C,GACCwB,EAAAA,IAAC,OAAA,CACC,cAAY,OACZ,UAAWF,EAAAA,QAAO,UAClB,OAAQtB,EAAa,OAAS,EAC9B,GAAIhL,GACJ,MAAOgL,EAAa,MAAQ,EAC5B,EAAGA,EAAa,EAAI,EACpB,EAAGA,EAAa,EAAI,CAAA,CAAA,CACtB,CAAA,CAAA,EAKAqD,GAAUC,GAAAA,gBAAgBvJ,EAAQ,CACtC,QAAAkB,EACA,SAAAwB,EACA,cAAAzF,GACA,eAAgBG,IAAsBC,GACtC,cAAAuF,EACA,YAAahE,EAAO,IAAKoC,GAAUA,EAAM,KAAK,EAC9C,aAAAlC,CAAA,CACD,EAEK0K,GAAU1E,EAAWlF,GAAK,MAAQ,EAClC6J,GACJnL,KAAkB,OACdiJ,EAAAA,QAAO,YACP/D,GACEC,KAAgB,QACd8D,EAAAA,QAAO,yBACPA,EAAAA,QAAO,cACT,GACFmC,GAAc,CAAE,IAAKrL,GAAQ,WAAYsG,CAAA,EAEzCgF,GACJrC,EAAAA,KAAC,MAAA,CAAI,UAAWC,EAAAA,QAAO,KACrB,SAAA,CAAAE,EAAAA,IAACmC,GAAA,CACC,UAAWH,GACX,kBAAA/M,EACA,MAAAoH,EACA,cAAe/D,GAAY,OAC3B,MAAO,CAAE,GAAG2J,GAAa,MAAOpL,KAAkB,OAAS,OAAYA,EAAA,EACvE,UAAWmF,KAAgB,QAAUa,GAAY,MAAA,CAAA,EAGnDmD,EAAAA,IAAC,MAAA,CACC,aAAY+B,IAAW,CAAC7I,EAAc,GAAGvB,EAAK,yBAA2B,OACzE,UAAWmI,EAAAA,QAAO,OAClB,IAAK3H,GAAK,IACV,KAAM4J,IAAW,CAAC7I,EAAc,SAAW,OAC3C,SAAU6I,IAAW,CAAC7I,EAAc,EAAI,OAEvC,SAAAf,GAAK,MAAQ,IAAMZ,SAAe6K,gBAAA,CAAc,GAAGP,GAAU,SAAAR,EAAA,CAAI,EAAkBA,GAAA,CAAA,EAGrFrF,KAAgB,SACfgE,EAAAA,IAACqC,GAAA,CACC,OAAQnG,EAAY5J,GACpB,MAAA+J,EACA,MAAO4F,GACP,UAAApF,EAAA,CAAA,CACF,EAEJ,EAGF,SAASyF,IAAgC,CACvC,MAAM/I,EAAQ,CAACgJ,EAAqBC,EAActI,EAAsBuF,KAA2C,CACjH,MAAOhG,EAAQ8I,CAAW,GAAK,cAC/B,SAAU3M,GAAYqF,EAASf,CAAK,CAAC,EACrC,IAAKiB,EAAcjB,EAAM,GAAG,EAC5B,KAAAsI,EACA,SAAU/C,IAAa,OAAY,OAAYL,GAAAA,mBAAmBK,CAAQ,EAC1E,MAAOtE,EAAcjB,EAAM,KAAK,CAAA,GAGlC,OAAOyC,GAAY,IAAKH,IAAS,CAC/B,YAAaA,EAAI,YACjB,QAAS,CACP,GAAGjB,GACA,OAAQtB,GAASA,EAAK,MAAQuC,EAAI,GAAG,EACrC,IAAKvC,GAASV,EAAMU,EAAK,OAAQ,GAAGA,EAAK,MAAM,gBAAiBA,CAAI,CAAC,EACxE,GAAGsC,GAAYC,CAAG,EAAE,IAAK7B,GACvBpB,EACEoB,EAAQ,OACRA,EAAQ,OAASA,EAAQ,QAAUA,EAAQ,OAAS,GAAGA,EAAQ,MAAM,KAAKA,EAAQ,KAAK,GAAKA,EAAQ,OACpGA,EACAA,EAAQ,QAAA,CACV,EAEF,GAAGa,GACA,OAAQnB,GAAWA,EAAO,MAAQmC,EAAI,GAAG,EACzC,IAAKnC,IAAY,CAChB,MAAOZ,EAAQY,EAAO,MAAM,GAAK,cACjC,SAAU,WACV,IAAK,IACL,KAAMA,EAAO,MAAQ,GAAGA,EAAO,MAAM,KAAKA,EAAO,KAAK,GAAKA,EAAO,OAClE,MAAOc,EAAcd,EAAO,QAAQ,CAAA,EACpC,CAAA,EAEN,IAAKmC,EAAI,IACT,MAAOA,EAAI,MACX,QAASK,GAAU,IAAIL,EAAI,GAAG,CAAA,EAC9B,CACJ,CAEA,MAAMiG,GAAgB,IAAI,KAAK1N,GAAS,CAAA,GAAI,IAAKkF,GAASA,EAAK,MAAM,CAAC,EAChEyI,GAAazM,KAAW,QAAUkB,EAAO,QAAU,GACvD6I,EAAAA,IAAC2C,GAAAA,YAAA,CACC,MAAOzM,GACP,QAASiB,EAAO,IAAI,CAACoC,EAAOC,KAAW,CAErC,MAAOiJ,GAAc,IAAIlJ,EAAM,KAAK,EAAI7E,GAAMyE,GAAOK,CAAK,CAAC,EAAIL,GAAOK,CAAK,EAC3E,OAAQpB,GAAa,SAASmB,EAAM,KAAK,EACzC,MAAOA,EAAM,KAAA,EACb,EACF,SAAUnB,GAAa,OACvB,SAAUnC,EAAA,CAAA,EAId,OACE4J,EAAAA,KAAC,SAAA,CAAO,UAAWC,EAAAA,QAAO,OACxB,SAAA,CAAAD,EAAAA,KAAC,aAAA,CAAW,UAAWC,EAAAA,QAAO,OAC5B,SAAA,CAAAE,MAAC,QAAK,UAAWF,EAAAA,QAAO,MAAO,GAAIjI,GAChC,SAAAF,GACH,EACC,CAACmE,IACAkE,EAAAA,IAAC4C,GAAAA,OAAA,CACC,eAAc9J,GACd,QAAS,IAAMC,GAAc8J,GAAY,CAACA,CAAO,EACjD,KAAK,KACL,QAAQ,YACT,SAAA,iBAAA,CAAA,CAED,EAEJ,EAEC3J,SACE,OAAA,CAAK,UAAW4G,EAAAA,QAAO,eAAgB,GAAI/H,GAAQ,SAAA,4CAAA,CAEpD,EAGD9B,KAAW,OAASyM,GAErB1C,EAAAA,IAAC,MAAA,CAAI,UAAWF,EAAAA,QAAO,KAAM,IAAK7H,EAAM,IACrC,SAAA6D,GACCkE,EAAAA,IAAC,MAAA,CAAI,UAAWF,EAAAA,QAAO,MACrB,SAAAE,EAAAA,IAAC8C,GAAAA,WAAA,CAAW,KAAM9C,MAAC+C,GAAAA,aAAA,CAAA,CAAa,EAAI,KAAK,KAAK,MAAOxN,EAAA,CAAc,CAAA,CACrE,EACE0C,EAAM,QAAU,EAAI,KAAOa,GAC7BkH,EAAAA,IAACgD,GAAAA,mBAAA,CACC,cAAAxN,GACA,KAAM8M,GAAA,EACN,aAAcjL,GAAgBiE,GAAgB,KAAMX,GAAYA,EAAQ,WAAa,MAAS,EAC9F,MAAAhD,EAAA,CAAA,EAGFuK,EAAA,CAEJ,EAECjM,KAAW,UAAYyM,EAAA,EAC1B,CAEJ,CAaA,SAASP,GAAe,CAAE,UAAAc,EAAW,kBAAAhO,EAAmB,MAAAoH,EAAO,cAAA6G,EAAe,MAAAC,EAAO,UAAAtG,GAAkC,CACrH,OACEmD,EAAAA,IAAC,MAAA,CAAI,UAAW,GAAGF,EAAAA,QAAO,MAAM,IAAImD,CAAS,GAAI,MAAAE,EAC9C,SAAA9G,EAAM,IAAK4B,GAAS,CACnB,GAAIA,EAAK,OAAS,QAAS,CACzB,MAAMmF,GACJvD,EAAAA,KAAAwD,EAAAA,SAAA,CACG,SAAA,CAAApO,GACC+K,EAAAA,IAACsD,GAAAA,gBAAA,CAAgB,UAAW,GAAGxD,EAAAA,QAAO,OAAO,IAAI7B,EAAK,UAAY6B,EAAAA,QAAO,iBAAmB,EAAE,GAAI,QAEnG,OAAA,CAAK,UAAWA,EAAAA,QAAO,UAAY,SAAA7B,EAAK,MAAM,MAAM,EACrD4B,EAAAA,KAAC,OAAA,CAAK,UAAWC,EAAAA,QAAO,WAAY,SAAA,CAAA,IAAE7B,EAAK,KAAK,OAAO,GAAA,CAAA,CAAC,CAAA,EAC1D,EAGF,OACE+B,EAAAA,IAAC,MAAA,CAAI,UAAWF,EAAAA,QAAO,WAA4C,MAAO,CAAE,OAAQ7B,EAAK,MAAA,EACtF,SAAAhJ,EACC+K,EAAAA,IAAC,SAAA,CACC,gBAAe,CAAC/B,EAAK,UACrB,UAAW6B,EAAAA,QAAO,YAClB,QAAS,IAAMoD,EAAcjF,EAAK,MAAM,GAAG,EAC3C,KAAK,SAEJ,SAAAmF,EAAA,CAAA,EAGHpD,EAAAA,IAAC,OAAA,CAAK,UAAWF,EAAAA,QAAO,UAAY,SAAAsD,EAAA,CAAQ,CAAA,EAXR,SAASnF,EAAK,MAAM,GAAG,EAa/D,CAEJ,CAEA,MAAMsF,EAAU1G,GAAA,YAAAA,EAAW,IAAIoB,EAAK,IAAI,KAExC,OACE4B,EAAAA,KAAC,MAAA,CACC,UAAW,GAAGC,UAAO,QAAQ,IAAI7B,EAAK,MAAQ6B,EAAAA,QAAO,WAAa,EAAE,GAEpE,MAAO,CAAE,OAAQ7B,EAAK,MAAA,EAEtB,SAAA,CAAA4B,EAAAA,KAAC,OAAA,CAAK,UAAWC,EAAAA,QAAO,UACtB,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,UAAWF,EAAAA,QAAO,UAAW,MAAO7B,EAAK,IAAI,MAChD,SAAAA,EAAK,IAAI,KAAA,CACZ,EAAQ,IACPA,EAAK,IAAI,aAAe+B,EAAAA,IAAC,OAAA,CAAK,UAAWF,EAAAA,QAAO,iBAAmB,SAAA7B,EAAK,IAAI,WAAA,CAAY,CAAA,EAC3F,EACCsF,GACCvD,EAAAA,IAAC,OAAA,CAAK,UAAWF,EAAAA,QAAO,aACrB,SAAAyD,EAAQ,SAAW,GAAGA,EAAQ,KAAK,MAAMA,EAAQ,QAAQ,GAAKA,EAAQ,KAAA,CACzE,CAAA,CAAA,EAZGtF,EAAK,IAAI,GAAA,CAgBpB,CAAC,CAAA,CACH,CAEJ,CAUA,SAASoE,GAAkB,CAAE,OAAAmB,EAAQ,MAAAnH,EAAO,MAAA8G,EAAO,UAAAtG,GAAqC,CACtF,OACEmD,MAAC,OAAI,UAAWF,EAAAA,QAAO,QAAS,MAAAqD,EAC7B,SAAA9G,EAAM,IAAK4B,GAAS,CACnB,MAAMsF,EAAUtF,EAAK,OAAS,MAAQpB,EAAU,IAAIoB,EAAK,IAAI,GAAG,EAAI,OAEpE,OACE+B,EAAAA,IAAC,MAAA,CACC,UAAW,GAAGF,EAAAA,QAAO,WAAW,IAAI0D,EAAS1D,EAAAA,QAAO,cAAgB,EAAE,GAEtE,MAAO,CAAE,OAAQ7B,EAAK,MAAA,EAErB,YACC4B,EAAAA,KAAAwD,EAAAA,SAAA,CACE,SAAA,CAAArD,MAAC,OAAA,CAAK,UAAWF,EAAAA,QAAO,aAAe,WAAQ,MAAM,EACpDyD,EAAQ,UAAYvD,MAAC,OAAA,CAAK,UAAWF,EAAAA,QAAO,gBAAkB,WAAQ,QAAA,CAAS,CAAA,CAAA,CAClF,CAAA,EAPG7B,EAAK,OAAS,MAAQA,EAAK,IAAI,IAAM,SAASA,EAAK,MAAM,GAAG,EAAA,CAWvE,CAAC,CAAA,CACH,CAEJ"}