@plenustech/design-system 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/components/charts/ChartGauge/ChartGauge.cjs +2 -0
  2. package/dist/components/charts/ChartGauge/ChartGauge.cjs.map +1 -0
  3. package/dist/components/charts/ChartGauge/ChartGauge.js +307 -0
  4. package/dist/components/charts/ChartGauge/ChartGauge.js.map +1 -0
  5. package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs +2 -0
  6. package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs.map +1 -0
  7. package/dist/components/charts/ChartGauge/ChartGauge.module.css.js +76 -0
  8. package/dist/components/charts/ChartGauge/ChartGauge.module.css.js.map +1 -0
  9. package/dist/components/charts/ChartGauge/gaugeLayout.cjs +2 -0
  10. package/dist/components/charts/ChartGauge/gaugeLayout.cjs.map +1 -0
  11. package/dist/components/charts/ChartGauge/gaugeLayout.js +107 -0
  12. package/dist/components/charts/ChartGauge/gaugeLayout.js.map +1 -0
  13. package/dist/components/charts/ChartGauge/gaugeReading.cjs +2 -0
  14. package/dist/components/charts/ChartGauge/gaugeReading.cjs.map +1 -0
  15. package/dist/components/charts/ChartGauge/gaugeReading.js +112 -0
  16. package/dist/components/charts/ChartGauge/gaugeReading.js.map +1 -0
  17. package/dist/components/charts/ChartGauge/gaugeScale.cjs +2 -0
  18. package/dist/components/charts/ChartGauge/gaugeScale.cjs.map +1 -0
  19. package/dist/components/charts/ChartGauge/gaugeScale.js +57 -0
  20. package/dist/components/charts/ChartGauge/gaugeScale.js.map +1 -0
  21. package/dist/components/charts/ChartMap/ChartMap.cjs +2 -0
  22. package/dist/components/charts/ChartMap/ChartMap.cjs.map +1 -0
  23. package/dist/components/charts/ChartMap/ChartMap.js +523 -0
  24. package/dist/components/charts/ChartMap/ChartMap.js.map +1 -0
  25. package/dist/components/charts/ChartMap/ChartMap.module.css.cjs +2 -0
  26. package/dist/components/charts/ChartMap/ChartMap.module.css.cjs.map +1 -0
  27. package/dist/components/charts/ChartMap/ChartMap.module.css.js +124 -0
  28. package/dist/components/charts/ChartMap/ChartMap.module.css.js.map +1 -0
  29. package/dist/components/charts/ChartMap/ChartMapLegend.cjs +2 -0
  30. package/dist/components/charts/ChartMap/ChartMapLegend.cjs.map +1 -0
  31. package/dist/components/charts/ChartMap/ChartMapLegend.js +102 -0
  32. package/dist/components/charts/ChartMap/ChartMapLegend.js.map +1 -0
  33. package/dist/components/charts/ChartMap/ChartMapTable.cjs +2 -0
  34. package/dist/components/charts/ChartMap/ChartMapTable.cjs.map +1 -0
  35. package/dist/components/charts/ChartMap/ChartMapTable.js +118 -0
  36. package/dist/components/charts/ChartMap/ChartMapTable.js.map +1 -0
  37. package/dist/components/charts/ChartMap/mapGeometry.cjs +2 -0
  38. package/dist/components/charts/ChartMap/mapGeometry.cjs.map +1 -0
  39. package/dist/components/charts/ChartMap/mapGeometry.js +113 -0
  40. package/dist/components/charts/ChartMap/mapGeometry.js.map +1 -0
  41. package/dist/components/charts/ChartMap/mapLabels.cjs +2 -0
  42. package/dist/components/charts/ChartMap/mapLabels.cjs.map +1 -0
  43. package/dist/components/charts/ChartMap/mapLabels.js +80 -0
  44. package/dist/components/charts/ChartMap/mapLabels.js.map +1 -0
  45. package/dist/components/charts/ChartMap/mapScales.cjs +2 -0
  46. package/dist/components/charts/ChartMap/mapScales.cjs.map +1 -0
  47. package/dist/components/charts/ChartMap/mapScales.js +131 -0
  48. package/dist/components/charts/ChartMap/mapScales.js.map +1 -0
  49. package/dist/components/charts/ChartMap/polylabel.cjs +2 -0
  50. package/dist/components/charts/ChartMap/polylabel.cjs.map +1 -0
  51. package/dist/components/charts/ChartMap/polylabel.js +50 -0
  52. package/dist/components/charts/ChartMap/polylabel.js.map +1 -0
  53. package/dist/components/charts/ChartTimeline/ChartTimeline.cjs +2 -0
  54. package/dist/components/charts/ChartTimeline/ChartTimeline.cjs.map +1 -0
  55. package/dist/components/charts/ChartTimeline/ChartTimeline.js +703 -0
  56. package/dist/components/charts/ChartTimeline/ChartTimeline.js.map +1 -0
  57. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs +2 -0
  58. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs.map +1 -0
  59. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js +124 -0
  60. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js.map +1 -0
  61. package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs +2 -0
  62. package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs.map +1 -0
  63. package/dist/components/charts/ChartTimeline/ChartTimelineTable.js +42 -0
  64. package/dist/components/charts/ChartTimeline/ChartTimelineTable.js.map +1 -0
  65. package/dist/components/charts/ChartTimeline/timelineLayout.cjs +2 -0
  66. package/dist/components/charts/ChartTimeline/timelineLayout.cjs.map +1 -0
  67. package/dist/components/charts/ChartTimeline/timelineLayout.js +109 -0
  68. package/dist/components/charts/ChartTimeline/timelineLayout.js.map +1 -0
  69. package/dist/components/charts/ChartTimeline/timelineTime.cjs +2 -0
  70. package/dist/components/charts/ChartTimeline/timelineTime.cjs.map +1 -0
  71. package/dist/components/charts/ChartTimeline/timelineTime.js +91 -0
  72. package/dist/components/charts/ChartTimeline/timelineTime.js.map +1 -0
  73. package/dist/components/charts/ChartTimeline/timelineTooltip.cjs +2 -0
  74. package/dist/components/charts/ChartTimeline/timelineTooltip.cjs.map +1 -0
  75. package/dist/components/charts/ChartTimeline/timelineTooltip.js +77 -0
  76. package/dist/components/charts/ChartTimeline/timelineTooltip.js.map +1 -0
  77. package/dist/components/charts/core/ChartLegend.cjs +1 -1
  78. package/dist/components/charts/core/ChartLegend.cjs.map +1 -1
  79. package/dist/components/charts/core/ChartLegend.js +37 -25
  80. package/dist/components/charts/core/ChartLegend.js.map +1 -1
  81. package/dist/components/charts/core/useChartMetrics.cjs +1 -1
  82. package/dist/components/charts/core/useChartMetrics.cjs.map +1 -1
  83. package/dist/components/charts/core/useChartMetrics.js +20 -25
  84. package/dist/components/charts/core/useChartMetrics.js.map +1 -1
  85. package/dist/components/data-display/List/List.cjs.map +1 -1
  86. package/dist/components/data-display/List/List.js.map +1 -1
  87. package/dist/components/data-display/List/List.module.css.cjs +1 -1
  88. package/dist/components/data-display/List/List.module.css.js +34 -24
  89. package/dist/components/data-display/List/List.module.css.js.map +1 -1
  90. package/dist/components/data-display/List/ListingOptions.cjs +1 -1
  91. package/dist/components/data-display/List/ListingOptions.cjs.map +1 -1
  92. package/dist/components/data-display/List/ListingOptions.js +98 -74
  93. package/dist/components/data-display/List/ListingOptions.js.map +1 -1
  94. package/dist/components/data-display/List/useListing.cjs.map +1 -1
  95. package/dist/components/data-display/List/useListing.js.map +1 -1
  96. package/dist/components/forms/ComboBox/ComboBox.cjs.map +1 -1
  97. package/dist/components/forms/ComboBox/ComboBox.js.map +1 -1
  98. package/dist/components/navigation/TabsNav/TabsNav.cjs +2 -0
  99. package/dist/components/navigation/TabsNav/TabsNav.cjs.map +1 -0
  100. package/dist/components/navigation/TabsNav/TabsNav.js +21 -0
  101. package/dist/components/navigation/TabsNav/TabsNav.js.map +1 -0
  102. package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs +2 -0
  103. package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs.map +1 -0
  104. package/dist/components/navigation/TabsNav/TabsNav.module.css.js +18 -0
  105. package/dist/components/navigation/TabsNav/TabsNav.module.css.js.map +1 -0
  106. package/dist/components/overlays/Dialog/Dialog.cjs.map +1 -1
  107. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  108. package/dist/components/overlays/Dialog/DialogFrame.cjs +1 -1
  109. package/dist/components/overlays/Dialog/DialogFrame.cjs.map +1 -1
  110. package/dist/components/overlays/Dialog/DialogFrame.js +30 -30
  111. package/dist/components/overlays/Dialog/DialogFrame.js.map +1 -1
  112. package/dist/components/overlays/Drawer/Drawer.cjs.map +1 -1
  113. package/dist/components/overlays/Drawer/Drawer.js.map +1 -1
  114. package/dist/design-system.css +1 -1
  115. package/dist/index.cjs +1 -1
  116. package/dist/index.js +184 -174
  117. package/dist/index.js.map +1 -1
  118. package/dist/types/components/charts/ChartGauge/ChartGauge.d.ts +83 -0
  119. package/dist/types/components/charts/ChartGauge/gaugeLayout.d.ts +64 -0
  120. package/dist/types/components/charts/ChartGauge/gaugeReading.d.ts +97 -0
  121. package/dist/types/components/charts/ChartGauge/gaugeScale.d.ts +38 -0
  122. package/dist/types/components/charts/ChartGauge/index.d.ts +2 -0
  123. package/dist/types/components/charts/ChartMap/ChartMap.d.ts +104 -0
  124. package/dist/types/components/charts/ChartMap/ChartMapLegend.d.ts +44 -0
  125. package/dist/types/components/charts/ChartMap/ChartMapTable.d.ts +38 -0
  126. package/dist/types/components/charts/ChartMap/index.d.ts +4 -0
  127. package/dist/types/components/charts/ChartMap/mapGeometry.d.ts +56 -0
  128. package/dist/types/components/charts/ChartMap/mapLabels.d.ts +51 -0
  129. package/dist/types/components/charts/ChartMap/mapScales.d.ts +76 -0
  130. package/dist/types/components/charts/ChartMap/polylabel.d.ts +9 -0
  131. package/dist/types/components/charts/ChartTimeline/ChartTimeline.d.ts +137 -0
  132. package/dist/types/components/charts/ChartTimeline/ChartTimelineTable.d.ts +25 -0
  133. package/dist/types/components/charts/ChartTimeline/index.d.ts +2 -0
  134. package/dist/types/components/charts/ChartTimeline/timelineLayout.d.ts +70 -0
  135. package/dist/types/components/charts/ChartTimeline/timelineTime.d.ts +16 -0
  136. package/dist/types/components/charts/ChartTimeline/timelineTooltip.d.ts +45 -0
  137. package/dist/types/components/charts/core/ChartLegend.d.ts +3 -1
  138. package/dist/types/components/data-display/List/List.d.ts +1 -1
  139. package/dist/types/components/data-display/List/useListing.d.ts +7 -1
  140. package/dist/types/components/forms/ComboBox/ComboBox.d.ts +7 -1
  141. package/dist/types/components/navigation/TabsNav/TabsNav.d.ts +20 -0
  142. package/dist/types/components/navigation/TabsNav/index.d.ts +2 -0
  143. package/dist/types/components/overlays/Dialog/Dialog.d.ts +19 -7
  144. package/dist/types/components/overlays/Dialog/DialogFrame.d.ts +8 -2
  145. package/dist/types/components/overlays/Drawer/Drawer.d.ts +2 -2
  146. package/dist/types/index.d.ts +9 -1
  147. package/dist/types/utils/formatters/formatarDuracao.d.ts +5 -0
  148. package/dist/types/utils/formatters/index.d.ts +1 -0
  149. package/dist/utils/formatters/formatarDuracao.cjs +2 -0
  150. package/dist/utils/formatters/formatarDuracao.cjs.map +1 -0
  151. package/dist/utils/formatters/formatarDuracao.js +10 -0
  152. package/dist/utils/formatters/formatarDuracao.js.map +1 -0
  153. package/package.json +3 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartTimeline.js","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","y","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","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":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="_figure_1jzf5_1 _figure_yf6oe_1",a="_header_1jzf5_6",t="_title_1jzf5_13 _title_yf6oe_9",l="_plot_1jzf5_19",_="_empty_1jzf5_24",o="_body_1jzf5_33",r="_labels_1jzf5_39",s="_summary_1jzf5_40",n="_labelsFixed_1jzf5_51",c="_labelsCompact_1jzf5_55",m="_labelsCompactWithSummary_1jzf5_59",b="_rowLabel_1jzf5_63",i="_groupLabel_1jzf5_64",u="_childLabel_1jzf5_74",f="_labelLine_1jzf5_78",p="_labelText_1jzf5_85",j="_labelDescription_1jzf5_96",z="_labelSummary_1jzf5_97",y="_groupButton_1jzf5_116",g="_groupText_1jzf5_117",d="_scroll_1jzf5_146",L="_tableScroll_1jzf5_147",h="_groupName_1jzf5_152",x="_groupCount_1jzf5_158",v="_chevron_1jzf5_165",S="_chevronCollapsed_1jzf5_170",T="_canvas_1jzf5_183",w="_summaryItem_1jzf5_189",k="_summaryInline_1jzf5_199",C="_summaryTitle_1jzf5_206",R="_summarySubtitle_1jzf5_215",H="_track_1jzf5_229",O="_hoverArea_1jzf5_234",B="_passThrough_1jzf5_239",E="_hatchLine_1jzf5_243",I="_bandLabel_1jzf5_248",M="_referenceLabel_1jzf5_249",P="_referenceLine_1jzf5_261",A="_emptyRowText_1jzf5_266",D="_groupBar_1jzf5_271",F="_groupProgress_1jzf5_276",N="_segment_1jzf5_280",W="_clickable_1jzf5_285",q="_dimmed_1jzf5_289",G="_barOverlay_1jzf5_294",J="_clipMark_1jzf5_299",K="_segmentLabel_1jzf5_307",Q="_marker_1jzf5_311",U="_focusRing_1jzf5_316",V="_axisLine_1jzf5_323 _axisLine_yf6oe_68",X="_axisLabel_1jzf5_327 _axisLabel_yf6oe_73",Y="_axisOnHover_1jzf5_332",Z="_table_1jzf5_147",$="_numeric_1jzf5_377",ee="_tableRowHeader_1jzf5_387",ae="_tableRowExtra_1jzf5_392",te="_tableSwatch_1jzf5_397",le="_tableEmpty_1jzf5_406",_e="_visuallyHidden_1jzf5_410",oe={figure:e,header:a,title:t,plot:l,empty:_,body:o,labels:r,summary:s,labelsFixed:n,labelsCompact:c,labelsCompactWithSummary:m,rowLabel:b,groupLabel:i,childLabel:u,labelLine:f,labelText:p,labelDescription:j,labelSummary:z,groupButton:y,groupText:g,scroll:d,tableScroll:L,groupName:h,groupCount:x,chevron:v,chevronCollapsed:S,canvas:T,summaryItem:w,summaryInline:k,summaryTitle:C,summarySubtitle:R,track:H,hoverArea:O,passThrough:B,hatchLine:E,bandLabel:I,referenceLabel:M,referenceLine:P,emptyRowText:A,groupBar:D,groupProgress:F,segment:N,clickable:W,dimmed:q,barOverlay:G,clipMark:J,segmentLabel:K,marker:Q,focusRing:U,axisLine:V,axisLabel:X,axisOnHover:Y,table:Z,numeric:$,tableRowHeader:ee,tableRowExtra:ae,tableSwatch:te,tableEmpty:le,visuallyHidden:_e};exports.axisLabel=X;exports.axisLine=V;exports.axisOnHover=Y;exports.bandLabel=I;exports.barOverlay=G;exports.body=o;exports.canvas=T;exports.chevron=v;exports.chevronCollapsed=S;exports.childLabel=u;exports.clickable=W;exports.clipMark=J;exports.default=oe;exports.dimmed=q;exports.empty=_;exports.emptyRowText=A;exports.figure=e;exports.focusRing=U;exports.groupBar=D;exports.groupButton=y;exports.groupCount=x;exports.groupLabel=i;exports.groupName=h;exports.groupProgress=F;exports.groupText=g;exports.hatchLine=E;exports.header=a;exports.hoverArea=O;exports.labelDescription=j;exports.labelLine=f;exports.labelSummary=z;exports.labelText=p;exports.labels=r;exports.labelsCompact=c;exports.labelsCompactWithSummary=m;exports.labelsFixed=n;exports.marker=Q;exports.numeric=$;exports.passThrough=B;exports.plot=l;exports.referenceLabel=M;exports.referenceLine=P;exports.rowLabel=b;exports.scroll=d;exports.segment=N;exports.segmentLabel=K;exports.summary=s;exports.summaryInline=k;exports.summaryItem=w;exports.summarySubtitle=R;exports.summaryTitle=C;exports.table=Z;exports.tableEmpty=le;exports.tableRowExtra=ae;exports.tableRowHeader=ee;exports.tableScroll=L;exports.tableSwatch=te;exports.title=t;exports.track=H;exports.visuallyHidden=_e;
