@plenustech/design-system 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/README.md +8 -0
  2. package/dist/components/actions/ButtonTile/ButtonTile.module.css.cjs +1 -1
  3. package/dist/components/actions/ButtonTile/ButtonTile.module.css.js +10 -10
  4. package/dist/components/actions/Toolbar/Toolbar.cjs +1 -1
  5. package/dist/components/actions/Toolbar/Toolbar.cjs.map +1 -1
  6. package/dist/components/actions/Toolbar/Toolbar.js +64 -53
  7. package/dist/components/actions/Toolbar/Toolbar.js.map +1 -1
  8. package/dist/components/charts/ChartGauge/ChartGauge.cjs +2 -0
  9. package/dist/components/charts/ChartGauge/ChartGauge.cjs.map +1 -0
  10. package/dist/components/charts/ChartGauge/ChartGauge.js +307 -0
  11. package/dist/components/charts/ChartGauge/ChartGauge.js.map +1 -0
  12. package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs +2 -0
  13. package/dist/components/charts/ChartGauge/ChartGauge.module.css.cjs.map +1 -0
  14. package/dist/components/charts/ChartGauge/ChartGauge.module.css.js +76 -0
  15. package/dist/components/charts/ChartGauge/ChartGauge.module.css.js.map +1 -0
  16. package/dist/components/charts/ChartGauge/gaugeLayout.cjs +2 -0
  17. package/dist/components/charts/ChartGauge/gaugeLayout.cjs.map +1 -0
  18. package/dist/components/charts/ChartGauge/gaugeLayout.js +107 -0
  19. package/dist/components/charts/ChartGauge/gaugeLayout.js.map +1 -0
  20. package/dist/components/charts/ChartGauge/gaugeReading.cjs +2 -0
  21. package/dist/components/charts/ChartGauge/gaugeReading.cjs.map +1 -0
  22. package/dist/components/charts/ChartGauge/gaugeReading.js +112 -0
  23. package/dist/components/charts/ChartGauge/gaugeReading.js.map +1 -0
  24. package/dist/components/charts/ChartGauge/gaugeScale.cjs +2 -0
  25. package/dist/components/charts/ChartGauge/gaugeScale.cjs.map +1 -0
  26. package/dist/components/charts/ChartGauge/gaugeScale.js +57 -0
  27. package/dist/components/charts/ChartGauge/gaugeScale.js.map +1 -0
  28. package/dist/components/charts/ChartMap/ChartMap.cjs +2 -0
  29. package/dist/components/charts/ChartMap/ChartMap.cjs.map +1 -0
  30. package/dist/components/charts/ChartMap/ChartMap.js +523 -0
  31. package/dist/components/charts/ChartMap/ChartMap.js.map +1 -0
  32. package/dist/components/charts/ChartMap/ChartMap.module.css.cjs +2 -0
  33. package/dist/components/charts/ChartMap/ChartMap.module.css.cjs.map +1 -0
  34. package/dist/components/charts/ChartMap/ChartMap.module.css.js +124 -0
  35. package/dist/components/charts/ChartMap/ChartMap.module.css.js.map +1 -0
  36. package/dist/components/charts/ChartMap/ChartMapLegend.cjs +2 -0
  37. package/dist/components/charts/ChartMap/ChartMapLegend.cjs.map +1 -0
  38. package/dist/components/charts/ChartMap/ChartMapLegend.js +102 -0
  39. package/dist/components/charts/ChartMap/ChartMapLegend.js.map +1 -0
  40. package/dist/components/charts/ChartMap/ChartMapTable.cjs +2 -0
  41. package/dist/components/charts/ChartMap/ChartMapTable.cjs.map +1 -0
  42. package/dist/components/charts/ChartMap/ChartMapTable.js +118 -0
  43. package/dist/components/charts/ChartMap/ChartMapTable.js.map +1 -0
  44. package/dist/components/charts/ChartMap/mapGeometry.cjs +2 -0
  45. package/dist/components/charts/ChartMap/mapGeometry.cjs.map +1 -0
  46. package/dist/components/charts/ChartMap/mapGeometry.js +113 -0
  47. package/dist/components/charts/ChartMap/mapGeometry.js.map +1 -0
  48. package/dist/components/charts/ChartMap/mapLabels.cjs +2 -0
  49. package/dist/components/charts/ChartMap/mapLabels.cjs.map +1 -0
  50. package/dist/components/charts/ChartMap/mapLabels.js +80 -0
  51. package/dist/components/charts/ChartMap/mapLabels.js.map +1 -0
  52. package/dist/components/charts/ChartMap/mapScales.cjs +2 -0
  53. package/dist/components/charts/ChartMap/mapScales.cjs.map +1 -0
  54. package/dist/components/charts/ChartMap/mapScales.js +131 -0
  55. package/dist/components/charts/ChartMap/mapScales.js.map +1 -0
  56. package/dist/components/charts/ChartMap/polylabel.cjs +2 -0
  57. package/dist/components/charts/ChartMap/polylabel.cjs.map +1 -0
  58. package/dist/components/charts/ChartMap/polylabel.js +50 -0
  59. package/dist/components/charts/ChartMap/polylabel.js.map +1 -0
  60. package/dist/components/charts/ChartTimeline/ChartTimeline.cjs +2 -0
  61. package/dist/components/charts/ChartTimeline/ChartTimeline.cjs.map +1 -0
  62. package/dist/components/charts/ChartTimeline/ChartTimeline.js +703 -0
  63. package/dist/components/charts/ChartTimeline/ChartTimeline.js.map +1 -0
  64. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs +2 -0
  65. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.cjs.map +1 -0
  66. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js +124 -0
  67. package/dist/components/charts/ChartTimeline/ChartTimeline.module.css.js.map +1 -0
  68. package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs +2 -0
  69. package/dist/components/charts/ChartTimeline/ChartTimelineTable.cjs.map +1 -0
  70. package/dist/components/charts/ChartTimeline/ChartTimelineTable.js +42 -0
  71. package/dist/components/charts/ChartTimeline/ChartTimelineTable.js.map +1 -0
  72. package/dist/components/charts/ChartTimeline/timelineLayout.cjs +2 -0
  73. package/dist/components/charts/ChartTimeline/timelineLayout.cjs.map +1 -0
  74. package/dist/components/charts/ChartTimeline/timelineLayout.js +109 -0
  75. package/dist/components/charts/ChartTimeline/timelineLayout.js.map +1 -0
  76. package/dist/components/charts/ChartTimeline/timelineTime.cjs +2 -0
  77. package/dist/components/charts/ChartTimeline/timelineTime.cjs.map +1 -0
  78. package/dist/components/charts/ChartTimeline/timelineTime.js +91 -0
  79. package/dist/components/charts/ChartTimeline/timelineTime.js.map +1 -0
  80. package/dist/components/charts/ChartTimeline/timelineTooltip.cjs +2 -0
  81. package/dist/components/charts/ChartTimeline/timelineTooltip.cjs.map +1 -0
  82. package/dist/components/charts/ChartTimeline/timelineTooltip.js +77 -0
  83. package/dist/components/charts/ChartTimeline/timelineTooltip.js.map +1 -0
  84. package/dist/components/charts/core/ChartLegend.cjs +1 -1
  85. package/dist/components/charts/core/ChartLegend.cjs.map +1 -1
  86. package/dist/components/charts/core/ChartLegend.js +37 -25
  87. package/dist/components/charts/core/ChartLegend.js.map +1 -1
  88. package/dist/components/charts/core/useChartMetrics.cjs +1 -1
  89. package/dist/components/charts/core/useChartMetrics.cjs.map +1 -1
  90. package/dist/components/charts/core/useChartMetrics.js +20 -25
  91. package/dist/components/charts/core/useChartMetrics.js.map +1 -1
  92. package/dist/components/data-display/CodeBlock/syntax.cjs +10 -3
  93. package/dist/components/data-display/CodeBlock/syntax.cjs.map +1 -1
  94. package/dist/components/data-display/CodeBlock/syntax.js +68 -48
  95. package/dist/components/data-display/CodeBlock/syntax.js.map +1 -1
  96. package/dist/components/data-display/List/List.cjs.map +1 -1
  97. package/dist/components/data-display/List/List.js.map +1 -1
  98. package/dist/components/data-display/List/List.module.css.cjs +1 -1
  99. package/dist/components/data-display/List/List.module.css.js +34 -24
  100. package/dist/components/data-display/List/List.module.css.js.map +1 -1
  101. package/dist/components/data-display/List/ListingOptions.cjs +1 -1
  102. package/dist/components/data-display/List/ListingOptions.cjs.map +1 -1
  103. package/dist/components/data-display/List/ListingOptions.js +98 -74
  104. package/dist/components/data-display/List/ListingOptions.js.map +1 -1
  105. package/dist/components/data-display/List/useListing.cjs.map +1 -1
  106. package/dist/components/data-display/List/useListing.js.map +1 -1
  107. package/dist/components/data-display/Timeline/Timeline.cjs +1 -1
  108. package/dist/components/data-display/Timeline/Timeline.cjs.map +1 -1
  109. package/dist/components/data-display/Timeline/Timeline.js +6 -6
  110. package/dist/components/data-display/Timeline/Timeline.js.map +1 -1
  111. package/dist/components/data-display/Timeline/Timeline.module.css.cjs +1 -1
  112. package/dist/components/data-display/Timeline/Timeline.module.css.js +18 -16
  113. package/dist/components/data-display/Timeline/Timeline.module.css.js.map +1 -1
  114. package/dist/components/forms/Checkbox/Checkbox.module.css.cjs +1 -1
  115. package/dist/components/forms/Checkbox/Checkbox.module.css.js +5 -5
  116. package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.cjs +1 -1
  117. package/dist/components/forms/CheckboxGroup/CheckboxGroup.module.css.js +1 -1
  118. package/dist/components/forms/ComboBox/ComboBox.cjs.map +1 -1
  119. package/dist/components/forms/ComboBox/ComboBox.js.map +1 -1
  120. package/dist/components/forms/Field/Field.cjs +1 -1
  121. package/dist/components/forms/Field/Field.cjs.map +1 -1
  122. package/dist/components/forms/Field/Field.js +22 -22
  123. package/dist/components/forms/Field/Field.js.map +1 -1
  124. package/dist/components/forms/Field/Field.module.css.cjs +1 -1
  125. package/dist/components/forms/Field/Field.module.css.js +19 -17
  126. package/dist/components/forms/Field/Field.module.css.js.map +1 -1
  127. package/dist/components/forms/InputText/InputText.cjs +1 -1
  128. package/dist/components/forms/InputText/InputText.cjs.map +1 -1
  129. package/dist/components/forms/InputText/InputText.js +24 -24
  130. package/dist/components/forms/InputText/InputText.js.map +1 -1
  131. package/dist/components/forms/InputText/InputText.module.css.cjs +1 -1
  132. package/dist/components/forms/InputText/InputText.module.css.js +9 -7
  133. package/dist/components/forms/InputText/InputText.module.css.js.map +1 -1
  134. package/dist/components/forms/RadioGroup/RadioGroup.module.css.cjs +1 -1
  135. package/dist/components/forms/RadioGroup/RadioGroup.module.css.js +4 -4
  136. package/dist/components/forms/Select/Select.cjs.map +1 -1
  137. package/dist/components/forms/Select/Select.js.map +1 -1
  138. package/dist/components/forms/Switch/Switch.module.css.cjs +1 -1
  139. package/dist/components/forms/Switch/Switch.module.css.js +6 -6
  140. package/dist/components/icons/suite.cjs +1 -0
  141. package/dist/components/icons/suite.js +10894 -0
  142. package/dist/components/navigation/Pagination/Pagination.cjs +1 -1
  143. package/dist/components/navigation/Pagination/Pagination.cjs.map +1 -1
  144. package/dist/components/navigation/Pagination/Pagination.js +71 -44
  145. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  146. package/dist/components/navigation/Pagination/Pagination.module.css.cjs +1 -1
  147. package/dist/components/navigation/Pagination/Pagination.module.css.js +18 -14
  148. package/dist/components/navigation/Pagination/Pagination.module.css.js.map +1 -1
  149. package/dist/components/navigation/TabsNav/TabsNav.cjs +2 -0
  150. package/dist/components/navigation/TabsNav/TabsNav.cjs.map +1 -0
  151. package/dist/components/navigation/TabsNav/TabsNav.js +21 -0
  152. package/dist/components/navigation/TabsNav/TabsNav.js.map +1 -0
  153. package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs +2 -0
  154. package/dist/components/navigation/TabsNav/TabsNav.module.css.cjs.map +1 -0
  155. package/dist/components/navigation/TabsNav/TabsNav.module.css.js +18 -0
  156. package/dist/components/navigation/TabsNav/TabsNav.module.css.js.map +1 -0
  157. package/dist/components/overlays/Dialog/Dialog.cjs.map +1 -1
  158. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  159. package/dist/components/overlays/Dialog/DialogFrame.cjs +1 -1
  160. package/dist/components/overlays/Dialog/DialogFrame.cjs.map +1 -1
  161. package/dist/components/overlays/Dialog/DialogFrame.js +30 -30
  162. package/dist/components/overlays/Dialog/DialogFrame.js.map +1 -1
  163. package/dist/components/overlays/Drawer/Drawer.cjs.map +1 -1
  164. package/dist/components/overlays/Drawer/Drawer.js.map +1 -1
  165. package/dist/components/overlays/Menu/Menu.cjs +1 -1
  166. package/dist/components/overlays/Menu/Menu.cjs.map +1 -1
  167. package/dist/components/overlays/Menu/Menu.js +37 -36
  168. package/dist/components/overlays/Menu/Menu.js.map +1 -1
  169. package/dist/components/overlays/Menu/keyShortcuts.cjs +2 -0
  170. package/dist/components/overlays/Menu/keyShortcuts.cjs.map +1 -0
  171. package/dist/components/overlays/Menu/keyShortcuts.js +55 -0
  172. package/dist/components/overlays/Menu/keyShortcuts.js.map +1 -0
  173. package/dist/components/overlays/Tooltip/Tooltip.cjs +1 -1
  174. package/dist/components/overlays/Tooltip/Tooltip.cjs.map +1 -1
  175. package/dist/components/overlays/Tooltip/Tooltip.js +81 -56
  176. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  177. package/dist/design-system.css +1 -1
  178. package/dist/icons.cjs +2 -0
  179. package/dist/icons.cjs.map +1 -0
  180. package/dist/icons.js +2054 -0
  181. package/dist/icons.js.map +1 -0
  182. package/dist/index.cjs +1 -1
  183. package/dist/index.js +184 -174
  184. package/dist/index.js.map +1 -1
  185. package/dist/types/components/charts/ChartGauge/ChartGauge.d.ts +83 -0
  186. package/dist/types/components/charts/ChartGauge/gaugeLayout.d.ts +64 -0
  187. package/dist/types/components/charts/ChartGauge/gaugeReading.d.ts +97 -0
  188. package/dist/types/components/charts/ChartGauge/gaugeScale.d.ts +38 -0
  189. package/dist/types/components/charts/ChartGauge/index.d.ts +2 -0
  190. package/dist/types/components/charts/ChartMap/ChartMap.d.ts +104 -0
  191. package/dist/types/components/charts/ChartMap/ChartMapLegend.d.ts +44 -0
  192. package/dist/types/components/charts/ChartMap/ChartMapTable.d.ts +38 -0
  193. package/dist/types/components/charts/ChartMap/index.d.ts +4 -0
  194. package/dist/types/components/charts/ChartMap/mapGeometry.d.ts +56 -0
  195. package/dist/types/components/charts/ChartMap/mapLabels.d.ts +51 -0
  196. package/dist/types/components/charts/ChartMap/mapScales.d.ts +76 -0
  197. package/dist/types/components/charts/ChartMap/polylabel.d.ts +9 -0
  198. package/dist/types/components/charts/ChartTimeline/ChartTimeline.d.ts +137 -0
  199. package/dist/types/components/charts/ChartTimeline/ChartTimelineTable.d.ts +25 -0
  200. package/dist/types/components/charts/ChartTimeline/index.d.ts +2 -0
  201. package/dist/types/components/charts/ChartTimeline/timelineLayout.d.ts +70 -0
  202. package/dist/types/components/charts/ChartTimeline/timelineTime.d.ts +16 -0
  203. package/dist/types/components/charts/ChartTimeline/timelineTooltip.d.ts +45 -0
  204. package/dist/types/components/charts/core/ChartLegend.d.ts +3 -1
  205. package/dist/types/components/data-display/CodeBlock/syntax.d.ts +1 -1
  206. package/dist/types/components/data-display/List/List.d.ts +1 -1
  207. package/dist/types/components/data-display/List/useListing.d.ts +7 -1
  208. package/dist/types/components/data-display/Timeline/Timeline.d.ts +4 -1
  209. package/dist/types/components/data-display/Timeline/index.d.ts +1 -1
  210. package/dist/types/components/forms/ComboBox/ComboBox.d.ts +7 -1
  211. package/dist/types/components/forms/Field/Field.d.ts +1 -1
  212. package/dist/types/components/forms/InputText/InputText.d.ts +1 -1
  213. package/dist/types/components/forms/Select/Select.d.ts +5 -1
  214. package/dist/types/components/icons/suite.d.ts +2051 -0
  215. package/dist/types/components/navigation/Pagination/Pagination.d.ts +13 -1
  216. package/dist/types/components/navigation/Pagination/index.d.ts +1 -1
  217. package/dist/types/components/navigation/TabsNav/TabsNav.d.ts +20 -0
  218. package/dist/types/components/navigation/TabsNav/index.d.ts +2 -0
  219. package/dist/types/components/overlays/Dialog/Dialog.d.ts +19 -7
  220. package/dist/types/components/overlays/Dialog/DialogFrame.d.ts +8 -2
  221. package/dist/types/components/overlays/Drawer/Drawer.d.ts +2 -2
  222. package/dist/types/components/overlays/Menu/Menu.d.ts +3 -1
  223. package/dist/types/components/overlays/Menu/keyShortcuts.d.ts +2 -0
  224. package/dist/types/components/overlays/Tooltip/Tooltip.d.ts +26 -5
  225. package/dist/types/icons.d.ts +6 -0
  226. package/dist/types/index.d.ts +11 -3
  227. package/dist/types/utils/formatters/formatarDuracao.d.ts +5 -0
  228. package/dist/types/utils/formatters/index.d.ts +1 -0
  229. package/dist/utils/formatters/formatarDuracao.cjs +2 -0
  230. package/dist/utils/formatters/formatarDuracao.cjs.map +1 -0
  231. package/dist/utils/formatters/formatarDuracao.js +10 -0
  232. package/dist/utils/formatters/formatarDuracao.js.map +1 -0
  233. package/package.json +10 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timelineTime.cjs","sources":["../../../../src/components/charts/ChartTimeline/timelineTime.ts"],"sourcesContent":["import { extent } from 'd3-array';\nimport type { ChartTimelineScale, ChartTimelineTime } from './ChartTimeline';\n\nexport const HOUR_MS = 3_600_000;\nconst HOURS_IN_DAY = 24;\nconst DAY_MS = HOURS_IN_DAY * HOUR_MS;\nconst WEEKDAYS = ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'];\n\n/** Menor distancia entre duas marcas do eixo, e a partir de quanto a marca diaria leva o dia da semana. */\nconst MIN_TICK_GAP = 40;\nconst MIN_DAY_TICK_GAP = 44;\nconst WEEKDAY_TICK_GAP = 70;\nconst HOUR_STEPS = [1, 3, 6, 12];\n\nexport interface TimeTick {\n label: string;\n position: number;\n}\n\nconst pad = (value: number) => String(value).padStart(2, '0');\n\n/** Posicao no eixo: em `calendar`, milissegundos desde a epoca; em `dayHours`, a hora decimal do dia. */\nexport function toPosition(time: ChartTimelineTime, scale: ChartTimelineScale) {\n if (!(time instanceof Date)) {\n return time;\n }\n\n if (scale === 'calendar') {\n return time.getTime();\n }\n\n return time.getHours() + time.getMinutes() / 60 + time.getSeconds() / 3600 + time.getMilliseconds() / HOUR_MS;\n}\n\n/** A posicao como `Date`, para os formatadores do consumidor. Em `dayHours` a data e indiferente: vale a hora. */\nexport function toDate(position: number, scale: ChartTimelineScale) {\n return scale === 'calendar' ? new Date(position) : new Date(1970, 0, 1, 0, 0, 0, Math.round(position * HOUR_MS));\n}\n\nexport function durationMs(start: number, end: number, scale: ChartTimelineScale) {\n return Math.round((end - start) * (scale === 'dayHours' ? HOUR_MS : 1));\n}\n\nfunction startOfDay(time: number) {\n const date = new Date(time);\n return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n}\n\n/** Dias somados pelo calendario, e nao por 24 horas: o dia de mudanca de horario nao tem 24. */\nfunction addDays(day: number, days: number) {\n const date = new Date(day);\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days).getTime();\n}\n\n/** Faixa automatica: do primeiro ao ultimo instante, arredondada a hora ou ao dia, com uma unidade no minimo. */\nexport function autoDomain(positions: readonly number[], scale: ChartTimelineScale): [number, number] {\n const [min, max] = extent(positions.filter(Number.isFinite));\n\n if (scale === 'dayHours') {\n if (min === undefined || max === undefined) {\n return [0, HOURS_IN_DAY];\n }\n\n const start = Math.min(Math.max(Math.floor(min), 0), HOURS_IN_DAY - 1);\n return [start, Math.min(Math.max(Math.ceil(max), start + 1), HOURS_IN_DAY)];\n }\n\n if (min === undefined || max === undefined) {\n const today = startOfDay(Date.now());\n return [today, addDays(today, 1)];\n }\n\n const start = startOfDay(min);\n const lastDay = startOfDay(max);\n\n return [start, Math.max(lastDay === max ? max : addDays(lastDay, 1), addDays(start, 1))];\n}\n\nfunction dayMonth(date: Date) {\n return `${pad(date.getDate())}/${pad(date.getMonth() + 1)}`;\n}\n\n/** Instante no balao e na tabela: `07:12` em horas do dia; `05/10 14:00`, ou so `05/10` a meia-noite, em datas. */\nexport function formatPosition(position: number, scale: ChartTimelineScale) {\n if (scale === 'dayHours') {\n const minutes = Math.round(position * 60);\n return `${pad(Math.floor(minutes / 60))}:${pad(minutes % 60)}`;\n }\n\n const date = new Date(position);\n const time = date.getHours() || date.getMinutes() ? ` ${pad(date.getHours())}:${pad(date.getMinutes())}` : '';\n\n return `${dayMonth(date)}${time}`;\n}\n\nfunction hourTicks([start, end]: readonly [number, number], width: number) {\n const pixelsPerHour = width / Math.max(end - start, Number.EPSILON);\n const step = HOUR_STEPS.find((hours) => hours * pixelsPerHour >= MIN_TICK_GAP) ?? HOURS_IN_DAY;\n const ticks: number[] = [];\n\n for (let hour = Math.ceil(start / step) * step; hour <= end; hour += step) {\n ticks.push(hour);\n }\n\n return ticks;\n}\n\n/** Marcas em datas: um dia por marca enquanto cabe, depois as segundas-feiras, depois o primeiro de cada mes. */\nfunction dateTicks([start, end]: readonly [number, number], width: number) {\n const pixelsPerDay = (width * DAY_MS) / Math.max(end - start, 1);\n const firstDay = startOfDay(start) < start ? addDays(startOfDay(start), 1) : startOfDay(start);\n const ticks: number[] = [];\n\n if (pixelsPerDay >= MIN_DAY_TICK_GAP || pixelsPerDay * 7 >= MIN_DAY_TICK_GAP) {\n const daily = pixelsPerDay >= MIN_DAY_TICK_GAP;\n const firstMonday = addDays(firstDay, (8 - new Date(firstDay).getDay()) % 7);\n\n for (let day = daily ? firstDay : firstMonday; day <= end; day = addDays(day, daily ? 1 : 7)) {\n ticks.push(day);\n }\n\n return ticks;\n }\n\n const first = new Date(firstDay);\n\n for (let month = 0; ; month += 1) {\n const day = new Date(first.getFullYear(), first.getMonth() + month, 1).getTime();\n\n if (day > end) {\n return ticks;\n }\n\n if (day >= start) {\n ticks.push(day);\n }\n }\n}\n\nexport function timeTicks(\n domain: readonly [number, number],\n scale: ChartTimelineScale,\n width: number,\n formatTick?: (time: Date) => string,\n): TimeTick[] {\n if (!domain.every(Number.isFinite) || width <= 0) {\n return [];\n }\n\n if (scale === 'dayHours') {\n return hourTicks(domain, width).map((hour) => ({\n label: formatTick ? formatTick(toDate(hour, scale)) : `${hour}h`,\n position: hour,\n }));\n }\n\n const withWeekday = (width * DAY_MS) / Math.max(domain[1] - domain[0], 1) >= WEEKDAY_TICK_GAP;\n\n return dateTicks(domain, width).map((day) => {\n const date = new Date(day);\n const label = withWeekday ? `${WEEKDAYS[date.getDay()]} ${dayMonth(date)}` : dayMonth(date);\n\n return { label: formatTick ? formatTick(date) : label, position: day };\n });\n}\n"],"names":["HOUR_MS","HOURS_IN_DAY","DAY_MS","WEEKDAYS","MIN_TICK_GAP","MIN_DAY_TICK_GAP","WEEKDAY_TICK_GAP","HOUR_STEPS","pad","value","toPosition","time","scale","toDate","position","durationMs","start","end","startOfDay","date","addDays","day","days","autoDomain","positions","min","max","extent","today","lastDay","dayMonth","formatPosition","minutes","hourTicks","width","pixelsPerHour","step","hours","ticks","hour","dateTicks","pixelsPerDay","firstDay","daily","firstMonday","first","month","timeTicks","domain","formatTick","withWeekday","label"],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import { extent as m } from "d3-array";
