@vielzeug/prism 26.10.0 → 26.10.2

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 (185) hide show
  1. package/README.md +2 -2
  2. package/dist/_dev.cjs +1 -1
  3. package/dist/_dev.cjs.map +1 -1
  4. package/dist/_dev.js +1 -1
  5. package/dist/_dev.js.map +1 -1
  6. package/dist/animation/easing.cjs.map +1 -1
  7. package/dist/animation/easing.js.map +1 -1
  8. package/dist/axes/axis.cjs +1 -1
  9. package/dist/axes/axis.cjs.map +1 -1
  10. package/dist/axes/axis.d.ts +2 -2
  11. package/dist/axes/axis.d.ts.map +1 -1
  12. package/dist/axes/axis.js +1 -1
  13. package/dist/axes/axis.js.map +1 -1
  14. package/dist/axes/scale-utils.cjs.map +1 -1
  15. package/dist/axes/scale-utils.d.ts +1 -1
  16. package/dist/axes/scale-utils.js.map +1 -1
  17. package/dist/charts/area/area-chart.cjs +1 -1
  18. package/dist/charts/area/area-chart.cjs.map +1 -1
  19. package/dist/charts/area/area-chart.d.ts.map +1 -1
  20. package/dist/charts/area/area-chart.js +1 -1
  21. package/dist/charts/area/area-chart.js.map +1 -1
  22. package/dist/charts/area/area-renderer.cjs +1 -1
  23. package/dist/charts/area/area-renderer.cjs.map +1 -1
  24. package/dist/charts/area/area-renderer.d.ts +7 -2
  25. package/dist/charts/area/area-renderer.d.ts.map +1 -1
  26. package/dist/charts/area/area-renderer.js +1 -1
  27. package/dist/charts/area/area-renderer.js.map +1 -1
  28. package/dist/charts/bar/bar-chart.cjs +1 -1
  29. package/dist/charts/bar/bar-chart.cjs.map +1 -1
  30. package/dist/charts/bar/bar-chart.d.ts.map +1 -1
  31. package/dist/charts/bar/bar-chart.js +1 -1
  32. package/dist/charts/bar/bar-chart.js.map +1 -1
  33. package/dist/charts/bar/bar-hit-test.cjs +1 -1
  34. package/dist/charts/bar/bar-hit-test.cjs.map +1 -1
  35. package/dist/charts/bar/bar-hit-test.d.ts +0 -5
  36. package/dist/charts/bar/bar-hit-test.d.ts.map +1 -1
  37. package/dist/charts/bar/bar-hit-test.js +1 -1
  38. package/dist/charts/bar/bar-hit-test.js.map +1 -1
  39. package/dist/charts/bar/bar-renderer.cjs +1 -1
  40. package/dist/charts/bar/bar-renderer.cjs.map +1 -1
  41. package/dist/charts/bar/bar-renderer.d.ts +3 -1
  42. package/dist/charts/bar/bar-renderer.d.ts.map +1 -1
  43. package/dist/charts/bar/bar-renderer.js +1 -1
  44. package/dist/charts/bar/bar-renderer.js.map +1 -1
  45. package/dist/charts/line/line-chart.cjs +1 -1
  46. package/dist/charts/line/line-chart.cjs.map +1 -1
  47. package/dist/charts/line/line-chart.d.ts.map +1 -1
  48. package/dist/charts/line/line-chart.js +1 -1
  49. package/dist/charts/line/line-chart.js.map +1 -1
  50. package/dist/charts/line/line-renderer.cjs +1 -1
  51. package/dist/charts/line/line-renderer.cjs.map +1 -1
  52. package/dist/charts/line/line-renderer.d.ts +6 -2
  53. package/dist/charts/line/line-renderer.d.ts.map +1 -1
  54. package/dist/charts/line/line-renderer.js +1 -1
  55. package/dist/charts/line/line-renderer.js.map +1 -1
  56. package/dist/charts/pie/pie-chart.cjs +1 -1
  57. package/dist/charts/pie/pie-chart.cjs.map +1 -1
  58. package/dist/charts/pie/pie-chart.d.ts.map +1 -1
  59. package/dist/charts/pie/pie-chart.js +1 -1
  60. package/dist/charts/pie/pie-chart.js.map +1 -1
  61. package/dist/charts/pie/pie-renderer.cjs +1 -1
  62. package/dist/charts/pie/pie-renderer.cjs.map +1 -1
  63. package/dist/charts/pie/pie-renderer.d.ts.map +1 -1
  64. package/dist/charts/pie/pie-renderer.js +1 -1
  65. package/dist/charts/pie/pie-renderer.js.map +1 -1
  66. package/dist/charts/radar/index.d.ts +2 -0
  67. package/dist/charts/radar/index.d.ts.map +1 -0
  68. package/dist/charts/radar/radar-chart.cjs +2 -0
  69. package/dist/charts/radar/radar-chart.cjs.map +1 -0
  70. package/dist/charts/radar/radar-chart.d.ts +3 -0
  71. package/dist/charts/radar/radar-chart.d.ts.map +1 -0
  72. package/dist/charts/radar/radar-chart.js +2 -0
  73. package/dist/charts/radar/radar-chart.js.map +1 -0
  74. package/dist/charts/radar/radar-geometry.cjs +2 -0
  75. package/dist/charts/radar/radar-geometry.cjs.map +1 -0
  76. package/dist/charts/radar/radar-geometry.d.ts +22 -0
  77. package/dist/charts/radar/radar-geometry.d.ts.map +1 -0
  78. package/dist/charts/radar/radar-geometry.js +2 -0
  79. package/dist/charts/radar/radar-geometry.js.map +1 -0
  80. package/dist/charts/sparkline/sparkline.cjs +1 -1
  81. package/dist/charts/sparkline/sparkline.cjs.map +1 -1
  82. package/dist/charts/sparkline/sparkline.d.ts.map +1 -1
  83. package/dist/charts/sparkline/sparkline.js +1 -1
  84. package/dist/charts/sparkline/sparkline.js.map +1 -1
  85. package/dist/core/cartesian-scales.cjs +1 -1
  86. package/dist/core/cartesian-scales.cjs.map +1 -1
  87. package/dist/core/cartesian-scales.js +1 -1
  88. package/dist/core/cartesian-scales.js.map +1 -1
  89. package/dist/core/chart-base.cjs +1 -1
  90. package/dist/core/chart-base.cjs.map +1 -1
  91. package/dist/core/chart-base.d.ts +9 -0
  92. package/dist/core/chart-base.d.ts.map +1 -1
  93. package/dist/core/chart-base.js +1 -1
  94. package/dist/core/chart-base.js.map +1 -1
  95. package/dist/core/chart-scaffold.cjs +1 -1
  96. package/dist/core/chart-scaffold.cjs.map +1 -1
  97. package/dist/core/chart-scaffold.d.ts +7 -3
  98. package/dist/core/chart-scaffold.d.ts.map +1 -1
  99. package/dist/core/chart-scaffold.js +1 -1
  100. package/dist/core/chart-scaffold.js.map +1 -1
  101. package/dist/core/datum-style.cjs +2 -0
  102. package/dist/core/datum-style.cjs.map +1 -0
  103. package/dist/core/datum-style.d.ts +18 -0
  104. package/dist/core/datum-style.d.ts.map +1 -0
  105. package/dist/core/datum-style.js +2 -0
  106. package/dist/core/datum-style.js.map +1 -0
  107. package/dist/core/ids.cjs +2 -0
  108. package/dist/core/ids.cjs.map +1 -0
  109. package/dist/core/ids.d.ts +3 -0
  110. package/dist/core/ids.d.ts.map +1 -0
  111. package/dist/core/ids.js +2 -0
  112. package/dist/core/ids.js.map +1 -0
  113. package/dist/core/polar.cjs +2 -0
  114. package/dist/core/polar.cjs.map +1 -0
  115. package/dist/core/polar.d.ts +5 -0
  116. package/dist/core/polar.d.ts.map +1 -0
  117. package/dist/core/polar.js +2 -0
  118. package/dist/core/polar.js.map +1 -0
  119. package/dist/core/series-id.cjs +2 -0
  120. package/dist/core/series-id.cjs.map +1 -0
  121. package/dist/core/series-id.d.ts +8 -0
  122. package/dist/core/series-id.d.ts.map +1 -0
  123. package/dist/core/series-id.js +2 -0
  124. package/dist/core/series-id.js.map +1 -0
  125. package/dist/devtools/index.d.ts +1 -1
  126. package/dist/devtools.cjs.map +1 -1
  127. package/dist/devtools.js.map +1 -1
  128. package/dist/errors.cjs.map +1 -1
  129. package/dist/errors.d.ts +1 -1
  130. package/dist/errors.d.ts.map +1 -1
  131. package/dist/errors.js.map +1 -1
  132. package/dist/index.cjs +1 -1
  133. package/dist/index.d.ts +2 -1
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +1 -1
  136. package/dist/interaction/announcer.cjs +2 -0
  137. package/dist/interaction/announcer.cjs.map +1 -0
  138. package/dist/interaction/announcer.d.ts +13 -0
  139. package/dist/interaction/announcer.d.ts.map +1 -0
  140. package/dist/interaction/announcer.js +2 -0
  141. package/dist/interaction/announcer.js.map +1 -0
  142. package/dist/interaction/crosshair.cjs +1 -1
  143. package/dist/interaction/crosshair.cjs.map +1 -1
  144. package/dist/interaction/crosshair.d.ts +1 -5
  145. package/dist/interaction/crosshair.d.ts.map +1 -1
  146. package/dist/interaction/crosshair.js +1 -1
  147. package/dist/interaction/crosshair.js.map +1 -1
  148. package/dist/interaction/series-interaction.cjs +1 -1
  149. package/dist/interaction/series-interaction.cjs.map +1 -1
  150. package/dist/interaction/series-interaction.d.ts +11 -1
  151. package/dist/interaction/series-interaction.d.ts.map +1 -1
  152. package/dist/interaction/series-interaction.js +1 -1
  153. package/dist/interaction/series-interaction.js.map +1 -1
  154. package/dist/interaction/tooltip.cjs +1 -1
  155. package/dist/interaction/tooltip.cjs.map +1 -1
  156. package/dist/interaction/tooltip.d.ts +12 -1
  157. package/dist/interaction/tooltip.d.ts.map +1 -1
  158. package/dist/interaction/tooltip.js +1 -1
  159. package/dist/interaction/tooltip.js.map +1 -1
  160. package/dist/prism.cjs +1 -1
  161. package/dist/prism.cjs.map +1 -1
  162. package/dist/prism.iife.js +1 -1
  163. package/dist/prism.iife.js.map +1 -1
  164. package/dist/prism.js +1 -1
  165. package/dist/prism.js.map +1 -1
  166. package/dist/scales/band.cjs.map +1 -1
  167. package/dist/scales/band.js.map +1 -1
  168. package/dist/scales/linear.cjs.map +1 -1
  169. package/dist/scales/linear.js.map +1 -1
  170. package/dist/scales/time.cjs.map +1 -1
  171. package/dist/scales/time.js.map +1 -1
  172. package/dist/svg/element.cjs.map +1 -1
  173. package/dist/svg/element.js.map +1 -1
  174. package/dist/svg/text.cjs +1 -1
  175. package/dist/svg/text.cjs.map +1 -1
  176. package/dist/svg/text.d.ts +1 -0
  177. package/dist/svg/text.d.ts.map +1 -1
  178. package/dist/svg/text.js +1 -1
  179. package/dist/svg/text.js.map +1 -1
  180. package/dist/theme/index.cjs.map +1 -1
  181. package/dist/theme/index.js.map +1 -1
  182. package/dist/theme/prism.css +214 -7
  183. package/dist/types.d.ts +102 -5
  184. package/dist/types.d.ts.map +1 -1
  185. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"band.cjs","names":[],"sources":["../../src/scales/band.ts"],"sourcesContent":["import { warn } from '../_dev';\nimport type { BandScale } from '../types';\nimport type { BandScaleConfig } from './types';\n\nexport function bandScale(config: BandScaleConfig): BandScale {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this` — the returned object stays fully functional when destructured, e.g.\n // `const { map } = bandScale(cfg)`.\n const getDomain = (): string[] => config.domain;\n const getRange = (): [number, number] => config.range;\n\n const getBandwidth = (): number => {\n const n = getDomain().length;\n\n if (n === 0) return 0;\n\n const [r0, r1] = getRange();\n const padding = config.padding ?? 0.1;\n const totalWidth = r1 - r0;\n\n return totalWidth / (n + (n - 1) * padding + (config.paddingOuter ?? padding) * 2);\n };\n\n return {\n bandwidth: getBandwidth,\n\n get domain(): string[] {\n return getDomain();\n },\n\n gap(): number {\n const padding = config.padding ?? 0.1;\n\n return getBandwidth() * padding;\n },\n\n map(value: string): number {\n const domain = getDomain();\n const idx = domain.indexOf(value);\n\n if (idx === -1) {\n warn(`bandScale.map: unknown category \"${value}\"`);\n\n return 0;\n }\n\n const [r0] = getRange();\n const bw = getBandwidth();\n const padding = config.padding ?? 0.1;\n const outer = config.paddingOuter ?? padding;\n\n return r0 + outer * bw + idx * (bw + bw * padding);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count?: number): string[] {\n const domain = getDomain();\n\n if (count === undefined || count >= domain.length) return [...domain];\n\n if (count <= 0) return [];\n\n const step = Math.ceil(domain.length / count);\n\n return domain.filter((_, i) => i % step === 0);\n },\n };\n}\n"],"mappings":"uBAIA,SAAgB,UAAU,EAAoC,CAI5D,IAAM,cAA4B,EAAO,OACnC,aAAmC,EAAO,MAE1C,iBAA6B,CACjC,IAAM,EAAI,UAAU,CAAC,CAAC,OAEtB,GAAI,IAAM,EAAG,MAAO,GAEpB,GAAM,CAAC,EAAI,GAAM,SAAS,EACpB,EAAU,EAAO,SAAW,GAGlC,OAFmB,EAAK,IAEH,GAAK,EAAI,GAAK,GAAW,EAAO,cAAgB,GAAW,EAClF,EAEA,MAAO,CACL,UAAW,aAEX,IAAI,QAAmB,CACrB,OAAO,UAAU,CACnB,EAEA,KAAc,CACZ,IAAM,EAAU,EAAO,SAAW,GAElC,OAAO,aAAa,EAAI,CAC1B,EAEA,IAAI,EAAuB,CAEzB,IAAM,EADS,UACH,CAAA,CAAO,QAAQ,CAAK,EAEhC,GAAI,IAAQ,GAGV,MAFK,GAAoC,EAApC,EAEE,EAGT,GAAM,CAAC,GAAM,SAAS,EAChB,EAAK,aAAa,EAClB,EAAU,EAAO,SAAW,GAGlC,OAAO,GAFO,EAAO,cAAgB,GAEjB,EAAK,GAAO,EAAK,EAAK,EAC5C,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAA0B,CAC9B,IAAM,EAAS,UAAU,EAEzB,GAAI,IAAU,IAAA,IAAa,GAAS,EAAO,OAAQ,MAAO,CAAC,GAAG,CAAM,EAEpE,GAAI,GAAS,EAAG,MAAO,CAAC,EAExB,IAAM,EAAO,KAAK,KAAK,EAAO,OAAS,CAAK,EAE5C,OAAO,EAAO,QAAQ,EAAG,IAAM,EAAI,IAAS,CAAC,CAC/C,CACF,CACF"}