2
+ //# sourceMappingURL=ChartTimeline.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartTimeline.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,124 @@
1
+ const e = "_figure_1jzf5_1 _figure_yf6oe_1", _ = "_header_1jzf5_6", a = "_title_1jzf5_13 _title_yf6oe_9", t = "_plot_1jzf5_19", o = "_empty_1jzf5_24", l = "_body_1jzf5_33", s = "_labels_1jzf5_39", r = "_summary_1jzf5_40", n = "_labelsFixed_1jzf5_51", c = "_labelsCompact_1jzf5_55", m = "_labelsCompactWithSummary_1jzf5_59", b = "_rowLabel_1jzf5_63", f = "_groupLabel_1jzf5_64", i = "_childLabel_1jzf5_74", u = "_labelLine_1jzf5_78", j = "_labelText_1jzf5_85", z = "_labelDescription_1jzf5_96", p = "_labelSummary_1jzf5_97", y = "_groupButton_1jzf5_116", g = "_groupText_1jzf5_117", L = "_scroll_1jzf5_146", d = "_tableScroll_1jzf5_147", h = "_groupName_1jzf5_152", x = "_groupCount_1jzf5_158", v = "_chevron_1jzf5_165", w = "_chevronCollapsed_1jzf5_170", S = "_canvas_1jzf5_183", T = "_summaryItem_1jzf5_189", k = "_summaryInline_1jzf5_199", C = "_summaryTitle_1jzf5_206", R = "_summarySubtitle_1jzf5_215", H = "_track_1jzf5_229", B = "_hoverArea_1jzf5_234", E = "_passThrough_1jzf5_239", I = "_hatchLine_1jzf5_243", O = "_bandLabel_1jzf5_248", A = "_referenceLabel_1jzf5_249", D = "_referenceLine_1jzf5_261", F = "_emptyRowText_1jzf5_266", M = "_groupBar_1jzf5_271", N = "_groupProgress_1jzf5_276", P = "_segment_1jzf5_280", W = "_clickable_1jzf5_285", q = "_dimmed_1jzf5_289", G = "_barOverlay_1jzf5_294", J = "_clipMark_1jzf5_299", K = "_segmentLabel_1jzf5_307", Q = "_marker_1jzf5_311", U = "_focusRing_1jzf5_316", V = "_axisLine_1jzf5_323 _axisLine_yf6oe_68", X = "_axisLabel_1jzf5_327 _axisLabel_yf6oe_73", Y = "_axisOnHover_1jzf5_332", Z = "_table_1jzf5_147", $ = "_numeric_1jzf5_377", ee = "_tableRowHeader_1jzf5_387", _e = "_tableRowExtra_1jzf5_392", ae = "_tableSwatch_1jzf5_397", te = "_tableEmpty_1jzf5_406", oe = "_visuallyHidden_1jzf5_410", le = {
2
+ figure: e,
3
+ header: _,
4
+ title: a,
5
+ plot: t,
6
+ empty: o,
7
+ body: l,
8
+ labels: s,
9
+ summary: r,
10
+ labelsFixed: n,
11
+ labelsCompact: c,
12
+ labelsCompactWithSummary: m,
13
+ rowLabel: b,
14
+ groupLabel: f,
15
+ childLabel: i,
16
+ labelLine: u,
17
+ labelText: j,
18
+ labelDescription: z,
19
+ labelSummary: p,
20
+ groupButton: y,
21
+ groupText: g,
22
+ scroll: L,
23
+ tableScroll: d,
24
+ groupName: h,
25
+ groupCount: x,
26
+ chevron: v,
27
+ chevronCollapsed: w,
28
+ canvas: S,
29
+ summaryItem: T,
30
+ summaryInline: k,
31
+ summaryTitle: C,
32
+ summarySubtitle: R,
33
+ track: H,
34
+ hoverArea: B,
35
+ passThrough: E,
36
+ hatchLine: I,
37
+ bandLabel: O,
38
+ referenceLabel: A,
39
+ referenceLine: D,
40
+ emptyRowText: F,
41
+ groupBar: M,
42
+ groupProgress: N,
43
+ segment: P,
44
+ clickable: W,
45
+ dimmed: q,
46
+ barOverlay: G,
47
+ clipMark: J,
48
+ segmentLabel: K,
49
+ marker: Q,
50
+ focusRing: U,
51
+ axisLine: V,
52
+ axisLabel: X,
53
+ axisOnHover: Y,
54
+ table: Z,
55
+ numeric: $,
56
+ tableRowHeader: ee,
57
+ tableRowExtra: _e,
58
+ tableSwatch: ae,
59
+ tableEmpty: te,
60
+ visuallyHidden: oe
61
+ };
62
+ export {
63
+ X as axisLabel,
64
+ V as axisLine,
65
+ Y as axisOnHover,
66
+ O as bandLabel,
67
+ G as barOverlay,
68
+ l as body,
69
+ S as canvas,
70
+ v as chevron,
71
+ w as chevronCollapsed,
72
+ i as childLabel,
73
+ W as clickable,
74
+ J as clipMark,
75
+ le as default,
76
+ q as dimmed,
77
+ o as empty,
78
+ F as emptyRowText,
79
+ e as figure,
80
+ U as focusRing,
81
+ M as groupBar,
82
+ y as groupButton,
83
+ x as groupCount,
84
+ f as groupLabel,
85
+ h as groupName,
86
+ N as groupProgress,
87
+ g as groupText,
88
+ I as hatchLine,
89
+ _ as header,
90
+ B as hoverArea,
91
+ z as labelDescription,
92
+ u as labelLine,
93
+ p as labelSummary,
94
+ j as labelText,
95
+ s as labels,
96
+ c as labelsCompact,
97
+ m as labelsCompactWithSummary,
98
+ n as labelsFixed,
99
+ Q as marker,
100
+ $ as numeric,
101
+ E as passThrough,
102
+ t as plot,
103
+ A as referenceLabel,
104
+ D as referenceLine,
105
+ b as rowLabel,
106
+ L as scroll,
107
+ P as segment,
108
+ K as segmentLabel,
109
+ r as summary,
110
+ k as summaryInline,
111
+ T as summaryItem,
112
+ R as summarySubtitle,
113
+ C as summaryTitle,
114
+ Z as table,
115
+ te as tableEmpty,
116
+ _e as tableRowExtra,
117
+ ee as tableRowHeader,
118
+ d as tableScroll,
119
+ ae as tableSwatch,
120
+ a as title,
121
+ H as track,
122
+ oe as visuallyHidden
123
+ };
124
+ //# sourceMappingURL=ChartTimeline.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartTimeline.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),l=require("./ChartTimeline.module.css.cjs");function o({emptyRowLabel:r,rows:d,showProgress:c,title:t}){const i=c?5:4;return e.jsx("div",{"aria-label":`Tabela: ${t}`,className:l.default.tableScroll,role:"region",tabIndex:0,children:e.jsxs("table",{className:l.default.table,children:[e.jsx("caption",{className:l.default.visuallyHidden,children:t}),e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{scope:"col",children:"Série"}),e.jsx("th",{className:l.default.numeric,scope:"col",children:"Início"}),e.jsx("th",{className:l.default.numeric,scope:"col",children:"Fim"}),e.jsx("th",{className:l.default.numeric,scope:"col",children:"Duração"}),c&&e.jsx("th",{className:l.default.numeric,scope:"col",children:"Progresso"})]})}),d.map(a=>{const u=a.summary&&[a.summary.title,a.summary.subtitle].filter(Boolean).join(", "),n=[a.description,u].filter(Boolean).join(" · ");return e.jsxs("tbody",{children:[e.jsx("tr",{children:e.jsxs("th",{className:l.default.tableRowHeader,colSpan:i,scope:"rowgroup",children:[a.label,n&&e.jsxs(e.Fragment,{children:[" ",e.jsx("span",{className:l.default.tableRowExtra,children:n})]})]})}),a.entries.map((s,m)=>e.jsxs("tr",{children:[e.jsxs("td",{children:[e.jsx("span",{"aria-hidden":"true",className:l.default.tableSwatch,style:{background:s.color}}),s.name]}),e.jsx("td",{className:l.default.numeric,children:s.start}),e.jsx("td",{className:l.default.numeric,children:s.end}),e.jsx("td",{className:l.default.numeric,children:s.duration}),c&&e.jsx("td",{className:l.default.numeric,children:s.progress})]},m)),a.entries.length===0&&e.jsx("tr",{children:e.jsx("td",{className:l.default.tableEmpty,colSpan:i,children:r})})]},a.key)})]})})}exports.ChartTimelineTable=o;
2
+ //# sourceMappingURL=ChartTimelineTable.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartTimelineTable.cjs","sources":["../../../../src/components/charts/ChartTimeline/ChartTimelineTable.tsx"],"sourcesContent":["import type { ChartTimelineSummary } from './ChartTimeline';\nimport styles from './ChartTimeline.module.css';\n\nexport interface TimelineTableEntry {\n color: string;\n duration: string;\n end: string;\n name: string;\n progress?: string;\n start: string;\n}\n\nexport interface TimelineTableRow {\n description?: string;\n entries: readonly TimelineTableEntry[];\n key: string;\n label: string;\n summary?: ChartTimelineSummary;\n}\n\ninterface ChartTimelineTableProps {\n emptyRowLabel: string;\n rows: readonly TimelineTableRow[];\n showProgress: boolean;\n title: string;\n}\n\n/** Leitura medida a medida do grafico: uma secao por linha, com o rotulo, a descricao e o resumo no cabecalho dela. */\nexport function ChartTimelineTable({ emptyRowLabel, rows, showProgress, title }: ChartTimelineTableProps) {\n const columns = showProgress ? 5 : 4;\n\n return (\n <div aria-label={`Tabela: ${title}`} className={styles.tableScroll} role=\"region\" tabIndex={0}>\n <table className={styles.table}>\n <caption className={styles.visuallyHidden}>{title}</caption>\n <thead>\n <tr>\n <th scope=\"col\">Série</th>\n <th className={styles.numeric} scope=\"col\">Início</th>\n <th className={styles.numeric} scope=\"col\">Fim</th>\n <th className={styles.numeric} scope=\"col\">Duração</th>\n {showProgress && <th className={styles.numeric} scope=\"col\">Progresso</th>}\n </tr>\n </thead>\n {rows.map((row) => {\n const summary = row.summary && [row.summary.title, row.summary.subtitle].filter(Boolean).join(', ');\n const extra = [row.description, summary].filter(Boolean).join(' · ');\n\n return (\n <tbody key={row.key}>\n <tr>\n <th className={styles.tableRowHeader} colSpan={columns} scope=\"rowgroup\">\n {row.label}\n {extra && <> <span className={styles.tableRowExtra}>{extra}</span></>}\n </th>\n </tr>\n {row.entries.map((entry, index) => (\n <tr key={index}>\n <td>\n <span aria-hidden=\"true\" className={styles.tableSwatch} style={{ background: entry.color }} />\n {entry.name}\n </td>\n <td className={styles.numeric}>{entry.start}</td>\n <td className={styles.numeric}>{entry.end}</td>\n <td className={styles.numeric}>{entry.duration}</td>\n {showProgress && <td className={styles.numeric}>{entry.progress}</td>}\n </tr>\n ))}\n {row.entries.length === 0 && (\n <tr>\n <td className={styles.tableEmpty} colSpan={columns}>\n {emptyRowLabel}\n </td>\n </tr>\n )}\n </tbody>\n );\n })}\n </table>\n </div>\n );\n}\n"],"names":["ChartTimelineTable","emptyRowLabel","rows","showProgress","title","columns","styles","jsx","jsxs","row","summary","extra","Fragment","entry","index"],"mappings":"iKA4BO,SAASA,EAAmB,CAAE,cAAAC,EAAe,KAAAC,EAAM,aAAAC,EAAc,MAAAC,GAAkC,CACxG,MAAMC,EAAUF,EAAe,EAAI,EAEnC,aACG,MAAA,CAAI,aAAY,WAAWC,CAAK,GAAI,UAAWE,EAAAA,QAAO,YAAa,KAAK,SAAS,SAAU,EAC1F,gBAAC,QAAA,CAAM,UAAWA,EAAAA,QAAO,MACvB,SAAA,CAAAC,EAAAA,IAAC,UAAA,CAAQ,UAAWD,EAAAA,QAAO,eAAiB,SAAAF,EAAM,EAClDG,EAAAA,IAAC,QAAA,CACC,SAAAC,EAAAA,KAAC,KAAA,CACC,SAAA,CAAAD,EAAAA,IAAC,KAAA,CAAG,MAAM,MAAM,SAAA,QAAK,QACpB,KAAA,CAAG,UAAWD,EAAAA,QAAO,QAAS,MAAM,MAAM,SAAA,SAAM,QAChD,KAAA,CAAG,UAAWA,EAAAA,QAAO,QAAS,MAAM,MAAM,SAAA,MAAG,QAC7C,KAAA,CAAG,UAAWA,EAAAA,QAAO,QAAS,MAAM,MAAM,SAAA,UAAO,EACjDH,SAAiB,KAAA,CAAG,UAAWG,EAAAA,QAAO,QAAS,MAAM,MAAM,SAAA,WAAA,CAAS,CAAA,CAAA,CACvE,CAAA,CACF,EACCJ,EAAK,IAAKO,GAAQ,CACjB,MAAMC,EAAUD,EAAI,SAAW,CAACA,EAAI,QAAQ,MAAOA,EAAI,QAAQ,QAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,EAC5FE,EAAQ,CAACF,EAAI,YAAaC,CAAO,EAAE,OAAO,OAAO,EAAE,KAAK,KAAK,EAEnE,cACG,QAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,KAAA,CACC,gBAAC,KAAA,CAAG,UAAWD,EAAAA,QAAO,eAAgB,QAASD,EAAS,MAAM,WAC3D,SAAA,CAAAI,EAAI,MACJE,GAASH,EAAAA,KAAAI,WAAA,CAAE,SAAA,CAAA,IAACL,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,cAAgB,SAAAK,CAAA,CAAM,CAAA,CAAA,CAAO,CAAA,CAAA,CACpE,CAAA,CACF,EACCF,EAAI,QAAQ,IAAI,CAACI,EAAOC,WACtB,KAAA,CACC,SAAA,CAAAN,OAAC,KAAA,CACC,SAAA,CAAAD,EAAAA,IAAC,OAAA,CAAK,cAAY,OAAO,UAAWD,EAAAA,QAAO,YAAa,MAAO,CAAE,WAAYO,EAAM,KAAA,CAAM,CAAG,EAC3FA,EAAM,IAAA,EACT,QACC,KAAA,CAAG,UAAWP,EAAAA,QAAO,QAAU,WAAM,MAAM,QAC3C,KAAA,CAAG,UAAWA,EAAAA,QAAO,QAAU,WAAM,IAAI,QACzC,KAAA,CAAG,UAAWA,EAAAA,QAAO,QAAU,WAAM,SAAS,EAC9CH,GAAgBI,EAAAA,IAAC,KAAA,CAAG,UAAWD,EAAAA,QAAO,QAAU,WAAM,QAAA,CAAS,CAAA,CAAA,EARzDQ,CAST,CACD,EACAL,EAAI,QAAQ,SAAW,SACrB,KAAA,CACC,SAAAF,EAAAA,IAAC,KAAA,CAAG,UAAWD,EAAAA,QAAO,WAAY,QAASD,EACxC,WACH,CAAA,CACF,CAAA,CAAA,EAxBQI,EAAI,GA0BhB,CAEJ,CAAC,CAAA,CAAA,CACH,CAAA,CACF,CAEJ"}
@@ -0,0 +1,42 @@
1
+ import { jsx as e, jsxs as c, Fragment as u } from "react/jsx-runtime";
2
+ import l from "./ChartTimeline.module.css.js";
3
+ function N({ emptyRowLabel: m, rows: d, showProgress: n, title: i }) {
4
+ const s = n ? 5 : 4;
5
+ return /* @__PURE__ */ e("div", { "aria-label": `Tabela: ${i}`, className: l.tableScroll, role: "region", tabIndex: 0, children: /* @__PURE__ */ c("table", { className: l.table, children: [
6
+ /* @__PURE__ */ e("caption", { className: l.visuallyHidden, children: i }),
7
+ /* @__PURE__ */ e("thead", { children: /* @__PURE__ */ c("tr", { children: [
8
+ /* @__PURE__ */ e("th", { scope: "col", children: "Série" }),
9
+ /* @__PURE__ */ e("th", { className: l.numeric, scope: "col", children: "Início" }),
10
+ /* @__PURE__ */ e("th", { className: l.numeric, scope: "col", children: "Fim" }),
11
+ /* @__PURE__ */ e("th", { className: l.numeric, scope: "col", children: "Duração" }),
12
+ n && /* @__PURE__ */ e("th", { className: l.numeric, scope: "col", children: "Progresso" })
13
+ ] }) }),
14
+ d.map((a) => {
15
+ const o = a.summary && [a.summary.title, a.summary.subtitle].filter(Boolean).join(", "), t = [a.description, o].filter(Boolean).join(" · ");
16
+ return /* @__PURE__ */ c("tbody", { children: [
17
+ /* @__PURE__ */ e("tr", { children: /* @__PURE__ */ c("th", { className: l.tableRowHeader, colSpan: s, scope: "rowgroup", children: [
18
+ a.label,
19
+ t && /* @__PURE__ */ c(u, { children: [
20
+ " ",
21
+ /* @__PURE__ */ e("span", { className: l.tableRowExtra, children: t })
22
+ ] })
23
+ ] }) }),
24
+ a.entries.map((r, h) => /* @__PURE__ */ c("tr", { children: [
25
+ /* @__PURE__ */ c("td", { children: [
26
+ /* @__PURE__ */ e("span", { "aria-hidden": "true", className: l.tableSwatch, style: { background: r.color } }),
27
+ r.name
28
+ ] }),
29
+ /* @__PURE__ */ e("td", { className: l.numeric, children: r.start }),
30
+ /* @__PURE__ */ e("td", { className: l.numeric, children: r.end }),
31
+ /* @__PURE__ */ e("td", { className: l.numeric, children: r.duration }),
32
+ n && /* @__PURE__ */ e("td", { className: l.numeric, children: r.progress })
33
+ ] }, h)),
34
+ a.entries.length === 0 && /* @__PURE__ */ e("tr", { children: /* @__PURE__ */ e("td", { className: l.tableEmpty, colSpan: s, children: m }) })
35
+ ] }, a.key);
36
+ })
37
+ ] }) });
38
+ }
39
+ export {
40
+ N as ChartTimelineTable
41
+ };
42
+ //# sourceMappingURL=ChartTimelineTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartTimelineTable.js","sources":["../../../../src/components/charts/ChartTimeline/ChartTimelineTable.tsx"],"sourcesContent":["import type { ChartTimelineSummary } from './ChartTimeline';\nimport styles from './ChartTimeline.module.css';\n\nexport interface TimelineTableEntry {\n color: string;\n duration: string;\n end: string;\n name: string;\n progress?: string;\n start: string;\n}\n\nexport interface TimelineTableRow {\n description?: string;\n entries: readonly TimelineTableEntry[];\n key: string;\n label: string;\n summary?: ChartTimelineSummary;\n}\n\ninterface ChartTimelineTableProps {\n emptyRowLabel: string;\n rows: readonly TimelineTableRow[];\n showProgress: boolean;\n title: string;\n}\n\n/** Leitura medida a medida do grafico: uma secao por linha, com o rotulo, a descricao e o resumo no cabecalho dela. */\nexport function ChartTimelineTable({ emptyRowLabel, rows, showProgress, title }: ChartTimelineTableProps) {\n const columns = showProgress ? 5 : 4;\n\n return (\n <div aria-label={`Tabela: ${title}`} className={styles.tableScroll} role=\"region\" tabIndex={0}>\n <table className={styles.table}>\n <caption className={styles.visuallyHidden}>{title}</caption>\n <thead>\n <tr>\n <th scope=\"col\">Série</th>\n <th className={styles.numeric} scope=\"col\">Início</th>\n <th className={styles.numeric} scope=\"col\">Fim</th>\n <th className={styles.numeric} scope=\"col\">Duração</th>\n {showProgress && <th className={styles.numeric} scope=\"col\">Progresso</th>}\n </tr>\n </thead>\n {rows.map((row) => {\n const summary = row.summary && [row.summary.title, row.summary.subtitle].filter(Boolean).join(', ');\n const extra = [row.description, summary].filter(Boolean).join(' · ');\n\n return (\n <tbody key={row.key}>\n <tr>\n <th className={styles.tableRowHeader} colSpan={columns} scope=\"rowgroup\">\n {row.label}\n {extra && <> <span className={styles.tableRowExtra}>{extra}</span></>}\n </th>\n </tr>\n {row.entries.map((entry, index) => (\n <tr key={index}>\n <td>\n <span aria-hidden=\"true\" className={styles.tableSwatch} style={{ background: entry.color }} />\n {entry.name}\n </td>\n <td className={styles.numeric}>{entry.start}</td>\n <td className={styles.numeric}>{entry.end}</td>\n <td className={styles.numeric}>{entry.duration}</td>\n {showProgress && <td className={styles.numeric}>{entry.progress}</td>}\n </tr>\n ))}\n {row.entries.length === 0 && (\n <tr>\n <td className={styles.tableEmpty} colSpan={columns}>\n {emptyRowLabel}\n </td>\n </tr>\n )}\n </tbody>\n );\n })}\n </table>\n </div>\n );\n}\n"],"names":["ChartTimelineTable","emptyRowLabel","rows","showProgress","title","columns","styles","jsx","jsxs","row","summary","extra","Fragment","entry","index"],"mappings":";;AA4BO,SAASA,EAAmB,EAAE,eAAAC,GAAe,MAAAC,GAAM,cAAAC,GAAc,OAAAC,KAAkC;AACxG,QAAMC,IAAUF,IAAe,IAAI;AAEnC,2BACG,OAAA,EAAI,cAAY,WAAWC,CAAK,IAAI,WAAWE,EAAO,aAAa,MAAK,UAAS,UAAU,GAC1F,4BAAC,SAAA,EAAM,WAAWA,EAAO,OACvB,UAAA;AAAA,IAAA,gBAAAC,EAAC,WAAA,EAAQ,WAAWD,EAAO,gBAAiB,UAAAF,GAAM;AAAA,IAClD,gBAAAG,EAAC,SAAA,EACC,UAAA,gBAAAC,EAAC,MAAA,EACC,UAAA;AAAA,MAAA,gBAAAD,EAAC,MAAA,EAAG,OAAM,OAAM,UAAA,SAAK;AAAA,wBACpB,MAAA,EAAG,WAAWD,EAAO,SAAS,OAAM,OAAM,UAAA,UAAM;AAAA,wBAChD,MAAA,EAAG,WAAWA,EAAO,SAAS,OAAM,OAAM,UAAA,OAAG;AAAA,wBAC7C,MAAA,EAAG,WAAWA,EAAO,SAAS,OAAM,OAAM,UAAA,WAAO;AAAA,MACjDH,uBAAiB,MAAA,EAAG,WAAWG,EAAO,SAAS,OAAM,OAAM,UAAA,YAAA,CAAS;AAAA,IAAA,EAAA,CACvE,EAAA,CACF;AAAA,IACCJ,EAAK,IAAI,CAACO,MAAQ;AACjB,YAAMC,IAAUD,EAAI,WAAW,CAACA,EAAI,QAAQ,OAAOA,EAAI,QAAQ,QAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,GAC5FE,IAAQ,CAACF,EAAI,aAAaC,CAAO,EAAE,OAAO,OAAO,EAAE,KAAK,KAAK;AAEnE,+BACG,SAAA,EACC,UAAA;AAAA,QAAA,gBAAAH,EAAC,MAAA,EACC,4BAAC,MAAA,EAAG,WAAWD,EAAO,gBAAgB,SAASD,GAAS,OAAM,YAC3D,UAAA;AAAA,UAAAI,EAAI;AAAA,UACJE,KAAS,gBAAAH,EAAAI,GAAA,EAAE,UAAA;AAAA,YAAA;AAAA,YAAC,gBAAAL,EAAC,QAAA,EAAK,WAAWD,EAAO,eAAgB,UAAAK,EAAA,CAAM;AAAA,UAAA,EAAA,CAAO;AAAA,QAAA,EAAA,CACpE,EAAA,CACF;AAAA,QACCF,EAAI,QAAQ,IAAI,CAACI,GAAOC,wBACtB,MAAA,EACC,UAAA;AAAA,UAAA,gBAAAN,EAAC,MAAA,EACC,UAAA;AAAA,YAAA,gBAAAD,EAAC,QAAA,EAAK,eAAY,QAAO,WAAWD,EAAO,aAAa,OAAO,EAAE,YAAYO,EAAM,MAAA,EAAM,CAAG;AAAA,YAC3FA,EAAM;AAAA,UAAA,GACT;AAAA,4BACC,MAAA,EAAG,WAAWP,EAAO,SAAU,YAAM,OAAM;AAAA,4BAC3C,MAAA,EAAG,WAAWA,EAAO,SAAU,YAAM,KAAI;AAAA,4BACzC,MAAA,EAAG,WAAWA,EAAO,SAAU,YAAM,UAAS;AAAA,UAC9CH,KAAgB,gBAAAI,EAAC,MAAA,EAAG,WAAWD,EAAO,SAAU,YAAM,SAAA,CAAS;AAAA,QAAA,EAAA,GARzDQ,CAST,CACD;AAAA,QACAL,EAAI,QAAQ,WAAW,uBACrB,MAAA,EACC,UAAA,gBAAAF,EAAC,MAAA,EAAG,WAAWD,EAAO,YAAY,SAASD,GACxC,aACH,EAAA,CACF;AAAA,MAAA,EAAA,GAxBQI,EAAI,GA0BhB;AAAA,IAEJ,CAAC;AAAA,EAAA,EAAA,CACH,EAAA,CACF;AAEJ;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("d3-array"),w=require("./timelineTime.cjs"),T=24;function v(a,i,t){const e=w.toPosition(a,t),o=w.toPosition(i,t);if(!(!Number.isFinite(e)||!Number.isFinite(o)||o<e&&t==="calendar"))return{end:o<e?o+T:o,start:e}}function R(a,i){return a.flatMap((t,e)=>{const o=v(t.start,t.end,i),n=t.progress;return o?[{...o,id:e,label:t.label,progress:n!==void 0&&Number.isFinite(n)?Math.min(Math.max(n,0),1):void 0,row:t.row,series:t.series,source:t}]:[]})}function I(a,i,t,e){const o=a.map(r=>({position:w.toPosition(r.time,e),state:r})).filter(({position:r})=>Number.isFinite(r)),n=b.group(o,({state:r})=>r.row),s=[];for(const[r,m]of n)m.sort((g,f)=>g.position-f.position),m.forEach(({state:g},f)=>{var d;const p=((d=m[f+1])==null?void 0:d.state.time)??i,c=s.at(-1);if(t&&(c==null?void 0:c.row)===r&&c.series===g.state){c.end=p;return}s.push({end:p,row:r,series:g.state,start:g.time})});return s}function M(a,i){const t=[...a].sort((n,s)=>n.start-s.start||n.end-s.end);if(i==="overlay")return{laneCount:1,segments:t.map(n=>({...n,lane:0}))};const e=[],o=t.map(n=>{let s=e.findIndex(r=>r<=n.start);return s===-1?(s=e.length,e.push(n.end)):e[s]=n.end,{...n,lane:s}});return{laneCount:Math.max(e.length,1),segments:o}}function S(a,i){const t=new Set(i.map(e=>e.key));return[...a.filter(e=>e.group===void 0||!t.has(e.group)),...i.flatMap(e=>a.filter(o=>o.group===e.key))]}function N({groupHeight:a,groups:i,isCollapsed:t,laneStep:e,overlap:o,rowGap:n,rowHeight:s,rows:r,segments:m}){const g=b.group(m,u=>u.row),f=new Map(i.map(u=>[u.key,u])),p=[];let c;for(const u of S(r,i)){const l=u.group===void 0?void 0:f.get(u.group);if(l&&l.key!==c){const k=r.filter(h=>h.group===l.key);c=l.key,p.push({collapsed:t(l.key),group:l,height:a,kind:"group",rows:k,segments:k.flatMap(h=>g.get(h.key)??[]),y:0})}if(l&&t(l.key))continue;const y=M(g.get(u.key)??[],o);p.push({child:l!==void 0,height:s+(y.laneCount-1)*e,kind:"row",laneCount:y.laneCount,row:u,segments:y.segments,y:0})}let d=0;return p.forEach((u,l)=>{u.y=d,d+=u.height+(l<p.length-1?n:0)}),{height:d,items:p}}exports.layoutTimeline=N;exports.placeInLanes=M;exports.rowsInDisplayOrder=S;exports.statesToSegments=I;exports.toRange=v;exports.toTimelineSegments=R;
2
+ //# sourceMappingURL=timelineLayout.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timelineLayout.cjs","sources":["../../../../src/components/charts/ChartTimeline/timelineLayout.ts"],"sourcesContent":["import type {\n ChartTimelineGroup,\n ChartTimelineOverlap,\n ChartTimelineRow,\n ChartTimelineScale,\n ChartTimelineSegment,\n ChartTimelineState,\n ChartTimelineTime,\n} from './ChartTimeline';\nimport { group as groupBy } from 'd3-array';\nimport { toPosition } from './timelineTime';\n\nconst HOURS_IN_DAY = 24;\n\nexport interface TimelineRange {\n end: number;\n start: number;\n}\n\n/** Intervalo com as pontas em posicao do eixo. `source` e o que o consumidor recebe de volta. */\nexport interface TimelineSegment extends TimelineRange {\n id: number;\n label?: string;\n progress?: number;\n row: string;\n series: string;\n source: ChartTimelineSegment;\n}\n\nexport interface PlacedSegment extends TimelineSegment {\n lane: number;\n}\n\nexport type TimelineItem =\n | {\n child: boolean;\n height: number;\n kind: 'row';\n laneCount: number;\n row: ChartTimelineRow;\n segments: readonly PlacedSegment[];\n y: number;\n }\n | {\n collapsed: boolean;\n group: ChartTimelineGroup;\n height: number;\n kind: 'group';\n rows: readonly ChartTimelineRow[];\n segments: readonly TimelineSegment[];\n y: number;\n };\n\n/**\n * Pontas em posicao do eixo. Em `dayHours`, o fim antes do inicio e o intervalo que cruza a meia-noite: ele termina\n * no dia seguinte, e o desenho o corta no fim do eixo. Instante invalido, ou fim antes do inicio em datas, nao vira\n * geometria.\n */\nexport function toRange(start: ChartTimelineTime, end: ChartTimelineTime, scale: ChartTimelineScale) {\n const from = toPosition(start, scale);\n const to = toPosition(end, scale);\n\n if (!Number.isFinite(from) || !Number.isFinite(to) || (to < from && scale === 'calendar')) {\n return undefined;\n }\n\n return { end: to < from ? to + HOURS_IN_DAY : to, start: from };\n}\n\nexport function toTimelineSegments(segments: readonly ChartTimelineSegment[], scale: ChartTimelineScale) {\n return segments.flatMap((source, id): TimelineSegment[] => {\n const range = toRange(source.start, source.end, scale);\n const progress = source.progress;\n\n if (!range) {\n return [];\n }\n\n return [\n {\n ...range,\n id,\n label: source.label,\n progress: progress !== undefined && Number.isFinite(progress) ? Math.min(Math.max(progress, 0), 1) : undefined,\n row: source.row,\n series: source.series,\n source,\n },\n ];\n });\n}\n\n/** Cada estado vale ate o seguinte da linha, e o ultimo ate `end`. Com `merge`, iguais seguidos viram uma regiao. */\nexport function statesToSegments(\n states: readonly ChartTimelineState[],\n end: ChartTimelineTime,\n merge: boolean,\n scale: ChartTimelineScale,\n) {\n const readings = states\n .map((state) => ({ position: toPosition(state.time, scale), state }))\n .filter(({ position }) => Number.isFinite(position));\n const readingsByRow = groupBy(readings, ({ state }) => state.row);\n const segments: ChartTimelineSegment[] = [];\n\n for (const [row, rowReadings] of readingsByRow) {\n rowReadings.sort((a, b) => a.position - b.position);\n\n rowReadings.forEach(({ state }, index) => {\n const next = rowReadings[index + 1]?.state.time ?? end;\n const previous = segments.at(-1);\n\n if (merge && previous?.row === row && previous.series === state.state) {\n previous.end = next;\n return;\n }\n\n segments.push({ end: next, row, series: state.state, start: state.time });\n });\n }\n\n return segments;\n}\n\n/** Sub-faixas: cada intervalo entra na primeira cujo ultimo intervalo ja terminou. Em `overlay`, todos na mesma. */\nexport function placeInLanes(segments: readonly TimelineSegment[], overlap: ChartTimelineOverlap) {\n const ordered = [...segments].sort((a, b) => a.start - b.start || a.end - b.end);\n\n if (overlap === 'overlay') {\n return { laneCount: 1, segments: ordered.map((segment): PlacedSegment => ({ ...segment, lane: 0 })) };\n }\n\n const laneEnds: number[] = [];\n const placed = ordered.map((segment): PlacedSegment => {\n let lane = laneEnds.findIndex((laneEnd) => laneEnd <= segment.start);\n\n if (lane === -1) {\n lane = laneEnds.length;\n laneEnds.push(segment.end);\n } else {\n laneEnds[lane] = segment.end;\n }\n\n return { ...segment, lane };\n });\n\n return { laneCount: Math.max(laneEnds.length, 1), segments: placed };\n}\n\n/** As linhas sem grupo, ou de grupo desconhecido, vem primeiro; depois as de cada grupo, na ordem dos grupos. */\nexport function rowsInDisplayOrder(rows: readonly ChartTimelineRow[], groups: readonly ChartTimelineGroup[]) {\n const known = new Set(groups.map((group) => group.key));\n\n return [\n ...rows.filter((row) => row.group === undefined || !known.has(row.group)),\n ...groups.flatMap((group) => rows.filter((row) => row.group === group.key)),\n ];\n}\n\nexport interface TimelineLayoutOptions {\n groupHeight: number;\n groups: readonly ChartTimelineGroup[];\n isCollapsed: (groupKey: string) => boolean;\n laneStep: number;\n overlap: ChartTimelineOverlap;\n rowGap: number;\n rowHeight: number;\n rows: readonly ChartTimelineRow[];\n /** So os visiveis: a serie desligada nao ocupa sub-faixa. */\n segments: readonly TimelineSegment[];\n}\n\n/** Ordem e altura de cada linha e cabecalho de grupo. A linha cresce uma sub-faixa por intervalo sobreposto. */\nexport function layoutTimeline({\n groupHeight,\n groups,\n isCollapsed,\n laneStep,\n overlap,\n rowGap,\n rowHeight,\n rows,\n segments,\n}: TimelineLayoutOptions) {\n const byRow = groupBy(segments, (segment) => segment.row);\n const groupsByKey = new Map(groups.map((candidate) => [candidate.key, candidate]));\n const items: TimelineItem[] = [];\n let currentGroup: string | undefined;\n\n for (const row of rowsInDisplayOrder(rows, groups)) {\n const group = row.group === undefined ? undefined : groupsByKey.get(row.group);\n\n if (group && group.key !== currentGroup) {\n const groupRows = rows.filter((candidate) => candidate.group === group.key);\n\n currentGroup = group.key;\n items.push({\n collapsed: isCollapsed(group.key),\n group,\n height: groupHeight,\n kind: 'group',\n rows: groupRows,\n segments: groupRows.flatMap((candidate) => byRow.get(candidate.key) ?? []),\n y: 0,\n });\n }\n\n if (group && isCollapsed(group.key)) {\n continue;\n }\n\n const lanes = placeInLanes(byRow.get(row.key) ?? [], overlap);\n\n items.push({\n child: group !== undefined,\n height: rowHeight + (lanes.laneCount - 1) * laneStep,\n kind: 'row',\n laneCount: lanes.laneCount,\n row,\n segments: lanes.segments,\n y: 0,\n });\n }\n\n let y = 0;\n\n items.forEach((item, index) => {\n item.y = y;\n y += item.height + (index < items.length - 1 ? rowGap : 0);\n });\n\n return { height: y, items };\n}\n"],"names":["HOURS_IN_DAY","toRange","start","end","scale","from","toPosition","to","toTimelineSegments","segments","source","id","range","progress","statesToSegments","states","merge","readings","state","position","readingsByRow","groupBy","row","rowReadings","a","b","index","next","_a","previous","placeInLanes","overlap","ordered","segment","laneEnds","placed","lane","laneEnd","rowsInDisplayOrder","rows","groups","known","group","layoutTimeline","groupHeight","isCollapsed","laneStep","rowGap","rowHeight","byRow","groupsByKey","candidate","items","currentGroup","groupRows","lanes","y","item"],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { group as v } from "d3-array";
2
+ import { toPosition as w } from "./timelineTime.js";
3
+ const M = 24;
4
+ function b(a, s, e) {
5
+ const t = w(a, e), o = w(s, e);
6
+ if (!(!Number.isFinite(t) || !Number.isFinite(o) || o < t && e === "calendar"))
7
+ return { end: o < t ? o + M : o, start: t };
8
+ }
9
+ function F(a, s) {
10
+ return a.flatMap((e, t) => {
11
+ const o = b(e.start, e.end, s), n = e.progress;
12
+ return o ? [
13
+ {
14
+ ...o,
15
+ id: t,
16
+ label: e.label,
17
+ progress: n !== void 0 && Number.isFinite(n) ? Math.min(Math.max(n, 0), 1) : void 0,
18
+ row: e.row,
19
+ series: e.series,
20
+ source: e
21
+ }
22
+ ] : [];
23
+ });
24
+ }
25
+ function I(a, s, e, t) {
26
+ const o = a.map((r) => ({ position: w(r.time, t), state: r })).filter(({ position: r }) => Number.isFinite(r)), n = v(o, ({ state: r }) => r.row), i = [];
27
+ for (const [r, d] of n)
28
+ d.sort((p, m) => p.position - m.position), d.forEach(({ state: p }, m) => {
29
+ var c;
30
+ const g = ((c = d[m + 1]) == null ? void 0 : c.state.time) ?? s, f = i.at(-1);
31
+ if (e && (f == null ? void 0 : f.row) === r && f.series === p.state) {
32
+ f.end = g;
33
+ return;
34
+ }
35
+ i.push({ end: g, row: r, series: p.state, start: p.time });
36
+ });
37
+ return i;
38
+ }
39
+ function R(a, s) {
40
+ const e = [...a].sort((n, i) => n.start - i.start || n.end - i.end);
41
+ if (s === "overlay")
42
+ return { laneCount: 1, segments: e.map((n) => ({ ...n, lane: 0 })) };
43
+ const t = [], o = e.map((n) => {
44
+ let i = t.findIndex((r) => r <= n.start);
45
+ return i === -1 ? (i = t.length, t.push(n.end)) : t[i] = n.end, { ...n, lane: i };
46
+ });
47
+ return { laneCount: Math.max(t.length, 1), segments: o };
48
+ }
49
+ function x(a, s) {
50
+ const e = new Set(s.map((t) => t.key));
51
+ return [
52
+ ...a.filter((t) => t.group === void 0 || !e.has(t.group)),
53
+ ...s.flatMap((t) => a.filter((o) => o.group === t.key))
54
+ ];
55
+ }
56
+ function S({
57
+ groupHeight: a,
58
+ groups: s,
59
+ isCollapsed: e,
60
+ laneStep: t,
61
+ overlap: o,
62
+ rowGap: n,
63
+ rowHeight: i,
64
+ rows: r,
65
+ segments: d
66
+ }) {
67
+ const p = v(d, (u) => u.row), m = new Map(s.map((u) => [u.key, u])), g = [];
68
+ let f;
69
+ for (const u of x(r, s)) {
70
+ const l = u.group === void 0 ? void 0 : m.get(u.group);
71
+ if (l && l.key !== f) {
72
+ const k = r.filter((y) => y.group === l.key);
73
+ f = l.key, g.push({
74
+ collapsed: e(l.key),
75
+ group: l,
76
+ height: a,
77
+ kind: "group",
78
+ rows: k,
79
+ segments: k.flatMap((y) => p.get(y.key) ?? []),
80
+ y: 0
81
+ });
82
+ }
83
+ if (l && e(l.key))
84
+ continue;
85
+ const h = R(p.get(u.key) ?? [], o);
86
+ g.push({
87
+ child: l !== void 0,
88
+ height: i + (h.laneCount - 1) * t,
89
+ kind: "row",
90
+ laneCount: h.laneCount,
91
+ row: u,
92
+ segments: h.segments,
93
+ y: 0
94
+ });
95
+ }
96
+ let c = 0;
97
+ return g.forEach((u, l) => {
98
+ u.y = c, c += u.height + (l < g.length - 1 ? n : 0);
99
+ }), { height: c, items: g };
100
+ }
101
+ export {
102
+ S as layoutTimeline,
103
+ R as placeInLanes,
104
+ x as rowsInDisplayOrder,
105
+ I as statesToSegments,
106
+ b as toRange,
107
+ F as toTimelineSegments
108
+ };
109
+ //# sourceMappingURL=timelineLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timelineLayout.js","sources":["../../../../src/components/charts/ChartTimeline/timelineLayout.ts"],"sourcesContent":["import type {\n ChartTimelineGroup,\n ChartTimelineOverlap,\n ChartTimelineRow,\n ChartTimelineScale,\n ChartTimelineSegment,\n ChartTimelineState,\n ChartTimelineTime,\n} from './ChartTimeline';\nimport { group as groupBy } from 'd3-array';\nimport { toPosition } from './timelineTime';\n\nconst HOURS_IN_DAY = 24;\n\nexport interface TimelineRange {\n end: number;\n start: number;\n}\n\n/** Intervalo com as pontas em posicao do eixo. `source` e o que o consumidor recebe de volta. */\nexport interface TimelineSegment extends TimelineRange {\n id: number;\n label?: string;\n progress?: number;\n row: string;\n series: string;\n source: ChartTimelineSegment;\n}\n\nexport interface PlacedSegment extends TimelineSegment {\n lane: number;\n}\n\nexport type TimelineItem =\n | {\n child: boolean;\n height: number;\n kind: 'row';\n laneCount: number;\n row: ChartTimelineRow;\n segments: readonly PlacedSegment[];\n y: number;\n }\n | {\n collapsed: boolean;\n group: ChartTimelineGroup;\n height: number;\n kind: 'group';\n rows: readonly ChartTimelineRow[];\n segments: readonly TimelineSegment[];\n y: number;\n };\n\n/**\n * Pontas em posicao do eixo. Em `dayHours`, o fim antes do inicio e o intervalo que cruza a meia-noite: ele termina\n * no dia seguinte, e o desenho o corta no fim do eixo. Instante invalido, ou fim antes do inicio em datas, nao vira\n * geometria.\n */\nexport function toRange(start: ChartTimelineTime, end: ChartTimelineTime, scale: ChartTimelineScale) {\n const from = toPosition(start, scale);\n const to = toPosition(end, scale);\n\n if (!Number.isFinite(from) || !Number.isFinite(to) || (to < from && scale === 'calendar')) {\n return undefined;\n }\n\n return { end: to < from ? to + HOURS_IN_DAY : to, start: from };\n}\n\nexport function toTimelineSegments(segments: readonly ChartTimelineSegment[], scale: ChartTimelineScale) {\n return segments.flatMap((source, id): TimelineSegment[] => {\n const range = toRange(source.start, source.end, scale);\n const progress = source.progress;\n\n if (!range) {\n return [];\n }\n\n return [\n {\n ...range,\n id,\n label: source.label,\n progress: progress !== undefined && Number.isFinite(progress) ? Math.min(Math.max(progress, 0), 1) : undefined,\n row: source.row,\n series: source.series,\n source,\n },\n ];\n });\n}\n\n/** Cada estado vale ate o seguinte da linha, e o ultimo ate `end`. Com `merge`, iguais seguidos viram uma regiao. */\nexport function statesToSegments(\n states: readonly ChartTimelineState[],\n end: ChartTimelineTime,\n merge: boolean,\n scale: ChartTimelineScale,\n) {\n const readings = states\n .map((state) => ({ position: toPosition(state.time, scale), state }))\n .filter(({ position }) => Number.isFinite(position));\n const readingsByRow = groupBy(readings, ({ state }) => state.row);\n const segments: ChartTimelineSegment[] = [];\n\n for (const [row, rowReadings] of readingsByRow) {\n rowReadings.sort((a, b) => a.position - b.position);\n\n rowReadings.forEach(({ state }, index) => {\n const next = rowReadings[index + 1]?.state.time ?? end;\n const previous = segments.at(-1);\n\n if (merge && previous?.row === row && previous.series === state.state) {\n previous.end = next;\n return;\n }\n\n segments.push({ end: next, row, series: state.state, start: state.time });\n });\n }\n\n return segments;\n}\n\n/** Sub-faixas: cada intervalo entra na primeira cujo ultimo intervalo ja terminou. Em `overlay`, todos na mesma. */\nexport function placeInLanes(segments: readonly TimelineSegment[], overlap: ChartTimelineOverlap) {\n const ordered = [...segments].sort((a, b) => a.start - b.start || a.end - b.end);\n\n if (overlap === 'overlay') {\n return { laneCount: 1, segments: ordered.map((segment): PlacedSegment => ({ ...segment, lane: 0 })) };\n }\n\n const laneEnds: number[] = [];\n const placed = ordered.map((segment): PlacedSegment => {\n let lane = laneEnds.findIndex((laneEnd) => laneEnd <= segment.start);\n\n if (lane === -1) {\n lane = laneEnds.length;\n laneEnds.push(segment.end);\n } else {\n laneEnds[lane] = segment.end;\n }\n\n return { ...segment, lane };\n });\n\n return { laneCount: Math.max(laneEnds.length, 1), segments: placed };\n}\n\n/** As linhas sem grupo, ou de grupo desconhecido, vem primeiro; depois as de cada grupo, na ordem dos grupos. */\nexport function rowsInDisplayOrder(rows: readonly ChartTimelineRow[], groups: readonly ChartTimelineGroup[]) {\n const known = new Set(groups.map((group) => group.key));\n\n return [\n ...rows.filter((row) => row.group === undefined || !known.has(row.group)),\n ...groups.flatMap((group) => rows.filter((row) => row.group === group.key)),\n ];\n}\n\nexport interface TimelineLayoutOptions {\n groupHeight: number;\n groups: readonly ChartTimelineGroup[];\n isCollapsed: (groupKey: string) => boolean;\n laneStep: number;\n overlap: ChartTimelineOverlap;\n rowGap: number;\n rowHeight: number;\n rows: readonly ChartTimelineRow[];\n /** So os visiveis: a serie desligada nao ocupa sub-faixa. */\n segments: readonly TimelineSegment[];\n}\n\n/** Ordem e altura de cada linha e cabecalho de grupo. A linha cresce uma sub-faixa por intervalo sobreposto. */\nexport function layoutTimeline({\n groupHeight,\n groups,\n isCollapsed,\n laneStep,\n overlap,\n rowGap,\n rowHeight,\n rows,\n segments,\n}: TimelineLayoutOptions) {\n const byRow = groupBy(segments, (segment) => segment.row);\n const groupsByKey = new Map(groups.map((candidate) => [candidate.key, candidate]));\n const items: TimelineItem[] = [];\n let currentGroup: string | undefined;\n\n for (const row of rowsInDisplayOrder(rows, groups)) {\n const group = row.group === undefined ? undefined : groupsByKey.get(row.group);\n\n if (group && group.key !== currentGroup) {\n const groupRows = rows.filter((candidate) => candidate.group === group.key);\n\n currentGroup = group.key;\n items.push({\n collapsed: isCollapsed(group.key),\n group,\n height: groupHeight,\n kind: 'group',\n rows: groupRows,\n segments: groupRows.flatMap((candidate) => byRow.get(candidate.key) ?? []),\n y: 0,\n });\n }\n\n if (group && isCollapsed(group.key)) {\n continue;\n }\n\n const lanes = placeInLanes(byRow.get(row.key) ?? [], overlap);\n\n items.push({\n child: group !== undefined,\n height: rowHeight + (lanes.laneCount - 1) * laneStep,\n kind: 'row',\n laneCount: lanes.laneCount,\n row,\n segments: lanes.segments,\n y: 0,\n });\n }\n\n let y = 0;\n\n items.forEach((item, index) => {\n item.y = y;\n y += item.height + (index < items.length - 1 ? rowGap : 0);\n });\n\n return { height: y, items };\n}\n"],"names":["HOURS_IN_DAY","toRange","start","end","scale","from","toPosition","to","toTimelineSegments","segments","source","id","range","progress","statesToSegments","states","merge","readings","state","position","readingsByRow","groupBy","row","rowReadings","a","b","index","next","_a","previous","placeInLanes","overlap","ordered","segment","laneEnds","placed","lane","laneEnd","rowsInDisplayOrder","rows","groups","known","group","layoutTimeline","groupHeight","isCollapsed","laneStep","rowGap","rowHeight","byRow","groupsByKey","candidate","items","currentGroup","groupRows","lanes","y","item"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("d3-array"),l=36e5,M=24,y=M*l,_=["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],H=40,d=44,P=70,p=[1,3,6,12],u=t=>String(t).padStart(2,"0");function x(t,e){return t instanceof Date?e==="calendar"?t.getTime():t.getHours()+t.getMinutes()/60+t.getSeconds()/3600+t.getMilliseconds()/l:t}function m(t,e){return e==="calendar"?new Date(t):new Date(1970,0,1,0,0,0,Math.round(t*l))}function T(t,e,n){return Math.round((e-t)*(n==="dayHours"?l:1))}function c(t){const e=new Date(t);return new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()}function f(t,e){const n=new Date(t);return new Date(n.getFullYear(),n.getMonth(),n.getDate()+e).getTime()}function $(t,e){const[n,o]=S.extent(t.filter(Number.isFinite));if(e==="dayHours"){if(n===void 0||o===void 0)return[0,M];const r=Math.min(Math.max(Math.floor(n),0),M-1);return[r,Math.min(Math.max(Math.ceil(o),r+1),M)]}if(n===void 0||o===void 0){const r=c(Date.now());return[r,f(r,1)]}const s=c(n),a=c(o);return[s,Math.max(a===o?o:f(a,1),f(s,1))]}function h(t){return`${u(t.getDate())}/${u(t.getMonth()+1)}`}function w(t,e){if(e==="dayHours"){const s=Math.round(t*60);return`${u(Math.floor(s/60))}:${u(s%60)}`}const n=new Date(t),o=n.getHours()||n.getMinutes()?` ${u(n.getHours())}:${u(n.getMinutes())}`:"";return`${h(n)}${o}`}function b([t,e],n){const o=n/Math.max(e-t,Number.EPSILON),s=p.find(r=>r*o>=H)??M,a=[];for(let r=Math.ceil(t/s)*s;r<=e;r+=s)a.push(r);return a}function A([t,e],n){const o=n*y/Math.max(e-t,1),s=c(t)<t?f(c(t),1):c(t),a=[];if(o>=d||o*7>=d){const i=o>=d,D=f(s,(8-new Date(s).getDay())%7);for(let g=i?s:D;g<=e;g=f(g,i?1:7))a.push(g);return a}const r=new Date(s);for(let i=0;;i+=1){const D=new Date(r.getFullYear(),r.getMonth()+i,1).getTime();if(D>e)return a;D>=t&&a.push(D)}}function Y(t,e,n,o){if(!t.every(Number.isFinite)||n<=0)return[];if(e==="dayHours")return b(t,n).map(a=>({label:o?o(m(a,e)):`${a}h`,position:a}));const s=n*y/Math.max(t[1]-t[0],1)>=P;return A(t,n).map(a=>{const r=new Date(a),i=s?`${_[r.getDay()]} ${h(r)}`:h(r);return{label:o?o(r):i,position:a}})}exports.HOUR_MS=l;exports.autoDomain=$;exports.durationMs=T;exports.formatPosition=w;exports.timeTicks=Y;exports.toDate=m;exports.toPosition=x;
2
+ //# sourceMappingURL=timelineTime.cjs.map