2
+ const g = 36e5, M = 24, y = M * g, S = ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"], p = 40, h = 44, x = 70, _ = [1, 3, 6, 12], i = (t) => String(t).padStart(2, "0");
3
+ function T(t, e) {
4
+ return t instanceof Date ? e === "calendar" ? t.getTime() : t.getHours() + t.getMinutes() / 60 + t.getSeconds() / 3600 + t.getMilliseconds() / g : t;
5
+ }
6
+ function H(t, e) {
7
+ return e === "calendar" ? new Date(t) : new Date(1970, 0, 1, 0, 0, 0, Math.round(t * g));
8
+ }
9
+ function A(t, e, n) {
10
+ return Math.round((e - t) * (n === "dayHours" ? g : 1));
11
+ }
12
+ function c(t) {
13
+ const e = new Date(t);
14
+ return new Date(e.getFullYear(), e.getMonth(), e.getDate()).getTime();
15
+ }
16
+ function f(t, e) {
17
+ const n = new Date(t);
18
+ return new Date(n.getFullYear(), n.getMonth(), n.getDate() + e).getTime();
19
+ }
20
+ function Y(t, e) {
21
+ const [n, o] = m(t.filter(Number.isFinite));
22
+ if (e === "dayHours") {
23
+ if (n === void 0 || o === void 0)
24
+ return [0, M];
25
+ const r = Math.min(Math.max(Math.floor(n), 0), M - 1);
26
+ return [r, Math.min(Math.max(Math.ceil(o), r + 1), M)];
27
+ }
28
+ if (n === void 0 || o === void 0) {
29
+ const r = c(Date.now());
30
+ return [r, f(r, 1)];
31
+ }
32
+ const s = c(n), a = c(o);
33
+ return [s, Math.max(a === o ? o : f(a, 1), f(s, 1))];
34
+ }
35
+ function d(t) {
36
+ return `${i(t.getDate())}/${i(t.getMonth() + 1)}`;
37
+ }
38
+ function b(t, e) {
39
+ if (e === "dayHours") {
40
+ const s = Math.round(t * 60);
41
+ return `${i(Math.floor(s / 60))}:${i(s % 60)}`;
42
+ }
43
+ const n = new Date(t), o = n.getHours() || n.getMinutes() ? ` ${i(n.getHours())}:${i(n.getMinutes())}` : "";
44
+ return `${d(n)}${o}`;
45
+ }
46
+ function $([t, e], n) {
47
+ const o = n / Math.max(e - t, Number.EPSILON), s = _.find((r) => r * o >= p) ?? M, a = [];
48
+ for (let r = Math.ceil(t / s) * s; r <= e; r += s)
49
+ a.push(r);
50
+ return a;
51
+ }
52
+ function w([t, e], n) {
53
+ const o = n * y / Math.max(e - t, 1), s = c(t) < t ? f(c(t), 1) : c(t), a = [];
54
+ if (o >= h || o * 7 >= h) {
55
+ const u = o >= h, D = f(s, (8 - new Date(s).getDay()) % 7);
56
+ for (let l = u ? s : D; l <= e; l = f(l, u ? 1 : 7))
57
+ a.push(l);
58
+ return a;
59
+ }
60
+ const r = new Date(s);
61
+ for (let u = 0; ; u += 1) {
62
+ const D = new Date(r.getFullYear(), r.getMonth() + u, 1).getTime();
63
+ if (D > e)
64
+ return a;
65
+ D >= t && a.push(D);
66
+ }
67
+ }
68
+ function I(t, e, n, o) {
69
+ if (!t.every(Number.isFinite) || n <= 0)
70
+ return [];
71
+ if (e === "dayHours")
72
+ return $(t, n).map((a) => ({
73
+ label: o ? o(H(a, e)) : `${a}h`,
74
+ position: a
75
+ }));
76
+ const s = n * y / Math.max(t[1] - t[0], 1) >= x;
77
+ return w(t, n).map((a) => {
78
+ const r = new Date(a), u = s ? `${S[r.getDay()]} ${d(r)}` : d(r);
79
+ return { label: o ? o(r) : u, position: a };
80
+ });
81
+ }
82
+ export {
83
+ g as HOUR_MS,
84
+ Y as autoDomain,
85
+ A as durationMs,
86
+ b as formatPosition,
87
+ I as timeTicks,
88
+ H as toDate,
89
+ T as toPosition
90
+ };
91
+ //# sourceMappingURL=timelineTime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timelineTime.js","sources":["../../../../src/components/charts/ChartTimeline/timelineTime.ts"],"sourcesContent":["import { extent } from 'd3-array';\nimport type { ChartTimelineScale, ChartTimelineTime } from './ChartTimeline';\n\nexport const HOUR_MS = 3_600_000;\nconst HOURS_IN_DAY = 24;\nconst DAY_MS = HOURS_IN_DAY * HOUR_MS;\nconst WEEKDAYS = ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'];\n\n/** Menor distancia entre duas marcas do eixo, e a partir de quanto a marca diaria leva o dia da semana. */\nconst MIN_TICK_GAP = 40;\nconst MIN_DAY_TICK_GAP = 44;\nconst WEEKDAY_TICK_GAP = 70;\nconst HOUR_STEPS = [1, 3, 6, 12];\n\nexport interface TimeTick {\n label: string;\n position: number;\n}\n\nconst pad = (value: number) => String(value).padStart(2, '0');\n\n/** Posicao no eixo: em `calendar`, milissegundos desde a epoca; em `dayHours`, a hora decimal do dia. */\nexport function toPosition(time: ChartTimelineTime, scale: ChartTimelineScale) {\n if (!(time instanceof Date)) {\n return time;\n }\n\n if (scale === 'calendar') {\n return time.getTime();\n }\n\n return time.getHours() + time.getMinutes() / 60 + time.getSeconds() / 3600 + time.getMilliseconds() / HOUR_MS;\n}\n\n/** A posicao como `Date`, para os formatadores do consumidor. Em `dayHours` a data e indiferente: vale a hora. */\nexport function toDate(position: number, scale: ChartTimelineScale) {\n return scale === 'calendar' ? new Date(position) : new Date(1970, 0, 1, 0, 0, 0, Math.round(position * HOUR_MS));\n}\n\nexport function durationMs(start: number, end: number, scale: ChartTimelineScale) {\n return Math.round((end - start) * (scale === 'dayHours' ? HOUR_MS : 1));\n}\n\nfunction startOfDay(time: number) {\n const date = new Date(time);\n return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n}\n\n/** Dias somados pelo calendario, e nao por 24 horas: o dia de mudanca de horario nao tem 24. */\nfunction addDays(day: number, days: number) {\n const date = new Date(day);\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days).getTime();\n}\n\n/** Faixa automatica: do primeiro ao ultimo instante, arredondada a hora ou ao dia, com uma unidade no minimo. */\nexport function autoDomain(positions: readonly number[], scale: ChartTimelineScale): [number, number] {\n const [min, max] = extent(positions.filter(Number.isFinite));\n\n if (scale === 'dayHours') {\n if (min === undefined || max === undefined) {\n return [0, HOURS_IN_DAY];\n }\n\n const start = Math.min(Math.max(Math.floor(min), 0), HOURS_IN_DAY - 1);\n return [start, Math.min(Math.max(Math.ceil(max), start + 1), HOURS_IN_DAY)];\n }\n\n if (min === undefined || max === undefined) {\n const today = startOfDay(Date.now());\n return [today, addDays(today, 1)];\n }\n\n const start = startOfDay(min);\n const lastDay = startOfDay(max);\n\n return [start, Math.max(lastDay === max ? max : addDays(lastDay, 1), addDays(start, 1))];\n}\n\nfunction dayMonth(date: Date) {\n return `${pad(date.getDate())}/${pad(date.getMonth() + 1)}`;\n}\n\n/** Instante no balao e na tabela: `07:12` em horas do dia; `05/10 14:00`, ou so `05/10` a meia-noite, em datas. */\nexport function formatPosition(position: number, scale: ChartTimelineScale) {\n if (scale === 'dayHours') {\n const minutes = Math.round(position * 60);\n return `${pad(Math.floor(minutes / 60))}:${pad(minutes % 60)}`;\n }\n\n const date = new Date(position);\n const time = date.getHours() || date.getMinutes() ? ` ${pad(date.getHours())}:${pad(date.getMinutes())}` : '';\n\n return `${dayMonth(date)}${time}`;\n}\n\nfunction hourTicks([start, end]: readonly [number, number], width: number) {\n const pixelsPerHour = width / Math.max(end - start, Number.EPSILON);\n const step = HOUR_STEPS.find((hours) => hours * pixelsPerHour >= MIN_TICK_GAP) ?? HOURS_IN_DAY;\n const ticks: number[] = [];\n\n for (let hour = Math.ceil(start / step) * step; hour <= end; hour += step) {\n ticks.push(hour);\n }\n\n return ticks;\n}\n\n/** Marcas em datas: um dia por marca enquanto cabe, depois as segundas-feiras, depois o primeiro de cada mes. */\nfunction dateTicks([start, end]: readonly [number, number], width: number) {\n const pixelsPerDay = (width * DAY_MS) / Math.max(end - start, 1);\n const firstDay = startOfDay(start) < start ? addDays(startOfDay(start), 1) : startOfDay(start);\n const ticks: number[] = [];\n\n if (pixelsPerDay >= MIN_DAY_TICK_GAP || pixelsPerDay * 7 >= MIN_DAY_TICK_GAP) {\n const daily = pixelsPerDay >= MIN_DAY_TICK_GAP;\n const firstMonday = addDays(firstDay, (8 - new Date(firstDay).getDay()) % 7);\n\n for (let day = daily ? firstDay : firstMonday; day <= end; day = addDays(day, daily ? 1 : 7)) {\n ticks.push(day);\n }\n\n return ticks;\n }\n\n const first = new Date(firstDay);\n\n for (let month = 0; ; month += 1) {\n const day = new Date(first.getFullYear(), first.getMonth() + month, 1).getTime();\n\n if (day > end) {\n return ticks;\n }\n\n if (day >= start) {\n ticks.push(day);\n }\n }\n}\n\nexport function timeTicks(\n domain: readonly [number, number],\n scale: ChartTimelineScale,\n width: number,\n formatTick?: (time: Date) => string,\n): TimeTick[] {\n if (!domain.every(Number.isFinite) || width <= 0) {\n return [];\n }\n\n if (scale === 'dayHours') {\n return hourTicks(domain, width).map((hour) => ({\n label: formatTick ? formatTick(toDate(hour, scale)) : `${hour}h`,\n position: hour,\n }));\n }\n\n const withWeekday = (width * DAY_MS) / Math.max(domain[1] - domain[0], 1) >= WEEKDAY_TICK_GAP;\n\n return dateTicks(domain, width).map((day) => {\n const date = new Date(day);\n const label = withWeekday ? `${WEEKDAYS[date.getDay()]} ${dayMonth(date)}` : dayMonth(date);\n\n return { label: formatTick ? formatTick(date) : label, position: day };\n });\n}\n"],"names":["HOUR_MS","HOURS_IN_DAY","DAY_MS","WEEKDAYS","MIN_TICK_GAP","MIN_DAY_TICK_GAP","WEEKDAY_TICK_GAP","HOUR_STEPS","pad","value","toPosition","time","scale","toDate","position","durationMs","start","end","startOfDay","date","addDays","day","days","autoDomain","positions","min","max","extent","today","lastDay","dayMonth","formatPosition","minutes","hourTicks","width","pixelsPerHour","step","hours","ticks","hour","dateTicks","pixelsPerDay","firstDay","daily","firstMonday","first","month","timeTicks","domain","formatTick","withWeekday","label"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("d3-array"),k=require("../../../utils/formatters/formatarNumero.cjs");function f(r){return r.filter(Boolean).join(" · ")||void 0}function y(r,l){if(r===null)return{rows:[]};const{colorOf:t,duration:p,formatDuration:b,formatInstant:n}=l,i=e=>`${n(e.start)}–${n(e.end)}`;if(r.kind==="segment"){const{row:e,segment:o}=r,s=[{color:t(o.series),emphasis:!0,label:o.series,values:[p(o)]}];return l.showProgress&&o.progress!==void 0&&s.push({format:c=>k.formatarPercentual(c),label:"Concluído",values:[o.progress]}),{columns:[{format:b}],computed:"none",rows:s,subtitle:f([i(o),o.label!==o.series?o.label:void 0,e.description,r.clip]),title:e.label}}if(r.kind==="marker"){const{marker:e,row:o}=r;return{computed:"none",rows:[{color:t(e.series),emphasis:!0,format:n,label:e.series,values:[e.position]}],subtitle:e.label,title:o.label}}if(r.kind==="group"){const{segments:e}=r,o=m.min(e,d=>d.start),s=m.max(e,d=>d.end),c=o===void 0||s===void 0?void 0:i({end:s,start:o});return{computed:"none",rows:[{format:String,label:"Linhas",values:[r.rowCount]}],subtitle:f([c,r.collapsed?"Grupo recolhido":void 0]),title:r.group.label}}const{row:a,segments:v}=r,h=l.seriesOrder.flatMap(e=>{const o=r.rowBands.filter(s=>s.series===e);return o.length?[`${e} ${o.map(i).join(" · ")}`]:[]}),w=f([a.description,...h]),u=l.seriesOrder.flatMap(e=>{const o=v.filter(s=>s.series===e);return o.length?[{color:t(e),label:e,values:[m.sum(o,p)]}]:[]});return u.length===0?{computed:"none",rows:[{label:r.empty?l.emptyRowLabel:"Séries desligadas",values:[]}],subtitle:w,title:a.label}:{columns:[{format:b}],computed:"none",rows:u,showTotal:u.length>1,subtitle:w,title:a.label}}exports.timelineTooltip=y;
2
+ //# sourceMappingURL=timelineTooltip.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timelineTooltip.cjs","sources":["../../../../src/components/charts/ChartTimeline/timelineTooltip.ts"],"sourcesContent":["import { max, min, sum } from 'd3-array';\nimport type { ChartTooltipProps, ChartTooltipRow } from '../ChartTooltip';\nimport { formatarPercentual } from '../../../utils/formatters';\nimport type { ChartTimelineGroup, ChartTimelineMarker, ChartTimelineRow } from './ChartTimeline';\nimport type { TimelineRange, TimelineSegment } from './timelineLayout';\n\nexport interface TimelineMarker extends ChartTimelineMarker {\n position: number;\n}\n\nexport interface TimelineRowBand extends TimelineRange {\n row: string;\n series: string;\n}\n\n/** O que esta sob o ponteiro. Cada caso carrega o que o balao dele precisa. */\nexport type TimelineTarget =\n | { clip: string | undefined; kind: 'segment'; row: ChartTimelineRow; segment: TimelineSegment }\n | { kind: 'marker'; marker: TimelineMarker; row: ChartTimelineRow }\n | {\n collapsed: boolean;\n group: ChartTimelineGroup;\n kind: 'group';\n rowCount: number;\n segments: readonly TimelineSegment[];\n }\n | {\n /** A linha nao tem intervalo algum, de nenhuma serie. */\n empty: boolean;\n kind: 'row';\n row: ChartTimelineRow;\n rowBands: readonly TimelineRowBand[];\n segments: readonly TimelineSegment[];\n };\n\nexport interface TimelineTooltipOptions {\n colorOf: (series: string) => string | undefined;\n duration: (range: TimelineRange) => number;\n emptyRowLabel: string;\n formatDuration: (durationMs: number) => string;\n formatInstant: (position: number) => string;\n seriesOrder: readonly string[];\n showProgress: boolean;\n}\n\nexport type TimelineTooltip = Omit<ChartTooltipProps, 'children'>;\n\nfunction joined(parts: readonly (string | undefined)[]) {\n return parts.filter(Boolean).join(' · ') || undefined;\n}\n\nexport function timelineTooltip(target: TimelineTarget | null, options: TimelineTooltipOptions): TimelineTooltip {\n if (target === null) {\n return { rows: [] };\n }\n\n const { colorOf, duration, formatDuration, formatInstant } = options;\n const interval = (range: TimelineRange) => `${formatInstant(range.start)}–${formatInstant(range.end)}`;\n\n if (target.kind === 'segment') {\n const { row, segment } = target;\n const rows: ChartTooltipRow[] = [\n { color: colorOf(segment.series), emphasis: true, label: segment.series, values: [duration(segment)] },\n ];\n\n if (options.showProgress && segment.progress !== undefined) {\n rows.push({ format: (value) => formatarPercentual(value), label: 'Concluído', values: [segment.progress] });\n }\n\n return {\n columns: [{ format: formatDuration }],\n computed: 'none',\n rows,\n subtitle: joined([\n interval(segment),\n segment.label !== segment.series ? segment.label : undefined,\n row.description,\n target.clip,\n ]),\n title: row.label,\n };\n }\n\n if (target.kind === 'marker') {\n const { marker, row } = target;\n\n return {\n computed: 'none',\n rows: [\n {\n color: colorOf(marker.series),\n emphasis: true,\n format: formatInstant,\n label: marker.series,\n values: [marker.position],\n },\n ],\n subtitle: marker.label,\n title: row.label,\n };\n }\n\n if (target.kind === 'group') {\n const { segments } = target;\n const start = min(segments, (segment) => segment.start);\n const end = max(segments, (segment) => segment.end);\n const period = start === undefined || end === undefined ? undefined : interval({ end, start });\n\n return {\n computed: 'none',\n rows: [{ format: String, label: 'Linhas', values: [target.rowCount] }],\n subtitle: joined([period, target.collapsed ? 'Grupo recolhido' : undefined]),\n title: target.group.label,\n };\n }\n\n const { row, segments } = target;\n const scheduled = options.seriesOrder.flatMap((series) => {\n const bands = target.rowBands.filter((band) => band.series === series);\n return bands.length ? [`${series} ${bands.map(interval).join(' · ')}`] : [];\n });\n const subtitle = joined([row.description, ...scheduled]);\n const totals = options.seriesOrder.flatMap((series): ChartTooltipRow[] => {\n const ofSeries = segments.filter((segment) => segment.series === series);\n return ofSeries.length ? [{ color: colorOf(series), label: series, values: [sum(ofSeries, duration)] }] : [];\n });\n\n // Sem coluna declarada o balao nao inventa um valor para a linha que so tem rotulo.\n if (totals.length === 0) {\n return {\n computed: 'none',\n rows: [{ label: target.empty ? options.emptyRowLabel : 'Séries desligadas', values: [] }],\n subtitle,\n title: row.label,\n };\n }\n\n return {\n columns: [{ format: formatDuration }],\n computed: 'none',\n rows: totals,\n showTotal: totals.length > 1,\n subtitle,\n title: row.label,\n };\n}\n"],"names":["joined","parts","timelineTooltip","target","options","colorOf","duration","formatDuration","formatInstant","interval","range","row","segment","rows","value","formatarPercentual","marker","segments","start","min","end","max","period","scheduled","series","bands","band","subtitle","totals","ofSeries","sum"],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { min as h, max as k, sum as $ } from "d3-array";
2
+ import { formatarPercentual as j } from "../../../utils/formatters/formatarNumero.js";
3
+ function d(s) {
4
+ return s.filter(Boolean).join(" · ") || void 0;
5
+ }
6
+ function g(s, l) {
7
+ if (s === null)
8
+ return { rows: [] };
9
+ const { colorOf: n, duration: f, formatDuration: p, formatInstant: t } = l, i = (e) => `${t(e.start)}–${t(e.end)}`;
10
+ if (s.kind === "segment") {
11
+ const { row: e, segment: o } = s, r = [
12
+ { color: n(o.series), emphasis: !0, label: o.series, values: [f(o)] }
13
+ ];
14
+ return l.showProgress && o.progress !== void 0 && r.push({ format: (c) => j(c), label: "Concluído", values: [o.progress] }), {
15
+ columns: [{ format: p }],
16
+ computed: "none",
17
+ rows: r,
18
+ subtitle: d([
19
+ i(o),
20
+ o.label !== o.series ? o.label : void 0,
21
+ e.description,
22
+ s.clip
23
+ ]),
24
+ title: e.label
25
+ };
26
+ }
27
+ if (s.kind === "marker") {
28
+ const { marker: e, row: o } = s;
29
+ return {
30
+ computed: "none",
31
+ rows: [
32
+ {
33
+ color: n(e.series),
34
+ emphasis: !0,
35
+ format: t,
36
+ label: e.series,
37
+ values: [e.position]
38
+ }
39
+ ],
40
+ subtitle: e.label,
41
+ title: o.label
42
+ };
43
+ }
44
+ if (s.kind === "group") {
45
+ const { segments: e } = s, o = h(e, (m) => m.start), r = k(e, (m) => m.end), c = o === void 0 || r === void 0 ? void 0 : i({ end: r, start: o });
46
+ return {
47
+ computed: "none",
48
+ rows: [{ format: String, label: "Linhas", values: [s.rowCount] }],
49
+ subtitle: d([c, s.collapsed ? "Grupo recolhido" : void 0]),
50
+ title: s.group.label
51
+ };
52
+ }
53
+ const { row: a, segments: w } = s, v = l.seriesOrder.flatMap((e) => {
54
+ const o = s.rowBands.filter((r) => r.series === e);
55
+ return o.length ? [`${e} ${o.map(i).join(" · ")}`] : [];
56
+ }), b = d([a.description, ...v]), u = l.seriesOrder.flatMap((e) => {
57
+ const o = w.filter((r) => r.series === e);
58
+ return o.length ? [{ color: n(e), label: e, values: [$(o, f)] }] : [];
59
+ });
60
+ return u.length === 0 ? {
61
+ computed: "none",
62
+ rows: [{ label: s.empty ? l.emptyRowLabel : "Séries desligadas", values: [] }],
63
+ subtitle: b,
64
+ title: a.label
65
+ } : {
66
+ columns: [{ format: p }],
67
+ computed: "none",
68
+ rows: u,
69
+ showTotal: u.length > 1,
70
+ subtitle: b,
71
+ title: a.label
72
+ };
73
+ }
74
+ export {
75
+ g as timelineTooltip
76
+ };
77
+ //# sourceMappingURL=timelineTooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timelineTooltip.js","sources":["../../../../src/components/charts/ChartTimeline/timelineTooltip.ts"],"sourcesContent":["import { max, min, sum } from 'd3-array';\nimport type { ChartTooltipProps, ChartTooltipRow } from '../ChartTooltip';\nimport { formatarPercentual } from '../../../utils/formatters';\nimport type { ChartTimelineGroup, ChartTimelineMarker, ChartTimelineRow } from './ChartTimeline';\nimport type { TimelineRange, TimelineSegment } from './timelineLayout';\n\nexport interface TimelineMarker extends ChartTimelineMarker {\n position: number;\n}\n\nexport interface TimelineRowBand extends TimelineRange {\n row: string;\n series: string;\n}\n\n/** O que esta sob o ponteiro. Cada caso carrega o que o balao dele precisa. */\nexport type TimelineTarget =\n | { clip: string | undefined; kind: 'segment'; row: ChartTimelineRow; segment: TimelineSegment }\n | { kind: 'marker'; marker: TimelineMarker; row: ChartTimelineRow }\n | {\n collapsed: boolean;\n group: ChartTimelineGroup;\n kind: 'group';\n rowCount: number;\n segments: readonly TimelineSegment[];\n }\n | {\n /** A linha nao tem intervalo algum, de nenhuma serie. */\n empty: boolean;\n kind: 'row';\n row: ChartTimelineRow;\n rowBands: readonly TimelineRowBand[];\n segments: readonly TimelineSegment[];\n };\n\nexport interface TimelineTooltipOptions {\n colorOf: (series: string) => string | undefined;\n duration: (range: TimelineRange) => number;\n emptyRowLabel: string;\n formatDuration: (durationMs: number) => string;\n formatInstant: (position: number) => string;\n seriesOrder: readonly string[];\n showProgress: boolean;\n}\n\nexport type TimelineTooltip = Omit<ChartTooltipProps, 'children'>;\n\nfunction joined(parts: readonly (string | undefined)[]) {\n return parts.filter(Boolean).join(' · ') || undefined;\n}\n\nexport function timelineTooltip(target: TimelineTarget | null, options: TimelineTooltipOptions): TimelineTooltip {\n if (target === null) {\n return { rows: [] };\n }\n\n const { colorOf, duration, formatDuration, formatInstant } = options;\n const interval = (range: TimelineRange) => `${formatInstant(range.start)}–${formatInstant(range.end)}`;\n\n if (target.kind === 'segment') {\n const { row, segment } = target;\n const rows: ChartTooltipRow[] = [\n { color: colorOf(segment.series), emphasis: true, label: segment.series, values: [duration(segment)] },\n ];\n\n if (options.showProgress && segment.progress !== undefined) {\n rows.push({ format: (value) => formatarPercentual(value), label: 'Concluído', values: [segment.progress] });\n }\n\n return {\n columns: [{ format: formatDuration }],\n computed: 'none',\n rows,\n subtitle: joined([\n interval(segment),\n segment.label !== segment.series ? segment.label : undefined,\n row.description,\n target.clip,\n ]),\n title: row.label,\n };\n }\n\n if (target.kind === 'marker') {\n const { marker, row } = target;\n\n return {\n computed: 'none',\n rows: [\n {\n color: colorOf(marker.series),\n emphasis: true,\n format: formatInstant,\n label: marker.series,\n values: [marker.position],\n },\n ],\n subtitle: marker.label,\n title: row.label,\n };\n }\n\n if (target.kind === 'group') {\n const { segments } = target;\n const start = min(segments, (segment) => segment.start);\n const end = max(segments, (segment) => segment.end);\n const period = start === undefined || end === undefined ? undefined : interval({ end, start });\n\n return {\n computed: 'none',\n rows: [{ format: String, label: 'Linhas', values: [target.rowCount] }],\n subtitle: joined([period, target.collapsed ? 'Grupo recolhido' : undefined]),\n title: target.group.label,\n };\n }\n\n const { row, segments } = target;\n const scheduled = options.seriesOrder.flatMap((series) => {\n const bands = target.rowBands.filter((band) => band.series === series);\n return bands.length ? [`${series} ${bands.map(interval).join(' · ')}`] : [];\n });\n const subtitle = joined([row.description, ...scheduled]);\n const totals = options.seriesOrder.flatMap((series): ChartTooltipRow[] => {\n const ofSeries = segments.filter((segment) => segment.series === series);\n return ofSeries.length ? [{ color: colorOf(series), label: series, values: [sum(ofSeries, duration)] }] : [];\n });\n\n // Sem coluna declarada o balao nao inventa um valor para a linha que so tem rotulo.\n if (totals.length === 0) {\n return {\n computed: 'none',\n rows: [{ label: target.empty ? options.emptyRowLabel : 'Séries desligadas', values: [] }],\n subtitle,\n title: row.label,\n };\n }\n\n return {\n columns: [{ format: formatDuration }],\n computed: 'none',\n rows: totals,\n showTotal: totals.length > 1,\n subtitle,\n title: row.label,\n };\n}\n"],"names":["joined","parts","timelineTooltip","target","options","colorOf","duration","formatDuration","formatInstant","interval","range","row","segment","rows","value","formatarPercentual","marker","segments","start","min","end","max","period","scheduled","series","bands","band","subtitle","totals","ofSeries","sum"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),e=require("./Chart.module.css.cjs"),o={left:e.default.legendLeft,center:e.default.legendCenter,right:e.default.legendRight};function f({align:s="center",entries:u,onToggle:d,position:n,swatch:c="square"}){const r=n==="left"||n==="right";return t.jsx("ul",{className:`${e.default.legend} ${r?e.default.legendSide:o[s]}`,children:u.map((l,i)=>{const a=t.jsxs(t.Fragment,{children:[t.jsx("span",{"aria-hidden":"true",className:`${e.default.swatch} ${c==="dot"?e.default.swatchDot:""}`,style:l.hidden?void 0:{background:l.color}}),t.jsx("span",{className:e.default.legendLabel,children:l.label}),l.value!==void 0&&t.jsx("span",{className:e.default.legendValue,children:l.value})]});return t.jsx("li",{className:e.default.legendItem,children:d?t.jsx("button",{"aria-pressed":!l.hidden,className:`${e.default.legendButton} ${l.hidden?e.default.legendOff:""}`,onClick:()=>d(l.label),type:"button",children:a}):a},i)})})}exports.ChartLegend=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react/jsx-runtime"),e=require("./Chart.module.css.cjs"),i={left:e.default.legendLeft,center:e.default.legendCenter,right:e.default.legendRight};function m({align:a="center",entries:r,onHighlight:t,onToggle:n,position:s,swatch:c="square"}){const o=s==="left"||s==="right";return d.jsx("ul",{className:`${e.default.legend} ${o?e.default.legendSide:i[a]}`,children:r.map((l,f)=>{const u=d.jsxs(d.Fragment,{children:[d.jsx("span",{"aria-hidden":"true",className:`${e.default.swatch} ${c==="dot"?e.default.swatchDot:""}`,style:l.hidden?void 0:{background:l.color}}),d.jsx("span",{className:e.default.legendLabel,children:l.label}),l.value!==void 0&&d.jsx("span",{className:e.default.legendValue,children:l.value})]});return d.jsx("li",{className:e.default.legendItem,onBlur:t&&(()=>t(null)),onFocus:t&&(()=>t(l.label)),onPointerEnter:t&&(()=>t(l.label)),onPointerLeave:t&&(()=>t(null)),children:n?d.jsx("button",{"aria-pressed":!l.hidden,className:`${e.default.legendButton} ${l.hidden?e.default.legendOff:""}`,onClick:()=>n(l.label),type:"button",children:u}):u},f)})})}exports.ChartLegend=m;
2
2
  //# sourceMappingURL=ChartLegend.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartLegend.cjs","sources":["../../../../src/components/charts/core/ChartLegend.tsx"],"sourcesContent":["import styles from './Chart.module.css';\n\nexport type ChartLegendPosition = 'top' | 'bottom' | 'left' | 'right' | 'none';\n\nexport interface ChartLegendEntry {\n color: string;\n hidden?: boolean;\n label: string;\n /** Medida da entrada, alinhada a direita. Serve a legenda em lista do anel. */\n value?: string;\n}\n\nexport type ChartLegendSwatch = 'square' | 'dot';\n\n/** Onde a legenda horizontal se apoia na largura do grafico. */\nexport type ChartLegendAlign = 'left' | 'center' | 'right';\n\nconst ALINHAMENTO: Record<ChartLegendAlign, string> = {\n left: styles.legendLeft,\n center: styles.legendCenter,\n right: styles.legendRight,\n};\n\ninterface ChartLegendProps {\n align?: ChartLegendAlign;\n entries: readonly ChartLegendEntry[];\n onToggle?: (label: string) => void;\n position: ChartLegendPosition;\n swatch?: ChartLegendSwatch;\n}\n\n/**\n * Legenda do grafico. Quando existe um alvo para o clique, cada entrada vira um\n * botao que liga e desliga a serie, com o estado exposto por `aria-pressed`.\n */\nexport function ChartLegend({\n align = 'center',\n entries,\n onToggle,\n position,\n swatch = 'square',\n}: ChartLegendProps) {\n const lateral = position === 'left' || position === 'right';\n\n return (\n <ul className={`${styles.legend} ${lateral ? styles.legendSide : ALINHAMENTO[align]}`}>\n {entries.map((entrada, indice) => {\n const conteudo = (\n <>\n <span\n aria-hidden=\"true\"\n className={`${styles.swatch} ${swatch === 'dot' ? styles.swatchDot : ''}`}\n style={entrada.hidden ? undefined : { background: entrada.color }}\n />\n <span className={styles.legendLabel}>{entrada.label}</span>\n {entrada.value !== undefined && <span className={styles.legendValue}>{entrada.value}</span>}\n </>\n );\n\n return (\n <li className={styles.legendItem} key={indice}>\n {onToggle ? (\n <button\n aria-pressed={!entrada.hidden}\n className={`${styles.legendButton} ${entrada.hidden ? styles.legendOff : ''}`}\n onClick={() => onToggle(entrada.label)}\n type=\"button\"\n >\n {conteudo}\n </button>\n ) : (\n conteudo\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n"],"names":["ALINHAMENTO","styles","ChartLegend","align","entries","onToggle","position","swatch","lateral","entrada","indice","conteudo","jsxs","Fragment","jsx"],"mappings":"yJAiBMA,EAAgD,CACpD,KAAMC,EAAAA,QAAO,WACb,OAAQA,EAAAA,QAAO,aACf,MAAOA,EAAAA,QAAO,WAChB,EAcO,SAASC,EAAY,CAC1B,MAAAC,EAAQ,SACR,QAAAC,EACA,SAAAC,EACA,SAAAC,EACA,OAAAC,EAAS,QACX,EAAqB,CACnB,MAAMC,EAAUF,IAAa,QAAUA,IAAa,QAEpD,aACG,KAAA,CAAG,UAAW,GAAGL,UAAO,MAAM,IAAIO,EAAUP,EAAAA,QAAO,WAAaD,EAAYG,CAAK,CAAC,GAChF,WAAQ,IAAI,CAACM,EAASC,IAAW,CAChC,MAAMC,EACJC,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAAC,EAAAA,IAAC,OAAA,CACC,cAAY,OACZ,UAAW,GAAGb,UAAO,MAAM,IAAIM,IAAW,MAAQN,EAAAA,QAAO,UAAY,EAAE,GACvE,MAAOQ,EAAQ,OAAS,OAAY,CAAE,WAAYA,EAAQ,KAAA,CAAM,CAAA,QAEjE,OAAA,CAAK,UAAWR,EAAAA,QAAO,YAAc,WAAQ,MAAM,EACnDQ,EAAQ,QAAU,QAAaK,EAAAA,IAAC,QAAK,UAAWb,EAAAA,QAAO,YAAc,SAAAQ,EAAQ,KAAA,CAAM,CAAA,EACtF,EAGF,OACEK,EAAAA,IAAC,KAAA,CAAG,UAAWb,EAAAA,QAAO,WACnB,SAAAI,EACCS,EAAAA,IAAC,SAAA,CACC,eAAc,CAACL,EAAQ,OACvB,UAAW,GAAGR,UAAO,YAAY,IAAIQ,EAAQ,OAASR,EAAAA,QAAO,UAAY,EAAE,GAC3E,QAAS,IAAMI,EAASI,EAAQ,KAAK,EACrC,KAAK,SAEJ,SAAAE,CAAA,CAAA,EAGHA,GAXmCD,CAavC,CAEJ,CAAC,CAAA,CACH,CAEJ"}