1
+ {"version":3,"file":"band.cjs","names":[],"sources":["../../src/scales/band.ts"],"sourcesContent":["import { warn } from '../_dev';\nimport type { BandScale } from '../types';\nimport type { BandScaleConfig } from './types';\n\nexport function bandScale(config: BandScaleConfig): BandScale {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this`: the returned object stays fully functional when destructured, e.g.\n // `const { map } = bandScale(cfg)`.\n const getDomain = (): string[] => config.domain;\n const getRange = (): [number, number] => config.range;\n\n const getBandwidth = (): number => {\n const n = getDomain().length;\n\n if (n === 0) return 0;\n\n const [r0, r1] = getRange();\n const padding = config.padding ?? 0.1;\n const totalWidth = r1 - r0;\n\n return totalWidth / (n + (n - 1) * padding + (config.paddingOuter ?? padding) * 2);\n };\n\n return {\n bandwidth: getBandwidth,\n\n get domain(): string[] {\n return getDomain();\n },\n\n gap(): number {\n const padding = config.padding ?? 0.1;\n\n return getBandwidth() * padding;\n },\n\n map(value: string): number {\n const domain = getDomain();\n const idx = domain.indexOf(value);\n\n if (idx === -1) {\n warn(`bandScale.map: unknown category \"${value}\"`);\n\n return 0;\n }\n\n const [r0] = getRange();\n const bw = getBandwidth();\n const padding = config.padding ?? 0.1;\n const outer = config.paddingOuter ?? padding;\n\n return r0 + outer * bw + idx * (bw + bw * padding);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count?: number): string[] {\n const domain = getDomain();\n\n if (count === undefined || count >= domain.length) return [...domain];\n\n if (count <= 0) return [];\n\n const step = Math.ceil(domain.length / count);\n\n return domain.filter((_, i) => i % step === 0);\n },\n };\n}\n"],"mappings":"uBAIA,SAAgB,UAAU,EAAoC,CAI5D,IAAM,cAA4B,EAAO,OACnC,aAAmC,EAAO,MAE1C,iBAA6B,CACjC,IAAM,EAAI,UAAU,CAAC,CAAC,OAEtB,GAAI,IAAM,EAAG,MAAO,GAEpB,GAAM,CAAC,EAAI,GAAM,SAAS,EACpB,EAAU,EAAO,SAAW,GAGlC,OAFmB,EAAK,IAEH,GAAK,EAAI,GAAK,GAAW,EAAO,cAAgB,GAAW,EAClF,EAEA,MAAO,CACL,UAAW,aAEX,IAAI,QAAmB,CACrB,OAAO,UAAU,CACnB,EAEA,KAAc,CACZ,IAAM,EAAU,EAAO,SAAW,GAElC,OAAO,aAAa,EAAI,CAC1B,EAEA,IAAI,EAAuB,CAEzB,IAAM,EADS,UACH,CAAA,CAAO,QAAQ,CAAK,EAEhC,GAAI,IAAQ,GAGV,MAFK,GAAoC,EAApC,EAEE,EAGT,GAAM,CAAC,GAAM,SAAS,EAChB,EAAK,aAAa,EAClB,EAAU,EAAO,SAAW,GAGlC,OAAO,GAFO,EAAO,cAAgB,GAEjB,EAAK,GAAO,EAAK,EAAK,EAC5C,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAA0B,CAC9B,IAAM,EAAS,UAAU,EAEzB,GAAI,IAAU,IAAA,IAAa,GAAS,EAAO,OAAQ,MAAO,CAAC,GAAG,CAAM,EAEpE,GAAI,GAAS,EAAG,MAAO,CAAC,EAExB,IAAM,EAAO,KAAK,KAAK,EAAO,OAAS,CAAK,EAE5C,OAAO,EAAO,QAAQ,EAAG,IAAM,EAAI,IAAS,CAAC,CAC/C,CACF,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"band.js","names":[],"sources":["../../src/scales/band.ts"],"sourcesContent":["import { warn } from '../_dev';\nimport type { BandScale } from '../types';\nimport type { BandScaleConfig } from './types';\n\nexport function bandScale(config: BandScaleConfig): BandScale {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this` — the returned object stays fully functional when destructured, e.g.\n // `const { map } = bandScale(cfg)`.\n const getDomain = (): string[] => config.domain;\n const getRange = (): [number, number] => config.range;\n\n const getBandwidth = (): number => {\n const n = getDomain().length;\n\n if (n === 0) return 0;\n\n const [r0, r1] = getRange();\n const padding = config.padding ?? 0.1;\n const totalWidth = r1 - r0;\n\n return totalWidth / (n + (n - 1) * padding + (config.paddingOuter ?? padding) * 2);\n };\n\n return {\n bandwidth: getBandwidth,\n\n get domain(): string[] {\n return getDomain();\n },\n\n gap(): number {\n const padding = config.padding ?? 0.1;\n\n return getBandwidth() * padding;\n },\n\n map(value: string): number {\n const domain = getDomain();\n const idx = domain.indexOf(value);\n\n if (idx === -1) {\n warn(`bandScale.map: unknown category \"${value}\"`);\n\n return 0;\n }\n\n const [r0] = getRange();\n const bw = getBandwidth();\n const padding = config.padding ?? 0.1;\n const outer = config.paddingOuter ?? padding;\n\n return r0 + outer * bw + idx * (bw + bw * padding);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count?: number): string[] {\n const domain = getDomain();\n\n if (count === undefined || count >= domain.length) return [...domain];\n\n if (count <= 0) return [];\n\n const step = Math.ceil(domain.length / count);\n\n return domain.filter((_, i) => i % step === 0);\n },\n };\n}\n"],"mappings":"mBAIA,SAAgB,UAAU,EAAoC,CAI5D,IAAM,cAA4B,EAAO,OACnC,aAAmC,EAAO,MAE1C,iBAA6B,CACjC,IAAM,EAAI,UAAU,CAAC,CAAC,OAEtB,GAAI,IAAM,EAAG,MAAO,GAEpB,GAAM,CAAC,EAAI,GAAM,SAAS,EACpB,EAAU,EAAO,SAAW,GAGlC,OAFmB,EAAK,IAEH,GAAK,EAAI,GAAK,GAAW,EAAO,cAAgB,GAAW,EAClF,EAEA,MAAO,CACL,UAAW,aAEX,IAAI,QAAmB,CACrB,OAAO,UAAU,CACnB,EAEA,KAAc,CACZ,IAAM,EAAU,EAAO,SAAW,GAElC,OAAO,aAAa,EAAI,CAC1B,EAEA,IAAI,EAAuB,CAEzB,IAAM,EADS,UACH,CAAA,CAAO,QAAQ,CAAK,EAEhC,GAAI,IAAQ,GAGV,MAFK,GAAoC,EAApC,EAEE,EAGT,GAAM,CAAC,GAAM,SAAS,EAChB,EAAK,aAAa,EAClB,EAAU,EAAO,SAAW,GAGlC,OAAO,GAFO,EAAO,cAAgB,GAEjB,EAAK,GAAO,EAAK,EAAK,EAC5C,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAA0B,CAC9B,IAAM,EAAS,UAAU,EAEzB,GAAI,IAAU,IAAA,IAAa,GAAS,EAAO,OAAQ,MAAO,CAAC,GAAG,CAAM,EAEpE,GAAI,GAAS,EAAG,MAAO,CAAC,EAExB,IAAM,EAAO,KAAK,KAAK,EAAO,OAAS,CAAK,EAE5C,OAAO,EAAO,QAAQ,EAAG,IAAM,EAAI,IAAS,CAAC,CAC/C,CACF,CACF"}
1
+ {"version":3,"file":"band.js","names":[],"sources":["../../src/scales/band.ts"],"sourcesContent":["import { warn } from '../_dev';\nimport type { BandScale } from '../types';\nimport type { BandScaleConfig } from './types';\n\nexport function bandScale(config: BandScaleConfig): BandScale {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this`: the returned object stays fully functional when destructured, e.g.\n // `const { map } = bandScale(cfg)`.\n const getDomain = (): string[] => config.domain;\n const getRange = (): [number, number] => config.range;\n\n const getBandwidth = (): number => {\n const n = getDomain().length;\n\n if (n === 0) return 0;\n\n const [r0, r1] = getRange();\n const padding = config.padding ?? 0.1;\n const totalWidth = r1 - r0;\n\n return totalWidth / (n + (n - 1) * padding + (config.paddingOuter ?? padding) * 2);\n };\n\n return {\n bandwidth: getBandwidth,\n\n get domain(): string[] {\n return getDomain();\n },\n\n gap(): number {\n const padding = config.padding ?? 0.1;\n\n return getBandwidth() * padding;\n },\n\n map(value: string): number {\n const domain = getDomain();\n const idx = domain.indexOf(value);\n\n if (idx === -1) {\n warn(`bandScale.map: unknown category \"${value}\"`);\n\n return 0;\n }\n\n const [r0] = getRange();\n const bw = getBandwidth();\n const padding = config.padding ?? 0.1;\n const outer = config.paddingOuter ?? padding;\n\n return r0 + outer * bw + idx * (bw + bw * padding);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count?: number): string[] {\n const domain = getDomain();\n\n if (count === undefined || count >= domain.length) return [...domain];\n\n if (count <= 0) return [];\n\n const step = Math.ceil(domain.length / count);\n\n return domain.filter((_, i) => i % step === 0);\n },\n };\n}\n"],"mappings":"mBAIA,SAAgB,UAAU,EAAoC,CAI5D,IAAM,cAA4B,EAAO,OACnC,aAAmC,EAAO,MAE1C,iBAA6B,CACjC,IAAM,EAAI,UAAU,CAAC,CAAC,OAEtB,GAAI,IAAM,EAAG,MAAO,GAEpB,GAAM,CAAC,EAAI,GAAM,SAAS,EACpB,EAAU,EAAO,SAAW,GAGlC,OAFmB,EAAK,IAEH,GAAK,EAAI,GAAK,GAAW,EAAO,cAAgB,GAAW,EAClF,EAEA,MAAO,CACL,UAAW,aAEX,IAAI,QAAmB,CACrB,OAAO,UAAU,CACnB,EAEA,KAAc,CACZ,IAAM,EAAU,EAAO,SAAW,GAElC,OAAO,aAAa,EAAI,CAC1B,EAEA,IAAI,EAAuB,CAEzB,IAAM,EADS,UACH,CAAA,CAAO,QAAQ,CAAK,EAEhC,GAAI,IAAQ,GAGV,MAFK,GAAoC,EAApC,EAEE,EAGT,GAAM,CAAC,GAAM,SAAS,EAChB,EAAK,aAAa,EAClB,EAAU,EAAO,SAAW,GAGlC,OAAO,GAFO,EAAO,cAAgB,GAEjB,EAAK,GAAO,EAAK,EAAK,EAC5C,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAA0B,CAC9B,IAAM,EAAS,UAAU,EAEzB,GAAI,IAAU,IAAA,IAAa,GAAS,EAAO,OAAQ,MAAO,CAAC,GAAG,CAAM,EAEpE,GAAI,GAAS,EAAG,MAAO,CAAC,EAExB,IAAM,EAAO,KAAK,KAAK,EAAO,OAAS,CAAK,EAE5C,OAAO,EAAO,QAAQ,EAAG,IAAM,EAAI,IAAS,CAAC,CAC/C,CACF,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"linear.cjs","names":[],"sources":["../../src/scales/linear.ts"],"sourcesContent":["import type { Scale } from '../types';\nimport type { LinearScaleConfig } from './types';\n\nfunction niceNumber(value: number, round: boolean): number {\n const exp = Math.floor(Math.log10(value));\n const frac = value / 10 ** exp;\n let nice: number;\n\n if (round) {\n if (frac < 1.5) nice = 1;\n else if (frac < 3) nice = 2;\n else if (frac < 7) nice = 5;\n else nice = 10;\n } else {\n if (frac <= 1) nice = 1;\n else if (frac <= 2) nice = 2;\n else if (frac <= 5) nice = 5;\n else nice = 10;\n }\n\n return nice * 10 ** exp;\n}\n\nfunction niceRange(min: number, max: number, tickCount: number): [number, number] {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];\n\n if (min > max) [min, max] = [max, min];\n\n if (min === max) return [min - 1, max + 1];\n\n const range = niceNumber(max - min, false);\n const step = niceNumber(range / Math.max(1, tickCount - 1), true);\n\n return [Math.floor(min / step) * step, Math.ceil(max / step) * step];\n}\n\nexport function linearScale(config: LinearScaleConfig): Scale<number> {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this` — the returned object stays fully functional when destructured, e.g.\n // `const { map } = linearScale(cfg)`.\n const getDomain = (): [number, number] =>\n config.nice === false ? config.domain : niceRange(config.domain[0], config.domain[1], 10);\n const getRange = (): [number, number] => config.range;\n\n return {\n get domain(): [number, number] {\n return getDomain();\n },\n\n invert(pixel: number): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (r1 === r0) return d0;\n\n const t = (pixel - r0) / (r1 - r0);\n\n return d0 + t * (d1 - d0);\n },\n\n map(value: number): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (d1 === d0) return r0;\n\n let t = (value - d0) / (d1 - d0);\n\n if (config.clamp) {\n t = Math.max(0, Math.min(1, t));\n }\n\n return r0 + t * (r1 - r0);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count = 10): number[] {\n if (count <= 0) return [];\n\n const [d0, d1] = getDomain();\n\n if (d0 === d1 || count === 1) return [d0];\n\n // Normalize ordering so a reversed domain (e.g. an explicitly inverted axis with\n // `nice: false`) doesn't feed a negative range into niceNumber()'s Math.log10.\n const lo = Math.min(d0, d1);\n const hi = Math.max(d0, d1);\n const range = niceNumber(hi - lo, false);\n const step = niceNumber(range / (count - 1), true);\n const start = Math.ceil(lo / step) * step;\n const end = Math.floor(hi / step) * step;\n const ticks: number[] = [];\n\n for (let v = start; v <= end + step * 0.5; v += step) {\n ticks.push(Math.round(v * 1e12) / 1e12);\n }\n\n return ticks;\n },\n };\n}\n"],"mappings":"AAGA,SAAS,WAAW,EAAe,EAAwB,CACzD,IAAM,EAAM,KAAK,MAAM,KAAK,MAAM,CAAK,CAAC,EAClC,EAAO,EAAQ,IAAM,EACvB,EAcJ,MAZA,CASO,EATH,EACE,EAAO,IAAY,EACd,EAAO,EAAU,EACjB,EAAO,EAAU,EACd,GAER,GAAQ,EAAU,EACb,GAAQ,EAAU,EAClB,GAAQ,EAAU,EACf,GAGP,EAAO,IAAM,CACtB,CAEA,SAAS,UAAU,EAAa,EAAa,EAAqC,CAChF,GAAI,CAAC,OAAO,SAAS,CAAG,GAAK,CAAC,OAAO,SAAS,CAAG,EAAG,MAAO,CAAC,EAAG,CAAC,EAIhE,GAFI,EAAM,IAAK,CAAC,EAAK,GAAO,CAAC,EAAK,CAAG,GAEjC,IAAQ,EAAK,MAAO,CAAC,EAAM,EAAG,EAAM,CAAC,EAGzC,IAAM,EAAO,WADC,WAAW,EAAM,EAAK,EACZ,EAAQ,KAAK,IAAI,EAAG,EAAY,CAAC,EAAG,EAAI,EAEhE,MAAO,CAAC,KAAK,MAAM,EAAM,CAAI,EAAI,EAAM,KAAK,KAAK,EAAM,CAAI,EAAI,CAAI,CACrE,CAEA,SAAgB,YAAY,EAA0C,CAIpE,IAAM,cACJ,EAAO,OAAS,GAAQ,EAAO,OAAS,UAAU,EAAO,OAAO,GAAI,EAAO,OAAO,GAAI,EAAE,EACpF,aAAmC,EAAO,MAEhD,MAAO,CACL,IAAI,QAA2B,CAC7B,OAAO,UAAU,CACnB,EAEA,OAAO,EAAuB,CAC5B,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAM1B,OAJI,IAAO,EAAW,EAIf,GAFI,EAAQ,IAAO,EAAK,IAEd,EAAK,EACxB,EAEA,IAAI,EAAuB,CACzB,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAE1B,GAAI,IAAO,EAAI,OAAO,EAEtB,IAAI,GAAK,EAAQ,IAAO,EAAK,GAM7B,OAJI,EAAO,QACT,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,CAAC,CAAC,GAGzB,EAAK,GAAK,EAAK,EACxB,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAAQ,GAAc,CAC1B,GAAI,GAAS,EAAG,MAAO,CAAC,EAExB,GAAM,CAAC,EAAI,GAAM,UAAU,EAE3B,GAAI,IAAO,GAAM,IAAU,EAAG,MAAO,CAAC,CAAE,EAIxC,IAAM,EAAK,KAAK,IAAI,EAAI,CAAE,EACpB,EAAK,KAAK,IAAI,EAAI,CAAE,EAEpB,EAAO,WADC,WAAW,EAAK,EAAI,EACV,GAAS,EAAQ,GAAI,EAAI,EAC3C,EAAQ,KAAK,KAAK,EAAK,CAAI,EAAI,EAC/B,EAAM,KAAK,MAAM,EAAK,CAAI,EAAI,EAC9B,EAAkB,CAAC,EAEzB,IAAK,IAAI,EAAI,EAAO,GAAK,EAAM,EAAO,GAAK,GAAK,EAC9C,EAAM,KAAK,KAAK,MAAM,EAAI,YAAI,EAAI,YAAI,EAGxC,OAAO,CACT,CACF,CACF"}
1
+ {"version":3,"file":"linear.cjs","names":[],"sources":["../../src/scales/linear.ts"],"sourcesContent":["import type { Scale } from '../types';\nimport type { LinearScaleConfig } from './types';\n\nfunction niceNumber(value: number, round: boolean): number {\n const exp = Math.floor(Math.log10(value));\n const frac = value / 10 ** exp;\n let nice: number;\n\n if (round) {\n if (frac < 1.5) nice = 1;\n else if (frac < 3) nice = 2;\n else if (frac < 7) nice = 5;\n else nice = 10;\n } else {\n if (frac <= 1) nice = 1;\n else if (frac <= 2) nice = 2;\n else if (frac <= 5) nice = 5;\n else nice = 10;\n }\n\n return nice * 10 ** exp;\n}\n\nfunction niceRange(min: number, max: number, tickCount: number): [number, number] {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];\n\n if (min > max) [min, max] = [max, min];\n\n if (min === max) return [min - 1, max + 1];\n\n const range = niceNumber(max - min, false);\n const step = niceNumber(range / Math.max(1, tickCount - 1), true);\n\n return [Math.floor(min / step) * step, Math.ceil(max / step) * step];\n}\n\nexport function linearScale(config: LinearScaleConfig): Scale<number> {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this`: the returned object stays fully functional when destructured, e.g.\n // `const { map } = linearScale(cfg)`.\n const getDomain = (): [number, number] =>\n config.nice === false ? config.domain : niceRange(config.domain[0], config.domain[1], 10);\n const getRange = (): [number, number] => config.range;\n\n return {\n get domain(): [number, number] {\n return getDomain();\n },\n\n invert(pixel: number): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (r1 === r0) return d0;\n\n const t = (pixel - r0) / (r1 - r0);\n\n return d0 + t * (d1 - d0);\n },\n\n map(value: number): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (d1 === d0) return r0;\n\n let t = (value - d0) / (d1 - d0);\n\n if (config.clamp) {\n t = Math.max(0, Math.min(1, t));\n }\n\n return r0 + t * (r1 - r0);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count = 10): number[] {\n if (count <= 0) return [];\n\n const [d0, d1] = getDomain();\n\n if (d0 === d1 || count === 1) return [d0];\n\n // Normalize ordering so a reversed domain (e.g. an explicitly inverted axis with\n // `nice: false`) doesn't feed a negative range into niceNumber()'s Math.log10.\n const lo = Math.min(d0, d1);\n const hi = Math.max(d0, d1);\n const range = niceNumber(hi - lo, false);\n const step = niceNumber(range / (count - 1), true);\n const start = Math.ceil(lo / step) * step;\n const end = Math.floor(hi / step) * step;\n const ticks: number[] = [];\n\n for (let v = start; v <= end + step * 0.5; v += step) {\n ticks.push(Math.round(v * 1e12) / 1e12);\n }\n\n return ticks;\n },\n };\n}\n"],"mappings":"AAGA,SAAS,WAAW,EAAe,EAAwB,CACzD,IAAM,EAAM,KAAK,MAAM,KAAK,MAAM,CAAK,CAAC,EAClC,EAAO,EAAQ,IAAM,EACvB,EAcJ,MAZA,CASO,EATH,EACE,EAAO,IAAY,EACd,EAAO,EAAU,EACjB,EAAO,EAAU,EACd,GAER,GAAQ,EAAU,EACb,GAAQ,EAAU,EAClB,GAAQ,EAAU,EACf,GAGP,EAAO,IAAM,CACtB,CAEA,SAAS,UAAU,EAAa,EAAa,EAAqC,CAChF,GAAI,CAAC,OAAO,SAAS,CAAG,GAAK,CAAC,OAAO,SAAS,CAAG,EAAG,MAAO,CAAC,EAAG,CAAC,EAIhE,GAFI,EAAM,IAAK,CAAC,EAAK,GAAO,CAAC,EAAK,CAAG,GAEjC,IAAQ,EAAK,MAAO,CAAC,EAAM,EAAG,EAAM,CAAC,EAGzC,IAAM,EAAO,WADC,WAAW,EAAM,EAAK,EACZ,EAAQ,KAAK,IAAI,EAAG,EAAY,CAAC,EAAG,EAAI,EAEhE,MAAO,CAAC,KAAK,MAAM,EAAM,CAAI,EAAI,EAAM,KAAK,KAAK,EAAM,CAAI,EAAI,CAAI,CACrE,CAEA,SAAgB,YAAY,EAA0C,CAIpE,IAAM,cACJ,EAAO,OAAS,GAAQ,EAAO,OAAS,UAAU,EAAO,OAAO,GAAI,EAAO,OAAO,GAAI,EAAE,EACpF,aAAmC,EAAO,MAEhD,MAAO,CACL,IAAI,QAA2B,CAC7B,OAAO,UAAU,CACnB,EAEA,OAAO,EAAuB,CAC5B,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAM1B,OAJI,IAAO,EAAW,EAIf,GAFI,EAAQ,IAAO,EAAK,IAEd,EAAK,EACxB,EAEA,IAAI,EAAuB,CACzB,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAE1B,GAAI,IAAO,EAAI,OAAO,EAEtB,IAAI,GAAK,EAAQ,IAAO,EAAK,GAM7B,OAJI,EAAO,QACT,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,CAAC,CAAC,GAGzB,EAAK,GAAK,EAAK,EACxB,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAAQ,GAAc,CAC1B,GAAI,GAAS,EAAG,MAAO,CAAC,EAExB,GAAM,CAAC,EAAI,GAAM,UAAU,EAE3B,GAAI,IAAO,GAAM,IAAU,EAAG,MAAO,CAAC,CAAE,EAIxC,IAAM,EAAK,KAAK,IAAI,EAAI,CAAE,EACpB,EAAK,KAAK,IAAI,EAAI,CAAE,EAEpB,EAAO,WADC,WAAW,EAAK,EAAI,EACV,GAAS,EAAQ,GAAI,EAAI,EAC3C,EAAQ,KAAK,KAAK,EAAK,CAAI,EAAI,EAC/B,EAAM,KAAK,MAAM,EAAK,CAAI,EAAI,EAC9B,EAAkB,CAAC,EAEzB,IAAK,IAAI,EAAI,EAAO,GAAK,EAAM,EAAO,GAAK,GAAK,EAC9C,EAAM,KAAK,KAAK,MAAM,EAAI,YAAI,EAAI,YAAI,EAGxC,OAAO,CACT,CACF,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"linear.js","names":[],"sources":["../../src/scales/linear.ts"],"sourcesContent":["import type { Scale } from '../types';\nimport type { LinearScaleConfig } from './types';\n\nfunction niceNumber(value: number, round: boolean): number {\n const exp = Math.floor(Math.log10(value));\n const frac = value / 10 ** exp;\n let nice: number;\n\n if (round) {\n if (frac < 1.5) nice = 1;\n else if (frac < 3) nice = 2;\n else if (frac < 7) nice = 5;\n else nice = 10;\n } else {\n if (frac <= 1) nice = 1;\n else if (frac <= 2) nice = 2;\n else if (frac <= 5) nice = 5;\n else nice = 10;\n }\n\n return nice * 10 ** exp;\n}\n\nfunction niceRange(min: number, max: number, tickCount: number): [number, number] {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];\n\n if (min > max) [min, max] = [max, min];\n\n if (min === max) return [min - 1, max + 1];\n\n const range = niceNumber(max - min, false);\n const step = niceNumber(range / Math.max(1, tickCount - 1), true);\n\n return [Math.floor(min / step) * step, Math.ceil(max / step) * step];\n}\n\nexport function linearScale(config: LinearScaleConfig): Scale<number> {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this` — the returned object stays fully functional when destructured, e.g.\n // `const { map } = linearScale(cfg)`.\n const getDomain = (): [number, number] =>\n config.nice === false ? config.domain : niceRange(config.domain[0], config.domain[1], 10);\n const getRange = (): [number, number] => config.range;\n\n return {\n get domain(): [number, number] {\n return getDomain();\n },\n\n invert(pixel: number): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (r1 === r0) return d0;\n\n const t = (pixel - r0) / (r1 - r0);\n\n return d0 + t * (d1 - d0);\n },\n\n map(value: number): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (d1 === d0) return r0;\n\n let t = (value - d0) / (d1 - d0);\n\n if (config.clamp) {\n t = Math.max(0, Math.min(1, t));\n }\n\n return r0 + t * (r1 - r0);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count = 10): number[] {\n if (count <= 0) return [];\n\n const [d0, d1] = getDomain();\n\n if (d0 === d1 || count === 1) return [d0];\n\n // Normalize ordering so a reversed domain (e.g. an explicitly inverted axis with\n // `nice: false`) doesn't feed a negative range into niceNumber()'s Math.log10.\n const lo = Math.min(d0, d1);\n const hi = Math.max(d0, d1);\n const range = niceNumber(hi - lo, false);\n const step = niceNumber(range / (count - 1), true);\n const start = Math.ceil(lo / step) * step;\n const end = Math.floor(hi / step) * step;\n const ticks: number[] = [];\n\n for (let v = start; v <= end + step * 0.5; v += step) {\n ticks.push(Math.round(v * 1e12) / 1e12);\n }\n\n return ticks;\n },\n };\n}\n"],"mappings":"AAGA,SAAS,WAAW,EAAe,EAAwB,CACzD,IAAM,EAAM,KAAK,MAAM,KAAK,MAAM,CAAK,CAAC,EAClC,EAAO,EAAQ,IAAM,EACvB,EAcJ,MAZA,CASO,EATH,EACE,EAAO,IAAY,EACd,EAAO,EAAU,EACjB,EAAO,EAAU,EACd,GAER,GAAQ,EAAU,EACb,GAAQ,EAAU,EAClB,GAAQ,EAAU,EACf,GAGP,EAAO,IAAM,CACtB,CAEA,SAAS,UAAU,EAAa,EAAa,EAAqC,CAChF,GAAI,CAAC,OAAO,SAAS,CAAG,GAAK,CAAC,OAAO,SAAS,CAAG,EAAG,MAAO,CAAC,EAAG,CAAC,EAIhE,GAFI,EAAM,IAAK,CAAC,EAAK,GAAO,CAAC,EAAK,CAAG,GAEjC,IAAQ,EAAK,MAAO,CAAC,EAAM,EAAG,EAAM,CAAC,EAGzC,IAAM,EAAO,WADC,WAAW,EAAM,EAAK,EACZ,EAAQ,KAAK,IAAI,EAAG,EAAY,CAAC,EAAG,EAAI,EAEhE,MAAO,CAAC,KAAK,MAAM,EAAM,CAAI,EAAI,EAAM,KAAK,KAAK,EAAM,CAAI,EAAI,CAAI,CACrE,CAEA,SAAgB,YAAY,EAA0C,CAIpE,IAAM,cACJ,EAAO,OAAS,GAAQ,EAAO,OAAS,UAAU,EAAO,OAAO,GAAI,EAAO,OAAO,GAAI,EAAE,EACpF,aAAmC,EAAO,MAEhD,MAAO,CACL,IAAI,QAA2B,CAC7B,OAAO,UAAU,CACnB,EAEA,OAAO,EAAuB,CAC5B,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAM1B,OAJI,IAAO,EAAW,EAIf,GAFI,EAAQ,IAAO,EAAK,IAEd,EAAK,EACxB,EAEA,IAAI,EAAuB,CACzB,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAE1B,GAAI,IAAO,EAAI,OAAO,EAEtB,IAAI,GAAK,EAAQ,IAAO,EAAK,GAM7B,OAJI,EAAO,QACT,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,CAAC,CAAC,GAGzB,EAAK,GAAK,EAAK,EACxB,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAAQ,GAAc,CAC1B,GAAI,GAAS,EAAG,MAAO,CAAC,EAExB,GAAM,CAAC,EAAI,GAAM,UAAU,EAE3B,GAAI,IAAO,GAAM,IAAU,EAAG,MAAO,CAAC,CAAE,EAIxC,IAAM,EAAK,KAAK,IAAI,EAAI,CAAE,EACpB,EAAK,KAAK,IAAI,EAAI,CAAE,EAEpB,EAAO,WADC,WAAW,EAAK,EAAI,EACV,GAAS,EAAQ,GAAI,EAAI,EAC3C,EAAQ,KAAK,KAAK,EAAK,CAAI,EAAI,EAC/B,EAAM,KAAK,MAAM,EAAK,CAAI,EAAI,EAC9B,EAAkB,CAAC,EAEzB,IAAK,IAAI,EAAI,EAAO,GAAK,EAAM,EAAO,GAAK,GAAK,EAC9C,EAAM,KAAK,KAAK,MAAM,EAAI,YAAI,EAAI,YAAI,EAGxC,OAAO,CACT,CACF,CACF"}
1
+ {"version":3,"file":"linear.js","names":[],"sources":["../../src/scales/linear.ts"],"sourcesContent":["import type { Scale } from '../types';\nimport type { LinearScaleConfig } from './types';\n\nfunction niceNumber(value: number, round: boolean): number {\n const exp = Math.floor(Math.log10(value));\n const frac = value / 10 ** exp;\n let nice: number;\n\n if (round) {\n if (frac < 1.5) nice = 1;\n else if (frac < 3) nice = 2;\n else if (frac < 7) nice = 5;\n else nice = 10;\n } else {\n if (frac <= 1) nice = 1;\n else if (frac <= 2) nice = 2;\n else if (frac <= 5) nice = 5;\n else nice = 10;\n }\n\n return nice * 10 ** exp;\n}\n\nfunction niceRange(min: number, max: number, tickCount: number): [number, number] {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];\n\n if (min > max) [min, max] = [max, min];\n\n if (min === max) return [min - 1, max + 1];\n\n const range = niceNumber(max - min, false);\n const step = niceNumber(range / Math.max(1, tickCount - 1), true);\n\n return [Math.floor(min / step) * step, Math.ceil(max / step) * step];\n}\n\nexport function linearScale(config: LinearScaleConfig): Scale<number> {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this`: the returned object stays fully functional when destructured, e.g.\n // `const { map } = linearScale(cfg)`.\n const getDomain = (): [number, number] =>\n config.nice === false ? config.domain : niceRange(config.domain[0], config.domain[1], 10);\n const getRange = (): [number, number] => config.range;\n\n return {\n get domain(): [number, number] {\n return getDomain();\n },\n\n invert(pixel: number): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (r1 === r0) return d0;\n\n const t = (pixel - r0) / (r1 - r0);\n\n return d0 + t * (d1 - d0);\n },\n\n map(value: number): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (d1 === d0) return r0;\n\n let t = (value - d0) / (d1 - d0);\n\n if (config.clamp) {\n t = Math.max(0, Math.min(1, t));\n }\n\n return r0 + t * (r1 - r0);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count = 10): number[] {\n if (count <= 0) return [];\n\n const [d0, d1] = getDomain();\n\n if (d0 === d1 || count === 1) return [d0];\n\n // Normalize ordering so a reversed domain (e.g. an explicitly inverted axis with\n // `nice: false`) doesn't feed a negative range into niceNumber()'s Math.log10.\n const lo = Math.min(d0, d1);\n const hi = Math.max(d0, d1);\n const range = niceNumber(hi - lo, false);\n const step = niceNumber(range / (count - 1), true);\n const start = Math.ceil(lo / step) * step;\n const end = Math.floor(hi / step) * step;\n const ticks: number[] = [];\n\n for (let v = start; v <= end + step * 0.5; v += step) {\n ticks.push(Math.round(v * 1e12) / 1e12);\n }\n\n return ticks;\n },\n };\n}\n"],"mappings":"AAGA,SAAS,WAAW,EAAe,EAAwB,CACzD,IAAM,EAAM,KAAK,MAAM,KAAK,MAAM,CAAK,CAAC,EAClC,EAAO,EAAQ,IAAM,EACvB,EAcJ,MAZA,CASO,EATH,EACE,EAAO,IAAY,EACd,EAAO,EAAU,EACjB,EAAO,EAAU,EACd,GAER,GAAQ,EAAU,EACb,GAAQ,EAAU,EAClB,GAAQ,EAAU,EACf,GAGP,EAAO,IAAM,CACtB,CAEA,SAAS,UAAU,EAAa,EAAa,EAAqC,CAChF,GAAI,CAAC,OAAO,SAAS,CAAG,GAAK,CAAC,OAAO,SAAS,CAAG,EAAG,MAAO,CAAC,EAAG,CAAC,EAIhE,GAFI,EAAM,IAAK,CAAC,EAAK,GAAO,CAAC,EAAK,CAAG,GAEjC,IAAQ,EAAK,MAAO,CAAC,EAAM,EAAG,EAAM,CAAC,EAGzC,IAAM,EAAO,WADC,WAAW,EAAM,EAAK,EACZ,EAAQ,KAAK,IAAI,EAAG,EAAY,CAAC,EAAG,EAAI,EAEhE,MAAO,CAAC,KAAK,MAAM,EAAM,CAAI,EAAI,EAAM,KAAK,KAAK,EAAM,CAAI,EAAI,CAAI,CACrE,CAEA,SAAgB,YAAY,EAA0C,CAIpE,IAAM,cACJ,EAAO,OAAS,GAAQ,EAAO,OAAS,UAAU,EAAO,OAAO,GAAI,EAAO,OAAO,GAAI,EAAE,EACpF,aAAmC,EAAO,MAEhD,MAAO,CACL,IAAI,QAA2B,CAC7B,OAAO,UAAU,CACnB,EAEA,OAAO,EAAuB,CAC5B,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAM1B,OAJI,IAAO,EAAW,EAIf,GAFI,EAAQ,IAAO,EAAK,IAEd,EAAK,EACxB,EAEA,IAAI,EAAuB,CACzB,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAE1B,GAAI,IAAO,EAAI,OAAO,EAEtB,IAAI,GAAK,EAAQ,IAAO,EAAK,GAM7B,OAJI,EAAO,QACT,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,CAAC,CAAC,GAGzB,EAAK,GAAK,EAAK,EACxB,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAAQ,GAAc,CAC1B,GAAI,GAAS,EAAG,MAAO,CAAC,EAExB,GAAM,CAAC,EAAI,GAAM,UAAU,EAE3B,GAAI,IAAO,GAAM,IAAU,EAAG,MAAO,CAAC,CAAE,EAIxC,IAAM,EAAK,KAAK,IAAI,EAAI,CAAE,EACpB,EAAK,KAAK,IAAI,EAAI,CAAE,EAEpB,EAAO,WADC,WAAW,EAAK,EAAI,EACV,GAAS,EAAQ,GAAI,EAAI,EAC3C,EAAQ,KAAK,KAAK,EAAK,CAAI,EAAI,EAC/B,EAAM,KAAK,MAAM,EAAK,CAAI,EAAI,EAC9B,EAAkB,CAAC,EAEzB,IAAK,IAAI,EAAI,EAAO,GAAK,EAAM,EAAO,GAAK,GAAK,EAC9C,EAAM,KAAK,KAAK,MAAM,EAAI,YAAI,EAAI,YAAI,EAGxC,OAAO,CACT,CACF,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"time.cjs","names":[],"sources":["../../src/scales/time.ts"],"sourcesContent":["import type { Scale } from '../types';\nimport type { TimeScaleConfig } from './types';\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst MONTH = 30 * DAY;\nconst YEAR = 365 * DAY;\n\nconst TIME_INTERVALS = [\n SECOND,\n 5 * SECOND,\n 15 * SECOND,\n 30 * SECOND,\n MINUTE,\n 5 * MINUTE,\n 15 * MINUTE,\n 30 * MINUTE,\n HOUR,\n 3 * HOUR,\n 6 * HOUR,\n 12 * HOUR,\n DAY,\n 7 * DAY,\n MONTH,\n 3 * MONTH,\n 6 * MONTH,\n YEAR,\n];\n\nfunction chooseInterval(range: number, count: number): number {\n const target = Math.abs(range) / Math.max(1, count);\n\n for (const interval of TIME_INTERVALS) {\n if (interval >= target) return interval;\n }\n\n return YEAR;\n}\n\nfunction niceDomain(domain: [Date, Date], count: number): [Date, Date] {\n let [d0, d1] = domain;\n\n if (d0.getTime() > d1.getTime()) [d0, d1] = [d1, d0];\n\n const range = d1.getTime() - d0.getTime();\n const interval = chooseInterval(range, count);\n\n return [\n new Date(Math.floor(d0.getTime() / interval) * interval),\n new Date(Math.ceil(d1.getTime() / interval) * interval),\n ];\n}\n\nexport function timeScale(config: TimeScaleConfig): Scale<Date> {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this` — the returned object stays fully functional when destructured, e.g.\n // `const { map } = timeScale(cfg)`.\n const getDomain = (): [Date, Date] => (config.nice === false ? config.domain : niceDomain(config.domain, 10));\n const getRange = (): [number, number] => config.range;\n\n return {\n get domain(): [Date, Date] {\n return getDomain();\n },\n\n invert(pixel: number): Date {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (r1 === r0) return d0;\n\n const t = (pixel - r0) / (r1 - r0);\n\n return new Date(d0.getTime() + t * (d1.getTime() - d0.getTime()));\n },\n\n map(value: Date): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n const dRange = d1.getTime() - d0.getTime();\n\n if (dRange === 0) return r0;\n\n const t = (value.getTime() - d0.getTime()) / dRange;\n\n return r0 + t * (r1 - r0);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count = 10): Date[] {\n const [d0, d1] = getDomain();\n const range = d1.getTime() - d0.getTime();\n const interval = chooseInterval(range, count);\n const start = Math.ceil(d0.getTime() / interval) * interval;\n const ticks: Date[] = [];\n\n for (let t = start; t <= d1.getTime(); t += interval) {\n ticks.push(new Date(t));\n }\n\n return ticks;\n },\n };\n}\n"],"mappings":"AAGA,IAAM,EAAS,IACT,EAAS,GAAK,EACd,EAAO,GAAK,EACZ,EAAM,GAAK,EACX,EAAQ,GAAK,EACb,EAAO,IAAM,EAEb,EAAiB,CACrB,EACA,EAAI,EACJ,GAAK,EACL,GAAK,EACL,EACA,EAAI,EACJ,GAAK,EACL,GAAK,EACL,EACA,EAAI,EACJ,EAAI,EACJ,GAAK,EACL,EACA,EAAI,EACJ,EACA,EAAI,EACJ,EAAI,EACJ,CACF,EAEA,SAAS,eAAe,EAAe,EAAuB,CAC5D,IAAM,EAAS,KAAK,IAAI,CAAK,EAAI,KAAK,IAAI,EAAG,CAAK,EAElD,IAAK,IAAM,KAAY,EACrB,GAAI,GAAY,EAAQ,OAAO,EAGjC,OAAO,CACT,CAEA,SAAS,WAAW,EAAsB,EAA6B,CACrE,GAAI,CAAC,EAAI,GAAM,EAEX,EAAG,QAAQ,EAAI,EAAG,QAAQ,IAAG,CAAC,EAAI,GAAM,CAAC,EAAI,CAAE,GAGnD,IAAM,EAAW,eADH,EAAG,QAAQ,EAAI,EAAG,QAAQ,EACD,CAAK,EAE5C,MAAO,CACL,IAAI,KAAK,KAAK,MAAM,EAAG,QAAQ,EAAI,CAAQ,EAAI,CAAQ,EACvD,IAAI,KAAK,KAAK,KAAK,EAAG,QAAQ,EAAI,CAAQ,EAAI,CAAQ,CACxD,CACF,CAEA,SAAgB,UAAU,EAAsC,CAI9D,IAAM,cAAiC,EAAO,OAAS,GAAQ,EAAO,OAAS,WAAW,EAAO,OAAQ,EAAE,EACrG,aAAmC,EAAO,MAEhD,MAAO,CACL,IAAI,QAAuB,CACzB,OAAO,UAAU,CACnB,EAEA,OAAO,EAAqB,CAC1B,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAE1B,GAAI,IAAO,EAAI,OAAO,EAEtB,IAAM,GAAK,EAAQ,IAAO,EAAK,GAE/B,OAAO,IAAI,KAAK,EAAG,QAAQ,EAAI,GAAK,EAAG,QAAQ,EAAI,EAAG,QAAQ,EAAE,CAClE,EAEA,IAAI,EAAqB,CACvB,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EACpB,EAAS,EAAG,QAAQ,EAAI,EAAG,QAAQ,EAMzC,OAJI,IAAW,EAAU,EAIlB,GAFI,EAAM,QAAQ,EAAI,EAAG,QAAQ,GAAK,GAE5B,EAAK,EACxB,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAAQ,GAAY,CACxB,GAAM,CAAC,EAAI,GAAM,UAAU,EAErB,EAAW,eADH,EAAG,QAAQ,EAAI,EAAG,QAAQ,EACD,CAAK,EACtC,EAAQ,KAAK,KAAK,EAAG,QAAQ,EAAI,CAAQ,EAAI,EAC7C,EAAgB,CAAC,EAEvB,IAAK,IAAI,EAAI,EAAO,GAAK,EAAG,QAAQ,EAAG,GAAK,EAC1C,EAAM,KAAK,IAAI,KAAK,CAAC,CAAC,EAGxB,OAAO,CACT,CACF,CACF"}
1
+ {"version":3,"file":"time.cjs","names":[],"sources":["../../src/scales/time.ts"],"sourcesContent":["import type { Scale } from '../types';\nimport type { TimeScaleConfig } from './types';\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst MONTH = 30 * DAY;\nconst YEAR = 365 * DAY;\n\nconst TIME_INTERVALS = [\n SECOND,\n 5 * SECOND,\n 15 * SECOND,\n 30 * SECOND,\n MINUTE,\n 5 * MINUTE,\n 15 * MINUTE,\n 30 * MINUTE,\n HOUR,\n 3 * HOUR,\n 6 * HOUR,\n 12 * HOUR,\n DAY,\n 7 * DAY,\n MONTH,\n 3 * MONTH,\n 6 * MONTH,\n YEAR,\n];\n\nfunction chooseInterval(range: number, count: number): number {\n const target = Math.abs(range) / Math.max(1, count);\n\n for (const interval of TIME_INTERVALS) {\n if (interval >= target) return interval;\n }\n\n return YEAR;\n}\n\nfunction niceDomain(domain: [Date, Date], count: number): [Date, Date] {\n let [d0, d1] = domain;\n\n if (d0.getTime() > d1.getTime()) [d0, d1] = [d1, d0];\n\n const range = d1.getTime() - d0.getTime();\n const interval = chooseInterval(range, count);\n\n return [\n new Date(Math.floor(d0.getTime() / interval) * interval),\n new Date(Math.ceil(d1.getTime() / interval) * interval),\n ];\n}\n\nexport function timeScale(config: TimeScaleConfig): Scale<Date> {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this`: the returned object stays fully functional when destructured, e.g.\n // `const { map } = timeScale(cfg)`.\n const getDomain = (): [Date, Date] => (config.nice === false ? config.domain : niceDomain(config.domain, 10));\n const getRange = (): [number, number] => config.range;\n\n return {\n get domain(): [Date, Date] {\n return getDomain();\n },\n\n invert(pixel: number): Date {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (r1 === r0) return d0;\n\n const t = (pixel - r0) / (r1 - r0);\n\n return new Date(d0.getTime() + t * (d1.getTime() - d0.getTime()));\n },\n\n map(value: Date): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n const dRange = d1.getTime() - d0.getTime();\n\n if (dRange === 0) return r0;\n\n const t = (value.getTime() - d0.getTime()) / dRange;\n\n return r0 + t * (r1 - r0);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count = 10): Date[] {\n const [d0, d1] = getDomain();\n const range = d1.getTime() - d0.getTime();\n const interval = chooseInterval(range, count);\n const start = Math.ceil(d0.getTime() / interval) * interval;\n const ticks: Date[] = [];\n\n for (let t = start; t <= d1.getTime(); t += interval) {\n ticks.push(new Date(t));\n }\n\n return ticks;\n },\n };\n}\n"],"mappings":"AAGA,IAAM,EAAS,IACT,EAAS,GAAK,EACd,EAAO,GAAK,EACZ,EAAM,GAAK,EACX,EAAQ,GAAK,EACb,EAAO,IAAM,EAEb,EAAiB,CACrB,EACA,EAAI,EACJ,GAAK,EACL,GAAK,EACL,EACA,EAAI,EACJ,GAAK,EACL,GAAK,EACL,EACA,EAAI,EACJ,EAAI,EACJ,GAAK,EACL,EACA,EAAI,EACJ,EACA,EAAI,EACJ,EAAI,EACJ,CACF,EAEA,SAAS,eAAe,EAAe,EAAuB,CAC5D,IAAM,EAAS,KAAK,IAAI,CAAK,EAAI,KAAK,IAAI,EAAG,CAAK,EAElD,IAAK,IAAM,KAAY,EACrB,GAAI,GAAY,EAAQ,OAAO,EAGjC,OAAO,CACT,CAEA,SAAS,WAAW,EAAsB,EAA6B,CACrE,GAAI,CAAC,EAAI,GAAM,EAEX,EAAG,QAAQ,EAAI,EAAG,QAAQ,IAAG,CAAC,EAAI,GAAM,CAAC,EAAI,CAAE,GAGnD,IAAM,EAAW,eADH,EAAG,QAAQ,EAAI,EAAG,QAAQ,EACD,CAAK,EAE5C,MAAO,CACL,IAAI,KAAK,KAAK,MAAM,EAAG,QAAQ,EAAI,CAAQ,EAAI,CAAQ,EACvD,IAAI,KAAK,KAAK,KAAK,EAAG,QAAQ,EAAI,CAAQ,EAAI,CAAQ,CACxD,CACF,CAEA,SAAgB,UAAU,EAAsC,CAI9D,IAAM,cAAiC,EAAO,OAAS,GAAQ,EAAO,OAAS,WAAW,EAAO,OAAQ,EAAE,EACrG,aAAmC,EAAO,MAEhD,MAAO,CACL,IAAI,QAAuB,CACzB,OAAO,UAAU,CACnB,EAEA,OAAO,EAAqB,CAC1B,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAE1B,GAAI,IAAO,EAAI,OAAO,EAEtB,IAAM,GAAK,EAAQ,IAAO,EAAK,GAE/B,OAAO,IAAI,KAAK,EAAG,QAAQ,EAAI,GAAK,EAAG,QAAQ,EAAI,EAAG,QAAQ,EAAE,CAClE,EAEA,IAAI,EAAqB,CACvB,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EACpB,EAAS,EAAG,QAAQ,EAAI,EAAG,QAAQ,EAMzC,OAJI,IAAW,EAAU,EAIlB,GAFI,EAAM,QAAQ,EAAI,EAAG,QAAQ,GAAK,GAE5B,EAAK,EACxB,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAAQ,GAAY,CACxB,GAAM,CAAC,EAAI,GAAM,UAAU,EAErB,EAAW,eADH,EAAG,QAAQ,EAAI,EAAG,QAAQ,EACD,CAAK,EACtC,EAAQ,KAAK,KAAK,EAAG,QAAQ,EAAI,CAAQ,EAAI,EAC7C,EAAgB,CAAC,EAEvB,IAAK,IAAI,EAAI,EAAO,GAAK,EAAG,QAAQ,EAAG,GAAK,EAC1C,EAAM,KAAK,IAAI,KAAK,CAAC,CAAC,EAGxB,OAAO,CACT,CACF,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"time.js","names":[],"sources":["../../src/scales/time.ts"],"sourcesContent":["import type { Scale } from '../types';\nimport type { TimeScaleConfig } from './types';\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst MONTH = 30 * DAY;\nconst YEAR = 365 * DAY;\n\nconst TIME_INTERVALS = [\n SECOND,\n 5 * SECOND,\n 15 * SECOND,\n 30 * SECOND,\n MINUTE,\n 5 * MINUTE,\n 15 * MINUTE,\n 30 * MINUTE,\n HOUR,\n 3 * HOUR,\n 6 * HOUR,\n 12 * HOUR,\n DAY,\n 7 * DAY,\n MONTH,\n 3 * MONTH,\n 6 * MONTH,\n YEAR,\n];\n\nfunction chooseInterval(range: number, count: number): number {\n const target = Math.abs(range) / Math.max(1, count);\n\n for (const interval of TIME_INTERVALS) {\n if (interval >= target) return interval;\n }\n\n return YEAR;\n}\n\nfunction niceDomain(domain: [Date, Date], count: number): [Date, Date] {\n let [d0, d1] = domain;\n\n if (d0.getTime() > d1.getTime()) [d0, d1] = [d1, d0];\n\n const range = d1.getTime() - d0.getTime();\n const interval = chooseInterval(range, count);\n\n return [\n new Date(Math.floor(d0.getTime() / interval) * interval),\n new Date(Math.ceil(d1.getTime() / interval) * interval),\n ];\n}\n\nexport function timeScale(config: TimeScaleConfig): Scale<Date> {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this` — the returned object stays fully functional when destructured, e.g.\n // `const { map } = timeScale(cfg)`.\n const getDomain = (): [Date, Date] => (config.nice === false ? config.domain : niceDomain(config.domain, 10));\n const getRange = (): [number, number] => config.range;\n\n return {\n get domain(): [Date, Date] {\n return getDomain();\n },\n\n invert(pixel: number): Date {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (r1 === r0) return d0;\n\n const t = (pixel - r0) / (r1 - r0);\n\n return new Date(d0.getTime() + t * (d1.getTime() - d0.getTime()));\n },\n\n map(value: Date): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n const dRange = d1.getTime() - d0.getTime();\n\n if (dRange === 0) return r0;\n\n const t = (value.getTime() - d0.getTime()) / dRange;\n\n return r0 + t * (r1 - r0);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count = 10): Date[] {\n const [d0, d1] = getDomain();\n const range = d1.getTime() - d0.getTime();\n const interval = chooseInterval(range, count);\n const start = Math.ceil(d0.getTime() / interval) * interval;\n const ticks: Date[] = [];\n\n for (let t = start; t <= d1.getTime(); t += interval) {\n ticks.push(new Date(t));\n }\n\n return ticks;\n },\n };\n}\n"],"mappings":"AAGA,IAAM,EAAS,IACT,EAAS,GAAK,EACd,EAAO,GAAK,EACZ,EAAM,GAAK,EACX,EAAQ,GAAK,EACb,EAAO,IAAM,EAEb,EAAiB,CACrB,EACA,EAAI,EACJ,GAAK,EACL,GAAK,EACL,EACA,EAAI,EACJ,GAAK,EACL,GAAK,EACL,EACA,EAAI,EACJ,EAAI,EACJ,GAAK,EACL,EACA,EAAI,EACJ,EACA,EAAI,EACJ,EAAI,EACJ,CACF,EAEA,SAAS,eAAe,EAAe,EAAuB,CAC5D,IAAM,EAAS,KAAK,IAAI,CAAK,EAAI,KAAK,IAAI,EAAG,CAAK,EAElD,IAAK,IAAM,KAAY,EACrB,GAAI,GAAY,EAAQ,OAAO,EAGjC,OAAO,CACT,CAEA,SAAS,WAAW,EAAsB,EAA6B,CACrE,GAAI,CAAC,EAAI,GAAM,EAEX,EAAG,QAAQ,EAAI,EAAG,QAAQ,IAAG,CAAC,EAAI,GAAM,CAAC,EAAI,CAAE,GAGnD,IAAM,EAAW,eADH,EAAG,QAAQ,EAAI,EAAG,QAAQ,EACD,CAAK,EAE5C,MAAO,CACL,IAAI,KAAK,KAAK,MAAM,EAAG,QAAQ,EAAI,CAAQ,EAAI,CAAQ,EACvD,IAAI,KAAK,KAAK,KAAK,EAAG,QAAQ,EAAI,CAAQ,EAAI,CAAQ,CACxD,CACF,CAEA,SAAgB,UAAU,EAAsC,CAI9D,IAAM,cAAiC,EAAO,OAAS,GAAQ,EAAO,OAAS,WAAW,EAAO,OAAQ,EAAE,EACrG,aAAmC,EAAO,MAEhD,MAAO,CACL,IAAI,QAAuB,CACzB,OAAO,UAAU,CACnB,EAEA,OAAO,EAAqB,CAC1B,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAE1B,GAAI,IAAO,EAAI,OAAO,EAEtB,IAAM,GAAK,EAAQ,IAAO,EAAK,GAE/B,OAAO,IAAI,KAAK,EAAG,QAAQ,EAAI,GAAK,EAAG,QAAQ,EAAI,EAAG,QAAQ,EAAE,CAClE,EAEA,IAAI,EAAqB,CACvB,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EACpB,EAAS,EAAG,QAAQ,EAAI,EAAG,QAAQ,EAMzC,OAJI,IAAW,EAAU,EAIlB,GAFI,EAAM,QAAQ,EAAI,EAAG,QAAQ,GAAK,GAE5B,EAAK,EACxB,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAAQ,GAAY,CACxB,GAAM,CAAC,EAAI,GAAM,UAAU,EAErB,EAAW,eADH,EAAG,QAAQ,EAAI,EAAG,QAAQ,EACD,CAAK,EACtC,EAAQ,KAAK,KAAK,EAAG,QAAQ,EAAI,CAAQ,EAAI,EAC7C,EAAgB,CAAC,EAEvB,IAAK,IAAI,EAAI,EAAO,GAAK,EAAG,QAAQ,EAAG,GAAK,EAC1C,EAAM,KAAK,IAAI,KAAK,CAAC,CAAC,EAGxB,OAAO,CACT,CACF,CACF"}
1
+ {"version":3,"file":"time.js","names":[],"sources":["../../src/scales/time.ts"],"sourcesContent":["import type { Scale } from '../types';\nimport type { TimeScaleConfig } from './types';\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst MONTH = 30 * DAY;\nconst YEAR = 365 * DAY;\n\nconst TIME_INTERVALS = [\n SECOND,\n 5 * SECOND,\n 15 * SECOND,\n 30 * SECOND,\n MINUTE,\n 5 * MINUTE,\n 15 * MINUTE,\n 30 * MINUTE,\n HOUR,\n 3 * HOUR,\n 6 * HOUR,\n 12 * HOUR,\n DAY,\n 7 * DAY,\n MONTH,\n 3 * MONTH,\n 6 * MONTH,\n YEAR,\n];\n\nfunction chooseInterval(range: number, count: number): number {\n const target = Math.abs(range) / Math.max(1, count);\n\n for (const interval of TIME_INTERVALS) {\n if (interval >= target) return interval;\n }\n\n return YEAR;\n}\n\nfunction niceDomain(domain: [Date, Date], count: number): [Date, Date] {\n let [d0, d1] = domain;\n\n if (d0.getTime() > d1.getTime()) [d0, d1] = [d1, d0];\n\n const range = d1.getTime() - d0.getTime();\n const interval = chooseInterval(range, count);\n\n return [\n new Date(Math.floor(d0.getTime() / interval) * interval),\n new Date(Math.ceil(d1.getTime() / interval) * interval),\n ];\n}\n\nexport function timeScale(config: TimeScaleConfig): Scale<Date> {\n // Every method below closes over `config`/these helpers directly instead of reading\n // `this`: the returned object stays fully functional when destructured, e.g.\n // `const { map } = timeScale(cfg)`.\n const getDomain = (): [Date, Date] => (config.nice === false ? config.domain : niceDomain(config.domain, 10));\n const getRange = (): [number, number] => config.range;\n\n return {\n get domain(): [Date, Date] {\n return getDomain();\n },\n\n invert(pixel: number): Date {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n\n if (r1 === r0) return d0;\n\n const t = (pixel - r0) / (r1 - r0);\n\n return new Date(d0.getTime() + t * (d1.getTime() - d0.getTime()));\n },\n\n map(value: Date): number {\n const [d0, d1] = getDomain();\n const [r0, r1] = getRange();\n const dRange = d1.getTime() - d0.getTime();\n\n if (dRange === 0) return r0;\n\n const t = (value.getTime() - d0.getTime()) / dRange;\n\n return r0 + t * (r1 - r0);\n },\n\n get range(): [number, number] {\n return getRange();\n },\n\n ticks(count = 10): Date[] {\n const [d0, d1] = getDomain();\n const range = d1.getTime() - d0.getTime();\n const interval = chooseInterval(range, count);\n const start = Math.ceil(d0.getTime() / interval) * interval;\n const ticks: Date[] = [];\n\n for (let t = start; t <= d1.getTime(); t += interval) {\n ticks.push(new Date(t));\n }\n\n return ticks;\n },\n };\n}\n"],"mappings":"AAGA,IAAM,EAAS,IACT,EAAS,GAAK,EACd,EAAO,GAAK,EACZ,EAAM,GAAK,EACX,EAAQ,GAAK,EACb,EAAO,IAAM,EAEb,EAAiB,CACrB,EACA,EAAI,EACJ,GAAK,EACL,GAAK,EACL,EACA,EAAI,EACJ,GAAK,EACL,GAAK,EACL,EACA,EAAI,EACJ,EAAI,EACJ,GAAK,EACL,EACA,EAAI,EACJ,EACA,EAAI,EACJ,EAAI,EACJ,CACF,EAEA,SAAS,eAAe,EAAe,EAAuB,CAC5D,IAAM,EAAS,KAAK,IAAI,CAAK,EAAI,KAAK,IAAI,EAAG,CAAK,EAElD,IAAK,IAAM,KAAY,EACrB,GAAI,GAAY,EAAQ,OAAO,EAGjC,OAAO,CACT,CAEA,SAAS,WAAW,EAAsB,EAA6B,CACrE,GAAI,CAAC,EAAI,GAAM,EAEX,EAAG,QAAQ,EAAI,EAAG,QAAQ,IAAG,CAAC,EAAI,GAAM,CAAC,EAAI,CAAE,GAGnD,IAAM,EAAW,eADH,EAAG,QAAQ,EAAI,EAAG,QAAQ,EACD,CAAK,EAE5C,MAAO,CACL,IAAI,KAAK,KAAK,MAAM,EAAG,QAAQ,EAAI,CAAQ,EAAI,CAAQ,EACvD,IAAI,KAAK,KAAK,KAAK,EAAG,QAAQ,EAAI,CAAQ,EAAI,CAAQ,CACxD,CACF,CAEA,SAAgB,UAAU,EAAsC,CAI9D,IAAM,cAAiC,EAAO,OAAS,GAAQ,EAAO,OAAS,WAAW,EAAO,OAAQ,EAAE,EACrG,aAAmC,EAAO,MAEhD,MAAO,CACL,IAAI,QAAuB,CACzB,OAAO,UAAU,CACnB,EAEA,OAAO,EAAqB,CAC1B,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EAE1B,GAAI,IAAO,EAAI,OAAO,EAEtB,IAAM,GAAK,EAAQ,IAAO,EAAK,GAE/B,OAAO,IAAI,KAAK,EAAG,QAAQ,EAAI,GAAK,EAAG,QAAQ,EAAI,EAAG,QAAQ,EAAE,CAClE,EAEA,IAAI,EAAqB,CACvB,GAAM,CAAC,EAAI,GAAM,UAAU,EACrB,CAAC,EAAI,GAAM,SAAS,EACpB,EAAS,EAAG,QAAQ,EAAI,EAAG,QAAQ,EAMzC,OAJI,IAAW,EAAU,EAIlB,GAFI,EAAM,QAAQ,EAAI,EAAG,QAAQ,GAAK,GAE5B,EAAK,EACxB,EAEA,IAAI,OAA0B,CAC5B,OAAO,SAAS,CAClB,EAEA,MAAM,EAAQ,GAAY,CACxB,GAAM,CAAC,EAAI,GAAM,UAAU,EAErB,EAAW,eADH,EAAG,QAAQ,EAAI,EAAG,QAAQ,EACD,CAAK,EACtC,EAAQ,KAAK,KAAK,EAAG,QAAQ,EAAI,CAAQ,EAAI,EAC7C,EAAgB,CAAC,EAEvB,IAAK,IAAI,EAAI,EAAO,GAAK,EAAG,QAAQ,EAAG,GAAK,EAC1C,EAAM,KAAK,IAAI,KAAK,CAAC,CAAC,EAGxB,OAAO,CACT,CACF,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"element.cjs","names":[],"sources":["../../src/svg/element.ts"],"sourcesContent":["import { warn } from '../_dev';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nexport function createSvgElement<K extends keyof SVGElementTagNameMap>(\n tag: K,\n attrs?: Record<string, number | string | undefined>,\n): SVGElementTagNameMap[K] {\n const el = document.createElementNS(SVG_NS, tag);\n\n if (attrs) setAttributes(el, attrs);\n\n return el;\n}\n\nexport function setAttributes(el: SVGElement, attrs: Record<string, number | string | undefined>): void {\n for (const [key, value] of Object.entries(attrs)) {\n if (value === undefined) {\n el.removeAttribute(key);\n\n continue;\n }\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n warn(\n `setAttributes: attribute \"${key}\" on <${el.tagName}> received a non-finite value (${value}) — check upstream scale/geometry math for invalid input.`,\n );\n }\n\n el.setAttribute(key, String(value));\n }\n}\n\nexport function removeChildren(el: SVGElement): void {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n}\n"],"mappings":"uBAEA,IAAM,EAAS,6BAEf,SAAgB,iBACd,EACA,EACyB,CACzB,IAAM,EAAK,SAAS,gBAAgB,EAAQ,CAAG,EAI/C,OAFI,GAAO,cAAc,EAAI,CAAK,EAE3B,CACT,CAEA,SAAgB,cAAc,EAAgB,EAA0D,CACtG,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,CAAK,EAAG,CAChD,GAAI,IAAU,IAAA,GAAW,CACvB,EAAG,gBAAgB,CAAG,EAEtB,QACF,CAEI,OAAO,GAAU,UAAY,CAAC,OAAO,SAAS,CAAK,GAEnD,GAA6B,EAA7B,EAAyC,EAAG,QAA5C,EAAqF,EAArF,EAIJ,EAAG,aAAa,EAAK,OAAO,CAAK,CAAC,CACpC,CACF,CAEA,SAAgB,eAAe,EAAsB,CACnD,KAAO,EAAG,YACR,EAAG,YAAY,EAAG,UAAU,CAEhC"}
1
+ {"version":3,"file":"element.cjs","names":[],"sources":["../../src/svg/element.ts"],"sourcesContent":["import { warn } from '../_dev';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nexport function createSvgElement<K extends keyof SVGElementTagNameMap>(\n tag: K,\n attrs?: Record<string, number | string | undefined>,\n): SVGElementTagNameMap[K] {\n const el = document.createElementNS(SVG_NS, tag);\n\n if (attrs) setAttributes(el, attrs);\n\n return el;\n}\n\nexport function setAttributes(el: SVGElement, attrs: Record<string, number | string | undefined>): void {\n for (const [key, value] of Object.entries(attrs)) {\n if (value === undefined) {\n el.removeAttribute(key);\n\n continue;\n }\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n warn(\n `setAttributes: attribute \"${key}\" on <${el.tagName}> received a non-finite value (${value}): check upstream scale/geometry math for invalid input.`,\n );\n }\n\n el.setAttribute(key, String(value));\n }\n}\n\nexport function removeChildren(el: SVGElement): void {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n}\n"],"mappings":"uBAEA,IAAM,EAAS,6BAEf,SAAgB,iBACd,EACA,EACyB,CACzB,IAAM,EAAK,SAAS,gBAAgB,EAAQ,CAAG,EAI/C,OAFI,GAAO,cAAc,EAAI,CAAK,EAE3B,CACT,CAEA,SAAgB,cAAc,EAAgB,EAA0D,CACtG,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,CAAK,EAAG,CAChD,GAAI,IAAU,IAAA,GAAW,CACvB,EAAG,gBAAgB,CAAG,EAEtB,QACF,CAEI,OAAO,GAAU,UAAY,CAAC,OAAO,SAAS,CAAK,GAEnD,GAA6B,EAA7B,EAAyC,EAAG,QAA5C,EAAqF,EAArF,EAIJ,EAAG,aAAa,EAAK,OAAO,CAAK,CAAC,CACpC,CACF,CAEA,SAAgB,eAAe,EAAsB,CACnD,KAAO,EAAG,YACR,EAAG,YAAY,EAAG,UAAU,CAEhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":[],"sources":["../../src/svg/element.ts"],"sourcesContent":["import { warn } from '../_dev';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nexport function createSvgElement<K extends keyof SVGElementTagNameMap>(\n tag: K,\n attrs?: Record<string, number | string | undefined>,\n): SVGElementTagNameMap[K] {\n const el = document.createElementNS(SVG_NS, tag);\n\n if (attrs) setAttributes(el, attrs);\n\n return el;\n}\n\nexport function setAttributes(el: SVGElement, attrs: Record<string, number | string | undefined>): void {\n for (const [key, value] of Object.entries(attrs)) {\n if (value === undefined) {\n el.removeAttribute(key);\n\n continue;\n }\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n warn(\n `setAttributes: attribute \"${key}\" on <${el.tagName}> received a non-finite value (${value}) — check upstream scale/geometry math for invalid input.`,\n );\n }\n\n el.setAttribute(key, String(value));\n }\n}\n\nexport function removeChildren(el: SVGElement): void {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n}\n"],"mappings":"mBAEA,IAAM,EAAS,6BAEf,SAAgB,iBACd,EACA,EACyB,CACzB,IAAM,EAAK,SAAS,gBAAgB,EAAQ,CAAG,EAI/C,OAFI,GAAO,cAAc,EAAI,CAAK,EAE3B,CACT,CAEA,SAAgB,cAAc,EAAgB,EAA0D,CACtG,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,CAAK,EAAG,CAChD,GAAI,IAAU,IAAA,GAAW,CACvB,EAAG,gBAAgB,CAAG,EAEtB,QACF,CAEI,OAAO,GAAU,UAAY,CAAC,OAAO,SAAS,CAAK,GAEnD,GAA6B,EAA7B,EAAyC,EAAG,QAA5C,EAAqF,EAArF,EAIJ,EAAG,aAAa,EAAK,OAAO,CAAK,CAAC,CACpC,CACF,CAEA,SAAgB,eAAe,EAAsB,CACnD,KAAO,EAAG,YACR,EAAG,YAAY,EAAG,UAAU,CAEhC"}
1
+ {"version":3,"file":"element.js","names":[],"sources":["../../src/svg/element.ts"],"sourcesContent":["import { warn } from '../_dev';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nexport function createSvgElement<K extends keyof SVGElementTagNameMap>(\n tag: K,\n attrs?: Record<string, number | string | undefined>,\n): SVGElementTagNameMap[K] {\n const el = document.createElementNS(SVG_NS, tag);\n\n if (attrs) setAttributes(el, attrs);\n\n return el;\n}\n\nexport function setAttributes(el: SVGElement, attrs: Record<string, number | string | undefined>): void {\n for (const [key, value] of Object.entries(attrs)) {\n if (value === undefined) {\n el.removeAttribute(key);\n\n continue;\n }\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n warn(\n `setAttributes: attribute \"${key}\" on <${el.tagName}> received a non-finite value (${value}): check upstream scale/geometry math for invalid input.`,\n );\n }\n\n el.setAttribute(key, String(value));\n }\n}\n\nexport function removeChildren(el: SVGElement): void {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n}\n"],"mappings":"mBAEA,IAAM,EAAS,6BAEf,SAAgB,iBACd,EACA,EACyB,CACzB,IAAM,EAAK,SAAS,gBAAgB,EAAQ,CAAG,EAI/C,OAFI,GAAO,cAAc,EAAI,CAAK,EAE3B,CACT,CAEA,SAAgB,cAAc,EAAgB,EAA0D,CACtG,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,CAAK,EAAG,CAChD,GAAI,IAAU,IAAA,GAAW,CACvB,EAAG,gBAAgB,CAAG,EAEtB,QACF,CAEI,OAAO,GAAU,UAAY,CAAC,OAAO,SAAS,CAAK,GAEnD,GAA6B,EAA7B,EAAyC,EAAG,QAA5C,EAAqF,EAArF,EAIJ,EAAG,aAAa,EAAK,OAAO,CAAK,CAAC,CACpC,CACF,CAEA,SAAgB,eAAe,EAAsB,CACnD,KAAO,EAAG,YACR,EAAG,YAAY,EAAG,UAAU,CAEhC"}
package/dist/svg/text.cjs CHANGED
@@ -1,2 +1,2 @@
1
- const e=require("./element.cjs");function createTextElement(t,n){let r=e.createSvgElement(`text`,n);return r.textContent=t,r}exports.createTextElement=createTextElement;
1
+ const e=require("./element.cjs");var t=.6;function estimateTextWidth(e,n){return e.length*n*t}function createTextElement(t,n){let r=e.createSvgElement(`text`,n);return r.textContent=t,r}exports.createTextElement=createTextElement,exports.estimateTextWidth=estimateTextWidth;
2
2
  //# sourceMappingURL=text.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.cjs","names":[],"sources":["../../src/svg/text.ts"],"sourcesContent":["import { createSvgElement } from './element';\n\nexport function createTextElement(\n content: string,\n attrs?: Record<string, number | string | undefined>,\n): SVGTextElement {\n const text = createSvgElement('text', attrs);\n\n text.textContent = content;\n\n return text;\n}\n"],"mappings":"iCAEA,SAAgB,kBACd,EACA,EACgB,CAChB,IAAM,EAAO,EAAA,iBAAiB,OAAQ,CAAK,EAI3C,MAFA,GAAK,YAAc,EAEZ,CACT"}
1
+ {"version":3,"file":"text.cjs","names":[],"sources":["../../src/svg/text.ts"],"sourcesContent":["import { createSvgElement } from './element';\n\n/** Average glyph width relative to font size; jsdom cannot measure SVG text, so labels are estimated. */\nconst GLYPH_WIDTH = 0.6;\n\nexport function estimateTextWidth(text: string, fontSize: number): number {\n return text.length * fontSize * GLYPH_WIDTH;\n}\n\nexport function createTextElement(\n content: string,\n attrs?: Record<string, number | string | undefined>,\n): SVGTextElement {\n const text = createSvgElement('text', attrs);\n\n text.textContent = content;\n\n return text;\n}\n"],"mappings":"iCAGA,IAAM,EAAc,GAEpB,SAAgB,kBAAkB,EAAc,EAA0B,CACxE,OAAO,EAAK,OAAS,EAAW,CAClC,CAEA,SAAgB,kBACd,EACA,EACgB,CAChB,IAAM,EAAO,EAAA,iBAAiB,OAAQ,CAAK,EAI3C,MAFA,GAAK,YAAc,EAEZ,CACT"}
@@ -1,2 +1,3 @@
1
+ export declare function estimateTextWidth(text: string, fontSize: number): number;
1
2
  export declare function createTextElement(content: string, attrs?: Record<string, number | string | undefined>): SVGTextElement;
2
3
  //# sourceMappingURL=text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/svg/text.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAClD,cAAc,CAMhB"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/svg/text.ts"],"names":[],"mappings":"AAKA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAClD,cAAc,CAMhB"}
package/dist/svg/text.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createSvgElement as e}from"./element.js";function createTextElement(t,n){let r=e(`text`,n);return r.textContent=t,r}export{createTextElement};
1
+ import{createSvgElement as e}from"./element.js";var t=.6;function estimateTextWidth(e,n){return e.length*n*t}function createTextElement(t,n){let r=e(`text`,n);return r.textContent=t,r}export{createTextElement,estimateTextWidth};
2
2
  //# sourceMappingURL=text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","names":[],"sources":["../../src/svg/text.ts"],"sourcesContent":["import { createSvgElement } from './element';\n\nexport function createTextElement(\n content: string,\n attrs?: Record<string, number | string | undefined>,\n): SVGTextElement {\n const text = createSvgElement('text', attrs);\n\n text.textContent = content;\n\n return text;\n}\n"],"mappings":"gDAEA,SAAgB,kBACd,EACA,EACgB,CAChB,IAAM,EAAO,EAAiB,OAAQ,CAAK,EAI3C,MAFA,GAAK,YAAc,EAEZ,CACT"}
1
+ {"version":3,"file":"text.js","names":[],"sources":["../../src/svg/text.ts"],"sourcesContent":["import { createSvgElement } from './element';\n\n/** Average glyph width relative to font size; jsdom cannot measure SVG text, so labels are estimated. */\nconst GLYPH_WIDTH = 0.6;\n\nexport function estimateTextWidth(text: string, fontSize: number): number {\n return text.length * fontSize * GLYPH_WIDTH;\n}\n\nexport function createTextElement(\n content: string,\n attrs?: Record<string, number | string | undefined>,\n): SVGTextElement {\n const text = createSvgElement('text', attrs);\n\n text.textContent = content;\n\n return text;\n}\n"],"mappings":"gDAGA,IAAM,EAAc,GAEpB,SAAgB,kBAAkB,EAAc,EAA0B,CACxE,OAAO,EAAK,OAAS,EAAW,CAClC,CAEA,SAAgB,kBACd,EACA,EACgB,CAChB,IAAM,EAAO,EAAiB,OAAQ,CAAK,EAI3C,MAFA,GAAK,YAAc,EAEZ,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../src/theme/index.ts"],"sourcesContent":["import type { PrismTheme } from '../types';\n\nconst MAX_THEME_COLORS = 8;\n\nexport function setTheme(theme: PrismTheme): void {\n const root = document.documentElement;\n\n if (theme.colors) {\n // Clear (not just overwrite) every color slot the previous setTheme() call may have\n // used — otherwise a theme with fewer colors than the last one leaves stale values\n // on the untouched higher-index custom properties.\n for (let i = 0; i < MAX_THEME_COLORS; i++) {\n const color = theme.colors[i];\n\n if (color) {\n root.style.setProperty(`--prism-color-${i + 1}`, color);\n } else {\n root.style.removeProperty(`--prism-color-${i + 1}`);\n }\n }\n }\n\n if (theme.fontFamily) root.style.setProperty('--prism-font-family', theme.fontFamily);\n\n if (theme.gridColor) root.style.setProperty('--prism-grid-color', theme.gridColor);\n\n if (theme.gridOpacity !== undefined) root.style.setProperty('--prism-grid-opacity', String(theme.gridOpacity));\n}\n\n/** Clears every CSS custom property `setTheme()` can set, restoring prism's default theme (from `prism.css`). */\nexport function resetTheme(): void {\n const root = document.documentElement;\n\n for (let i = 1; i <= MAX_THEME_COLORS; i++) root.style.removeProperty(`--prism-color-${i}`);\n\n root.style.removeProperty('--prism-font-family');\n root.style.removeProperty('--prism-grid-color');\n root.style.removeProperty('--prism-grid-opacity');\n}\n\nexport function seriesColor(index: number, override?: string): string {\n return override ?? `var(--prism-color-${(index % MAX_THEME_COLORS) + 1})`;\n}\n"],"mappings":"AAIA,SAAgB,SAAS,EAAyB,CAChD,IAAM,EAAO,SAAS,gBAEtB,GAAI,EAAM,OAIR,IAAK,IAAI,EAAI,EAAG,EAAI,EAAkB,IAAK,CACzC,IAAM,EAAQ,EAAM,OAAO,GAEvB,EACF,EAAK,MAAM,YAAY,iBAAiB,EAAI,IAAK,CAAK,EAEtD,EAAK,MAAM,eAAe,iBAAiB,EAAI,GAAG,CAEtD,CAGE,EAAM,YAAY,EAAK,MAAM,YAAY,sBAAuB,EAAM,UAAU,EAEhF,EAAM,WAAW,EAAK,MAAM,YAAY,qBAAsB,EAAM,SAAS,EAE7E,EAAM,cAAgB,IAAA,IAAW,EAAK,MAAM,YAAY,uBAAwB,OAAO,EAAM,WAAW,CAAC,CAC/G,CAGA,SAAgB,YAAmB,CACjC,IAAM,EAAO,SAAS,gBAEtB,IAAK,IAAI,EAAI,EAAG,GAAK,EAAkB,IAAK,EAAK,MAAM,eAAe,iBAAiB,GAAG,EAE1F,EAAK,MAAM,eAAe,qBAAqB,EAC/C,EAAK,MAAM,eAAe,oBAAoB,EAC9C,EAAK,MAAM,eAAe,sBAAsB,CAClD,CAEA,SAAgB,YAAY,EAAe,EAA2B,CACpE,OAAO,GAAY,qBAAsB,EAAQ,EAAoB,EAAE,EACzE"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../src/theme/index.ts"],"sourcesContent":["import type { PrismTheme } from '../types';\n\nconst MAX_THEME_COLORS = 8;\n\nexport function setTheme(theme: PrismTheme): void {\n const root = document.documentElement;\n\n if (theme.colors) {\n // Clear (not just overwrite) every color slot the previous setTheme() call may have\n // used, otherwise a theme with fewer colors than the last one leaves stale values\n // on the untouched higher-index custom properties.\n for (let i = 0; i < MAX_THEME_COLORS; i++) {\n const color = theme.colors[i];\n\n if (color) {\n root.style.setProperty(`--prism-color-${i + 1}`, color);\n } else {\n root.style.removeProperty(`--prism-color-${i + 1}`);\n }\n }\n }\n\n if (theme.fontFamily) root.style.setProperty('--prism-font-family', theme.fontFamily);\n\n if (theme.gridColor) root.style.setProperty('--prism-grid-color', theme.gridColor);\n\n if (theme.gridOpacity !== undefined) root.style.setProperty('--prism-grid-opacity', String(theme.gridOpacity));\n}\n\n/** Clears every CSS custom property `setTheme()` can set, restoring prism's default theme (from `prism.css`). */\nexport function resetTheme(): void {\n const root = document.documentElement;\n\n for (let i = 1; i <= MAX_THEME_COLORS; i++) root.style.removeProperty(`--prism-color-${i}`);\n\n root.style.removeProperty('--prism-font-family');\n root.style.removeProperty('--prism-grid-color');\n root.style.removeProperty('--prism-grid-opacity');\n}\n\nexport function seriesColor(index: number, override?: string): string {\n return override ?? `var(--prism-color-${(index % MAX_THEME_COLORS) + 1})`;\n}\n"],"mappings":"AAIA,SAAgB,SAAS,EAAyB,CAChD,IAAM,EAAO,SAAS,gBAEtB,GAAI,EAAM,OAIR,IAAK,IAAI,EAAI,EAAG,EAAI,EAAkB,IAAK,CACzC,IAAM,EAAQ,EAAM,OAAO,GAEvB,EACF,EAAK,MAAM,YAAY,iBAAiB,EAAI,IAAK,CAAK,EAEtD,EAAK,MAAM,eAAe,iBAAiB,EAAI,GAAG,CAEtD,CAGE,EAAM,YAAY,EAAK,MAAM,YAAY,sBAAuB,EAAM,UAAU,EAEhF,EAAM,WAAW,EAAK,MAAM,YAAY,qBAAsB,EAAM,SAAS,EAE7E,EAAM,cAAgB,IAAA,IAAW,EAAK,MAAM,YAAY,uBAAwB,OAAO,EAAM,WAAW,CAAC,CAC/G,CAGA,SAAgB,YAAmB,CACjC,IAAM,EAAO,SAAS,gBAEtB,IAAK,IAAI,EAAI,EAAG,GAAK,EAAkB,IAAK,EAAK,MAAM,eAAe,iBAAiB,GAAG,EAE1F,EAAK,MAAM,eAAe,qBAAqB,EAC/C,EAAK,MAAM,eAAe,oBAAoB,EAC9C,EAAK,MAAM,eAAe,sBAAsB,CAClD,CAEA,SAAgB,YAAY,EAAe,EAA2B,CACpE,OAAO,GAAY,qBAAsB,EAAQ,EAAoB,EAAE,EACzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/theme/index.ts"],"sourcesContent":["import type { PrismTheme } from '../types';\n\nconst MAX_THEME_COLORS = 8;\n\nexport function setTheme(theme: PrismTheme): void {\n const root = document.documentElement;\n\n if (theme.colors) {\n // Clear (not just overwrite) every color slot the previous setTheme() call may have\n // used — otherwise a theme with fewer colors than the last one leaves stale values\n // on the untouched higher-index custom properties.\n for (let i = 0; i < MAX_THEME_COLORS; i++) {\n const color = theme.colors[i];\n\n if (color) {\n root.style.setProperty(`--prism-color-${i + 1}`, color);\n } else {\n root.style.removeProperty(`--prism-color-${i + 1}`);\n }\n }\n }\n\n if (theme.fontFamily) root.style.setProperty('--prism-font-family', theme.fontFamily);\n\n if (theme.gridColor) root.style.setProperty('--prism-grid-color', theme.gridColor);\n\n if (theme.gridOpacity !== undefined) root.style.setProperty('--prism-grid-opacity', String(theme.gridOpacity));\n}\n\n/** Clears every CSS custom property `setTheme()` can set, restoring prism's default theme (from `prism.css`). */\nexport function resetTheme(): void {\n const root = document.documentElement;\n\n for (let i = 1; i <= MAX_THEME_COLORS; i++) root.style.removeProperty(`--prism-color-${i}`);\n\n root.style.removeProperty('--prism-font-family');\n root.style.removeProperty('--prism-grid-color');\n root.style.removeProperty('--prism-grid-opacity');\n}\n\nexport function seriesColor(index: number, override?: string): string {\n return override ?? `var(--prism-color-${(index % MAX_THEME_COLORS) + 1})`;\n}\n"],"mappings":"AAIA,SAAgB,SAAS,EAAyB,CAChD,IAAM,EAAO,SAAS,gBAEtB,GAAI,EAAM,OAIR,IAAK,IAAI,EAAI,EAAG,EAAI,EAAkB,IAAK,CACzC,IAAM,EAAQ,EAAM,OAAO,GAEvB,EACF,EAAK,MAAM,YAAY,iBAAiB,EAAI,IAAK,CAAK,EAEtD,EAAK,MAAM,eAAe,iBAAiB,EAAI,GAAG,CAEtD,CAGE,EAAM,YAAY,EAAK,MAAM,YAAY,sBAAuB,EAAM,UAAU,EAEhF,EAAM,WAAW,EAAK,MAAM,YAAY,qBAAsB,EAAM,SAAS,EAE7E,EAAM,cAAgB,IAAA,IAAW,EAAK,MAAM,YAAY,uBAAwB,OAAO,EAAM,WAAW,CAAC,CAC/G,CAGA,SAAgB,YAAmB,CACjC,IAAM,EAAO,SAAS,gBAEtB,IAAK,IAAI,EAAI,EAAG,GAAK,EAAkB,IAAK,EAAK,MAAM,eAAe,iBAAiB,GAAG,EAE1F,EAAK,MAAM,eAAe,qBAAqB,EAC/C,EAAK,MAAM,eAAe,oBAAoB,EAC9C,EAAK,MAAM,eAAe,sBAAsB,CAClD,CAEA,SAAgB,YAAY,EAAe,EAA2B,CACpE,OAAO,GAAY,qBAAsB,EAAQ,EAAoB,EAAE,EACzE"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/theme/index.ts"],"sourcesContent":["import type { PrismTheme } from '../types';\n\nconst MAX_THEME_COLORS = 8;\n\nexport function setTheme(theme: PrismTheme): void {\n const root = document.documentElement;\n\n if (theme.colors) {\n // Clear (not just overwrite) every color slot the previous setTheme() call may have\n // used, otherwise a theme with fewer colors than the last one leaves stale values\n // on the untouched higher-index custom properties.\n for (let i = 0; i < MAX_THEME_COLORS; i++) {\n const color = theme.colors[i];\n\n if (color) {\n root.style.setProperty(`--prism-color-${i + 1}`, color);\n } else {\n root.style.removeProperty(`--prism-color-${i + 1}`);\n }\n }\n }\n\n if (theme.fontFamily) root.style.setProperty('--prism-font-family', theme.fontFamily);\n\n if (theme.gridColor) root.style.setProperty('--prism-grid-color', theme.gridColor);\n\n if (theme.gridOpacity !== undefined) root.style.setProperty('--prism-grid-opacity', String(theme.gridOpacity));\n}\n\n/** Clears every CSS custom property `setTheme()` can set, restoring prism's default theme (from `prism.css`). */\nexport function resetTheme(): void {\n const root = document.documentElement;\n\n for (let i = 1; i <= MAX_THEME_COLORS; i++) root.style.removeProperty(`--prism-color-${i}`);\n\n root.style.removeProperty('--prism-font-family');\n root.style.removeProperty('--prism-grid-color');\n root.style.removeProperty('--prism-grid-opacity');\n}\n\nexport function seriesColor(index: number, override?: string): string {\n return override ?? `var(--prism-color-${(index % MAX_THEME_COLORS) + 1})`;\n}\n"],"mappings":"AAIA,SAAgB,SAAS,EAAyB,CAChD,IAAM,EAAO,SAAS,gBAEtB,GAAI,EAAM,OAIR,IAAK,IAAI,EAAI,EAAG,EAAI,EAAkB,IAAK,CACzC,IAAM,EAAQ,EAAM,OAAO,GAEvB,EACF,EAAK,MAAM,YAAY,iBAAiB,EAAI,IAAK,CAAK,EAEtD,EAAK,MAAM,eAAe,iBAAiB,EAAI,GAAG,CAEtD,CAGE,EAAM,YAAY,EAAK,MAAM,YAAY,sBAAuB,EAAM,UAAU,EAEhF,EAAM,WAAW,EAAK,MAAM,YAAY,qBAAsB,EAAM,SAAS,EAE7E,EAAM,cAAgB,IAAA,IAAW,EAAK,MAAM,YAAY,uBAAwB,OAAO,EAAM,WAAW,CAAC,CAC/G,CAGA,SAAgB,YAAmB,CACjC,IAAM,EAAO,SAAS,gBAEtB,IAAK,IAAI,EAAI,EAAG,GAAK,EAAkB,IAAK,EAAK,MAAM,eAAe,iBAAiB,GAAG,EAE1F,EAAK,MAAM,eAAe,qBAAqB,EAC/C,EAAK,MAAM,eAAe,oBAAoB,EAC9C,EAAK,MAAM,eAAe,sBAAsB,CAClD,CAEA,SAAgB,YAAY,EAAe,EAA2B,CACpE,OAAO,GAAY,qBAAsB,EAAQ,EAAoB,EAAE,EACzE"}
@@ -80,9 +80,12 @@
80
80
  Bars
81
81
  Bar chart element styling
82
82
  ======================================== */
83
- --prism-bar-radius: 2px;
83
+ --prism-bar-radius: 4px;
84
84
  --prism-bar-hover-opacity: 0.8;
85
85
  --prism-bar-gap: 0.1;
86
+ --prism-bar-band-fill: var(--prism-grid-color);
87
+ --prism-bar-band-opacity: 0.18;
88
+ --prism-bar-dim-opacity: 0.55;
86
89
 
87
90
  /* ========================================
88
91
  Area
@@ -90,6 +93,8 @@
90
93
  ======================================== */
91
94
  --prism-area-opacity: 0.25;
92
95
  --prism-area-stroke-width: 2;
96
+ --prism-area-gradient-start: 0.45;
97
+ --prism-area-gradient-end: 0.02;
93
98
 
94
99
  /* ========================================
95
100
  Line
@@ -98,6 +103,41 @@
98
103
  --prism-line-width: 2;
99
104
  --prism-line-width-hover: 2.5;
100
105
 
106
+ /* ========================================
107
+ Interaction
108
+ Shared hover, focus, and keyboard states
109
+ ======================================== */
110
+ --prism-dim-opacity: 0.35;
111
+ --prism-active-point-radius: var(--prism-point-radius-hover);
112
+ --prism-point-ring: Canvas;
113
+ --prism-focus-color: var(--prism-color-1);
114
+
115
+ /* ========================================
116
+ Sparkline
117
+ ======================================== */
118
+ --prism-spark-fill-opacity: 1;
119
+ --prism-spark-gradient-start: 0.35;
120
+ --prism-spark-gradient-end: 0;
121
+
122
+ /* ========================================
123
+ Radar
124
+ Rings, spokes, and series shapes
125
+ ======================================== */
126
+ --prism-radar-grid-color: var(--prism-grid-color);
127
+ --prism-radar-grid-opacity: 0.7;
128
+ --prism-radar-band-fill: var(--prism-grid-color);
129
+ --prism-radar-band-opacity: 0.14;
130
+ --prism-radar-spoke-color: var(--prism-radar-grid-color);
131
+ --prism-radar-fill-opacity: var(--prism-area-opacity);
132
+ --prism-radar-stroke-width: var(--prism-line-width);
133
+ --prism-radar-point-radius: var(--prism-point-radius);
134
+ --prism-radar-point-radius-active: var(--prism-point-radius-hover);
135
+ --prism-radar-label-color: var(--prism-text-color-secondary);
136
+ --prism-radar-label-size: var(--prism-font-size-label);
137
+ --prism-radar-value-color: var(--prism-text-color);
138
+ --prism-radar-value-size: var(--prism-font-size-label);
139
+ --prism-radar-dim-opacity: var(--prism-dim-opacity);
140
+
101
141
  /* ========================================
102
142
  Transitions & Animation
103
143
  Respects prefers-reduced-motion
@@ -255,6 +295,27 @@
255
295
  r: var(--prism-point-radius-hover);
256
296
  }
257
297
 
298
+ /* Shared interaction states */
299
+ .prism-chart:focus-visible {
300
+ outline: 2px solid var(--prism-focus-color);
301
+ outline-offset: 2px;
302
+ border-radius: var(--prism-border-radius);
303
+ }
304
+
305
+ .prism-series > * {
306
+ transition: opacity var(--prism-transition-fast);
307
+ }
308
+
309
+ .prism-series-focused > :not(.prism-series-active) {
310
+ opacity: var(--prism-dim-opacity);
311
+ }
312
+
313
+ .prism-active-point {
314
+ r: var(--prism-active-point-radius);
315
+ stroke: var(--prism-point-ring);
316
+ stroke-width: 2;
317
+ }
318
+
258
319
  /* Bar chart */
259
320
  .prism-bar {
260
321
  transition:
@@ -263,18 +324,34 @@
263
324
  }
264
325
 
265
326
  .prism-bar:hover {
266
- opacity: var(--prism-bar-hover-opacity);
267
327
  filter: brightness(1.05);
268
328
  }
269
329
 
330
+ .prism-bars-focused .prism-bar:not(.prism-bar--active) {
331
+ opacity: var(--prism-bar-dim-opacity);
332
+ }
333
+
334
+ .prism-bar-band {
335
+ opacity: var(--prism-bar-band-opacity);
336
+ fill: var(--prism-bar-band-fill);
337
+ }
338
+
270
339
  /* Area chart */
271
- .prism-area-fill {
272
- opacity: var(--prism-area-opacity);
273
- transition: opacity var(--prism-transition-fast);
340
+ .prism-area-fill--solid {
341
+ fill-opacity: var(--prism-area-opacity);
342
+ transition: fill-opacity var(--prism-transition-fast);
343
+ }
344
+
345
+ .prism-area-series:hover .prism-area-fill--solid {
346
+ fill-opacity: calc(var(--prism-area-opacity) * 1.4);
274
347
  }
275
348
 
276
- .prism-area-series:hover .prism-area-fill {
277
- opacity: calc(var(--prism-area-opacity) * 1.4);
349
+ .prism-area-stop-top {
350
+ stop-opacity: var(--prism-area-gradient-start);
351
+ }
352
+
353
+ .prism-area-stop-bottom {
354
+ stop-opacity: var(--prism-area-gradient-end);
278
355
  }
279
356
 
280
357
  .prism-area-line {
@@ -284,6 +361,111 @@
284
361
  stroke-linejoin: round;
285
362
  }
286
363
 
364
+ /* Radar chart */
365
+ .prism-radar-ring,
366
+ .prism-radar-spoke {
367
+ opacity: var(--prism-radar-grid-opacity);
368
+ stroke-width: var(--prism-grid-width);
369
+ }
370
+
371
+ .prism-radar-ring {
372
+ stroke: var(--prism-radar-grid-color);
373
+ }
374
+
375
+ .prism-radar-spoke {
376
+ stroke: var(--prism-radar-spoke-color);
377
+ transition: opacity var(--prism-transition-fast);
378
+ }
379
+
380
+ .prism-radar-spoke--active {
381
+ opacity: 1;
382
+ stroke: var(--prism-crosshair-color);
383
+ }
384
+
385
+ .prism-radar-band {
386
+ opacity: var(--prism-radar-band-opacity);
387
+ fill: var(--prism-radar-band-fill);
388
+ }
389
+
390
+ .prism-radar-area {
391
+ stroke-width: var(--prism-radar-stroke-width);
392
+ transition:
393
+ fill-opacity var(--prism-transition-fast),
394
+ opacity var(--prism-transition-fast);
395
+ }
396
+
397
+ .prism-radar-area--solid {
398
+ fill-opacity: var(--prism-radar-fill-opacity);
399
+ }
400
+
401
+ .prism-radar-series:hover .prism-radar-area--solid {
402
+ fill-opacity: calc(var(--prism-radar-fill-opacity) * 1.4);
403
+ }
404
+
405
+ .prism-radar-series-group:has(.prism-radar-series:hover) .prism-radar-series:not(:hover) {
406
+ opacity: var(--prism-radar-dim-opacity);
407
+ }
408
+
409
+ .prism-radar-series {
410
+ transition: opacity var(--prism-transition-fast);
411
+ }
412
+
413
+ .prism-radar-point {
414
+ r: var(--prism-radar-point-radius);
415
+ stroke-width: 1.5;
416
+ transition: r var(--prism-transition-fast);
417
+ }
418
+
419
+ .prism-radar-point--active {
420
+ r: var(--prism-radar-point-radius-active);
421
+ }
422
+
423
+ .prism-radar-axis-label {
424
+ font-size: var(--prism-radar-label-size);
425
+ font-weight: var(--prism-font-weight-title);
426
+ fill: var(--prism-radar-label-color);
427
+ }
428
+
429
+ .prism-radar-level {
430
+ font-size: var(--prism-font-size-label);
431
+ fill: var(--prism-text-color-secondary);
432
+ }
433
+
434
+ .prism-radar-value {
435
+ font-size: var(--prism-radar-value-size);
436
+ font-weight: var(--prism-font-weight-title);
437
+ font-variant-numeric: tabular-nums;
438
+ fill: var(--prism-radar-value-color);
439
+ }
440
+
441
+ /* Pie chart */
442
+ .prism-pie-slice {
443
+ transition: opacity var(--prism-transition-fast);
444
+ }
445
+
446
+ .prism-pie-focused .prism-pie-slice:not(.prism-pie-slice--active) {
447
+ opacity: var(--prism-dim-opacity);
448
+ }
449
+
450
+ /* Sparkline */
451
+ .prism-spark-fill {
452
+ fill-opacity: var(--prism-spark-fill-opacity);
453
+ }
454
+
455
+ .prism-spark-stop-top {
456
+ stop-opacity: var(--prism-spark-gradient-start);
457
+ }
458
+
459
+ .prism-spark-stop-bottom {
460
+ stop-opacity: var(--prism-spark-gradient-end);
461
+ }
462
+
463
+ .prism-spark-end,
464
+ .prism-spark-marker {
465
+ stroke: var(--prism-point-ring);
466
+ stroke-width: 1.5;
467
+ }
468
+
287
469
  /* Legend */
288
470
  .prism-legend {
289
471
  display: flex;
@@ -340,4 +522,29 @@
340
522
  transition: opacity var(--prism-transition-fast);
341
523
  will-change: opacity;
342
524
  }
525
+
526
+ .prism-tooltip-title {
527
+ margin-bottom: 0.25rem;
528
+ font-weight: var(--prism-font-weight-title);
529
+ }
530
+
531
+ .prism-tooltip-row {
532
+ display: flex;
533
+ gap: 0.375rem;
534
+ align-items: center;
535
+ }
536
+
537
+ .prism-tooltip-swatch {
538
+ flex-shrink: 0;
539
+ width: var(--prism-legend-dot-size);
540
+ height: var(--prism-legend-dot-size);
541
+ background: var(--prism-swatch);
542
+ border-radius: 50%;
543
+ }
544
+
545
+ .prism-tooltip-value {
546
+ margin-inline-start: auto;
547
+ font-weight: var(--prism-font-weight-title);
548
+ font-variant-numeric: tabular-nums;
549
+ }
343
550
  }