@photon-ai/pho-ui 4.7.1 → 4.9.0

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 (69) hide show
  1. package/dist/chunks/bar-chart-ht70KKj3.js +19 -0
  2. package/dist/chunks/bar-chart-ht70KKj3.js.map +1 -0
  3. package/dist/chunks/{basic-page-BUmntB7L.js → basic-page-DzT8yecB.js} +174 -173
  4. package/dist/chunks/basic-page-DzT8yecB.js.map +1 -0
  5. package/dist/chunks/chart-B5c8gmlj.js +1338 -0
  6. package/dist/chunks/chart-B5c8gmlj.js.map +1 -0
  7. package/dist/chunks/code-block-CbcE994O.js +516 -0
  8. package/dist/chunks/code-block-CbcE994O.js.map +1 -0
  9. package/dist/chunks/{data-table-Mog6m3d9.js → data-table-B1dmrN6r.js} +89 -94
  10. package/dist/chunks/data-table-B1dmrN6r.js.map +1 -0
  11. package/dist/chunks/ghost-search-CNVs9k1o.js +34 -0
  12. package/dist/chunks/ghost-search-CNVs9k1o.js.map +1 -0
  13. package/dist/chunks/line-chart-Cm_Ac7f4.js +22 -0
  14. package/dist/chunks/line-chart-Cm_Ac7f4.js.map +1 -0
  15. package/dist/chunks/{trace-CjOi3_IP.js → trace-D1fOFzJt.js} +633 -622
  16. package/dist/chunks/trace-D1fOFzJt.js.map +1 -0
  17. package/dist/components/bar-chart.js +1 -1
  18. package/dist/components/chart.js +8 -5
  19. package/dist/components/code-block.js +12 -3
  20. package/dist/components/data-table.js +8 -8
  21. package/dist/components/line-chart.js +1 -1
  22. package/dist/components/trace.js +1 -1
  23. package/dist/index.js +175 -162
  24. package/dist/motion.js +14 -13
  25. package/dist/motion.js.map +1 -1
  26. package/dist/primitives.js +1 -1
  27. package/dist/sections/basic-page.js +2 -2
  28. package/dist/src/components/bar-chart/bar-chart.d.ts +9 -1
  29. package/dist/src/components/chart/chart.d.ts +25 -0
  30. package/dist/src/components/chart/format.d.ts +9 -5
  31. package/dist/src/components/chart/index.d.ts +7 -4
  32. package/dist/src/components/chart/scale.d.ts +2 -2
  33. package/dist/src/components/chart/shell.d.ts +20 -13
  34. package/dist/src/components/chart/skeleton.d.ts +11 -0
  35. package/dist/src/components/chart/theme.d.ts +8 -0
  36. package/dist/src/components/chart/types.d.ts +39 -2
  37. package/dist/src/components/chart/use-measure.d.ts +2 -1
  38. package/dist/src/components/code-block/code-block.d.ts +23 -11
  39. package/dist/src/components/code-block/highlight.d.ts +24 -0
  40. package/dist/src/components/code-block/index.d.ts +4 -1
  41. package/dist/src/components/code-block/languages.d.ts +64 -0
  42. package/dist/src/components/code-block/pho-theme.d.ts +18 -0
  43. package/dist/src/components/code-block/tokens.d.ts +14 -0
  44. package/dist/src/components/data-table/chrome.d.ts +25 -0
  45. package/dist/src/components/data-table/data-table.d.ts +1 -2
  46. package/dist/src/components/line-chart/line-chart.d.ts +12 -3
  47. package/dist/src/components/trace/trace.d.ts +15 -4
  48. package/dist/src/motion/index.d.ts +6 -0
  49. package/dist/src/sections/basic-page/basic-page.d.ts +2 -0
  50. package/package.json +4 -1
  51. package/src/styles/theme.css +17 -4
  52. package/dist/chunks/IconArrowsMinimize-BfPUGuCB.js +0 -75
  53. package/dist/chunks/IconArrowsMinimize-BfPUGuCB.js.map +0 -1
  54. package/dist/chunks/bar-chart-DIALC2_z.js +0 -190
  55. package/dist/chunks/bar-chart-DIALC2_z.js.map +0 -1
  56. package/dist/chunks/basic-page-BUmntB7L.js.map +0 -1
  57. package/dist/chunks/code-block-BuFfh0zH.js +0 -197
  58. package/dist/chunks/code-block-BuFfh0zH.js.map +0 -1
  59. package/dist/chunks/data-table-Mog6m3d9.js.map +0 -1
  60. package/dist/chunks/ghost-search-AmVXd0zE.js +0 -25
  61. package/dist/chunks/ghost-search-AmVXd0zE.js.map +0 -1
  62. package/dist/chunks/legend-C0mU7dqd.js +0 -60
  63. package/dist/chunks/legend-C0mU7dqd.js.map +0 -1
  64. package/dist/chunks/line-chart-VuMYKzW3.js +0 -453
  65. package/dist/chunks/line-chart-VuMYKzW3.js.map +0 -1
  66. package/dist/chunks/trace-CjOi3_IP.js.map +0 -1
  67. package/dist/chunks/use-measure-C-i54AC6.js +0 -629
  68. package/dist/chunks/use-measure-C-i54AC6.js.map +0 -1
  69. package/dist/src/components/chart/axes.d.ts +0 -22
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-measure-C-i54AC6.js","names":[],"sources":["../../src/components/chart/axes.tsx","../../src/components/chart/format.ts","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ascending.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/descending.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisector.js","../../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ticks.js","../../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/interval.js","../../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/millisecond.js","../../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/duration.js","../../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/second.js","../../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/minute.js","../../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/hour.js","../../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/day.js","../../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/week.js","../../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/month.js","../../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/year.js","../../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/ticks.js","../../src/components/chart/scale.ts","../../src/components/chart/shell.tsx","../../src/components/chart/tooltip.tsx","../../src/components/chart/use-measure.ts"],"sourcesContent":["import type { ChartLayout } from \"./shell\";\n\nconst TICK_TEXT = {\n fontSize: 11,\n fill: \"var(--text-color-pho-description)\",\n fontVariantNumeric: \"tabular-nums\",\n} as const;\n\nexport interface YAxisProps {\n layout: ChartLayout;\n ticks: ReadonlyArray<number>;\n labels: ReadonlyArray<string>;\n scale: (value: number) => number;\n}\n\n/**\n * Gridlines across the plot with their labels on the left: hairlines one\n * step off the surface, the zero line a touch stronger so bars read as\n * standing on something.\n */\nexport function YAxis({ layout, ticks, labels, scale }: YAxisProps) {\n return (\n <g aria-hidden>\n {ticks.map((tick, index) => {\n const y = scale(tick);\n return (\n <g key={tick}>\n <line\n x1={layout.left}\n x2={layout.right}\n y1={y}\n y2={y}\n stroke={\n tick === 0\n ? \"var(--color-pho-chart-crosshair)\"\n : \"var(--color-pho-chart-grid)\"\n }\n />\n <text\n x={layout.left - 8}\n y={y}\n dy=\"0.35em\"\n textAnchor=\"end\"\n style={TICK_TEXT}\n >\n {labels[index]}\n </text>\n </g>\n );\n })}\n </g>\n );\n}\n\nexport interface XAxisProps {\n layout: ChartLayout;\n ticks: ReadonlyArray<{ x: number; label: string }>;\n}\n\n/** Time labels along the bottom band; the end labels tuck inside the plot. */\nexport function XAxis({ layout, ticks }: XAxisProps) {\n const y = layout.height - 6;\n return (\n <g aria-hidden>\n {ticks.map(({ x, label }) => {\n const half = (label.length * 6.5) / 2;\n const anchor =\n x - half < layout.left\n ? \"start\"\n : x + half > layout.right\n ? \"end\"\n : \"middle\";\n const tx =\n anchor === \"start\"\n ? Math.max(x, layout.left)\n : anchor === \"end\"\n ? Math.min(x, layout.right)\n : x;\n return (\n <text key={x} x={tx} y={y} textAnchor={anchor} style={TICK_TEXT}>\n {label}\n </text>\n );\n })}\n </g>\n );\n}\n","import type { ChartDatum, ChartSeries } from \"./types\";\n\n/**\n * The default number format: grouped digits for a value someone reads\n * (\"12,001\"), compact for an axis tick (\"12K\") where room is short.\n */\nexport function numberFormatter(\n locale: string | undefined,\n compact = false,\n): (value: number) => string {\n const format = new Intl.NumberFormat(\n locale,\n compact\n ? { notation: \"compact\", maximumFractionDigits: 1 }\n : { maximumFractionDigits: 2 },\n );\n return (value) => format.format(value);\n}\n\n/** A number under a series key, or nothing: missing, null, or not a number. */\nexport function readValue(datum: object, key: string): number | null {\n const value = (datum as Record<string, unknown>)[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\n/** \"Inbound and outbound\", \"p50, p90 and p99\". */\nexport function joinNames(names: ReadonlyArray<string>): string {\n if (names.length <= 1) return names[0] ?? \"\";\n return `${names.slice(0, -1).join(\", \")} and ${names[names.length - 1]}`;\n}\n\ninterface DescribeOptions<T extends ChartDatum> {\n data: ReadonlyArray<T>;\n series: ReadonlyArray<ChartSeries<T>>;\n /** Bars sum to a total; lines run between a low and a high. */\n kind: \"bar\" | \"line\";\n valueFormat: (value: number) => string;\n timeFormat: (date: Date) => string;\n}\n\n/**\n * What the figure says about itself to assistive tech: which series, over\n * what range, and for each one the total (bars) or the low and high\n * (lines), plus where it peaked.\n */\nexport function describeChart<T extends ChartDatum>({\n data,\n series,\n kind,\n valueFormat,\n timeFormat,\n}: DescribeOptions<T>): string {\n if (data.length === 0) return \"No data to show.\";\n const first = data[0]!;\n const last = data[data.length - 1]!;\n const range =\n data.length > 1\n ? `${timeFormat(new Date(first.x))} to ${timeFormat(new Date(last.x))}`\n : timeFormat(new Date(first.x));\n const parts = [`${joinNames(series.map((s) => s.label))}, ${range}.`];\n for (const s of series) {\n let total = 0;\n let min = Infinity;\n let max = -Infinity;\n let peakAt: Date | null = null;\n let seen = 0;\n for (const datum of data) {\n const value = readValue(datum, s.key);\n if (value == null) continue;\n seen++;\n total += value;\n if (value < min) min = value;\n if (value > max) {\n max = value;\n peakAt = new Date(datum.x);\n }\n }\n if (seen === 0) {\n parts.push(`${s.label}: no values.`);\n continue;\n }\n const peak = peakAt\n ? `, peak ${valueFormat(max)} at ${timeFormat(peakAt)}`\n : \"\";\n parts.push(\n kind === \"bar\"\n ? `${s.label}: ${valueFormat(total)} in total${peak}.`\n : `${s.label}: from ${valueFormat(min)} to ${valueFormat(max)}${peak}.`,\n );\n }\n return parts.join(\" \");\n}\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import { tickStep, ticks } from \"d3-array\";\nimport { timeDay, timeTicks, timeYear } from \"d3-time\";\n\n/** Epoch milliseconds for a datum's `x`. */\nexport function toTime(x: Date | number): number {\n return typeof x === \"number\" ? x : x.getTime();\n}\n\n/** A linear map from `domain` to `range`; a flat domain maps to its start. */\nexport function linearScale(\n domain: readonly [number, number],\n range: readonly [number, number],\n): (value: number) => number {\n const [d0, d1] = domain;\n const [r0, r1] = range;\n const span = d1 - d0;\n if (span === 0) return () => r0;\n return (value) => r0 + ((value - d0) / span) * (r1 - r0);\n}\n\n/**\n * A y domain on round numbers with three to five ticks, the last tick on\n * or above the data's high end so the top of the plot is labelled.\n *\n * When `integer` is set — or when both ends are whole numbers — the step\n * stays ≥ 1 so a count axis never labels 0.5 / 1.5.\n */\nexport function niceLinearDomain(\n min: number,\n max: number,\n options?: { integer?: boolean },\n): { domain: [number, number]; ticks: number[] } {\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n return { domain: [0, 1], ticks: [0, 1] };\n }\n if (min > max) [min, max] = [max, min];\n const integer =\n options?.integer ?? (Number.isInteger(min) && Number.isInteger(max));\n if (min === max) {\n // A flat series still needs room to sit in.\n if (max === 0) {\n return integer\n ? { domain: [0, 1], ticks: [0, 1] }\n : { domain: [0, 1], ticks: [0, 0.5, 1] };\n }\n if (max > 0) min = 0;\n else max = 0;\n }\n for (let count = 4; count >= 2; count--) {\n const step = integer\n ? wholeTickStep(min, max, count)\n : tickStep(min, max, count);\n const lo = Math.floor(min / step) * step;\n const hi = Math.ceil(max / step) * step;\n const values = integer ? rangeTicks(lo, hi, step) : ticks(lo, hi, count);\n if (values.length <= 5 || count === 2) {\n return { domain: [lo, hi], ticks: values };\n }\n }\n return { domain: [min, max], ticks: [min, max] };\n}\n\n/** A 1-2-5 step that is never a fraction. */\nfunction wholeTickStep(min: number, max: number, count: number): number {\n const raw = tickStep(min, max, count);\n if (raw <= 1) return 1;\n if (Number.isInteger(raw)) return raw;\n const exp = Math.floor(Math.log10(raw));\n const mag = 10 ** exp;\n const n = raw / mag;\n const nice = n <= 1 ? 1 : n <= 2 ? 2 : n <= 5 ? 5 : 10;\n return nice * mag;\n}\n\nfunction rangeTicks(lo: number, hi: number, step: number): number[] {\n const values: number[] = [];\n for (let at = lo; at <= hi + step / 2; at += step) values.push(at);\n return values;\n}\n\n/** The gap between buckets, in ms — the median step, so one hole doesn't skew it. */\nexport function bucketSpan(times: ReadonlyArray<number>): number {\n if (times.length < 2) return 0;\n const steps = [];\n for (let i = 1; i < times.length; i++) steps.push(times[i]! - times[i - 1]!);\n steps.sort((a, b) => a - b);\n return steps[Math.floor(steps.length / 2)]!;\n}\n\nconst DAY = 86_400_000;\n\n/**\n * Time ticks for a plot `width` px wide: one every ~96px, on the round\n * boundaries d3-time picks (5 minutes, an hour, a day, a month…).\n */\nexport function timeAxisTicks(\n start: number,\n stop: number,\n width: number,\n): Date[] {\n if (stop <= start || width <= 0) return [new Date(start)];\n const count = Math.max(2, Math.floor(width / 96));\n const chosen = timeTicks(new Date(start), new Date(stop), count);\n // d3's every-nth-day interval counts from the first of the month, so a\n // two-day step reads Aug 29, Aug 31, Sep 1, Sep 3. Re-step multi-day\n // ticks evenly from the first one instead.\n if (chosen.length > 2 && chosen.every((t) => isMidnight(t))) {\n const gaps = chosen.slice(1).map((t, i) => timeDay.count(chosen[i]!, t));\n const step = Math.max(...gaps);\n if (step > 1 && gaps.some((gap) => gap !== step)) {\n return timeDay.range(chosen[0]!, new Date(stop + 1), step);\n }\n }\n return chosen;\n}\n\nfunction isMidnight(date: Date): boolean {\n return timeDay(date).getTime() === date.getTime();\n}\n\n/**\n * Labels a tick by the boundary it sits on: a time within a day, a date at\n * midnight, month and year at a new year. `Intl` does the wording, so the\n * labels follow the locale.\n */\nexport function timeTickFormatter(locale?: string): (date: Date) => string {\n const time = new Intl.DateTimeFormat(locale, {\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n const day = new Intl.DateTimeFormat(locale, {\n month: \"short\",\n day: \"numeric\",\n });\n const year = new Intl.DateTimeFormat(locale, {\n month: \"short\",\n year: \"numeric\",\n });\n return (date) => {\n if (timeDay(date).getTime() < date.getTime()) return time.format(date);\n if (timeYear(date).getTime() < date.getTime()) return day.format(date);\n return year.format(date);\n };\n}\n\n/**\n * The tooltip's heading for a bucket: the date alone when buckets are a\n * day or longer, date and time below that.\n */\nexport function bucketTimeFormatter(\n locale: string | undefined,\n span: number,\n): (date: Date) => string {\n const format = new Intl.DateTimeFormat(\n locale,\n span >= DAY\n ? { month: \"short\", day: \"numeric\" }\n : { month: \"short\", day: \"numeric\", hour: \"numeric\", minute: \"2-digit\" },\n );\n return (date) => format.format(date);\n}\n\n/** Estimated width of a tick label at the axis's 11px, with breathing room. */\nfunction labelWidth(label: string): number {\n return label.length * 6.5 + 16;\n}\n\n/** Keep every nth tick so the labels fit the width without touching. */\nexport function thinTicks<T>(\n values: ReadonlyArray<T>,\n labelOf: (value: T) => string,\n width: number,\n): T[] {\n if (values.length < 2) return [...values];\n const widest = Math.max(...values.map((value) => labelWidth(labelOf(value))));\n const fit = Math.max(1, Math.floor(width / widest));\n const every = Math.ceil(values.length / fit);\n if (every <= 1) return [...values];\n return values.filter((_, index) => index % every === 0);\n}\n\n/** The index of the position nearest `px` in an ascending list. */\nexport function nearestIndex(positions: ReadonlyArray<number>, px: number) {\n if (positions.length === 0) return -1;\n let lo = 0;\n let hi = positions.length - 1;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (positions[mid]! < px) lo = mid + 1;\n else hi = mid;\n }\n if (lo > 0 && px - positions[lo - 1]! < positions[lo]! - px) return lo - 1;\n return lo;\n}\n","import {\n useId,\n type ComponentProps,\n type PointerEvent,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/** The inner box the marks draw in, once the axes have taken their bands. */\nexport interface ChartLayout {\n width: number;\n height: number;\n left: number;\n top: number;\n right: number;\n bottom: number;\n innerWidth: number;\n innerHeight: number;\n}\n\nconst TOP = 8;\nconst RIGHT = 8;\nconst X_AXIS = 22;\n\n/** The plot's box for a measured width and the y-axis labels it must fit. */\nexport function chartLayout(\n width: number,\n height: number,\n yLabels: ReadonlyArray<string>,\n): ChartLayout {\n const widest = yLabels.reduce((max, label) => Math.max(max, label.length), 0);\n const left = Math.ceil(widest * 6.5) + 10;\n const bottom = height - X_AXIS;\n return {\n width,\n height,\n left,\n top: TOP,\n right: width - RIGHT,\n bottom,\n innerWidth: Math.max(0, width - left - RIGHT),\n innerHeight: Math.max(0, bottom - TOP),\n };\n}\n\nexport interface ChartShellProps extends Omit<\n ComponentProps<\"div\">,\n \"children\"\n> {\n /** The figure's `aria-label`. */\n label: string;\n /** The figure's spoken summary. */\n description: string;\n height: number;\n /** The measured width; 0 before the browser has measured. */\n width: number;\n containerRef: RefObject<HTMLDivElement | null>;\n legend?: ReactNode;\n tooltip?: ReactNode;\n loading?: boolean;\n empty?: ReactNode;\n /** The frame says `empty` instead of drawing. */\n showEmpty?: boolean;\n /** The pointer over the plot — the chart snaps to the nearest bucket. */\n onPlotPointerMove?: (event: PointerEvent<SVGSVGElement>) => void;\n onPlotPointerLeave?: () => void;\n children?: ReactNode;\n}\n\n/**\n * The frame every chart draws in: a fixed-height plot box holding the\n * SVG (`role=\"img\"`, labelled and described for assistive tech), the\n * tooltip layer over it, the legend on its own line below. Width comes\n * from the parent; `height` covers the plot and the x-axis band, so a\n * card never grows a nested scroll.\n */\nexport function ChartShell({\n label,\n description,\n height,\n width,\n containerRef,\n legend,\n tooltip,\n loading,\n empty,\n showEmpty,\n onPlotPointerMove,\n onPlotPointerLeave,\n className,\n children,\n ...props\n}: ChartShellProps) {\n const descriptionId = useId();\n return (\n <div\n data-chart=\"\"\n className={cn(\"flex w-full min-w-0 flex-col gap-3\", className)}\n {...props}\n >\n <div\n ref={containerRef}\n aria-busy={loading || undefined}\n className={cn(\n \"relative w-full transition-opacity duration-150 ease-out\",\n loading && \"opacity-50\",\n )}\n style={{ height }}\n >\n <svg\n // An inline SVG figure is `role=\"img\"` by the SVG-AAM; there is\n // no <img> to reach for.\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role\n role=\"img\"\n aria-label={label}\n aria-describedby={descriptionId}\n width=\"100%\"\n height={height}\n viewBox={width > 0 ? `0 0 ${width} ${height}` : undefined}\n className=\"animate-pho-chart-in block overflow-visible select-none\"\n onPointerMove={onPlotPointerMove}\n onPointerLeave={onPlotPointerLeave}\n >\n {width > 0 && !showEmpty ? children : null}\n </svg>\n <p id={descriptionId} className=\"sr-only\">\n {description}\n </p>\n {showEmpty && (\n <div className=\"text-pho-description absolute inset-0 flex items-center justify-center text-xs\">\n {empty}\n </div>\n )}\n {tooltip}\n </div>\n {legend}\n </div>\n );\n}\n","import { type ReactNode } from \"react\";\nimport { ChartSwatch, type ChartSwatchKind } from \"./legend\";\nimport type { ChartBreakdownItem } from \"./types\";\n\nexport interface ChartTooltipRow {\n label: string;\n value: string;\n color: string;\n kind?: ChartSwatchKind;\n dashed?: boolean;\n}\n\nexport interface ChartTooltipProps {\n /** The snapped x of the hovered bucket, in container px. */\n x: number;\n /** The container's width — the tooltip flips to the left past the middle. */\n width: number;\n /** Where the tooltip's top sits — the plot's top. */\n top: number;\n heading: string;\n rows: ReadonlyArray<ChartTooltipRow>;\n breakdown?: ReadonlyArray<ChartBreakdownItem>;\n breakdownTitle?: ReactNode;\n valueFormat: (value: number) => string;\n}\n\n/**\n * The readout for one bucket: its time, then every series' value (values\n * lead, in primary ink; labels follow), then the bucket's breakdown when\n * it carries one. Presentational — the figure's description already\n * speaks the data — and it never takes the pointer.\n */\nexport function ChartTooltip({\n x,\n width,\n top,\n heading,\n rows,\n breakdown,\n breakdownTitle,\n valueFormat,\n}: ChartTooltipProps) {\n const flip = x > width / 2;\n return (\n <div\n aria-hidden\n data-chart-tooltip=\"\"\n className=\"bg-pho-primary shadow-pho-lg ring-pho-secondary rounded-base pointer-events-none absolute z-10 max-w-72 min-w-40 px-3 py-2 text-xs ring-1 ring-inset\"\n style={flip ? { right: width - x + 12, top } : { left: x + 12, top }}\n >\n <div className=\"text-pho-primary font-medium\">{heading}</div>\n <ul className=\"mt-1 flex flex-col gap-0.5\">\n {rows.map((row) => (\n <li\n key={row.label}\n className=\"flex items-center justify-between gap-4\"\n >\n <span className=\"text-pho-secondary flex min-w-0 items-center gap-1.5\">\n <ChartSwatch\n color={row.color}\n kind={row.kind}\n dashed={row.dashed}\n />\n <span className=\"truncate\">{row.label}</span>\n </span>\n <span className=\"text-pho-primary font-medium tabular-nums\">\n {row.value}\n </span>\n </li>\n ))}\n </ul>\n {breakdown != null && breakdown.length > 0 && (\n <div className=\"border-pho-secondary mt-2 border-t pt-2\">\n {breakdownTitle != null && (\n <div className=\"text-pho-description mb-1\">{breakdownTitle}</div>\n )}\n <ul className=\"flex flex-col gap-0.5\">\n {breakdown.map((item) => (\n <li\n key={item.label}\n className=\"flex items-center justify-between gap-4\"\n >\n <span className=\"text-pho-secondary truncate\">\n {item.label}\n </span>\n <span className=\"text-pho-primary tabular-nums\">\n {valueFormat(item.value)}\n </span>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","import {\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type RefObject,\n} from \"react\";\n\n// React 18 warns that useLayoutEffect does nothing on the server (19 dropped\n// the warning); a plain effect there keeps a server render quiet.\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\n/**\n * The width of the element the ref lands on, kept current through a\n * ResizeObserver. Nothing runs on the server: the first render is 0 wide\n * and the plot fills in once the browser has measured. A `fixed` width\n * skips measuring altogether.\n */\nexport function useMeasuredWidth<T extends HTMLElement>(\n fixed?: number,\n): [RefObject<T | null>, number] {\n const ref = useRef<T>(null);\n const [width, setWidth] = useState(0);\n useIsomorphicLayoutEffect(() => {\n if (fixed != null) return;\n const element = ref.current;\n if (element == null) return;\n setWidth(element.getBoundingClientRect().width);\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver((entries) => {\n const next = entries[0]?.contentRect.width;\n if (next != null) setWidth(next);\n });\n observer.observe(element);\n return () => observer.disconnect();\n }, [fixed]);\n return [ref, fixed ?? width];\n}\n"],"x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { ChartLayout } from './shell';
2
- export interface YAxisProps {
3
- layout: ChartLayout;
4
- ticks: ReadonlyArray<number>;
5
- labels: ReadonlyArray<string>;
6
- scale: (value: number) => number;
7
- }
8
- /**
9
- * Gridlines across the plot with their labels on the left: hairlines one
10
- * step off the surface, the zero line a touch stronger so bars read as
11
- * standing on something.
12
- */
13
- export declare function YAxis({ layout, ticks, labels, scale }: YAxisProps): import("react").JSX.Element;
14
- export interface XAxisProps {
15
- layout: ChartLayout;
16
- ticks: ReadonlyArray<{
17
- x: number;
18
- label: string;
19
- }>;
20
- }
21
- /** Time labels along the bottom band; the end labels tuck inside the plot. */
22
- export declare function XAxis({ layout, ticks }: XAxisProps): import("react").JSX.Element;