1
+ {"version":3,"file":"ChartLegend.cjs","sources":["../../../../src/components/charts/core/ChartLegend.tsx"],"sourcesContent":["import styles from './Chart.module.css';\n\nexport type ChartLegendPosition = 'top' | 'bottom' | 'left' | 'right' | 'none';\n\nexport interface ChartLegendEntry {\n color: string;\n hidden?: boolean;\n label: string;\n /** Medida da entrada, alinhada a direita. Serve a legenda em lista do anel. */\n value?: string;\n}\n\nexport type ChartLegendSwatch = 'square' | 'dot';\n\n/** Onde a legenda horizontal se apoia na largura do grafico. */\nexport type ChartLegendAlign = 'left' | 'center' | 'right';\n\nconst ALINHAMENTO: Record<ChartLegendAlign, string> = {\n left: styles.legendLeft,\n center: styles.legendCenter,\n right: styles.legendRight,\n};\n\ninterface ChartLegendProps {\n align?: ChartLegendAlign;\n entries: readonly ChartLegendEntry[];\n /** Entrada sob o ponteiro ou o foco, para o grafico destacar o que ela representa; `null` ao sair. */\n onHighlight?: (label: string | null) => void;\n onToggle?: (label: string) => void;\n position: ChartLegendPosition;\n swatch?: ChartLegendSwatch;\n}\n\n/**\n * Legenda do grafico. Quando existe um alvo para o clique, cada entrada vira um\n * botao que liga e desliga a serie, com o estado exposto por `aria-pressed`.\n */\nexport function ChartLegend({\n align = 'center',\n entries,\n onHighlight,\n onToggle,\n position,\n swatch = 'square',\n}: ChartLegendProps) {\n const lateral = position === 'left' || position === 'right';\n\n return (\n <ul className={`${styles.legend} ${lateral ? styles.legendSide : ALINHAMENTO[align]}`}>\n {entries.map((entrada, indice) => {\n const conteudo = (\n <>\n <span\n aria-hidden=\"true\"\n className={`${styles.swatch} ${swatch === 'dot' ? styles.swatchDot : ''}`}\n style={entrada.hidden ? undefined : { background: entrada.color }}\n />\n <span className={styles.legendLabel}>{entrada.label}</span>\n {entrada.value !== undefined && <span className={styles.legendValue}>{entrada.value}</span>}\n </>\n );\n\n return (\n <li\n className={styles.legendItem}\n key={indice}\n onBlur={onHighlight && (() => onHighlight(null))}\n onFocus={onHighlight && (() => onHighlight(entrada.label))}\n onPointerEnter={onHighlight && (() => onHighlight(entrada.label))}\n onPointerLeave={onHighlight && (() => onHighlight(null))}\n >\n {onToggle ? (\n <button\n aria-pressed={!entrada.hidden}\n className={`${styles.legendButton} ${entrada.hidden ? styles.legendOff : ''}`}\n onClick={() => onToggle(entrada.label)}\n type=\"button\"\n >\n {conteudo}\n </button>\n ) : (\n conteudo\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n"],"names":["ALINHAMENTO","styles","ChartLegend","align","entries","onHighlight","onToggle","position","swatch","lateral","entrada","indice","conteudo","jsxs","Fragment","jsx"],"mappings":"yJAiBMA,EAAgD,CACpD,KAAMC,EAAAA,QAAO,WACb,OAAQA,EAAAA,QAAO,aACf,MAAOA,EAAAA,QAAO,WAChB,EAgBO,SAASC,EAAY,CAC1B,MAAAC,EAAQ,SACR,QAAAC,EACA,YAAAC,EACA,SAAAC,EACA,SAAAC,EACA,OAAAC,EAAS,QACX,EAAqB,CACnB,MAAMC,EAAUF,IAAa,QAAUA,IAAa,QAEpD,aACG,KAAA,CAAG,UAAW,GAAGN,UAAO,MAAM,IAAIQ,EAAUR,EAAAA,QAAO,WAAaD,EAAYG,CAAK,CAAC,GAChF,WAAQ,IAAI,CAACO,EAASC,IAAW,CAChC,MAAMC,EACJC,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAAC,EAAAA,IAAC,OAAA,CACC,cAAY,OACZ,UAAW,GAAGd,UAAO,MAAM,IAAIO,IAAW,MAAQP,EAAAA,QAAO,UAAY,EAAE,GACvE,MAAOS,EAAQ,OAAS,OAAY,CAAE,WAAYA,EAAQ,KAAA,CAAM,CAAA,QAEjE,OAAA,CAAK,UAAWT,EAAAA,QAAO,YAAc,WAAQ,MAAM,EACnDS,EAAQ,QAAU,QAAaK,EAAAA,IAAC,QAAK,UAAWd,EAAAA,QAAO,YAAc,SAAAS,EAAQ,KAAA,CAAM,CAAA,EACtF,EAGF,OACEK,EAAAA,IAAC,KAAA,CACC,UAAWd,EAAAA,QAAO,WAElB,OAAQI,IAAgB,IAAMA,EAAY,IAAI,GAC9C,QAASA,IAAgB,IAAMA,EAAYK,EAAQ,KAAK,GACxD,eAAgBL,IAAgB,IAAMA,EAAYK,EAAQ,KAAK,GAC/D,eAAgBL,IAAgB,IAAMA,EAAY,IAAI,GAErD,SAAAC,EACCS,EAAAA,IAAC,SAAA,CACC,eAAc,CAACL,EAAQ,OACvB,UAAW,GAAGT,UAAO,YAAY,IAAIS,EAAQ,OAAST,EAAAA,QAAO,UAAY,EAAE,GAC3E,QAAS,IAAMK,EAASI,EAAQ,KAAK,EACrC,KAAK,SAEJ,SAAAE,CAAA,CAAA,EAGHA,CAAA,EAhBGD,CAAA,CAoBX,CAAC,CAAA,CACH,CAEJ"}
@@ -1,44 +1,56 @@
1
- import { jsx as n, jsxs as h, Fragment as g } from "react/jsx-runtime";
1
+ import { jsx as s, jsxs as i, Fragment as b } from "react/jsx-runtime";
2
2
  import e from "./Chart.module.css.js";
3
- const u = {
3
+ const f = {
4
4
  left: e.legendLeft,
5
5
  center: e.legendCenter,
6
6
  right: e.legendRight
7
7
  };
8
- function p({
9
- align: c = "center",
10
- entries: r,
11
- onToggle: t,
12
- position: s,
13
- swatch: i = "square"
8
+ function $({
9
+ align: t = "center",
10
+ entries: a,
11
+ onHighlight: n,
12
+ onToggle: c,
13
+ position: r,
14
+ swatch: o = "square"
14
15
  }) {
15
- const a = s === "left" || s === "right";
16
- return /* @__PURE__ */ n("ul", { className: `${e.legend} ${a ? e.legendSide : u[c]}`, children: r.map((l, o) => {
17
- const d = /* @__PURE__ */ h(g, { children: [
18
- /* @__PURE__ */ n(
16
+ const u = r === "left" || r === "right";
17
+ return /* @__PURE__ */ s("ul", { className: `${e.legend} ${u ? e.legendSide : f[t]}`, children: a.map((l, m) => {
18
+ const d = /* @__PURE__ */ i(b, { children: [
19
+ /* @__PURE__ */ s(
19
20
  "span",
20
21
  {
21
22
  "aria-hidden": "true",
22
- className: `${e.swatch} ${i === "dot" ? e.swatchDot : ""}`,
23
+ className: `${e.swatch} ${o === "dot" ? e.swatchDot : ""}`,
23
24
  style: l.hidden ? void 0 : { background: l.color }
24
25
  }
25
26
  ),
26
- /* @__PURE__ */ n("span", { className: e.legendLabel, children: l.label }),
27
- l.value !== void 0 && /* @__PURE__ */ n("span", { className: e.legendValue, children: l.value })
27
+ /* @__PURE__ */ s("span", { className: e.legendLabel, children: l.label }),
28
+ l.value !== void 0 && /* @__PURE__ */ s("span", { className: e.legendValue, children: l.value })
28
29
  ] });
29
- return /* @__PURE__ */ n("li", { className: e.legendItem, children: t ? /* @__PURE__ */ n(
30
- "button",
30
+ return /* @__PURE__ */ s(
31
+ "li",
31
32
  {
32
- "aria-pressed": !l.hidden,
33
- className: `${e.legendButton} ${l.hidden ? e.legendOff : ""}`,
34
- onClick: () => t(l.label),
35
- type: "button",
36
- children: d
37
- }
38
- ) : d }, o);
33
+ className: e.legendItem,
34
+ onBlur: n && (() => n(null)),
35
+ onFocus: n && (() => n(l.label)),
36
+ onPointerEnter: n && (() => n(l.label)),
37
+ onPointerLeave: n && (() => n(null)),
38
+ children: c ? /* @__PURE__ */ s(
39
+ "button",
40
+ {
41
+ "aria-pressed": !l.hidden,
42
+ className: `${e.legendButton} ${l.hidden ? e.legendOff : ""}`,
43
+ onClick: () => c(l.label),
44
+ type: "button",
45
+ children: d
46
+ }
47
+ ) : d
48
+ },
49
+ m
50
+ );
39
51
  }) });
40
52
  }
41
53
  export {
42
- p as ChartLegend
54
+ $ as ChartLegend
43
55
  };
44
56
  //# sourceMappingURL=ChartLegend.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartLegend.js","sources":["../../../../src/components/charts/core/ChartLegend.tsx"],"sourcesContent":["import styles from './Chart.module.css';\n\nexport type ChartLegendPosition = 'top' | 'bottom' | 'left' | 'right' | 'none';\n\nexport interface ChartLegendEntry {\n color: string;\n hidden?: boolean;\n label: string;\n /** Medida da entrada, alinhada a direita. Serve a legenda em lista do anel. */\n value?: string;\n}\n\nexport type ChartLegendSwatch = 'square' | 'dot';\n\n/** Onde a legenda horizontal se apoia na largura do grafico. */\nexport type ChartLegendAlign = 'left' | 'center' | 'right';\n\nconst ALINHAMENTO: Record<ChartLegendAlign, string> = {\n left: styles.legendLeft,\n center: styles.legendCenter,\n right: styles.legendRight,\n};\n\ninterface ChartLegendProps {\n align?: ChartLegendAlign;\n entries: readonly ChartLegendEntry[];\n onToggle?: (label: string) => void;\n position: ChartLegendPosition;\n swatch?: ChartLegendSwatch;\n}\n\n/**\n * Legenda do grafico. Quando existe um alvo para o clique, cada entrada vira um\n * botao que liga e desliga a serie, com o estado exposto por `aria-pressed`.\n */\nexport function ChartLegend({\n align = 'center',\n entries,\n onToggle,\n position,\n swatch = 'square',\n}: ChartLegendProps) {\n const lateral = position === 'left' || position === 'right';\n\n return (\n <ul className={`${styles.legend} ${lateral ? styles.legendSide : ALINHAMENTO[align]}`}>\n {entries.map((entrada, indice) => {\n const conteudo = (\n <>\n <span\n aria-hidden=\"true\"\n className={`${styles.swatch} ${swatch === 'dot' ? styles.swatchDot : ''}`}\n style={entrada.hidden ? undefined : { background: entrada.color }}\n />\n <span className={styles.legendLabel}>{entrada.label}</span>\n {entrada.value !== undefined && <span className={styles.legendValue}>{entrada.value}</span>}\n </>\n );\n\n return (\n <li className={styles.legendItem} key={indice}>\n {onToggle ? (\n <button\n aria-pressed={!entrada.hidden}\n className={`${styles.legendButton} ${entrada.hidden ? styles.legendOff : ''}`}\n onClick={() => onToggle(entrada.label)}\n type=\"button\"\n >\n {conteudo}\n </button>\n ) : (\n conteudo\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n"],"names":["ALINHAMENTO","styles","ChartLegend","align","entries","onToggle","position","swatch","lateral","entrada","indice","conteudo","jsxs","Fragment","jsx"],"mappings":";;AAiBA,MAAMA,IAAgD;AAAA,EACpD,MAAMC,EAAO;AAAA,EACb,QAAQA,EAAO;AAAA,EACf,OAAOA,EAAO;AAChB;AAcO,SAASC,EAAY;AAAA,EAC1B,OAAAC,IAAQ;AAAA,EACR,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS;AACX,GAAqB;AACnB,QAAMC,IAAUF,MAAa,UAAUA,MAAa;AAEpD,2BACG,MAAA,EAAG,WAAW,GAAGL,EAAO,MAAM,IAAIO,IAAUP,EAAO,aAAaD,EAAYG,CAAK,CAAC,IAChF,YAAQ,IAAI,CAACM,GAASC,MAAW;AAChC,UAAMC,IACJ,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,WAAW,GAAGb,EAAO,MAAM,IAAIM,MAAW,QAAQN,EAAO,YAAY,EAAE;AAAA,UACvE,OAAOQ,EAAQ,SAAS,SAAY,EAAE,YAAYA,EAAQ,MAAA;AAAA,QAAM;AAAA,MAAA;AAAA,wBAEjE,QAAA,EAAK,WAAWR,EAAO,aAAc,YAAQ,OAAM;AAAA,MACnDQ,EAAQ,UAAU,UAAa,gBAAAK,EAAC,UAAK,WAAWb,EAAO,aAAc,UAAAQ,EAAQ,MAAA,CAAM;AAAA,IAAA,GACtF;AAGF,WACE,gBAAAK,EAAC,MAAA,EAAG,WAAWb,EAAO,YACnB,UAAAI,IACC,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,gBAAc,CAACL,EAAQ;AAAA,QACvB,WAAW,GAAGR,EAAO,YAAY,IAAIQ,EAAQ,SAASR,EAAO,YAAY,EAAE;AAAA,QAC3E,SAAS,MAAMI,EAASI,EAAQ,KAAK;AAAA,QACrC,MAAK;AAAA,QAEJ,UAAAE;AAAA,MAAA;AAAA,IAAA,IAGHA,KAXmCD,CAavC;AAAA,EAEJ,CAAC,EAAA,CACH;AAEJ;"}
1
+ {"version":3,"file":"ChartLegend.js","sources":["../../../../src/components/charts/core/ChartLegend.tsx"],"sourcesContent":["import styles from './Chart.module.css';\n\nexport type ChartLegendPosition = 'top' | 'bottom' | 'left' | 'right' | 'none';\n\nexport interface ChartLegendEntry {\n color: string;\n hidden?: boolean;\n label: string;\n /** Medida da entrada, alinhada a direita. Serve a legenda em lista do anel. */\n value?: string;\n}\n\nexport type ChartLegendSwatch = 'square' | 'dot';\n\n/** Onde a legenda horizontal se apoia na largura do grafico. */\nexport type ChartLegendAlign = 'left' | 'center' | 'right';\n\nconst ALINHAMENTO: Record<ChartLegendAlign, string> = {\n left: styles.legendLeft,\n center: styles.legendCenter,\n right: styles.legendRight,\n};\n\ninterface ChartLegendProps {\n align?: ChartLegendAlign;\n entries: readonly ChartLegendEntry[];\n /** Entrada sob o ponteiro ou o foco, para o grafico destacar o que ela representa; `null` ao sair. */\n onHighlight?: (label: string | null) => void;\n onToggle?: (label: string) => void;\n position: ChartLegendPosition;\n swatch?: ChartLegendSwatch;\n}\n\n/**\n * Legenda do grafico. Quando existe um alvo para o clique, cada entrada vira um\n * botao que liga e desliga a serie, com o estado exposto por `aria-pressed`.\n */\nexport function ChartLegend({\n align = 'center',\n entries,\n onHighlight,\n onToggle,\n position,\n swatch = 'square',\n}: ChartLegendProps) {\n const lateral = position === 'left' || position === 'right';\n\n return (\n <ul className={`${styles.legend} ${lateral ? styles.legendSide : ALINHAMENTO[align]}`}>\n {entries.map((entrada, indice) => {\n const conteudo = (\n <>\n <span\n aria-hidden=\"true\"\n className={`${styles.swatch} ${swatch === 'dot' ? styles.swatchDot : ''}`}\n style={entrada.hidden ? undefined : { background: entrada.color }}\n />\n <span className={styles.legendLabel}>{entrada.label}</span>\n {entrada.value !== undefined && <span className={styles.legendValue}>{entrada.value}</span>}\n </>\n );\n\n return (\n <li\n className={styles.legendItem}\n key={indice}\n onBlur={onHighlight && (() => onHighlight(null))}\n onFocus={onHighlight && (() => onHighlight(entrada.label))}\n onPointerEnter={onHighlight && (() => onHighlight(entrada.label))}\n onPointerLeave={onHighlight && (() => onHighlight(null))}\n >\n {onToggle ? (\n <button\n aria-pressed={!entrada.hidden}\n className={`${styles.legendButton} ${entrada.hidden ? styles.legendOff : ''}`}\n onClick={() => onToggle(entrada.label)}\n type=\"button\"\n >\n {conteudo}\n </button>\n ) : (\n conteudo\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n"],"names":["ALINHAMENTO","styles","ChartLegend","align","entries","onHighlight","onToggle","position","swatch","lateral","entrada","indice","conteudo","jsxs","Fragment","jsx"],"mappings":";;AAiBA,MAAMA,IAAgD;AAAA,EACpD,MAAMC,EAAO;AAAA,EACb,QAAQA,EAAO;AAAA,EACf,OAAOA,EAAO;AAChB;AAgBO,SAASC,EAAY;AAAA,EAC1B,OAAAC,IAAQ;AAAA,EACR,SAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS;AACX,GAAqB;AACnB,QAAMC,IAAUF,MAAa,UAAUA,MAAa;AAEpD,2BACG,MAAA,EAAG,WAAW,GAAGN,EAAO,MAAM,IAAIQ,IAAUR,EAAO,aAAaD,EAAYG,CAAK,CAAC,IAChF,YAAQ,IAAI,CAACO,GAASC,MAAW;AAChC,UAAMC,IACJ,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,WAAW,GAAGd,EAAO,MAAM,IAAIO,MAAW,QAAQP,EAAO,YAAY,EAAE;AAAA,UACvE,OAAOS,EAAQ,SAAS,SAAY,EAAE,YAAYA,EAAQ,MAAA;AAAA,QAAM;AAAA,MAAA;AAAA,wBAEjE,QAAA,EAAK,WAAWT,EAAO,aAAc,YAAQ,OAAM;AAAA,MACnDS,EAAQ,UAAU,UAAa,gBAAAK,EAAC,UAAK,WAAWd,EAAO,aAAc,UAAAS,EAAQ,MAAA,CAAM;AAAA,IAAA,GACtF;AAGF,WACE,gBAAAK;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWd,EAAO;AAAA,QAElB,QAAQI,MAAgB,MAAMA,EAAY,IAAI;AAAA,QAC9C,SAASA,MAAgB,MAAMA,EAAYK,EAAQ,KAAK;AAAA,QACxD,gBAAgBL,MAAgB,MAAMA,EAAYK,EAAQ,KAAK;AAAA,QAC/D,gBAAgBL,MAAgB,MAAMA,EAAY,IAAI;AAAA,QAErD,UAAAC,IACC,gBAAAS;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,gBAAc,CAACL,EAAQ;AAAA,YACvB,WAAW,GAAGT,EAAO,YAAY,IAAIS,EAAQ,SAAST,EAAO,YAAY,EAAE;AAAA,YAC3E,SAAS,MAAMK,EAASI,EAAQ,KAAK;AAAA,YACrC,MAAK;AAAA,YAEJ,UAAAE;AAAA,UAAA;AAAA,QAAA,IAGHA;AAAA,MAAA;AAAA,MAhBGD;AAAA,IAAA;AAAA,EAoBX,CAAC,EAAA,CACH;AAEJ;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react"),l=require("./measureText.cjs"),u=5;function p(r){return!r||typeof getComputedStyle!="function"?u:Number.parseFloat(getComputedStyle(r).getPropertyValue("--pl-radius-sm"))||u}function y(){const[r,a]=s.useState(()=>({font:l.labelFontOf(null),height:0,radius:u,width:0})),c=s.useRef(null),o=s.useCallback(()=>{const e=c.current,n=(e==null?void 0:e.clientWidth)??0,f=(e==null?void 0:e.clientHeight)??0,i=l.labelFontOf(e),d=p(e);a(t=>t.width===n&&t.height===f&&t.radius===d&&t.font.family===i.family&&t.font.size===i.size&&t.font.lineHeight===i.lineHeight&&t.font.centerSteps.every((b,m)=>{var h;return b.size===((h=i.centerSteps[m])==null?void 0:h.size)})?t:{font:i,height:f,radius:d,width:n})},[]),g=s.useCallback(e=>{c.current=e,o()},[o]);return s.useEffect(()=>{const e=c.current;if(!e||typeof ResizeObserver>"u")return;const n=new ResizeObserver(o);return n.observe(e),()=>n.disconnect()},[o]),{font:r.font,height:r.height,radius:r.radius,ref:g,width:r.width}}exports.useChartMetrics=y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react"),a=require("./measureText.cjs"),u=5;function y(r){return!r||typeof getComputedStyle!="function"?u:Number.parseFloat(getComputedStyle(r).getPropertyValue("--pl-radius-sm"))||u}function O(){const[r,g]=s.useState(()=>({font:a.labelFontOf(null),height:0,radius:u,width:0})),f=s.useRef(null),c=s.useCallback(()=>{const e=f.current,i=(e==null?void 0:e.clientWidth)??0,l=(e==null?void 0:e.clientHeight)??0,n=a.labelFontOf(e),h=y(e);g(t=>t.width===i&&t.height===l&&t.radius===h&&t.font.family===n.family&&t.font.size===n.size&&t.font.lineHeight===n.lineHeight&&t.font.centerSteps.every((m,p)=>{var d;return m.size===((d=n.centerSteps[p])==null?void 0:d.size)})?t:{font:n,height:l,radius:h,width:i})},[]),o=s.useRef(null),b=s.useCallback(e=>{var i;(i=o.current)==null||i.disconnect(),o.current=null,f.current=e,c(),e&&typeof ResizeObserver<"u"&&(o.current=new ResizeObserver(c),o.current.observe(e))},[c]);return{font:r.font,height:r.height,radius:r.radius,ref:b,width:r.width}}exports.useChartMetrics=O;
2
2
  //# sourceMappingURL=useChartMetrics.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useChartMetrics.cjs","sources":["../../../../src/components/charts/core/useChartMetrics.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { labelFontOf, type LabelFont } from './measureText';\n\nexport interface ChartMetrics {\n font: LabelFont;\n height: number;\n /** Raio dos cantos, lido do token: geometria de caminho nao le variavel CSS. */\n radius: number;\n ref: (node: HTMLElement | null) => void;\n width: number;\n}\n\nconst RAIO_PADRAO = 5;\n\nfunction raioDe(node: Element | null) {\n if (!node || typeof getComputedStyle !== 'function') {\n return RAIO_PADRAO;\n }\n\n return Number.parseFloat(getComputedStyle(node).getPropertyValue('--pl-radius-sm')) || RAIO_PADRAO;\n}\n\n/**\n * Mede o espaco em que o grafico sera desenhado: largura, altura e a fonte que\n * os rotulos vao usar. A area de desenho nao entra no fluxo, entao a medida e\n * sempre o que o layout concedeu, e nunca o que o proprio grafico ocupou.\n *\n * A fonte sai da mesma medida porque as duas vem do elemento e mudam juntas:\n * as margens do grafico dependem da largura dos rotulos, e a largura de um\n * rotulo depende da fonte resolvida ali.\n */\nexport function useChartMetrics(): ChartMetrics {\n const [medida, setMedida] = useState<{\n font: LabelFont;\n height: number;\n radius: number;\n width: number;\n }>(() => ({ font: labelFontOf(null), height: 0, radius: RAIO_PADRAO, width: 0 }));\n const elemento = useRef<HTMLElement | null>(null);\n\n const medir = useCallback(() => {\n const node = elemento.current;\n const width = node?.clientWidth ?? 0;\n const height = node?.clientHeight ?? 0;\n const font = labelFontOf(node);\n const radius = raioDe(node);\n\n setMedida((atual) =>\n atual.width === width &&\n atual.height === height &&\n atual.radius === radius &&\n atual.font.family === font.family &&\n atual.font.size === font.size &&\n atual.font.lineHeight === font.lineHeight &&\n atual.font.centerSteps.every((degrau, indice) => degrau.size === font.centerSteps[indice]?.size)\n ? atual\n : { font, height, radius, width },\n );\n }, []);\n\n const ref = useCallback(\n (node: HTMLElement | null) => {\n elemento.current = node;\n medir();\n },\n [medir],\n );\n\n useEffect(() => {\n const node = elemento.current;\n\n if (!node || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n const observador = new ResizeObserver(medir);\n observador.observe(node);\n\n return () => observador.disconnect();\n }, [medir]);\n\n return {\n font: medida.font,\n height: medida.height,\n radius: medida.radius,\n ref,\n width: medida.width,\n };\n}\n"],"names":["RAIO_PADRAO","raioDe","node","useChartMetrics","medida","setMedida","useState","labelFontOf","elemento","useRef","medir","useCallback","width","height","font","radius","atual","degrau","indice","_a","ref","useEffect","observador"],"mappings":"wIAYMA,EAAc,EAEpB,SAASC,EAAOC,EAAsB,CACpC,MAAI,CAACA,GAAQ,OAAO,kBAAqB,WAChCF,EAGF,OAAO,WAAW,iBAAiBE,CAAI,EAAE,iBAAiB,gBAAgB,CAAC,GAAKF,CACzF,CAWO,SAASG,GAAgC,CAC9C,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAKzB,KAAO,CAAE,KAAMC,EAAAA,YAAY,IAAI,EAAG,OAAQ,EAAG,OAAQP,EAAa,MAAO,GAAI,EAC1EQ,EAAWC,EAAAA,OAA2B,IAAI,EAE1CC,EAAQC,EAAAA,YAAY,IAAM,CAC9B,MAAMT,EAAOM,EAAS,QAChBI,GAAQV,GAAA,YAAAA,EAAM,cAAe,EAC7BW,GAASX,GAAA,YAAAA,EAAM,eAAgB,EAC/BY,EAAOP,EAAAA,YAAYL,CAAI,EACvBa,EAASd,EAAOC,CAAI,EAE1BG,EAAWW,GACTA,EAAM,QAAUJ,GAChBI,EAAM,SAAWH,GACjBG,EAAM,SAAWD,GACjBC,EAAM,KAAK,SAAWF,EAAK,QAC3BE,EAAM,KAAK,OAASF,EAAK,MACzBE,EAAM,KAAK,aAAeF,EAAK,YAC/BE,EAAM,KAAK,YAAY,MAAM,CAACC,EAAQC,WAAW,OAAAD,EAAO,SAASE,EAAAL,EAAK,YAAYI,CAAM,IAAvB,YAAAC,EAA0B,MAAI,EAC3FH,EACA,CAAE,KAAAF,EAAM,OAAAD,EAAQ,OAAAE,EAAQ,MAAAH,CAAA,CAAM,CAEtC,EAAG,CAAA,CAAE,EAECQ,EAAMT,EAAAA,YACTT,GAA6B,CAC5BM,EAAS,QAAUN,EACnBQ,EAAA,CACF,EACA,CAACA,CAAK,CAAA,EAGRW,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMnB,EAAOM,EAAS,QAEtB,GAAI,CAACN,GAAQ,OAAO,eAAmB,IACrC,OAGF,MAAMoB,EAAa,IAAI,eAAeZ,CAAK,EAC3C,OAAAY,EAAW,QAAQpB,CAAI,EAEhB,IAAMoB,EAAW,WAAA,CAC1B,EAAG,CAACZ,CAAK,CAAC,EAEH,CACL,KAAMN,EAAO,KACb,OAAQA,EAAO,OACf,OAAQA,EAAO,OACf,IAAAgB,EACA,MAAOhB,EAAO,KAAA,CAElB"}
1
+ {"version":3,"file":"useChartMetrics.cjs","sources":["../../../../src/components/charts/core/useChartMetrics.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\nimport { labelFontOf, type LabelFont } from './measureText';\n\nexport interface ChartMetrics {\n font: LabelFont;\n height: number;\n /** Raio dos cantos, lido do token: geometria de caminho nao le variavel CSS. */\n radius: number;\n ref: (node: HTMLElement | null) => void;\n width: number;\n}\n\nconst RAIO_PADRAO = 5;\n\nfunction raioDe(node: Element | null) {\n if (!node || typeof getComputedStyle !== 'function') {\n return RAIO_PADRAO;\n }\n\n return Number.parseFloat(getComputedStyle(node).getPropertyValue('--pl-radius-sm')) || RAIO_PADRAO;\n}\n\n/**\n * Mede o espaco em que o grafico sera desenhado: largura, altura e a fonte que\n * os rotulos vao usar. A area de desenho nao entra no fluxo, entao a medida e\n * sempre o que o layout concedeu, e nunca o que o proprio grafico ocupou.\n *\n * A fonte sai da mesma medida porque as duas vem do elemento e mudam juntas:\n * as margens do grafico dependem da largura dos rotulos, e a largura de um\n * rotulo depende da fonte resolvida ali.\n */\nexport function useChartMetrics(): ChartMetrics {\n const [medida, setMedida] = useState<{\n font: LabelFont;\n height: number;\n radius: number;\n width: number;\n }>(() => ({ font: labelFontOf(null), height: 0, radius: RAIO_PADRAO, width: 0 }));\n const elemento = useRef<HTMLElement | null>(null);\n\n const medir = useCallback(() => {\n const node = elemento.current;\n const width = node?.clientWidth ?? 0;\n const height = node?.clientHeight ?? 0;\n const font = labelFontOf(node);\n const radius = raioDe(node);\n\n setMedida((atual) =>\n atual.width === width &&\n atual.height === height &&\n atual.radius === radius &&\n atual.font.family === font.family &&\n atual.font.size === font.size &&\n atual.font.lineHeight === font.lineHeight &&\n atual.font.centerSteps.every((degrau, indice) => degrau.size === font.centerSteps[indice]?.size)\n ? atual\n : { font, height, radius, width },\n );\n }, []);\n\n const observador = useRef<ResizeObserver | null>(null);\n\n // O observador acompanha o elemento, e não a montagem: a área que nasce depois, ou é trocada, continua sendo medida.\n const ref = useCallback(\n (node: HTMLElement | null) => {\n observador.current?.disconnect();\n observador.current = null;\n elemento.current = node;\n medir();\n\n if (node && typeof ResizeObserver !== 'undefined') {\n observador.current = new ResizeObserver(medir);\n observador.current.observe(node);\n }\n },\n [medir],\n );\n\n return {\n font: medida.font,\n height: medida.height,\n radius: medida.radius,\n ref,\n width: medida.width,\n };\n}\n"],"names":["RAIO_PADRAO","raioDe","node","useChartMetrics","medida","setMedida","useState","labelFontOf","elemento","useRef","medir","useCallback","width","height","font","radius","atual","degrau","indice","_a","observador","ref"],"mappings":"wIAYMA,EAAc,EAEpB,SAASC,EAAOC,EAAsB,CACpC,MAAI,CAACA,GAAQ,OAAO,kBAAqB,WAChCF,EAGF,OAAO,WAAW,iBAAiBE,CAAI,EAAE,iBAAiB,gBAAgB,CAAC,GAAKF,CACzF,CAWO,SAASG,GAAgC,CAC9C,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAKzB,KAAO,CAAE,KAAMC,EAAAA,YAAY,IAAI,EAAG,OAAQ,EAAG,OAAQP,EAAa,MAAO,GAAI,EAC1EQ,EAAWC,EAAAA,OAA2B,IAAI,EAE1CC,EAAQC,EAAAA,YAAY,IAAM,CAC9B,MAAMT,EAAOM,EAAS,QAChBI,GAAQV,GAAA,YAAAA,EAAM,cAAe,EAC7BW,GAASX,GAAA,YAAAA,EAAM,eAAgB,EAC/BY,EAAOP,EAAAA,YAAYL,CAAI,EACvBa,EAASd,EAAOC,CAAI,EAE1BG,EAAWW,GACTA,EAAM,QAAUJ,GAChBI,EAAM,SAAWH,GACjBG,EAAM,SAAWD,GACjBC,EAAM,KAAK,SAAWF,EAAK,QAC3BE,EAAM,KAAK,OAASF,EAAK,MACzBE,EAAM,KAAK,aAAeF,EAAK,YAC/BE,EAAM,KAAK,YAAY,MAAM,CAACC,EAAQC,WAAW,OAAAD,EAAO,SAASE,EAAAL,EAAK,YAAYI,CAAM,IAAvB,YAAAC,EAA0B,MAAI,EAC3FH,EACA,CAAE,KAAAF,EAAM,OAAAD,EAAQ,OAAAE,EAAQ,MAAAH,CAAA,CAAM,CAEtC,EAAG,CAAA,CAAE,EAECQ,EAAaX,EAAAA,OAA8B,IAAI,EAG/CY,EAAMV,EAAAA,YACTT,GAA6B,QAC5BiB,EAAAC,EAAW,UAAX,MAAAD,EAAoB,aACpBC,EAAW,QAAU,KACrBZ,EAAS,QAAUN,EACnBQ,EAAA,EAEIR,GAAQ,OAAO,eAAmB,MACpCkB,EAAW,QAAU,IAAI,eAAeV,CAAK,EAC7CU,EAAW,QAAQ,QAAQlB,CAAI,EAEnC,EACA,CAACQ,CAAK,CAAA,EAGR,MAAO,CACL,KAAMN,EAAO,KACb,OAAQA,EAAO,OACf,OAAQA,EAAO,OACf,IAAAiB,EACA,MAAOjB,EAAO,KAAA,CAElB"}
@@ -1,36 +1,31 @@
1
- import { useState as b, useRef as a, useCallback as h, useEffect as w } from "react";
2
- import { labelFontOf as l } from "./measureText.js";
1
+ import { useState as w, useRef as l, useCallback as m } from "react";
2
+ import { labelFontOf as p } from "./measureText.js";
3
3
  const c = 5;
4
- function z(i) {
5
- return !i || typeof getComputedStyle != "function" ? c : Number.parseFloat(getComputedStyle(i).getPropertyValue("--pl-radius-sm")) || c;
4
+ function z(r) {
5
+ return !r || typeof getComputedStyle != "function" ? c : Number.parseFloat(getComputedStyle(r).getPropertyValue("--pl-radius-sm")) || c;
6
6
  }
7
7
  function R() {
8
- const [i, m] = b(() => ({ font: l(null), height: 0, radius: c, width: 0 })), o = a(null), s = h(() => {
9
- const e = o.current, n = (e == null ? void 0 : e.clientWidth) ?? 0, f = (e == null ? void 0 : e.clientHeight) ?? 0, r = l(e), u = z(e);
10
- m(
11
- (t) => t.width === n && t.height === f && t.radius === u && t.font.family === r.family && t.font.size === r.size && t.font.lineHeight === r.lineHeight && t.font.centerSteps.every((g, y) => {
8
+ const [r, g] = w(() => ({ font: p(null), height: 0, radius: c, width: 0 })), u = l(null), o = m(() => {
9
+ const e = u.current, i = (e == null ? void 0 : e.clientWidth) ?? 0, f = (e == null ? void 0 : e.clientHeight) ?? 0, n = p(e), h = z(e);
10
+ g(
11
+ (t) => t.width === i && t.height === f && t.radius === h && t.font.family === n.family && t.font.size === n.size && t.font.lineHeight === n.lineHeight && t.font.centerSteps.every((b, a) => {
12
12
  var d;
13
- return g.size === ((d = r.centerSteps[y]) == null ? void 0 : d.size);
14
- }) ? t : { font: r, height: f, radius: u, width: n }
13
+ return b.size === ((d = n.centerSteps[a]) == null ? void 0 : d.size);
14
+ }) ? t : { font: n, height: f, radius: h, width: i }
15
15
  );
16
- }, []), p = h(
16
+ }, []), s = l(null), y = m(
17
17
  (e) => {
18
- o.current = e, s();
18
+ var i;
19
+ (i = s.current) == null || i.disconnect(), s.current = null, u.current = e, o(), e && typeof ResizeObserver < "u" && (s.current = new ResizeObserver(o), s.current.observe(e));
19
20
  },
20
- [s]
21
+ [o]
21
22
  );
22
- return w(() => {
23
- const e = o.current;
24
- if (!e || typeof ResizeObserver > "u")
25
- return;
26
- const n = new ResizeObserver(s);
27
- return n.observe(e), () => n.disconnect();
28
- }, [s]), {
29
- font: i.font,
30
- height: i.height,
31
- radius: i.radius,
32
- ref: p,
33
- width: i.width
23
+ return {
24
+ font: r.font,
25
+ height: r.height,
26
+ radius: r.radius,
27
+ ref: y,
28
+ width: r.width
34
29
  };
35
30
  }
36
31
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"useChartMetrics.js","sources":["../../../../src/components/charts/core/useChartMetrics.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { labelFontOf, type LabelFont } from './measureText';\n\nexport interface ChartMetrics {\n font: LabelFont;\n height: number;\n /** Raio dos cantos, lido do token: geometria de caminho nao le variavel CSS. */\n radius: number;\n ref: (node: HTMLElement | null) => void;\n width: number;\n}\n\nconst RAIO_PADRAO = 5;\n\nfunction raioDe(node: Element | null) {\n if (!node || typeof getComputedStyle !== 'function') {\n return RAIO_PADRAO;\n }\n\n return Number.parseFloat(getComputedStyle(node).getPropertyValue('--pl-radius-sm')) || RAIO_PADRAO;\n}\n\n/**\n * Mede o espaco em que o grafico sera desenhado: largura, altura e a fonte que\n * os rotulos vao usar. A area de desenho nao entra no fluxo, entao a medida e\n * sempre o que o layout concedeu, e nunca o que o proprio grafico ocupou.\n *\n * A fonte sai da mesma medida porque as duas vem do elemento e mudam juntas:\n * as margens do grafico dependem da largura dos rotulos, e a largura de um\n * rotulo depende da fonte resolvida ali.\n */\nexport function useChartMetrics(): ChartMetrics {\n const [medida, setMedida] = useState<{\n font: LabelFont;\n height: number;\n radius: number;\n width: number;\n }>(() => ({ font: labelFontOf(null), height: 0, radius: RAIO_PADRAO, width: 0 }));\n const elemento = useRef<HTMLElement | null>(null);\n\n const medir = useCallback(() => {\n const node = elemento.current;\n const width = node?.clientWidth ?? 0;\n const height = node?.clientHeight ?? 0;\n const font = labelFontOf(node);\n const radius = raioDe(node);\n\n setMedida((atual) =>\n atual.width === width &&\n atual.height === height &&\n atual.radius === radius &&\n atual.font.family === font.family &&\n atual.font.size === font.size &&\n atual.font.lineHeight === font.lineHeight &&\n atual.font.centerSteps.every((degrau, indice) => degrau.size === font.centerSteps[indice]?.size)\n ? atual\n : { font, height, radius, width },\n );\n }, []);\n\n const ref = useCallback(\n (node: HTMLElement | null) => {\n elemento.current = node;\n medir();\n },\n [medir],\n );\n\n useEffect(() => {\n const node = elemento.current;\n\n if (!node || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n const observador = new ResizeObserver(medir);\n observador.observe(node);\n\n return () => observador.disconnect();\n }, [medir]);\n\n return {\n font: medida.font,\n height: medida.height,\n radius: medida.radius,\n ref,\n width: medida.width,\n };\n}\n"],"names":["RAIO_PADRAO","raioDe","node","useChartMetrics","medida","setMedida","useState","labelFontOf","elemento","useRef","medir","useCallback","width","height","font","radius","atual","degrau","indice","_a","ref","useEffect","observador"],"mappings":";;AAYA,MAAMA,IAAc;AAEpB,SAASC,EAAOC,GAAsB;AACpC,SAAI,CAACA,KAAQ,OAAO,oBAAqB,aAChCF,IAGF,OAAO,WAAW,iBAAiBE,CAAI,EAAE,iBAAiB,gBAAgB,CAAC,KAAKF;AACzF;AAWO,SAASG,IAAgC;AAC9C,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAKzB,OAAO,EAAE,MAAMC,EAAY,IAAI,GAAG,QAAQ,GAAG,QAAQP,GAAa,OAAO,IAAI,GAC1EQ,IAAWC,EAA2B,IAAI,GAE1CC,IAAQC,EAAY,MAAM;AAC9B,UAAMT,IAAOM,EAAS,SAChBI,KAAQV,KAAA,gBAAAA,EAAM,gBAAe,GAC7BW,KAASX,KAAA,gBAAAA,EAAM,iBAAgB,GAC/BY,IAAOP,EAAYL,CAAI,GACvBa,IAASd,EAAOC,CAAI;AAE1B,IAAAG;AAAA,MAAU,CAACW,MACTA,EAAM,UAAUJ,KAChBI,EAAM,WAAWH,KACjBG,EAAM,WAAWD,KACjBC,EAAM,KAAK,WAAWF,EAAK,UAC3BE,EAAM,KAAK,SAASF,EAAK,QACzBE,EAAM,KAAK,eAAeF,EAAK,cAC/BE,EAAM,KAAK,YAAY,MAAM,CAACC,GAAQC;;AAAW,eAAAD,EAAO,WAASE,IAAAL,EAAK,YAAYI,CAAM,MAAvB,gBAAAC,EAA0B;AAAA,OAAI,IAC3FH,IACA,EAAE,MAAAF,GAAM,QAAAD,GAAQ,QAAAE,GAAQ,OAAAH,EAAA;AAAA,IAAM;AAAA,EAEtC,GAAG,CAAA,CAAE,GAECQ,IAAMT;AAAA,IACV,CAACT,MAA6B;AAC5B,MAAAM,EAAS,UAAUN,GACnBQ,EAAA;AAAA,IACF;AAAA,IACA,CAACA,CAAK;AAAA,EAAA;AAGR,SAAAW,EAAU,MAAM;AACd,UAAMnB,IAAOM,EAAS;AAEtB,QAAI,CAACN,KAAQ,OAAO,iBAAmB;AACrC;AAGF,UAAMoB,IAAa,IAAI,eAAeZ,CAAK;AAC3C,WAAAY,EAAW,QAAQpB,CAAI,GAEhB,MAAMoB,EAAW,WAAA;AAAA,EAC1B,GAAG,CAACZ,CAAK,CAAC,GAEH;AAAA,IACL,MAAMN,EAAO;AAAA,IACb,QAAQA,EAAO;AAAA,IACf,QAAQA,EAAO;AAAA,IACf,KAAAgB;AAAA,IACA,OAAOhB,EAAO;AAAA,EAAA;AAElB;"}
1
+ {"version":3,"file":"useChartMetrics.js","sources":["../../../../src/components/charts/core/useChartMetrics.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\nimport { labelFontOf, type LabelFont } from './measureText';\n\nexport interface ChartMetrics {\n font: LabelFont;\n height: number;\n /** Raio dos cantos, lido do token: geometria de caminho nao le variavel CSS. */\n radius: number;\n ref: (node: HTMLElement | null) => void;\n width: number;\n}\n\nconst RAIO_PADRAO = 5;\n\nfunction raioDe(node: Element | null) {\n if (!node || typeof getComputedStyle !== 'function') {\n return RAIO_PADRAO;\n }\n\n return Number.parseFloat(getComputedStyle(node).getPropertyValue('--pl-radius-sm')) || RAIO_PADRAO;\n}\n\n/**\n * Mede o espaco em que o grafico sera desenhado: largura, altura e a fonte que\n * os rotulos vao usar. A area de desenho nao entra no fluxo, entao a medida e\n * sempre o que o layout concedeu, e nunca o que o proprio grafico ocupou.\n *\n * A fonte sai da mesma medida porque as duas vem do elemento e mudam juntas:\n * as margens do grafico dependem da largura dos rotulos, e a largura de um\n * rotulo depende da fonte resolvida ali.\n */\nexport function useChartMetrics(): ChartMetrics {\n const [medida, setMedida] = useState<{\n font: LabelFont;\n height: number;\n radius: number;\n width: number;\n }>(() => ({ font: labelFontOf(null), height: 0, radius: RAIO_PADRAO, width: 0 }));\n const elemento = useRef<HTMLElement | null>(null);\n\n const medir = useCallback(() => {\n const node = elemento.current;\n const width = node?.clientWidth ?? 0;\n const height = node?.clientHeight ?? 0;\n const font = labelFontOf(node);\n const radius = raioDe(node);\n\n setMedida((atual) =>\n atual.width === width &&\n atual.height === height &&\n atual.radius === radius &&\n atual.font.family === font.family &&\n atual.font.size === font.size &&\n atual.font.lineHeight === font.lineHeight &&\n atual.font.centerSteps.every((degrau, indice) => degrau.size === font.centerSteps[indice]?.size)\n ? atual\n : { font, height, radius, width },\n );\n }, []);\n\n const observador = useRef<ResizeObserver | null>(null);\n\n // O observador acompanha o elemento, e não a montagem: a área que nasce depois, ou é trocada, continua sendo medida.\n const ref = useCallback(\n (node: HTMLElement | null) => {\n observador.current?.disconnect();\n observador.current = null;\n elemento.current = node;\n medir();\n\n if (node && typeof ResizeObserver !== 'undefined') {\n observador.current = new ResizeObserver(medir);\n observador.current.observe(node);\n }\n },\n [medir],\n );\n\n return {\n font: medida.font,\n height: medida.height,\n radius: medida.radius,\n ref,\n width: medida.width,\n };\n}\n"],"names":["RAIO_PADRAO","raioDe","node","useChartMetrics","medida","setMedida","useState","labelFontOf","elemento","useRef","medir","useCallback","width","height","font","radius","atual","degrau","indice","_a","observador","ref"],"mappings":";;AAYA,MAAMA,IAAc;AAEpB,SAASC,EAAOC,GAAsB;AACpC,SAAI,CAACA,KAAQ,OAAO,oBAAqB,aAChCF,IAGF,OAAO,WAAW,iBAAiBE,CAAI,EAAE,iBAAiB,gBAAgB,CAAC,KAAKF;AACzF;AAWO,SAASG,IAAgC;AAC9C,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAKzB,OAAO,EAAE,MAAMC,EAAY,IAAI,GAAG,QAAQ,GAAG,QAAQP,GAAa,OAAO,IAAI,GAC1EQ,IAAWC,EAA2B,IAAI,GAE1CC,IAAQC,EAAY,MAAM;AAC9B,UAAMT,IAAOM,EAAS,SAChBI,KAAQV,KAAA,gBAAAA,EAAM,gBAAe,GAC7BW,KAASX,KAAA,gBAAAA,EAAM,iBAAgB,GAC/BY,IAAOP,EAAYL,CAAI,GACvBa,IAASd,EAAOC,CAAI;AAE1B,IAAAG;AAAA,MAAU,CAACW,MACTA,EAAM,UAAUJ,KAChBI,EAAM,WAAWH,KACjBG,EAAM,WAAWD,KACjBC,EAAM,KAAK,WAAWF,EAAK,UAC3BE,EAAM,KAAK,SAASF,EAAK,QACzBE,EAAM,KAAK,eAAeF,EAAK,cAC/BE,EAAM,KAAK,YAAY,MAAM,CAACC,GAAQC;;AAAW,eAAAD,EAAO,WAASE,IAAAL,EAAK,YAAYI,CAAM,MAAvB,gBAAAC,EAA0B;AAAA,OAAI,IAC3FH,IACA,EAAE,MAAAF,GAAM,QAAAD,GAAQ,QAAAE,GAAQ,OAAAH,EAAA;AAAA,IAAM;AAAA,EAEtC,GAAG,CAAA,CAAE,GAECQ,IAAaX,EAA8B,IAAI,GAG/CY,IAAMV;AAAA,IACV,CAACT,MAA6B;;AAC5B,OAAAiB,IAAAC,EAAW,YAAX,QAAAD,EAAoB,cACpBC,EAAW,UAAU,MACrBZ,EAAS,UAAUN,GACnBQ,EAAA,GAEIR,KAAQ,OAAO,iBAAmB,QACpCkB,EAAW,UAAU,IAAI,eAAeV,CAAK,GAC7CU,EAAW,QAAQ,QAAQlB,CAAI;AAAA,IAEnC;AAAA,IACA,CAACQ,CAAK;AAAA,EAAA;AAGR,SAAO;AAAA,IACL,MAAMN,EAAO;AAAA,IACb,QAAQA,EAAO;AAAA,IACf,QAAQA,EAAO;AAAA,IACf,KAAAiB;AAAA,IACA,OAAOjB,EAAO;AAAA,EAAA;AAElB;"}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const A={java:"Java",javascript:"JavaScript",jsx:"JSX",typescript:"TypeScript",tsx:"TSX",sql:"SQL",json:"JSON",shell:"Shell"};function a(e){return new RegExp(`\\b(?:${e.trim().split(/\s+/).join("|")})\\b`)}const d=/\/\*[\s\S]*?(?:\*\/|$)/,b=/\/\/.*/,c=/"(?:\\.|[^"\\\n])*"?/,S=/'(?:\\.|[^'\\\n])*'?/,l=/\b(?:0[xX][\da-fA-F_]+|\d[\d_]*(?:\.\d[\d_]*)?(?:[eE][+-]?\d+)?)[lLfFdDn]?\b/,u=/\b[A-Za-z_$][\w$]*(?=\s*\()/,w=/@[A-Za-z_]\w*/,x=a(`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const x={java:"Java",javascript:"JavaScript",jsx:"JSX",typescript:"TypeScript",tsx:"TSX",sql:"SQL",json:"JSON",shell:"Shell",delphi:"Delphi"};function a(e){return new RegExp(`\\b(?:${e.trim().split(/\s+/).join("|")})\\b`)}const u=/\/\*[\s\S]*?(?:\*\/|$)/,f=/\/\/.*/,l=/"(?:\\.|[^"\\\n])*"?/,w=/'(?:\\.|[^'\\\n])*'?/,d=/\b(?:0[xX][\da-fA-F_]+|\d[\d_]*(?:\.\d[\d_]*)?(?:[eE][+-]?\d+)?)[lLfFdDn]?\b/,c=/\b[A-Za-z_$][\w$]*(?=\s*\()/,S=/@[A-Za-z_]\w*/,A=a(`
2
2
  abstract assert boolean break byte case catch char class const continue default do double else enum extends
3
3
  final finally float for goto if implements import instanceof int interface long native new package private
4
4
  protected public record return sealed short static strictfp super switch synchronized this throw throws
@@ -19,6 +19,13 @@
19
19
  `),T=a(`
20
20
  case declare do done elif else esac exit export fi for function if in local readonly return select then until
21
21
  while
22
- `),E=[["comment",b],["comment",d],["string",/`(?:\\[\s\S]|[^`\\])*`?/],["string",c],["string",S],["number",l]],p=[...E,["keyword",a(y)],["function",u]],m=[...E,["annotation",w],["keyword",a(y+L)],["function",u]],g=[[void 0,new RegExp("(?<=>)[^<>{}\\n]+(?=<)")],["tag",new RegExp("(?<=<\\/|(?:^|[^\\w$)\\]])<)[A-Za-z][\\w.]*")],["attribute",/\b[A-Za-z_][\w-]*(?==[{"'])/]],O={java:[["comment",b],["comment",d],["string",/"""[\s\S]*?(?:"""|$)/],["string",c],["string",/'(?:\\.|[^'\\\n])'/],["annotation",w],["number",l],["keyword",x],["function",u]],javascript:p,jsx:[...g,...p],typescript:m,tsx:[...g,...m],sql:[["comment",/--.*/],["comment",d],["string",/'(?:''|[^'])*'?/],["number",l],["keyword",_],["function",u]],json:[["property",/"(?:\\.|[^"\\\n])*"(?=\s*:)/],["string",c],["number",/-?\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b/],["keyword",/\b(?:true|false|null)\b/]],shell:[["comment",new RegExp("(?<![^\\s;])#.*")],["string",c],["string",S],["property",/\$(?:\{[^}\n]*\}|\w+|[@*#?$!])/],["keyword",T],["number",l]]},R=new Set(["sql"]),h=new Map;function j(e){const i=h.get(e);if(i)return i;const s=O[e],r=R.has(e)?"gi":"g",n={kinds:s.map(([t])=>t),pattern:new RegExp(s.map(([,t])=>`(${t.source})`).join("|"),r)};return h.set(e,n),n}function k(e,i){const{kinds:s,pattern:r}=j(i),n=[];let t=0;for(const o of e.matchAll(r)){o.index>t&&n.push({text:e.slice(t,o.index)});const f=s[o.slice(1).findIndex(v=>v!==void 0)];n.push(f?{kind:f,text:o[0]}:{text:o[0]}),t=o.index+o[0].length}return t<e.length&&n.push({text:e.slice(t)}),n}function N(e,i){const s=[[]];for(const r of i?k(e,i):[{text:e}])r.text.split(`
23
- `).forEach((n,t)=>{t>0&&s.push([]),n&&s[s.length-1].push({...r,text:n})});return s}exports.SYNTAX_LABELS=A;exports.tokenize=k;exports.tokenizeLines=N;
22
+ `),O=a(`
23
+ absolute abstract and array as asm begin case class const constructor default deprecated destructor dispinterface
24
+ div do downto dynamic else end except exports external false file finalization finally for forward function goto
25
+ helper if implementation implements in inherited initialization inline interface is label library message mod nil
26
+ not object of on operator or out overload override packed platform private procedure program property protected
27
+ public published raise read record reintroduce repeat resourcestring sealed self set shl shr static stdcall strict
28
+ string then threadvar to true try type unit until uses var virtual while with write xor
29
+ `),E=[["comment",f],["comment",u],["string",/`(?:\\[\s\S]|[^`\\])*`?/],["string",l],["string",w],["number",d]],m=[...E,["keyword",a(y)],["function",c]],h=[...E,["annotation",S],["keyword",a(y+L)],["function",c]],b=[[void 0,new RegExp("(?<=>)[^<>{}\\n]+(?=<)")],["tag",new RegExp("(?<=<\\/|(?:^|[^\\w$)\\]])<)[A-Za-z][\\w.]*")],["attribute",/\b[A-Za-z_][\w-]*(?==[{"'])/]],R={java:[["comment",f],["comment",u],["string",/"""[\s\S]*?(?:"""|$)/],["string",l],["string",/'(?:\\.|[^'\\\n])'/],["annotation",S],["number",d],["keyword",A],["function",c]],javascript:m,jsx:[...b,...m],typescript:h,tsx:[...b,...h],sql:[["comment",/--.*/],["comment",u],["string",/'(?:''|[^'])*'?/],["number",d],["keyword",_],["function",c]],json:[["property",/"(?:\\.|[^"\\\n])*"(?=\s*:)/],["string",l],["number",/-?\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b/],["keyword",/\b(?:true|false|null)\b/]],shell:[["comment",new RegExp("(?<![^\\s;])#.*")],["string",l],["string",w],["property",/\$(?:\{[^}\n]*\}|\w+|[@*#?$!])/],["keyword",T],["number",d]],delphi:[["annotation",/\{\$[^}]*\}?|\(\*\$[\s\S]*?(?:\*\)|$)/],["comment",f],["comment",/\{[\s\S]*?(?:\}|$)/],["comment",/\(\*[\s\S]*?(?:\*\)|$)/],["string",/'(?:''|[^'\n])*'?/],["string",/#(?:\$[\da-fA-F]+|\d+)/],["number",/\$[\da-fA-F]+\b|%[01]+\b|\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b/],["keyword",O],["function",c]]},$=new Set(["sql","delphi"]),g=new Map;function j(e){const i=g.get(e);if(i)return i;const r=R[e],o=$.has(e)?"gi":"g",n={kinds:r.map(([t])=>t),pattern:new RegExp(r.map(([,t])=>`(${t.source})`).join("|"),o)};return g.set(e,n),n}function v(e,i){const{kinds:r,pattern:o}=j(i),n=[];let t=0;for(const s of e.matchAll(o)){s.index>t&&n.push({text:e.slice(t,s.index)});const p=r[s.slice(1).findIndex(k=>k!==void 0)];n.push(p?{kind:p,text:s[0]}:{text:s[0]}),t=s.index+s[0].length}return t<e.length&&n.push({text:e.slice(t)}),n}function I(e,i){const r=[[]];for(const o of i?v(e,i):[{text:e}])o.text.split(`
30
+ `).forEach((n,t)=>{t>0&&r.push([]),n&&r[r.length-1].push({...o,text:n})});return r}exports.SYNTAX_LABELS=x;exports.tokenize=v;exports.tokenizeLines=I;
24
31
  //# sourceMappingURL=syntax.cjs.map