@k2b/ui 0.51.0 → 0.52.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 (206) hide show
  1. package/dist/base.css +3 -0
  2. package/dist/browser/actions/Toolbar.js +8 -2
  3. package/dist/browser/actions/Toolbar.js.map +1 -1
  4. package/dist/browser/charts/core/bar-labels.js +5 -0
  5. package/dist/browser/charts/core/bar-labels.js.map +1 -0
  6. package/dist/browser/charts/core/bubble.js +166 -0
  7. package/dist/browser/charts/core/bubble.js.map +1 -0
  8. package/dist/browser/charts/core/default-styles.js +83 -0
  9. package/dist/browser/charts/core/default-styles.js.map +1 -0
  10. package/dist/browser/charts/core/funnel-layout.js +79 -0
  11. package/dist/browser/charts/core/funnel-layout.js.map +1 -0
  12. package/dist/browser/charts/core/funnel.js +27 -0
  13. package/dist/browser/charts/core/funnel.js.map +1 -0
  14. package/dist/browser/charts/core/index.js +6 -1
  15. package/dist/browser/charts/core/index.js.map +1 -1
  16. package/dist/browser/charts/core/pareto.js +120 -0
  17. package/dist/browser/charts/core/pareto.js.map +1 -0
  18. package/dist/browser/charts/core/radar.js +101 -0
  19. package/dist/browser/charts/core/radar.js.map +1 -0
  20. package/dist/browser/charts/core/registry.js +11 -1
  21. package/dist/browser/charts/core/registry.js.map +1 -1
  22. package/dist/browser/charts/core/render-size.js +3 -1
  23. package/dist/browser/charts/core/render-size.js.map +1 -1
  24. package/dist/browser/charts/core/render.js +19 -0
  25. package/dist/browser/charts/core/render.js.map +1 -1
  26. package/dist/browser/charts/core/snapshot.js +1 -1
  27. package/dist/browser/charts/core/snapshot.js.map +1 -1
  28. package/dist/browser/charts/core/svg-barGauge.js +67 -0
  29. package/dist/browser/charts/core/svg-barGauge.js.map +1 -0
  30. package/dist/browser/charts/core/svg-boxplot.js +127 -0
  31. package/dist/browser/charts/core/svg-boxplot.js.map +1 -0
  32. package/dist/browser/charts/core/svg-common.js +1065 -0
  33. package/dist/browser/charts/core/svg-common.js.map +1 -0
  34. package/dist/browser/charts/core/svg-gauge.js +185 -0
  35. package/dist/browser/charts/core/svg-gauge.js.map +1 -0
  36. package/dist/browser/charts/core/svg-heatmap.js +80 -0
  37. package/dist/browser/charts/core/svg-heatmap.js.map +1 -0
  38. package/dist/browser/charts/core/svg-histogram.js +73 -0
  39. package/dist/browser/charts/core/svg-histogram.js.map +1 -0
  40. package/dist/browser/charts/core/svg-renderers.js +9 -1777
  41. package/dist/browser/charts/core/svg-renderers.js.map +1 -1
  42. package/dist/browser/charts/core/svg-scatter.js +114 -0
  43. package/dist/browser/charts/core/svg-scatter.js.map +1 -0
  44. package/dist/browser/charts/core/treemap.js +138 -0
  45. package/dist/browser/charts/core/treemap.js.map +1 -0
  46. package/dist/browser/charts/description.js.map +1 -1
  47. package/dist/browser/content/ChartRoot.js +21 -7
  48. package/dist/browser/content/ChartRoot.js.map +1 -1
  49. package/dist/browser/content/ChartSnapshotView.js +4 -1
  50. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  51. package/dist/browser/content/DataTable.js +186 -193
  52. package/dist/browser/content/DataTable.js.map +1 -1
  53. package/dist/browser/content/Lightbox.js +55 -23
  54. package/dist/browser/content/Lightbox.js.map +1 -1
  55. package/dist/browser/content/ThumbnailStrip.js +174 -0
  56. package/dist/browser/content/ThumbnailStrip.js.map +1 -0
  57. package/dist/browser/content/chart-bar.js +98 -0
  58. package/dist/browser/content/chart-bar.js.map +1 -1
  59. package/dist/browser/content/chart-inspection-core.js +28 -8
  60. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  61. package/dist/browser/content/chart-message-catalog.js +18 -0
  62. package/dist/browser/content/chart-message-catalog.js.map +1 -1
  63. package/dist/browser/content/index.js +1 -0
  64. package/dist/browser/content/index.js.map +1 -1
  65. package/dist/browser/content/thumbnail-strip-messages.js +24 -0
  66. package/dist/browser/content/thumbnail-strip-messages.js.map +1 -0
  67. package/dist/browser/inputs/ChoiceInputs.js +132 -101
  68. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  69. package/dist/browser/inputs/index.js +1 -0
  70. package/dist/browser/inputs/index.js.map +1 -1
  71. package/dist/browser/inputs/markdown/MarkdownSelectionToolbar.js +330 -0
  72. package/dist/browser/inputs/markdown/MarkdownSelectionToolbar.js.map +1 -0
  73. package/dist/browser/internal/field.js +96 -77
  74. package/dist/browser/internal/field.js.map +1 -1
  75. package/dist/browser/layout/AppWorkspace.js +7 -5
  76. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  77. package/dist/browser/layout/PanelDialog.js +92 -68
  78. package/dist/browser/layout/PanelDialog.js.map +1 -1
  79. package/dist/browser/surfaces/StatCell.js +82 -70
  80. package/dist/browser/surfaces/StatCell.js.map +1 -1
  81. package/dist/browser/surfaces/stat-cell-messages.js +4 -2
  82. package/dist/browser/surfaces/stat-cell-messages.js.map +1 -1
  83. package/dist/browser/widgets/DashboardFrame.js +93 -88
  84. package/dist/browser/widgets/DashboardFrame.js.map +1 -1
  85. package/dist/ssr/actions/Toolbar.js +8 -2
  86. package/dist/ssr/actions/Toolbar.js.map +1 -1
  87. package/dist/ssr/charts/core/bar-labels.js +5 -0
  88. package/dist/ssr/charts/core/bar-labels.js.map +1 -0
  89. package/dist/ssr/charts/core/bubble.js +166 -0
  90. package/dist/ssr/charts/core/bubble.js.map +1 -0
  91. package/dist/ssr/charts/core/default-styles.js +83 -0
  92. package/dist/ssr/charts/core/default-styles.js.map +1 -0
  93. package/dist/ssr/charts/core/funnel-layout.js +79 -0
  94. package/dist/ssr/charts/core/funnel-layout.js.map +1 -0
  95. package/dist/ssr/charts/core/funnel.js +27 -0
  96. package/dist/ssr/charts/core/funnel.js.map +1 -0
  97. package/dist/ssr/charts/core/index.js +6 -1
  98. package/dist/ssr/charts/core/index.js.map +1 -1
  99. package/dist/ssr/charts/core/pareto.js +120 -0
  100. package/dist/ssr/charts/core/pareto.js.map +1 -0
  101. package/dist/ssr/charts/core/radar.js +101 -0
  102. package/dist/ssr/charts/core/radar.js.map +1 -0
  103. package/dist/ssr/charts/core/registry.js +11 -1
  104. package/dist/ssr/charts/core/registry.js.map +1 -1
  105. package/dist/ssr/charts/core/render-size.js +3 -1
  106. package/dist/ssr/charts/core/render-size.js.map +1 -1
  107. package/dist/ssr/charts/core/render.js +19 -0
  108. package/dist/ssr/charts/core/render.js.map +1 -1
  109. package/dist/ssr/charts/core/snapshot.js +1 -1
  110. package/dist/ssr/charts/core/snapshot.js.map +1 -1
  111. package/dist/ssr/charts/core/svg-barGauge.js +67 -0
  112. package/dist/ssr/charts/core/svg-barGauge.js.map +1 -0
  113. package/dist/ssr/charts/core/svg-boxplot.js +127 -0
  114. package/dist/ssr/charts/core/svg-boxplot.js.map +1 -0
  115. package/dist/ssr/charts/core/svg-common.js +1065 -0
  116. package/dist/ssr/charts/core/svg-common.js.map +1 -0
  117. package/dist/ssr/charts/core/svg-gauge.js +185 -0
  118. package/dist/ssr/charts/core/svg-gauge.js.map +1 -0
  119. package/dist/ssr/charts/core/svg-heatmap.js +80 -0
  120. package/dist/ssr/charts/core/svg-heatmap.js.map +1 -0
  121. package/dist/ssr/charts/core/svg-histogram.js +73 -0
  122. package/dist/ssr/charts/core/svg-histogram.js.map +1 -0
  123. package/dist/ssr/charts/core/svg-renderers.js +9 -1777
  124. package/dist/ssr/charts/core/svg-renderers.js.map +1 -1
  125. package/dist/ssr/charts/core/svg-scatter.js +114 -0
  126. package/dist/ssr/charts/core/svg-scatter.js.map +1 -0
  127. package/dist/ssr/charts/core/treemap.js +138 -0
  128. package/dist/ssr/charts/core/treemap.js.map +1 -0
  129. package/dist/ssr/charts/description.js.map +1 -1
  130. package/dist/ssr/content/ChartRoot.js +21 -7
  131. package/dist/ssr/content/ChartRoot.js.map +1 -1
  132. package/dist/ssr/content/ChartSnapshotView.js +1 -0
  133. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  134. package/dist/ssr/content/DataTable.js +12 -16
  135. package/dist/ssr/content/DataTable.js.map +1 -1
  136. package/dist/ssr/content/Lightbox.js +32 -3
  137. package/dist/ssr/content/Lightbox.js.map +1 -1
  138. package/dist/ssr/content/ThumbnailStrip.js +103 -0
  139. package/dist/ssr/content/ThumbnailStrip.js.map +1 -0
  140. package/dist/ssr/content/chart-bar.js +98 -0
  141. package/dist/ssr/content/chart-bar.js.map +1 -1
  142. package/dist/ssr/content/chart-inspection-core.js +28 -8
  143. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  144. package/dist/ssr/content/chart-message-catalog.js +18 -0
  145. package/dist/ssr/content/chart-message-catalog.js.map +1 -1
  146. package/dist/ssr/content/index.js +1 -0
  147. package/dist/ssr/content/index.js.map +1 -1
  148. package/dist/ssr/content/thumbnail-strip-messages.js +24 -0
  149. package/dist/ssr/content/thumbnail-strip-messages.js.map +1 -0
  150. package/dist/ssr/inputs/ChoiceInputs.js +55 -40
  151. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  152. package/dist/ssr/inputs/index.js +1 -0
  153. package/dist/ssr/inputs/index.js.map +1 -1
  154. package/dist/ssr/inputs/markdown/MarkdownSelectionToolbar.js +293 -0
  155. package/dist/ssr/inputs/markdown/MarkdownSelectionToolbar.js.map +1 -0
  156. package/dist/ssr/internal/field.js +36 -24
  157. package/dist/ssr/internal/field.js.map +1 -1
  158. package/dist/ssr/layout/AppWorkspace.js +5 -1
  159. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  160. package/dist/ssr/layout/PanelDialog.js +40 -26
  161. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  162. package/dist/ssr/surfaces/StatCell.js +29 -18
  163. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  164. package/dist/ssr/surfaces/stat-cell-messages.js +4 -2
  165. package/dist/ssr/surfaces/stat-cell-messages.js.map +1 -1
  166. package/dist/ssr/widgets/DashboardFrame.js +6 -11
  167. package/dist/ssr/widgets/DashboardFrame.js.map +1 -1
  168. package/dist/styles.css +1 -1
  169. package/dist/types/actions/Toolbar.d.ts +2 -0
  170. package/dist/types/charts/core/bar-labels.d.ts +1 -0
  171. package/dist/types/charts/core/bubble.d.ts +66 -0
  172. package/dist/types/charts/core/default-styles.d.ts +1 -0
  173. package/dist/types/charts/core/funnel-layout.d.ts +43 -0
  174. package/dist/types/charts/core/funnel.d.ts +13 -0
  175. package/dist/types/charts/core/index.d.ts +6 -1
  176. package/dist/types/charts/core/pareto.d.ts +40 -0
  177. package/dist/types/charts/core/radar.d.ts +47 -0
  178. package/dist/types/charts/core/registry.d.ts +10 -0
  179. package/dist/types/charts/core/render-size.d.ts +1 -1
  180. package/dist/types/charts/core/svg-barGauge.d.ts +3 -0
  181. package/dist/types/charts/core/svg-boxplot.d.ts +18 -0
  182. package/dist/types/charts/core/svg-common.d.ts +612 -0
  183. package/dist/types/charts/core/svg-gauge.d.ts +6 -0
  184. package/dist/types/charts/core/svg-heatmap.d.ts +6 -0
  185. package/dist/types/charts/core/svg-histogram.d.ts +16 -0
  186. package/dist/types/charts/core/svg-renderers.d.ts +8 -612
  187. package/dist/types/charts/core/svg-scatter.d.ts +23 -0
  188. package/dist/types/charts/core/treemap.d.ts +45 -0
  189. package/dist/types/charts/description.d.ts +63 -0
  190. package/dist/types/content/ChartRoot.d.ts +1 -1
  191. package/dist/types/content/Lightbox.d.ts +2 -0
  192. package/dist/types/content/ThumbnailStrip.d.ts +29 -0
  193. package/dist/types/content/chart-bar.d.ts +38 -2
  194. package/dist/types/content/chart-inspection-core.d.ts +7 -0
  195. package/dist/types/content/chart-inspection.d.ts +1 -0
  196. package/dist/types/content/chart-message-catalog.d.ts +8 -0
  197. package/dist/types/content/index.d.ts +1 -0
  198. package/dist/types/content/thumbnail-strip-messages.d.ts +10 -0
  199. package/dist/types/inputs/ChoiceInputs.d.ts +2 -0
  200. package/dist/types/inputs/index.d.ts +2 -0
  201. package/dist/types/inputs/markdown/MarkdownSelectionToolbar.d.ts +19 -0
  202. package/dist/types/internal/field.d.ts +2 -0
  203. package/dist/types/layout/PanelDialog.d.ts +5 -0
  204. package/dist/types/surfaces/stat-cell-messages.d.ts +1 -0
  205. package/dist/types/widgets/DashboardFrame.d.ts +4 -1
  206. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/ThumbnailStrip.tsx"],"sourcesContent":["import { createEffect, For, type JSX, on, Show } from \"solid-js\";\nimport { IconButton } from \"../actions/Button\";\nimport { createScrollFade } from \"../layout/scroll-fade\";\nimport { useThumbnailStripMessages } from \"./thumbnail-strip-messages\";\n\n/** One image in a `ThumbnailStrip`. */\nexport type ThumbnailStripItem = {\n id: string;\n name: string;\n /** Small image URL, or a component that renders the caller's own thumbnail; a neutral tile shows until it loads. */\n thumbnail?: string | (() => JSX.Element);\n /** Marks an image with unsaved edits. */\n dirty?: boolean;\n};\n\nexport type ThumbnailStripProps = {\n items: readonly ThumbnailStripItem[];\n /** The `id` of the shown image; it is ringed, scrolled into view, and the strip's one tab stop. */\n currentItem?: string;\n onSelectItem: (id: string) => void;\n /** Adds a \"+\" tile at the end. */\n onAddItems?: () => void;\n /** Accessible name of the strip, such as \"Images\". */\n label: string;\n /** The host's layer class, such as `k2b-overlay-surface` where the strip floats over a picture. */\n class?: string;\n};\n\n/** Room an item keeps from a fading edge when keyboard focus scrolls it into view. */\nconst EDGE = 48;\n\n/**\n * A row of image thumbnails, 44 px high, that scrolls sideways and fades softly only on the side where more images\n * follow. The current image is ringed and is the strip's one tab stop; the arrow keys, Home, and End move focus between\n * images, and Enter or a click shows one. A dot marks unsaved edits. The host decides where the strip sits, also on a\n * phone, and whether it floats over a picture.\n */\nexport function ThumbnailStrip(props: ThumbnailStripProps): JSX.Element {\n const messages = useThumbnailStripMessages();\n let list: HTMLUListElement | undefined;\n createScrollFade(\n () => list,\n () => true,\n );\n\n // The current image scrolls into the middle whenever it or the list changes.\n createEffect(\n on(\n () => [props.currentItem, props.items.length] as const,\n () =>\n queueMicrotask(() => {\n const current = list?.querySelector<HTMLElement>('[aria-current=\"true\"]');\n if (!list || !current) return;\n list.style.scrollBehavior = \"auto\";\n list.scrollLeft = current.offsetLeft - (list.clientWidth - current.offsetWidth) / 2;\n list.style.scrollBehavior = \"\";\n }),\n ),\n );\n\n // A native listener, so a host that handles arrow keys itself, such as a lightbox, does not also see them.\n const keys = (event: KeyboardEvent) => {\n // The \"+\" tile takes part in the arrow keys, so the keyboard reaches it without a tab stop of its own.\n const thumbs = [...(list?.querySelectorAll<HTMLButtonElement>(\".k2b-thumbnail-strip__thumb, .k2b-thumbnail-strip__add\") ?? [])];\n const at = thumbs.findIndex((thumb) => thumb === document.activeElement);\n if (at < 0 || !list) return;\n const to = { ArrowRight: Math.min(thumbs.length - 1, at + 1), ArrowLeft: Math.max(0, at - 1), Home: 0, End: thumbs.length - 1 }[\n event.key\n ];\n if (to === undefined) return;\n event.preventDefault();\n event.stopPropagation();\n thumbs.forEach((thumb, index) => {\n thumb.tabIndex = index === to ? 0 : -1;\n });\n const target = thumbs[to];\n if (!target) return;\n target.focus({ preventScroll: true });\n if (target.offsetLeft < list.scrollLeft + EDGE) list.scrollLeft = target.offsetLeft - EDGE;\n else if (target.offsetLeft + target.offsetWidth > list.scrollLeft + list.clientWidth - EDGE)\n list.scrollLeft = target.offsetLeft + target.offsetWidth - list.clientWidth + EDGE;\n };\n\n return (\n <nav class={`k2b-thumbnail-strip ${props.class ?? \"\"}`} aria-label={props.label}>\n <ul ref={list} data-scroll-fade-mode=\"both\" data-scroll-fade-axis=\"horizontal\" on:keydown={keys}>\n <For each={props.items}>\n {(item) => {\n const current = () => item.id === props.currentItem;\n return (\n <li>\n <button\n type=\"button\"\n class=\"k2b-thumbnail-strip__thumb\"\n aria-current={current()}\n tabindex={current() ? 0 : -1}\n aria-label={`${item.name}${current() ? `, ${messages().thumbnailCurrent}` : \"\"}${item.dirty ? `, ${messages().thumbnailUnsaved}` : \"\"}`}\n title={item.name}\n onClick={() => {\n if (!current()) props.onSelectItem(item.id);\n }}\n >\n {(() => {\n const thumbnail = item.thumbnail;\n if (typeof thumbnail === \"function\") return thumbnail();\n return thumbnail ? <img src={thumbnail} alt=\"\" loading=\"lazy\" decoding=\"async\" draggable={false} /> : null;\n })()}\n <Show when={item.dirty}>\n <span class=\"k2b-thumbnail-strip__dirty\" aria-hidden=\"true\" />\n </Show>\n </button>\n </li>\n );\n }}\n </For>\n <Show when={props.onAddItems}>\n {(add) => (\n <li>\n <IconButton class=\"k2b-thumbnail-strip__add\" size=\"sm\" tabindex=\"-1\" label={messages().thumbnailAdd} onClick={() => add()()}>\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </IconButton>\n </li>\n )}\n </Show>\n </ul>\n </nav>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ import { barPercent } from "../charts/core/bar-labels";
1
2
  import { chartDatumSvg, computeDomain, escapeXml, extendDomainToNice, MAX_AXIS_TICKS, mapLog, mapRange, niceLogTicks, niceStep, referenceLineAttributes, svgRoot } from "../charts/core/svg-renderers";
2
3
  import { chartMessages } from "./chart-message-catalog";
3
4
 
@@ -148,6 +149,15 @@ const columnsFit = (opts, finite, width) => {
148
149
  /** The renderer's plan for a chart: its layout and logical height at `width`, derived from the data alone. */
149
150
  const barChartPlan = (opts, width = 480) => {
150
151
  const finite = finiteItems(opts.data ?? []);
152
+ if (opts.layout === "rows" && !opts.series) return {
153
+ layout: "rows",
154
+ height: rankedBarLayout(opts, {
155
+ width,
156
+ height: 280
157
+ }).height,
158
+ finite,
159
+ header: headerHeight(opts)
160
+ };
151
161
  if (opts.series) return {
152
162
  layout: "columns",
153
163
  height: 280,
@@ -460,6 +470,7 @@ const renderRows = (opts, plan, width, inspect) => {
460
470
  */
461
471
  export const renderBarChartSvg = opts => {
462
472
  if (opts.series) return renderSeriesBars(opts);
473
+ if (opts.layout === "rows") return renderRankedBars(opts);
463
474
  const plan = barChartPlan(opts, opts.width);
464
475
  // The empty drawing of stdlib's bar chart, written here so bundles leave out stdlib's whole bar renderer.
465
476
  if (!plan.finite.length) return svgRoot({
@@ -703,4 +714,91 @@ const visibleCategoryLabels = (labels, left, slot, width, units) => {
703
714
  const first = Math.max(0, labels.findIndex((_, i) => inside(i)));
704
715
  return new Set(labels.flatMap((_, i) => i >= first && (i - first) % step === 0 && inside(i) ? [i] : []));
705
716
  };
717
+
718
+ /** Ranked rows retain original indices. A limit changes the drawing, never the denominator or source data. */
719
+ export function rankedBarLayout(opts, size = {
720
+ width: 480,
721
+ height: 280
722
+ }) {
723
+ if (opts.limit !== undefined && (!Number.isInteger(opts.limit) || opts.limit < 1)) throw new RangeError("Bar list limit must be a positive integer");
724
+ if (opts.data?.some(d => Number.isFinite(d.value) && d.value < 0)) throw new RangeError("Ranked bar lists require nonnegative values");
725
+ const sorted = (opts.data ?? []).map((item, index) => ({
726
+ ...item,
727
+ index
728
+ })).sort((a, b) => (Number.isFinite(b.value) ? b.value : -Infinity) - (Number.isFinite(a.value) ? a.value : -Infinity));
729
+ const total = sorted.reduce((sum, d) => sum + (Number.isFinite(d.value) ? d.value : 0), 0);
730
+ const shown = sorted.slice(0, opts.limit),
731
+ rest = sorted.slice(shown.length);
732
+ const top = headerHeight(opts),
733
+ unit = size.width / narrow(opts),
734
+ format = opts.valueFormat ?? opts.yAxis?.format ?? (v => new Intl.NumberFormat(opts.locale ?? "en").format(v)),
735
+ percent = barPercent(opts.locale);
736
+ const shareWidth = opts.share ? 48 * unit : 0;
737
+ const valueWidth = Math.max(20, ...shown.map(d => chartTextWidth(Number.isFinite(d.value) ? format(d.value) : "–"))) * unit;
738
+ const labelWidth = Math.max(8, (size.width - shareWidth - valueWidth - 36 * unit) / unit);
739
+ const max = Math.max(0, ...sorted.map(d => Number.isFinite(d.value) ? d.value : 0));
740
+ const rows = shown.map((d, rank) => ({
741
+ ...d,
742
+ rank: rank + 1,
743
+ y: top + rank * 36,
744
+ width: Number.isFinite(d.value) && max > 0 ? d.value / max * size.width : 0,
745
+ share: Number.isFinite(d.value) && total > 0 ? d.value / total : null
746
+ }));
747
+ return {
748
+ ...size,
749
+ height: Math.max(size.height, top + rows.length * 36 + (rest.length ? 24 : 0)),
750
+ rows,
751
+ total,
752
+ rest,
753
+ restValue: rest.some(d => Number.isFinite(d.value)) ? rest.reduce((sum, d) => sum + (Number.isFinite(d.value) ? d.value : 0), 0) : null,
754
+ top,
755
+ unit,
756
+ format,
757
+ percent,
758
+ shareWidth,
759
+ labelWidth
760
+ };
761
+ }
762
+ const renderRankedBars = opts => {
763
+ const g = rankedBarLayout(opts, opts),
764
+ labels = chartMessages.resolve([opts.locale ?? "en"]).t;
765
+ const parts = [renderHeader(opts, opts.width)];
766
+ const color = opts.tone ? `var(--k2b-flow-${opts.tone}-mark,var(--stdlib-chart-c1,#3b82f6))` : "var(--stdlib-chart-c1,#3b82f6)";
767
+ const text = (x, y, value, anchor = "start", cls = "stdlib-chart-tick-label") => `<text class="${cls}" x="${x}" y="${y}" text-anchor="${anchor}">${escapeXml(value)}</text>`;
768
+ for (const row of g.rows) {
769
+ const value = Number.isFinite(row.value) ? row.value : null,
770
+ written = value === null ? "–" : g.format(value);
771
+ const share = row.share === null ? "–" : g.percent.format(row.share);
772
+ const label = wrapLabel(row.label, g.labelWidth * 11 / 13, 1).lines[0] ?? row.label;
773
+ const marks = `<rect class="k2b-chart-category-band" fill="none" pointer-events="all" x="0" y="${row.y}" width="${g.width}" height="32" rx="6"/><rect x="0" y="${row.y}" width="${row.width}" height="32" rx="6" style="fill:${color};fill-opacity:.16;pointer-events:none"/>${text(10 * g.unit, row.y + 20, label)}${text(g.width - 10 * g.unit - g.shareWidth, row.y + 20, written, "end", "stdlib-chart-bar-value")}${opts.share ? text(g.width - 10 * g.unit, row.y + 20, share, "end") : ""}`;
774
+ parts.push(chartDatumSvg(marks, {
775
+ role: "item",
776
+ index: row.index,
777
+ label: row.label,
778
+ anchor: [g.width / 2, row.y],
779
+ values: [{
780
+ key: "value",
781
+ value: value ?? "–",
782
+ formatted: written
783
+ }, {
784
+ key: "percent",
785
+ value: row.share === null ? "–" : row.share * 100,
786
+ formatted: share
787
+ }, {
788
+ key: "rank",
789
+ value: row.rank
790
+ }]
791
+ }, opts.inspect ?? false, `${row.label} · ${written} · ${share} · ${labels.chartFields({
792
+ key: "rank"
793
+ })}: ${row.rank}`));
794
+ }
795
+ if (g.rest.length) parts.push(text(10 * g.unit, g.top + g.rows.length * 36 + 16, `${labels.chartBarMore({
796
+ n: g.rest.length
797
+ })} · ${g.restValue === null ? "–" : g.format(g.restValue)}`));
798
+ return svgRoot({
799
+ ...opts,
800
+ height: g.height,
801
+ className: [opts.className, "k2b-chart-ranked"].filter(Boolean).join(" ")
802
+ }, parts.join("")).replace("</style>", ".k2b-chart-ranked :is(.stdlib-chart-tick-label,.stdlib-chart-bar-value){font-size:13px}</style>").replace("<svg ", '<svg data-bar-layout="rows" ');
803
+ };
706
804
  //# sourceMappingURL=chart-bar.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/chart-bar.ts"],"sourcesContent":["import {\n type AxisOptions,\n type BarItem,\n chartDatumSvg,\n computeDomain,\n escapeXml,\n extendDomainToNice,\n MAX_AXIS_TICKS,\n mapLog,\n mapRange,\n niceLogTicks,\n niceStep,\n type ReferenceLine,\n referenceLineAttributes,\n svgRoot,\n} from \"../charts/core/svg-renderers\";\nimport { chartMessages } from \"./chart-message-catalog\";\n\n/**\n * Bar chart options: stdlib's `charts.bar` options plus a title for the category axis and a separate value format.\n * The wrapper owns size and inspection.\n */\nexport type BarChartOptions = {\n data?: BarItem[];\n /** Aligned categories and series. Null observations are gaps. */\n x?: string[];\n series?: { label: string; data: (number | null)[] }[];\n layout?: \"columns\" | \"rows\" | \"grouped\" | \"stacked\";\n normalize?: boolean;\n locale?: string;\n compare?: { label: string; data: (number | null)[] };\n\n /** Value axis. `label` titles it, `format` writes its ticks and, without `valueFormat`, the printed values. */\n yAxis?: AxisOptions;\n /**\n * Category axis. `label` titles it. `ordered` marks categories that follow each other, such as days or steps: they\n * stay columns, and only every n-th label shows when they would not fit, as on a time axis. Unordered categories each\n * keep their label and turn into rows instead.\n */\n xAxis?: { label?: string; ordered?: boolean };\n /** Writes printed values and tooltip values. Defaults to `yAxis.format`. */\n valueFormat?: (value: number) => string;\n colorByBar?: boolean;\n references?: ReferenceLine[];\n /** Print every value at its bar. Default: whenever the values stay readable; rows always print them. */\n showValues?: boolean;\n /** A legend of the bar colors; used only with `colorByBar` in columns, where labels sit below the plot. */\n legend?: boolean;\n className?: string;\n title?: string;\n subtitle?: string;\n /**\n * The narrowest width in CSS pixels at which the drawing is shown; labels are laid out to fit it. Defaults to a\n * 320px phone column. A host that draws at its measured width passes that width.\n */\n displayWidth?: number;\n /** Logical insets of the column layout. Rows place their labels and values themselves. */\n padding?: number | { top?: number; right?: number; bottom?: number; left?: number };\n};\n\nexport type BarChartLayout = \"columns\" | \"rows\";\n\n/**\n * Text keeps its pixel size while the drawing stretches to its box, and the drawing is never measured. Labels are\n * laid out for the narrowest chart, a 320px phone column, so they fit in every wider one.\n */\nconst NARROW_PX = 296;\n/** Tick, category and value labels are 11px (see the `.k2b-chart` rules). */\nconst FONT_PX = 11;\n/** A label column takes at most this share of the narrowest chart; longer labels wrap to a second line. */\nconst LABEL_SHARE = 0.4;\nconst ROW_MIN = 22;\nconst ROW_TWO_LINES = 32;\nconst ROW_MAX = 36;\n/** Rows aim for the height of the other Cartesian charts before they grow. */\nconst ROWS_TARGET_HEIGHT = 280;\nconst BAR_MAX = 20;\nconst COLUMN_MAX = 40;\nconst GAP_PX = 6;\nconst LEGEND_ROW = 20;\n/** Rows keep at least this share of the narrowest chart for their bars; wider values go to the tooltip and table. */\nconst MIN_PLOT_SHARE = 0.3;\n\nconst narrow = (opts: BarChartOptions) => opts.displayWidth ?? NARROW_PX;\nconst fmt = (value: number) => (Number.isFinite(value) ? `${Math.round(value * 100) / 100}` : \"0\");\n\n/** Estimated width of `text` at `size` pixels in the UI sans font with tabular figures; a little wide on purpose. */\nexport const chartTextWidth = (text: string, size = FONT_PX): number => {\n let em = 0;\n for (const char of text) {\n if (/[\\s.,:;!|'’ilIjft()[\\]-]/.test(char)) em += 0.34;\n else if (/[MWmw@%]/.test(char)) em += 0.86;\n else if (/[A-Z0-9#$€&]/.test(char)) em += 0.66;\n else if (char.codePointAt(0)! > 0x2e80) em += 1;\n else em += 0.56;\n }\n return em * size;\n};\n\n/** Split a label into at most `lines` lines of `maxPx`; the last line ends with an ellipsis when the label is longer. */\nexport const wrapLabel = (label: string, maxPx: number, lines: number): { lines: string[]; truncated: boolean } => {\n const words = label.trim().split(/\\s+/);\n const result: string[] = [];\n let current = \"\";\n const breakWord = (word: string) => {\n // A word wider than a line breaks inside the word.\n let part = \"\";\n for (const char of word) {\n if (part && chartTextWidth(part + char) > maxPx) {\n result.push(part);\n part = \"\";\n }\n part += char;\n }\n return part;\n };\n for (const word of words) {\n const candidate = current ? `${current} ${word}` : word;\n if (chartTextWidth(candidate) <= maxPx) current = candidate;\n else {\n if (current) result.push(current);\n current = chartTextWidth(word) > maxPx ? breakWord(word) : word;\n }\n }\n if (current) result.push(current);\n if (result.length <= lines) return { lines: result, truncated: false };\n let last = result[lines - 1]!;\n while (last && chartTextWidth(`${last}…`) > maxPx) last = last.slice(0, -1).trimEnd();\n return { lines: [...result.slice(0, lines - 1), `${last}…`], truncated: true };\n};\n\ntype Scale = { domain: [number, number]; ticks: number[]; log: boolean };\n\n/** The value scale of stdlib's bar chart: nice linear ticks including zero, or decades on a log axis. */\nconst valueScale = (values: number[], axis: AxisOptions | undefined, nice: boolean): Scale => {\n const log = axis?.scale === \"log\";\n if (axis?.domain) {\n const [lo, hi] = axis.domain;\n if (!Number.isFinite(lo) || !Number.isFinite(hi) || lo >= hi || (log && lo <= 0))\n throw new RangeError(\"Chart axis domain must have finite increasing bounds (positive for log scales)\");\n // Bars rest on zero, so a linear domain must contain it like every value.\n if ((log ? values : [...values, 0]).some((value) => (!log || value > 0) && (value < lo || value > hi)))\n throw new RangeError(\"Chart axis domain must contain all plotted values and bounds\");\n if (log) return { domain: [lo, hi], ticks: niceLogTicks(lo, hi).ticks.filter((tick) => tick >= lo && tick <= hi), log };\n const step = niceStep(hi - lo, axis.ticks ?? 5);\n const ticks = [lo];\n if (step > 0 && Number.isFinite(step) && (hi - lo) / step <= MAX_AXIS_TICKS)\n for (let value = Math.ceil(lo / step) * step; value < hi; ) {\n if (value > lo) ticks.push(value);\n const next = value + step;\n if (next <= value) break;\n value = next;\n }\n return { domain: [lo, hi], ticks: [...ticks, hi], log };\n }\n if (log) {\n const positive = values.filter((value) => value > 0);\n if (!positive.length) return { domain: [1, 10], ticks: [1, 10], log };\n return { ...niceLogTicks(Math.min(...positive), Math.max(...positive)), log };\n }\n const [min, max] = computeDomain([...values, 0]);\n if (!nice) return { domain: [min, max], ticks: [], log };\n return { ...extendDomainToNice(min, max, niceStep(max - min, axis?.ticks ?? 5)), log };\n};\n\nconst project = (scale: Scale, value: number, range: [number, number]) => (scale.log ? mapLog : mapRange)(value, scale.domain, range);\n\ntype Plan = {\n layout: BarChartLayout;\n height: number;\n finite: { item: BarItem; index: number }[];\n header: number;\n};\n\nconst finiteItems = (data: BarItem[]) => data.flatMap((item, index) => (Number.isFinite(item.value) ? [{ item, index }] : []));\nexport const headerHeight = (opts: BarChartOptions) =>\n opts.title || opts.subtitle ? (opts.title ? 14 : 0) + (opts.subtitle ? 6 : 0) + 16 : 0;\nconst valueFormat = (opts: BarChartOptions) => opts.valueFormat ?? opts.yAxis?.format ?? ((value: number) => String(value));\nconst tickFormat = (opts: BarChartOptions) => opts.yAxis?.format ?? ((value: number) => String(value));\n\n/** Columns, when every category label fits below its column on the narrowest chart; rows otherwise. */\nconst columnsFit = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const columns = columnGeometry(opts, finite, width, 280);\n const slotPx = (columns.x1 - columns.x0) / finite.length / units;\n if (finite.some(({ item }) => chartTextWidth(item.label) + GAP_PX > slotPx)) return false;\n // Asked-for values must stay readable too; rows always have room for them.\n return opts.showValues !== true || columns.valuesFit;\n};\n\n/** The renderer's plan for a chart: its layout and logical height at `width`, derived from the data alone. */\nconst barChartPlan = (opts: BarChartOptions, width = 480): Plan => {\n const finite = finiteItems(opts.data ?? []);\n if (opts.series) return { layout: \"columns\", height: 280, finite, header: headerHeight(opts) };\n const header = headerHeight(opts);\n if (!finite.length) return { layout: \"columns\", height: 280, finite, header };\n if (opts.layout === \"columns\" || (opts.layout !== \"rows\" && (opts.xAxis?.ordered || columnsFit(opts, finite, width))))\n return { layout: \"columns\", height: 280, finite, header };\n const rows = rowGeometry(opts, finite, width, header);\n return { layout: \"rows\", height: rows.height, finite, header };\n};\n\n/** The layout a bar chart takes and its logical height, so server and browser reserve the same box. */\nexport const barChartLayout = (opts: BarChartOptions, width = 480): { layout: BarChartLayout; height: number } => {\n const { layout, height } = barChartPlan(opts, width);\n return { layout, height };\n};\n\nconst columnGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, height: number) => {\n const units = width / narrow(opts);\n const given =\n typeof opts.padding === \"number\" ? { top: opts.padding, right: opts.padding, bottom: opts.padding, left: opts.padding } : opts.padding;\n const values = finite.map(({ item }) => item.value);\n const scale = valueScale(values, opts.yAxis, true);\n const ticks = tickFormat(opts);\n const longestTick = Math.max(0, ...scale.ticks.map((tick) => chartTextWidth(ticks(tick))));\n const legendRows = opts.colorByBar && opts.legend ? legendLayout(opts, finite, width).rows : 0;\n const header = headerHeight(opts);\n const x0 = given?.left ?? Math.max(40, Math.ceil((longestTick + GAP_PX + 2) * units));\n const x1 = width - (given?.right ?? 16);\n const y0 = header + (given?.top ?? 16) + (opts.yAxis?.label ? 16 : 0);\n const y1 = height - (given?.bottom ?? 22) - (opts.xAxis?.label ? 16 : 0) - legendRows * LEGEND_ROW;\n const slotPx = (x1 - x0) / Math.max(1, finite.length) / units;\n const format = valueFormat(opts);\n const valuesFit = finite.every(({ item }) => chartTextWidth(format(item.value)) + 2 <= slotPx);\n const printValues = opts.showValues ?? valuesFit;\n // A printed negative value hangs below its bar: the plot ends a line above the category labels.\n const plotBottom = y1 - (printValues && values.some((value) => value < 0) ? 14 : 0);\n return { x0, x1, y0, y1, plotBottom, scale, valuesFit, printValues, legendRows };\n};\n\nconst rowGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number) => {\n const printed = rowGeometryWith(opts, finite, width, header, opts.showValues !== false);\n // Values too wide to leave the bars room stay in the tooltip and table; a value axis replaces them.\n if (printed.showValues && (printed.x1 - printed.x0) / (width / narrow(opts)) < narrow(opts) * MIN_PLOT_SHARE)\n return rowGeometryWith(opts, finite, width, header, false);\n return printed;\n};\n\nconst rowGeometryWith = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number, showValues: boolean) => {\n const units = width / narrow(opts);\n const maxLabelPx = narrow(opts) * LABEL_SHARE;\n const labels = finite.map(({ item }) => wrapLabel(item.label, maxLabelPx, 2));\n const twoLines = labels.some((label) => label.lines.length > 1);\n const labelPx = Math.min(maxLabelPx, Math.max(0, ...labels.flatMap((label) => label.lines.map((line) => chartTextWidth(line)))));\n const format = valueFormat(opts);\n const positivePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value >= 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const negativePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value < 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const refLabels = (opts.references ?? []).some((ref) => (ref.axis ?? \"y\") === \"y\" && ref.label);\n const titled = !!(opts.xAxis?.label || opts.yAxis?.label || refLabels);\n const top = header + (titled ? 20 : 4);\n const bottom = showValues ? 4 : 24;\n const minimum = twoLines ? ROW_TWO_LINES : ROW_MIN;\n const pitch = Math.min(ROW_MAX, Math.max(minimum, (ROWS_TARGET_HEIGHT - top - bottom) / finite.length));\n const labelEnd = Math.ceil(labelPx * units);\n const x0 = labelEnd + GAP_PX * units + (negativePx ? (negativePx + GAP_PX) * units : 0);\n const x1 = width - (positivePx ? (positivePx + GAP_PX) * units : 8 * units);\n return { labels, labelEnd, x0, x1, top, pitch, twoLines, showValues, height: Math.ceil(top + pitch * finite.length + bottom) };\n};\n\nconst legendLayout = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const rows: { label: string; color: number; x: number }[][] = [[]];\n let cursor = 0;\n finite.forEach(({ item }, index) => {\n const itemWidth = (8 + 4 + chartTextWidth(item.label)) * units;\n if (cursor > 0 && cursor + 12 * units + itemWidth > width) {\n rows.push([]);\n cursor = 0;\n }\n const x = cursor ? cursor + 12 * units : 0;\n rows.at(-1)!.push({ label: item.label, color: colorIndex(item, index), x });\n cursor = x + itemWidth;\n });\n return { rows: rows.length, items: rows };\n};\n\nconst colorIndex = (item: BarItem, fallback: number) => {\n const index = item.colorIndex ?? fallback;\n if (!Number.isInteger(index) || index < 0) throw new RangeError(\"Chart colorIndex must be a nonnegative integer\");\n return index % 8;\n};\n\nexport const renderHeader = (opts: BarChartOptions, width: number) => {\n const parts: string[] = [];\n let y = 16;\n if (opts.title) {\n parts.push(`<text class=\"stdlib-chart-title\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.title)}</text>`);\n y += 14;\n }\n if (opts.subtitle)\n parts.push(\n `<text class=\"stdlib-chart-subtitle\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.subtitle)}</text>`,\n );\n return parts.join(\"\");\n};\n\nconst datum = (item: BarItem, index: number, anchor: [number, number], format: (value: number) => string) => ({\n index,\n role: \"item\" as const,\n label: item.label,\n anchor,\n values: [{ key: \"value\", value: item.value, formatted: format(item.value) }],\n});\n\nconst renderColumns = (opts: BarChartOptions, plan: Plan, width: number, height: number, inspect: boolean) => {\n const { finite } = plan;\n const units = width / narrow(opts);\n const g = columnGeometry(opts, finite, width, height);\n const ticks = tickFormat(opts);\n const format = valueFormat(opts);\n const showValues = g.printValues;\n const parts: string[] = [renderHeader(opts, width)];\n const y = (value: number) => project(g.scale, value, [g.plotBottom, g.y0]);\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.y0 - 8)}\" text-anchor=\"start\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n for (const tick of g.scale.ticks) {\n const ty = y(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ty)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(g.x0 - GAP_PX * units)}\" y=\"${fmt(ty)}\" dy=\"4\" text-anchor=\"end\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n if (opts.yAxis?.minorTicks && !g.scale.log)\n g.scale.ticks.slice(1).forEach((tick, index) => {\n const previous = g.scale.ticks[index]!;\n for (let step = 1; step < 5; step++) {\n const ty = y(previous + ((tick - previous) * step) / 5);\n parts.push(`<line class=\"stdlib-chart-minor-tick\" x1=\"${fmt(g.x0 - 3)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x0)}\" y2=\"${fmt(ty)}\"/>`);\n }\n });\n const baseline = g.scale.log ? g.plotBottom : y(0);\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(baseline)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(baseline)}\"/>`);\n const slot = (g.x1 - g.x0) / finite.length;\n const barWidth = Math.min(slot * 0.8, COLUMN_MAX);\n // Text keeps its pixel size around its x/y anchor (`.k2b-chart` CSS), and so does a `dy` offset: labels anchored on\n // the plot's bottom edge stay clear of the axis in a box shorter than the drawing.\n const labelY = g.y1;\n // Unordered columns fit every label (see columnsFit); ordered ones label every n-th column that leaves room, from\n // the first column whose label stays inside the drawing.\n const visibleLabels = visibleCategoryLabels(\n finite.map(({ item }) => item.label),\n g.x0,\n slot,\n width,\n units,\n );\n finite.forEach(({ item, index }, position) => {\n const center = g.x0 + slot * (position + 0.5);\n if (visibleLabels.has(position))\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(center)}\" y=\"${fmt(labelY)}\" dy=\"16\" text-anchor=\"middle\">${escapeXml(item.label)}</text>`,\n );\n if (g.scale.log && item.value <= 0) return;\n const valueY = y(item.value);\n const top = Math.min(valueY, baseline);\n const barHeight = Math.abs(valueY - baseline);\n const x = center - barWidth / 2;\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(x)}\" y=\"${fmt(top)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(barHeight)}\"/>`,\n datum(item, index, [center, top + barHeight / 2], format),\n inspect,\n ),\n );\n if (showValues)\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(center)}\" y=\"${fmt(item.value < 0 ? top + barHeight + 13 : top - 4)}\" text-anchor=\"middle\">${escapeXml(format(item.value))}</text>`,\n );\n });\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < g.scale.domain[0] || ref.value > g.scale.domain[1])\n continue;\n const ry = y(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(g.x0)}\" y1=\"${fmt(ry)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ry)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(g.x1 - 4)}\" y=\"${fmt(ry - 4)}\" text-anchor=\"end\">${escapeXml(ref.label)}</text>`,\n );\n }\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt((g.x0 + g.x1) / 2)}\" y=\"${fmt(labelY)}\" dy=\"34\" text-anchor=\"middle\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (g.legendRows) {\n const legend = legendLayout(opts, finite, width);\n const top = height - g.legendRows * LEGEND_ROW;\n parts.push('<g class=\"stdlib-chart-legend\">');\n legend.items.forEach((row, rowIndex) => {\n const middle = top + rowIndex * LEGEND_ROW + LEGEND_ROW / 2;\n for (const entry of row)\n parts.push(\n `<g class=\"stdlib-chart-legend-item stdlib-chart-series-${entry.color}\"><rect class=\"stdlib-chart-legend-swatch\" x=\"${fmt(entry.x)}\" y=\"${fmt(middle - 4)}\" width=\"${fmt(8 * units)}\" height=\"8\" rx=\"1\"/><text class=\"stdlib-chart-legend-label\" x=\"${fmt(entry.x + 12 * units)}\" y=\"${fmt(middle + 4)}\">${escapeXml(entry.label)}</text></g>`,\n );\n });\n parts.push(\"</g>\");\n }\n return parts.join(\"\");\n};\n\nconst renderRows = (opts: BarChartOptions, plan: Plan, width: number, inspect: boolean) => {\n const { finite, header } = plan;\n const units = width / narrow(opts);\n const g = rowGeometry(opts, finite, width, header);\n const format = valueFormat(opts);\n const scale = valueScale(\n finite.map(({ item }) => item.value),\n opts.yAxis,\n !g.showValues,\n );\n const x = (value: number) => project(scale, value, [g.x0, g.x1]);\n const baseline = scale.log ? g.x0 : x(0);\n const plotBottom = g.top + g.pitch * finite.length;\n const thickness = Math.min(BAR_MAX, g.pitch - (g.twoLines ? 14 : 8));\n const parts: string[] = [renderHeader(opts, width)];\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.top - 8)}\" text-anchor=\"start\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${width}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"end\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n if (!g.showValues) {\n const ticks = tickFormat(opts);\n for (const tick of scale.ticks) {\n const tx = x(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(tx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(tx)}\" y2=\"${fmt(plotBottom)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(tx)}\" y=\"${fmt(plotBottom + 16)}\" text-anchor=\"middle\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n }\n finite.forEach(({ item, index }, position) => {\n const rowTop = g.top + g.pitch * position;\n const middle = rowTop + g.pitch / 2;\n const label = g.labels[position]!;\n const title = label.truncated ? `<title>${escapeXml(item.label)}</title>` : \"\";\n label.lines.forEach((line, lineIndex) => {\n const lineY = middle + 4 + (label.lines.length > 1 ? (lineIndex === 0 ? -6.5 : 6.5) : 0);\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(g.labelEnd)}\" y=\"${fmt(lineY)}\" text-anchor=\"end\">${title}${escapeXml(line)}</text>`,\n );\n });\n if (scale.log && item.value <= 0) return;\n const valueX = x(item.value);\n const left = Math.min(valueX, baseline);\n const barWidth = Math.abs(valueX - baseline);\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(left)}\" y=\"${fmt(middle - thickness / 2)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(thickness)}\"/>`,\n datum(item, index, [left + barWidth / 2, middle], format),\n inspect,\n ),\n );\n if (g.showValues) {\n const negative = item.value < 0;\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(valueX + (negative ? -GAP_PX : GAP_PX) * units)}\" y=\"${fmt(middle + 4)}\" text-anchor=\"${negative ? \"end\" : \"start\"}\">${escapeXml(format(item.value))}</text>`,\n );\n }\n });\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(baseline)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(baseline)}\" y2=\"${fmt(plotBottom)}\"/>`);\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < scale.domain[0] || ref.value > scale.domain[1]) continue;\n const rx = x(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(rx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(rx)}\" y2=\"${fmt(plotBottom)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(rx)}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"middle\">${escapeXml(ref.label)}</text>`,\n );\n }\n return parts.join(\"\");\n};\n\n/**\n * Render a bar chart in which every category has its label. Few short labels stand below vertical columns; otherwise\n * each category becomes a horizontal row with its label left of the bar and its value at the bar's end. Rows grow the\n * drawing instead of dropping labels: use {@link barChartLayout} for its logical height.\n */\nexport const renderBarChartSvg = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }): string => {\n if (opts.series) return renderSeriesBars(opts);\n const plan = barChartPlan(opts, opts.width);\n // The empty drawing of stdlib's bar chart, written here so bundles leave out stdlib's whole bar renderer.\n if (!plan.finite.length)\n return svgRoot(\n { width: opts.width, height: opts.height, className: opts.className },\n `<text class=\"stdlib-chart-empty-text\" x=\"${fmt(opts.width / 2)}\" y=\"${fmt(opts.height / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\">no data</text>`,\n );\n const body =\n plan.layout === \"rows\"\n ? renderRows(opts, plan, opts.width, opts.inspect ?? false)\n : renderColumns(opts, plan, opts.width, opts.height, opts.inspect ?? false);\n return svgRoot({ width: opts.width, height: opts.height, className: opts.className }, body).replace(\n \"<svg \",\n `<svg data-bar-layout=\"${plan.layout}\" `,\n );\n};\n\n/** Stable wrapping legend slots reserve the widest total or category value before interaction. */\nexport function barSeriesLegend(\n entries: { label: string; data: (number | null)[] }[],\n format: (v: number) => string,\n width = 480,\n displayWidth = 296,\n maxHeight = Infinity,\n) {\n const unit = width / displayWidth;\n let x = 0,\n row = 0;\n const items = entries.map((entry) => {\n const finite = entry.data.filter((v): v is number => v !== null && Number.isFinite(v));\n const total = finite.length ? finite.reduce((sum, v) => sum + v, 0) : null;\n const valueWidth = Math.max(\n chartTextWidth(total === null ? \"–\" : format(total)),\n ...entry.data.filter((v): v is number => v !== null && Number.isFinite(v)).map((v) => chartTextWidth(format(v))),\n );\n const labelWidth = Math.max(8, Math.min(96, displayWidth - valueWidth - 32, chartTextWidth(entry.label)));\n const slot = Math.min(width, (14 + labelWidth + 6 + valueWidth + 16) * unit);\n if (x && x + slot > width) {\n x = 0;\n row++;\n }\n const item = { ...entry, total, x, y: row * 20 + 12, labelWidth, valueX: x + slot - 16 * unit };\n x += slot;\n return item;\n });\n const rows = Math.max(1, Math.floor(maxHeight / 20));\n const overflow = row + 1 > rows;\n const visible = overflow ? items.filter((item) => item.y <= (rows - 1) * 20) : items;\n return { items: visible, hidden: items.length - visible.length, height: entries.length ? Math.min(row + 1, rows) * 20 : 0 };\n}\n\n/** Category geometry shared by SVG, server snapshots and browser inspection. */\nexport function seriesBarLayout(opts: BarChartOptions, size = { width: 480, height: 280 }) {\n const categories = opts.x ?? [];\n const series = opts.series ?? [];\n if (series.some((s) => s.data.length !== categories.length) || (opts.compare && opts.compare.data.length !== categories.length))\n throw new RangeError(\"Bar series must have the same length as x\");\n if (opts.compare && series.length !== 1) throw new RangeError(\"Bar comparison needs exactly one current series\");\n if (opts.normalize && opts.layout !== \"stacked\") throw new RangeError(\"Normalized bars must be stacked\");\n if (opts.layout === \"stacked\" && opts.yAxis?.scale === \"log\") throw new RangeError(\"Stacked bars need a linear axis\");\n if (opts.layout === \"stacked\" && series.some((s) => s.data.some((v) => v !== null && v < 0)))\n throw new RangeError(\"Stacked bars require nonnegative values\");\n const totals = categories.map((_, i) =>\n series.some((s) => Number.isFinite(s.data[i]))\n ? series.reduce((sum, s) => sum + (Number.isFinite(s.data[i]) ? s.data[i]! : 0), 0)\n : null,\n );\n const values =\n opts.layout === \"stacked\"\n ? totals.filter((v): v is number => v !== null)\n : series.flatMap((s) => s.data.filter((v): v is number => v !== null));\n const scale = valueScale(\n opts.normalize ? [0, 1] : [...values, ...(opts.compare?.data.filter((v): v is number => v !== null) ?? [])],\n opts.yAxis,\n true,\n );\n const format = valueFormat(opts);\n const units = size.width / narrow(opts);\n const legend = opts.legend !== false;\n // Keep the legend within one quarter of the frame, leaving room for the plot.\n const entries = [...series, ...(opts.compare ? [opts.compare] : [])];\n const legendLayout = barSeriesLegend(entries, format, size.width, narrow(opts), size.height * 0.25);\n const top = headerHeight(opts) + 8 + (legend ? legendLayout.height : 0) + (opts.yAxis?.label ? 16 : 0);\n const left = Math.max(\n 40,\n ...scale.ticks.map((v) => (chartTextWidth(opts.normalize ? `${Math.round(v * 100)}%` : tickFormat(opts)(v)) + 8) * units),\n );\n const right = size.width - 4;\n const bottom = size.height - 24 - (opts.xAxis?.label ? 18 : 0);\n const slot = (right - left) / Math.max(1, categories.length);\n const y = (value: number) => project(scale, value, [bottom, top]);\n const columns = categories.map((label, index) => {\n const center = left + slot * (index + 0.5);\n let acc = 0;\n const current = series.map((s, seriesIndex) => {\n const raw = s.data[index];\n const value =\n raw === null || !Number.isFinite(raw) || (opts.normalize && totals[index] === 0)\n ? null\n : opts.normalize\n ? raw! / totals[index]!\n : raw!;\n const base = opts.layout === \"stacked\" ? acc : 0;\n if (value !== null && opts.layout === \"stacked\") acc += value;\n return { seriesIndex, raw, value, base };\n });\n return { label, index, center, current, total: totals[index]!, previous: opts.compare?.data[index] };\n });\n const barWidthPx =\n (opts.compare\n ? Math.min(slot * 0.32, 26)\n : Math.min(slot * (opts.layout === \"stacked\" ? 0.56 : 0.8 / Math.max(1, entries.length)), opts.layout === \"stacked\" ? 40 : 22)) /\n units;\n return { ...size, columns, totals, scale, left, right, top, bottom, slot, y, format, units, entries, legend, legendLayout, barWidthPx };\n}\n\nconst renderSeriesBars = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }) => {\n const g = seriesBarLayout(opts, opts);\n const parts = [renderHeader(opts, opts.width)];\n const labels = chartMessages.resolve([opts.locale ?? \"en\"]).t;\n const change = new Intl.NumberFormat(opts.locale ?? \"en\", { style: \"percent\", maximumFractionDigits: 1, signDisplay: \"exceptZero\" });\n const text = (x: number, y: number, value: string, cls = \"stdlib-chart-tick-label\", anchor = \"start\", extra = \"\") =>\n `<text class=\"${cls}\" x=\"${fmt(x)}\" y=\"${fmt(y)}\" text-anchor=\"${anchor}\" ${extra}>${escapeXml(value)}</text>`;\n if (g.legend)\n g.legendLayout.items.forEach((entry, i) => {\n const y = headerHeight(opts) + entry.y;\n const x = entry.x;\n parts.push(\n `<rect class=\"stdlib-chart-series-${i < (opts.series?.length ?? 0) ? i % 8 : 0}\" x=\"${x}\" y=\"${y - 8}\" width=\"${8 * g.units}\" height=\"8\" ${i >= (opts.series?.length ?? 0) ? 'style=\"fill:none;stroke:var(--stdlib-chart-c1);\"' : \"\"}/>`,\n );\n if (i >= (opts.series?.length ?? 0))\n parts.push(\n `<path d=\"M ${x} ${y - 4} l ${4 * g.units} -4 M ${x + 2 * g.units} ${y} l ${6 * g.units} -6 M ${x + 6 * g.units} ${y} l ${2 * g.units} -2\" fill=\"none\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1\"/>`,\n );\n const label = wrapLabel(entry.label, Math.max(8, entry.labelWidth), 1).lines[0] ?? entry.label;\n const value = escapeXml(entry.total === null ? \"–\" : g.format(entry.total));\n // One text run keeps the value six CSS pixels after its label even when the SVG stretches.\n parts.push(\n `<text x=\"${fmt(x + 14 * g.units)}\" y=\"${fmt(y)}\"><tspan class=\"stdlib-chart-tick-label\">${escapeXml(label)}</tspan><tspan class=\"stdlib-chart-bar-value\" dx=\"6\" data-chart-legend-value data-field=\"${i < (opts.series?.length ?? 0) ? `series:${i}` : \"previous\"}\" data-default=\"${value}\">${value}</tspan></text>`,\n );\n });\n if (g.legend && g.legendLayout.hidden)\n parts.push(text(0, headerHeight(opts) + g.legendLayout.height - 8, `+${g.legendLayout.hidden}`, \"stdlib-chart-tick-label\"));\n if (opts.yAxis?.label) parts.push(text(0, g.top - 6, opts.yAxis.label, \"stdlib-chart-axis-label\"));\n for (const tick of g.scale.ticks) {\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.y(tick)}\" y2=\"${g.y(tick)}\"/>`);\n parts.push(\n text(g.left - 6 * g.units, g.y(tick) + 4, opts.normalize ? `${Math.round(tick * 100)}%` : tickFormat(opts)(tick), undefined, \"end\"),\n );\n }\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.bottom}\" y2=\"${g.bottom}\"/>`);\n const visibleLabels = visibleCategoryLabels(\n g.columns.map((c) => c.label),\n g.left,\n g.slot,\n opts.width,\n g.units,\n );\n for (const column of g.columns) {\n const fields = column.current.map((v, i) => ({\n key: `series:${i}`,\n value: v.raw === null || !Number.isFinite(v.raw) ? \"–\" : v.raw!,\n formatted: v.raw === null || !Number.isFinite(v.raw) ? \"–\" : g.format(v.raw!),\n }));\n if (opts.compare) {\n const previous = column.previous;\n fields.push({\n key: \"previous\",\n value: previous ?? \"–\",\n formatted: previous === null || !Number.isFinite(previous) ? \"–\" : g.format(previous!),\n });\n const current = column.current[0]?.raw;\n const delta =\n current == null || previous == null || !Number.isFinite(current) || !Number.isFinite(previous) ? null : current - previous;\n fields.push({\n key: \"delta\",\n value: delta ?? \"–\",\n formatted: delta === null || previous === 0 ? \"–\" : change.format(delta / Math.abs(previous!)),\n });\n } else if (opts.layout === \"stacked\") {\n fields.reverse();\n fields.push({ key: \"total\", value: column.total ?? \"–\", formatted: column.total === null ? \"–\" : g.format(column.total) });\n }\n let marks = `<rect class=\"k2b-chart-category-band\" fill=\"none\" pointer-events=\"all\" x=\"${column.center - g.slot / 2}\" y=\"${g.top}\" width=\"${g.slot}\" height=\"${Math.max(0, g.bottom - g.top)}\" rx=\"6\"/>`;\n const bar = (value: number, base: number, x: number, width: number, color: number, previous = false) => {\n const y0 = g.y(g.scale.log ? g.scale.domain[0] : base),\n y1 = g.y(base + value);\n const rect = `<rect class=\"stdlib-chart-bar stdlib-chart-series-${color % 8}\" x=\"${fmt(x)}\" y=\"${fmt(Math.min(y0, y1))}\" width=\"${fmt(Math.max(0, width))}\" height=\"${fmt(Math.abs(y0 - y1))}\" rx=\"3\"/>`;\n if (!previous) return rect;\n // Inline strokes avoid document-global SVG pattern IDs, including duplicate charts during SSR.\n const lines: string[] = [];\n for (let d = -Math.abs(y0 - y1); d < width; d += 6) {\n const lo = Math.max(0, -d),\n hi = Math.min(Math.abs(y0 - y1), width - d);\n if (hi > lo)\n lines.push(\n `<line x1=\"${x + d + lo}\" y1=\"${Math.max(y0, y1) - lo}\" x2=\"${x + d + hi}\" y2=\"${Math.max(y0, y1) - hi}\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1.5\"/>`,\n );\n }\n return `<g class=\"k2b-chart-previous\">${rect.replace(\"/>\", ' style=\"fill:var(--stdlib-chart-c1,#3b82f6);fill-opacity:.14\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1\"/>')}${lines.join(\"\")}</g>`;\n };\n if (opts.compare) {\n const bw = Math.min(g.slot * 0.32, 26);\n const gap = Math.min(1.5, g.slot * 0.08);\n if (column.previous !== null && Number.isFinite(column.previous) && (!g.scale.log || column.previous! > 0))\n marks += bar(column.previous!, 0, column.center - bw - gap, bw, 0, true);\n const value = column.current[0]?.value;\n if (value != null && (!g.scale.log || value > 0)) marks += bar(value, 0, column.center + gap, bw, 0);\n } else\n column.current.forEach((v) => {\n if (v.value === null || (g.scale.log && v.value <= 0)) return;\n const stacked = opts.layout === \"stacked\";\n const bw = stacked ? Math.min(g.slot * 0.56, 40) : Math.min((g.slot * 0.8) / g.entries.length, 22);\n const gap = bw / g.units > 4 ? 2 : 0;\n const x = stacked ? column.center - bw / 2 : column.center - (g.entries.length * bw) / 2 + v.seriesIndex * bw + gap / 2;\n const segment = bar(v.value, v.base, x, stacked ? bw : bw - gap, v.seriesIndex);\n if (\n stacked &&\n v.value > 0 &&\n column.current.some((next) => next.seriesIndex > v.seriesIndex && next.value !== null && next.value > 0)\n ) {\n const fullHeight = Math.abs(g.y(v.base) - g.y(v.base + v.value));\n const gap = Math.min(1.5, fullHeight / 2);\n marks += segment\n .replace(/y=\"[^\"]*\"/, `y=\"${g.y(v.base + v.value) + gap}\"`)\n .replace(/height=\"[^\"]*\"/, `height=\"${fullHeight - gap}\"`);\n } else marks += segment;\n });\n parts.push(\n chartDatumSvg(\n marks,\n { role: \"item\", index: column.index, label: column.label, anchor: [column.center, g.top], values: fields },\n opts.inspect ?? false,\n [\n column.label,\n ...fields.map(\n (field) =>\n `${field.key.startsWith(\"series:\") ? opts.series![Number(field.key.slice(7))]!.label : field.key === \"previous\" ? opts.compare!.label : field.key === \"delta\" ? labels.chartFields({ key: \"delta\" }) : labels.chartFields({ key: \"total\" })}: ${field.formatted}`,\n ),\n ].join(\" · \"),\n ),\n );\n if (visibleLabels.has(column.index))\n parts.push(text(column.center, g.bottom, column.label, \"stdlib-chart-tick-label stdlib-chart-category-label\", \"middle\", 'dy=\"16\"'));\n }\n for (const ref of opts.references ?? [])\n if ((ref.axis ?? \"y\") === \"y\" && Number.isFinite(ref.value) && ref.value >= g.scale.domain[0] && ref.value <= g.scale.domain[1]) {\n parts.push(`<line class=\"stdlib-chart-reference\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.y(ref.value)}\" y2=\"${g.y(ref.value)}\"/>`);\n if (ref.label) parts.push(text(g.right, g.y(ref.value) - 4, ref.label, \"stdlib-chart-reference-label\", \"end\"));\n }\n if (opts.xAxis?.label) parts.push(text((g.left + g.right) / 2, opts.height - 2, opts.xAxis.label, \"stdlib-chart-axis-label\", \"middle\"));\n return svgRoot(opts, parts.join(\"\")).replace(\"<svg \", '<svg data-bar-layout=\"columns\" ');\n};\n\nconst visibleCategoryLabels = (labels: string[], left: number, slot: number, width: number, units: number) => {\n const labelPx = Math.max(0, ...labels.map((label) => chartTextWidth(label))) + GAP_PX;\n const step = Math.max(1, Math.ceil(labelPx / (slot / units)));\n const inside = (i: number) => {\n const half = (chartTextWidth(labels[i]!) * units) / 2,\n center = left + slot * (i + 0.5);\n return center - half >= 0 && center + half <= width;\n };\n const first = Math.max(\n 0,\n labels.findIndex((_, i) => inside(i)),\n );\n return new Set(labels.flatMap((_, i) => (i >= first && (i - first) % step === 0 && inside(i) ? [i] : [])));\n};\n"],"mappings":"AAAA,SAGE,aAAa,EACb,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,QAAQ,EAER,uBAAuB,EACvB,OAAO,QACF,8BAA8B;AACrC,SAAS,aAAa,QAAQ,yBAAyB;;AAEvD;AACA;AACA;AACA;;AAyCA;AACA;AACA;AACA;AACA,MAAM,SAAS,GAAG,GAAG;AACrB;AACA,MAAM,OAAO,GAAG,EAAE;AAClB;AACA,MAAM,WAAW,GAAG,GAAG;AACvB,MAAM,OAAO,GAAG,EAAE;AAClB,MAAM,aAAa,GAAG,EAAE;AACxB,MAAM,OAAO,GAAG,EAAE;AAClB;AACA,MAAM,kBAAkB,GAAG,GAAG;AAC9B,MAAM,OAAO,GAAG,EAAE;AAClB,MAAM,UAAU,GAAG,EAAE;AACrB,MAAM,MAAM,GAAG,CAAC;AAChB,MAAM,UAAU,GAAG,EAAE;AACrB;AACA,MAAM,cAAc,GAAG,GAAG;AAE1B,MAAM,MAAM,GAAI,IAAqB,IAAK,IAAI,CAAC,YAAY,IAAI,SAAS;AACxE,MAAM,GAAG,GAAI,KAAa,IAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAI;;AAElG;AACA,OAAO,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,IAAI,GAAG,OAAO,KAAa;EACtE,IAAI,EAAE,GAAG,CAAC;EACV,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;IACvB,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,KACjD,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,KACtC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,KAC1C,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAI,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC,KAC3C,EAAE,IAAI,IAAI;EACjB;EACA,OAAO,EAAE,GAAG,IAAI;AAClB,CAAC;;AAED;AACA,OAAO,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa,KAA8C;EACjH,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;EACvC,MAAM,MAAgB,GAAG,EAAE;EAC3B,IAAI,OAAO,GAAG,EAAE;EAChB,MAAM,SAAS,GAAI,IAAY,IAAK;IAClC;IACA,IAAI,IAAI,GAAG,EAAE;IACb,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;MACvB,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,EAAE;QAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACjB,IAAI,GAAG,EAAE;MACX;MACA,IAAI,IAAI,IAAI;IACd;IACA,OAAO,IAAI;EACb,CAAC;EACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IACxB,MAAM,SAAS,GAAG,OAAO,GAAG,GAAG,OAAO,IAAI,IAAI,EAAE,GAAG,IAAI;IACvD,IAAI,cAAc,CAAC,SAAS,CAAC,IAAI,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC,KACvD;MACH,IAAI,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;MACjC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI;IACjE;EACF;EACA,IAAI,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;EACjC,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,OAAO;IAAE,KAAK,EAAE,MAAM;IAAE,SAAS,EAAE;EAAM,CAAC;EACtE,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAE;EAC7B,OAAO,IAAI,IAAI,cAAc,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;EACrF,OAAO;IAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC;IAAE,SAAS,EAAE;EAAK,CAAC;AAChF,CAAC;AAID;AACA,MAAM,UAAU,GAAG,CAAC,MAAgB,EAAE,IAA6B,EAAE,IAAa,KAAY;EAC5F,MAAM,GAAG,GAAG,IAAI,EAAE,KAAK,KAAK,KAAK;EACjC,IAAI,IAAI,EAAE,MAAM,EAAE;IAChB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAK,GAAG,IAAI,EAAE,IAAI,CAAE,EAC9E,MAAM,IAAI,UAAU,CAAC,gFAAgF,CAAC;IACxG;IACA,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,CAAE,KAAK,IAAK,CAAC,CAAC,GAAG,IAAI,KAAK,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,EACpG,MAAM,IAAI,UAAU,CAAC,8DAA8D,CAAC;IACtF,IAAI,GAAG,EAAE,OAAO;MAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;MAAE,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAE,IAAI,IAAK,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;MAAE;IAAI,CAAC;IACvH,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC;IAClB,IAAI,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI,cAAc,EACzE,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,GAAI;MAC1D,IAAI,KAAK,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;MACjC,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI;MACzB,IAAI,IAAI,IAAI,KAAK,EAAE;MACnB,KAAK,GAAG,IAAI;IACd;IACF,OAAO;MAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;MAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC;MAAE;IAAI,CAAC;EACzD;EACA,IAAI,GAAG,EAAE;IACP,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAE,KAAK,IAAK,KAAK,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO;MAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;MAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;MAAE;IAAI,CAAC;IACrE,OAAO;MAAE,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;MAAE;IAAI,CAAC;EAC/E;EACA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;EAChD,IAAI,CAAC,IAAI,EAAE,OAAO;IAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IAAE,KAAK,EAAE,EAAE;IAAE;EAAI,CAAC;EACxD,OAAO;IAAE,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;IAAE;EAAI,CAAC;AACxF,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,KAAa,EAAE,KAAuB,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,GAAG,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;AASrI,MAAM,WAAW,GAAI,IAAe,IAAK,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;EAAE,IAAI;EAAE;AAAM,CAAC,CAAC,GAAG,EAAG,CAAC;AAC9H,OAAO,MAAM,YAAY,GAAI,IAAqB,IAChD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;AACxF,MAAM,WAAW,GAAI,IAAqB,IAAK,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,KAAM,KAAa,IAAK,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3H,MAAM,UAAU,GAAI,IAAqB,IAAK,IAAI,CAAC,KAAK,EAAE,MAAM,KAAM,KAAa,IAAK,MAAM,CAAC,KAAK,CAAC,CAAC;;AAEtG;AACA,MAAM,UAAU,GAAG,CAAC,IAAqB,EAAE,MAAsB,EAAE,KAAa,KAAK;EACnF,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;EAClC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;EACxD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK;EAChE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAAE;EAAK,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,OAAO,KAAK;EACzF;EACA,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,OAAO,CAAC,SAAS;AACtD,CAAC;;AAED;AACA,MAAM,YAAY,GAAG,CAAC,IAAqB,EAAE,KAAK,GAAG,GAAG,KAAW;EACjE,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;EAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;IAAE,MAAM,EAAE,SAAS;IAAE,MAAM,EAAE,GAAG;IAAE,MAAM;IAAE,MAAM,EAAE,YAAY,CAAC,IAAI;EAAE,CAAC;EAC9F,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;EACjC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO;IAAE,MAAM,EAAE,SAAS;IAAE,MAAM,EAAE,GAAG;IAAE,MAAM;IAAE;EAAO,CAAC;EAC7E,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAK,IAAI,CAAC,MAAM,KAAK,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAE,EACnH,OAAO;IAAE,MAAM,EAAE,SAAS;IAAE,MAAM,EAAE,GAAG;IAAE,MAAM;IAAE;EAAO,CAAC;EAC3D,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;EACrD,OAAO;IAAE,MAAM,EAAE,MAAM;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM;IAAE,MAAM;IAAE;EAAO,CAAC;AAChE,CAAC;;AAED;AACA,OAAO,MAAM,cAAc,GAAG,CAAC,IAAqB,EAAE,KAAK,GAAG,GAAG,KAAiD;EAChH,MAAM;IAAE,MAAM;IAAE;EAAO,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;EACpD,OAAO;IAAE,MAAM;IAAE;EAAO,CAAC;AAC3B,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,IAAqB,EAAE,MAAsB,EAAE,KAAa,EAAE,MAAc,KAAK;EACvG,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;EAClC,MAAM,KAAK,GACT,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,GAAG;IAAE,GAAG,EAAE,IAAI,CAAC,OAAO;IAAE,KAAK,EAAE,IAAI,CAAC,OAAO;IAAE,MAAM,EAAE,IAAI,CAAC,OAAO;IAAE,IAAI,EAAE,IAAI,CAAC;EAAQ,CAAC,GAAG,IAAI,CAAC,OAAO;EACxI,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAAE;EAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC;EACnD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;EAClD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;EAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,IAAI,IAAK,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAC1F,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;EAC9F,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;EACjC,MAAM,EAAE,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;EACrF,MAAM,EAAE,GAAG,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;EACvC,MAAM,EAAE,GAAG,MAAM,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;EACrE,MAAM,EAAE,GAAG,MAAM,IAAI,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,UAAU,GAAG,UAAU;EAClG,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK;EAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;EAChC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAAE;EAAK,CAAC,KAAK,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC;EAC9F,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,IAAI,SAAS;EAChD;EACA,MAAM,UAAU,GAAG,EAAE,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,CAAE,KAAK,IAAK,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EACnF,OAAO;IAAE,EAAE;IAAE,EAAE;IAAE,EAAE;IAAE,EAAE;IAAE,UAAU;IAAE,KAAK;IAAE,SAAS;IAAE,WAAW;IAAE;EAAW,CAAC;AAClF,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,IAAqB,EAAE,MAAsB,EAAE,KAAa,EAAE,MAAc,KAAK;EACpG,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC;EACvF;EACA,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,KAAK,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,EAC1G,OAAO,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;EAC5D,OAAO,OAAO;AAChB,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,IAAqB,EAAE,MAAsB,EAAE,KAAa,EAAE,MAAc,EAAE,UAAmB,KAAK;EAC7H,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;EAClC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW;EAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAAE;EAAK,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;EAC7E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAE,KAAK,IAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;EAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAE,KAAK,IAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,IAAI,IAAK,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAChI,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;EAChC,MAAM,UAAU,GAAG,UAAU,GACzB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAAE;EAAK,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAAE;EAAK,CAAC,KAAK,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAClH,CAAC;EACL,MAAM,UAAU,GAAG,UAAU,GACzB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAAE;EAAK,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAAE;EAAK,CAAC,KAAK,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GACjH,CAAC;EACL,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,IAAI,CAAE,GAAG,IAAK,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;EAC/F,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,SAAS,CAAC;EACtE,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;EACtC,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,GAAG,EAAE;EAClC,MAAM,OAAO,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO;EAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,kBAAkB,GAAG,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;EACvG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;EAC3C,MAAM,EAAE,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,IAAI,UAAU,GAAG,CAAC,UAAU,GAAG,MAAM,IAAI,KAAK,GAAG,CAAC,CAAC;EACvF,MAAM,EAAE,GAAG,KAAK,IAAI,UAAU,GAAG,CAAC,UAAU,GAAG,MAAM,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;EAC3E,OAAO;IAAE,MAAM;IAAE,QAAQ;IAAE,EAAE;IAAE,EAAE;IAAE,GAAG;IAAE,KAAK;IAAE,QAAQ;IAAE,UAAU;IAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM;EAAE,CAAC;AAChI,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,IAAqB,EAAE,MAAsB,EAAE,KAAa,KAAK;EACrF,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;EAClC,MAAM,IAAqD,GAAG,CAAC,EAAE,CAAC;EAClE,IAAI,MAAM,GAAG,CAAC;EACd,MAAM,CAAC,OAAO,CAAC,CAAC;IAAE;EAAK,CAAC,EAAE,KAAK,KAAK;IAClC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK;IAC9D,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,EAAE;MACzD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;MACb,MAAM,GAAG,CAAC;IACZ;IACA,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC;MAAE,KAAK,EAAE,IAAI,CAAC,KAAK;MAAE,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;MAAE;IAAE,CAAC,CAAC;IAC3E,MAAM,GAAG,CAAC,GAAG,SAAS;EACxB,CAAC,CAAC;EACF,OAAO;IAAE,IAAI,EAAE,IAAI,CAAC,MAAM;IAAE,KAAK,EAAE;EAAK,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,QAAgB,KAAK;EACtD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,QAAQ;EACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,gDAAgD,CAAC;EACjH,OAAO,KAAK,GAAG,CAAC;AAClB,CAAC;AAED,OAAO,MAAM,YAAY,GAAG,CAAC,IAAqB,EAAE,KAAa,KAAK;EACpE,MAAM,KAAe,GAAG,EAAE;EAC1B,IAAI,CAAC,GAAG,EAAE;EACV,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,KAAK,CAAC,IAAI,CAAC,uCAAuC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,0BAA0B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IAClI,CAAC,IAAI,EAAE;EACT;EACA,IAAI,IAAI,CAAC,QAAQ,EACf,KAAK,CAAC,IAAI,CACR,0CAA0C,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,0BAA0B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,SACrH,CAAC;EACH,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,KAAa,EAAE,MAAwB,EAAE,MAAiC,MAAM;EAC5G,KAAK;EACL,IAAI,EAAE,MAAe;EACrB,KAAK,EAAE,IAAI,CAAC,KAAK;EACjB,MAAM;EACN,MAAM,EAAE,CAAC;IAAE,GAAG,EAAE,OAAO;IAAE,KAAK,EAAE,IAAI,CAAC,KAAK;IAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;EAAE,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAqB,EAAE,IAAU,EAAE,KAAa,EAAE,MAAc,EAAE,OAAgB,KAAK;EAC5G,MAAM;IAAE;EAAO,CAAC,GAAG,IAAI;EACvB,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;EAClC,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;EACrD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;EAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;EAChC,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW;EAChC,MAAM,KAAe,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;EACnD,MAAM,CAAC,GAAI,KAAa,IAAK,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EAC1E,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EACnB,KAAK,CAAC,IAAI,CACR,kDAAkD,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,yBAAyB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SACrH,CAAC;EACH,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;IAChC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,uCAAuC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;IACnH,KAAK,CAAC,IAAI,CACR,4CAA4C,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,8BAA8B,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAC3I,CAAC;EACH;EACA,IAAI,IAAI,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EACxC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;IAC9C,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAE;IACtC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE;MACnC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAI,CAAC,IAAI,GAAG,QAAQ,IAAI,IAAI,GAAI,CAAC,CAAC;MACvD,KAAK,CAAC,IAAI,CAAC,6CAA6C,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;IAC/H;EACF,CAAC,CAAC;EACJ,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;EAClD,KAAK,CAAC,IAAI,CAAC,uCAAuC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;EAC/H,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM;EAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,UAAU,CAAC;EACjD;EACA;EACA,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE;EACnB;EACA;EACA,MAAM,aAAa,GAAG,qBAAqB,CACzC,MAAM,CAAC,GAAG,CAAC,CAAC;IAAE;EAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EACpC,CAAC,CAAC,EAAE,EACJ,IAAI,EACJ,KAAK,EACL,KACF,CAAC;EACD,MAAM,CAAC,OAAO,CAAC,CAAC;IAAE,IAAI;IAAE;EAAM,CAAC,EAAE,QAAQ,KAAK;IAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC;IAC7C,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC7B,KAAK,CAAC,IAAI,CACR,wEAAwE,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,kCAAkC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAC/J,CAAC;IACH,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;IACpC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC7C,MAAM,CAAC,GAAG,MAAM,GAAG,QAAQ,GAAG,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;IAC/D,KAAK,CAAC,IAAI,CACR,aAAa,CACX,qDAAqD,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,SAAS,CAAC,KAAK,EAClJ,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EACzD,OACF,CACF,CAAC;IACD,IAAI,UAAU,EACZ,KAAK,CAAC,IAAI,CACR,2CAA2C,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,SAAS,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,0BAA0B,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAC3K,CAAC;EACL,CAAC,CAAC;EACF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE;IACvC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAC5H;IACF,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB,KAAK,CAAC,IAAI,CACR,uCAAuC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,KACxI,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,CACR,6CAA6C,uBAAuB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,uBAAuB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SACnK,CAAC;EACL;EACA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EACnB,KAAK,CAAC,IAAI,CACR,4CAA4C,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,kCAAkC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SACpJ,CAAC;EACH,IAAI,CAAC,CAAC,UAAU,EAAE;IAChB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,UAAU,GAAG,UAAU;IAC9C,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK;MACtC,MAAM,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,CAAC;MAC3D,KAAK,MAAM,KAAK,IAAI,GAAG,EACrB,KAAK,CAAC,IAAI,CACR,0DAA0D,KAAK,CAAC,KAAK,iDAAiD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,mEAAmE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,aACnU,CAAC;IACL,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;EACpB;EACA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAqB,EAAE,IAAU,EAAE,KAAa,EAAE,OAAgB,KAAK;EACzF,MAAM;IAAE,MAAM;IAAE;EAAO,CAAC,GAAG,IAAI;EAC/B,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;EAClC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;EAClD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;EAChC,MAAM,KAAK,GAAG,UAAU,CACtB,MAAM,CAAC,GAAG,CAAC,CAAC;IAAE;EAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EACpC,IAAI,CAAC,KAAK,EACV,CAAC,CAAC,CAAC,UACL,CAAC;EACD,MAAM,CAAC,GAAI,KAAa,IAAK,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;EACxC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM;EAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;EACpE,MAAM,KAAe,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;EACnD,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EACnB,KAAK,CAAC,IAAI,CACR,kDAAkD,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,yBAAyB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SACtH,CAAC;EACH,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EACnB,KAAK,CAAC,IAAI,CACR,4CAA4C,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,uBAAuB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAC3H,CAAC;EACH,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE;IACjB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;MAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;MAClB,KAAK,CAAC,IAAI,CAAC,uCAAuC,GAAG,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;MAC1H,KAAK,CAAC,IAAI,CACR,4CAA4C,GAAG,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,0BAA0B,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SACjI,CAAC;IACH;EACF;EACA,MAAM,CAAC,OAAO,CAAC,CAAC;IAAE,IAAI;IAAE;EAAM,CAAC,EAAE,QAAQ,KAAK;IAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,QAAQ;IACzC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAE;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,GAAG,UAAU,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;IAC9E,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK;MACvC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAI,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAI,CAAC,CAAC;MACxF,KAAK,CAAC,IAAI,CACR,wEAAwE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,uBAAuB,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,SACzJ,CAAC;IACH,CAAC,CAAC;IACF,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;IAClC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;IAC/D,KAAK,CAAC,IAAI,CACR,aAAa,CACX,qDAAqD,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,SAAS,CAAC,KAAK,EACxK,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EACzD,OACF,CACF,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,EAAE;MAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;MAC/B,KAAK,CAAC,IAAI,CACR,2CAA2C,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,GAAG,CAAC,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,kBAAkB,QAAQ,GAAG,KAAK,GAAG,OAAO,KAAK,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SACrM,CAAC;IACH;EACF,CAAC,CAAC;EACF,KAAK,CAAC,IAAI,CAAC,uCAAuC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;EACtI,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE;IACvC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;IAC5H,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB,KAAK,CAAC,IAAI,CACR,uCAAuC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,UAAU,CAAC,KAC/I,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,CACR,6CAA6C,uBAAuB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,0BAA0B,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SACnK,CAAC;EACL;EACA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACvB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,iBAAiB,GAAI,IAA4E,IAAa;EACzH,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,gBAAgB,CAAC,IAAI,CAAC;EAC9C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;EAC3C;EACA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EACrB,OAAO,OAAO,CACZ;IAAE,KAAK,EAAE,IAAI,CAAC,KAAK;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM;IAAE,SAAS,EAAE,IAAI,CAAC;EAAU,CAAC,EACrE,4CAA4C,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,kEAC7F,CAAC;EACH,MAAM,IAAI,GACR,IAAI,CAAC,MAAM,KAAK,MAAM,GAClB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,GACzD,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;EAC/E,OAAO,OAAO,CAAC;IAAE,KAAK,EAAE,IAAI,CAAC,KAAK;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM;IAAE,SAAS,EAAE,IAAI,CAAC;EAAU,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CACjG,OAAO,EACP,yBAAyB,IAAI,CAAC,MAAM,IACtC,CAAC;AACH,CAAC;;AAED;AACA,OAAO,SAAS,eAAe,CAC7B,OAAqD,EACrD,MAA6B,EAC7B,KAAK,GAAG,GAAG,EACX,YAAY,GAAG,GAAG,EAClB,SAAS,GAAG,QAAQ,EACpB;EACA,MAAM,IAAI,GAAG,KAAK,GAAG,YAAY;EACjC,IAAI,CAAC,GAAG,CAAC;IACP,GAAG,GAAG,CAAC;EACT,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAE,KAAK,IAAK;IACnC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,IAAkB,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;IAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,cAAc,CAAC,KAAK,KAAK,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EACpD,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,IAAkB,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAE,CAAC,IAAK,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CACjH,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,GAAG,UAAU,GAAG,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACzG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,EAAE,IAAI,IAAI,CAAC;IAC5E,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE;MACzB,CAAC,GAAG,CAAC;MACL,GAAG,EAAE;IACP;IACA,MAAM,IAAI,GAAG;MAAE,GAAG,KAAK;MAAE,KAAK;MAAE,CAAC;MAAE,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE;MAAE,UAAU;MAAE,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG;IAAK,CAAC;IAC/F,CAAC,IAAI,IAAI;IACT,OAAO,IAAI;EACb,CAAC,CAAC;EACF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;EACpD,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI;EAC/B,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAE,IAAI,IAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK;EACpF,OAAO;IAAE,KAAK,EAAE,OAAO;IAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;IAAE,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG;EAAE,CAAC;AAC7H;;AAEA;AACA,OAAO,SAAS,eAAe,CAAC,IAAqB,EAAE,IAAI,GAAG;EAAE,KAAK,EAAE,GAAG;EAAE,MAAM,EAAE;AAAI,CAAC,EAAE;EACzF,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE;EAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE;EAChC,IAAI,MAAM,CAAC,IAAI,CAAE,CAAC,IAAK,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,IAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAO,EAC7H,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC;EACnE,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,iDAAiD,CAAC;EAChH,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC;EACxG,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC;EACrH,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAE,CAAC,IAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,IAAK,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAC1F,MAAM,IAAI,UAAU,CAAC,yCAAyC,CAAC;EACjE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KACjC,MAAM,CAAC,IAAI,CAAE,CAAC,IAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACjF,IACN,CAAC;EACD,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,KAAK,SAAS,GACrB,MAAM,CAAC,MAAM,CAAE,CAAC,IAAkB,CAAC,KAAK,IAAI,CAAC,GAC7C,MAAM,CAAC,OAAO,CAAE,CAAC,IAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC,IAAkB,CAAC,KAAK,IAAI,CAAC,CAAC;EAC1E,MAAM,KAAK,GAAG,UAAU,CACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAE,CAAC,IAAkB,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAC3G,IAAI,CAAC,KAAK,EACV,IACF,CAAC;EACD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;EAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;EACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK;EACpC;EACA,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;EACpE,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;EACnG,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;EACtG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,EAAE,EACF,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC,IAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAC1H,CAAC;EACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;EAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;EAC9D,MAAM,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC;EAC5D,MAAM,CAAC,GAAI,KAAa,IAAK,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;EACjE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;IAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC;IAC1C,IAAI,GAAG,GAAG,CAAC;IACX,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK;MAC7C,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;MACzB,MAAM,KAAK,GACT,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAK,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAE,GAC5E,IAAI,GACJ,IAAI,CAAC,SAAS,GACZ,GAAG,GAAI,MAAM,CAAC,KAAK,CAAE,GACrB,GAAI;MACZ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,GAAG,GAAG,GAAG,CAAC;MAChD,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,GAAG,IAAI,KAAK;MAC7D,OAAO;QAAE,WAAW;QAAE,GAAG;QAAE,KAAK;QAAE;MAAK,CAAC;IAC1C,CAAC,CAAC;IACF,OAAO;MAAE,KAAK;MAAE,KAAK;MAAE,MAAM;MAAE,OAAO;MAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAE;MAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK;IAAE,CAAC;EACtG,CAAC,CAAC;EACF,MAAM,UAAU,GACd,CAAC,IAAI,CAAC,OAAO,GACT,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,GACzB,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC,IAChI,KAAK;EACP,OAAO;IAAE,GAAG,IAAI;IAAE,OAAO;IAAE,MAAM;IAAE,KAAK;IAAE,IAAI;IAAE,KAAK;IAAE,GAAG;IAAE,MAAM;IAAE,IAAI;IAAE,CAAC;IAAE,MAAM;IAAE,KAAK;IAAE,OAAO;IAAE,MAAM;IAAE,YAAY;IAAE;EAAW,CAAC;AACzI;AAEA,MAAM,gBAAgB,GAAI,IAA4E,IAAK;EACzG,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC;EACrC,MAAM,KAAK,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;EAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;EAC7D,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;IAAE,KAAK,EAAE,SAAS;IAAE,qBAAqB,EAAE,CAAC;IAAE,WAAW,EAAE;EAAa,CAAC,CAAC;EACpI,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,GAAG,GAAG,yBAAyB,EAAE,MAAM,GAAG,OAAO,EAAE,KAAK,GAAG,EAAE,KAC9G,gBAAgB,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,kBAAkB,MAAM,KAAK,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS;EAChH,IAAI,CAAC,CAAC,MAAM,EACV,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK;IACzC,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;IACjB,KAAK,CAAC,IAAI,CACR,oCAAoC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,gBAAgB,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,kDAAkD,GAAG,EAAE,IACtO,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,EACjC,KAAK,CAAC,IAAI,CACR,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,6EACvI,CAAC;IACH,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK;IAC9F,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3E;IACA,KAAK,CAAC,IAAI,CACR,YAAY,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,4CAA4C,SAAS,CAAC,KAAK,CAAC,4FAA4F,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,GAAG,UAAU,mBAAmB,KAAK,KAAK,KAAK,iBACtS,CAAC;EACH,CAAC,CAAC;EACJ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,EACnC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC;EAC7H,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;EAClG,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;IAChC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAClH,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CACpI,CAAC;EACH;EACA,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC;EAChH,MAAM,aAAa,GAAG,qBAAqB,CACzC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAE,CAAC,IAAK,CAAC,CAAC,KAAK,CAAC,EAC7B,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,IAAI,EACN,IAAI,CAAC,KAAK,EACV,CAAC,CAAC,KACJ,CAAC;EACD,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;MAC3C,GAAG,EAAE,UAAU,CAAC,EAAE;MAClB,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAI;MAC/D,SAAS,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI;IAC9E,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,OAAO,EAAE;MAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;MAChC,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,QAAQ,IAAI,GAAG;QACtB,SAAS,EAAE,QAAQ,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,QAAS;MACvF,CAAC,CAAC;MACF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG;MACtC,MAAM,KAAK,GACT,OAAO,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ;MAC5H,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,KAAK,IAAI,GAAG;QACnB,SAAS,EAAE,KAAK,KAAK,IAAI,IAAI,QAAQ,KAAK,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAS,CAAC;MAC/F,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;MACpC,MAAM,CAAC,OAAO,CAAC,CAAC;MAChB,MAAM,CAAC,IAAI,CAAC;QAAE,GAAG,EAAE,OAAO;QAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;MAAE,CAAC,CAAC;IAC5H;IACA,IAAI,KAAK,GAAG,6EAA6E,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,aAAa,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY;IACxM,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,CAAS,EAAE,KAAa,EAAE,KAAa,EAAE,QAAQ,GAAG,KAAK,KAAK;MACtG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACpD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;MACxB,MAAM,IAAI,GAAG,qDAAqD,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,YAAY;MACxM,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI;MAC1B;MACA,MAAM,KAAe,GAAG,EAAE;MAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE;QAClD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;UACxB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;QAC7C,IAAI,EAAE,GAAG,EAAE,EACT,KAAK,CAAC,IAAI,CACR,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,gEACxG,CAAC;MACL;MACA,OAAO,iCAAiC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,0HAA0H,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM;IAC/M,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE;MAChB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;MACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;MACxC,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,GAAI,CAAC,CAAC,EACxG,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;MAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK;MACtC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACtG,CAAC,MACC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAE,CAAC,IAAK;MAC5B,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAK,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,IAAI,CAAE,EAAE;MACvD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS;MACzC,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAE,CAAC,CAAC,IAAI,GAAG,GAAG,GAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;MAClG,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;MACpC,MAAM,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,GAAI,CAAC,GAAG,CAAC,CAAC,WAAW,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC;MACvH,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC;MAC/E,IACE,OAAO,IACP,CAAC,CAAC,KAAK,GAAG,CAAC,IACX,MAAM,CAAC,OAAO,CAAC,IAAI,CAAE,IAAI,IAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EACxG;QACA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC;QACzC,KAAK,IAAI,OAAO,CACb,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAC1D,OAAO,CAAC,gBAAgB,EAAE,WAAW,UAAU,GAAG,GAAG,GAAG,CAAC;MAC9D,CAAC,MAAM,KAAK,IAAI,OAAO;IACzB,CAAC,CAAC;IACJ,KAAK,CAAC,IAAI,CACR,aAAa,CACX,KAAK,EACL;MAAE,IAAI,EAAE,MAAM;MAAE,KAAK,EAAE,MAAM,CAAC,KAAK;MAAE,KAAK,EAAE,MAAM,CAAC,KAAK;MAAE,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC;MAAE,MAAM,EAAE;IAAO,CAAC,EAC1G,IAAI,CAAC,OAAO,IAAI,KAAK,EACrB,CACE,MAAM,CAAC,KAAK,EACZ,GAAG,MAAM,CAAC,GAAG,CACV,KAAK,IACJ,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC,OAAO,CAAE,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;MAAE,GAAG,EAAE;IAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;MAAE,GAAG,EAAE;IAAQ,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,EACnQ,CAAC,CACF,CAAC,IAAI,CAAC,KAAK,CACd,CACF,CAAC;IACD,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EACjC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,qDAAqD,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;EACvI;EACA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,EACrC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;IAC/H,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACjI,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,8BAA8B,EAAE,KAAK,CAAC,CAAC;EAChH;EACF,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,yBAAyB,EAAE,QAAQ,CAAC,CAAC;EACvI,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,iCAAiC,CAAC;AAC1F,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,MAAgB,EAAE,IAAY,EAAE,IAAY,EAAE,KAAa,EAAE,KAAa,KAAK;EAC5G,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAE,KAAK,IAAK,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM;EACrF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;EAC7D,MAAM,MAAM,GAAI,CAAS,IAAK;IAC5B,MAAM,IAAI,GAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,GAAG,KAAK,GAAI,CAAC;MACnD,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC;IAClC,OAAO,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,MAAM,GAAG,IAAI,IAAI,KAAK;EACrD,CAAC;EACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,EACD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CACtC,CAAC;EACD,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAG,CAAC,CAAC;AAC5G,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/chart-bar.ts"],"sourcesContent":["import { barPercent } from \"../charts/core/bar-labels\";\nimport {\n type AxisOptions,\n type BarItem,\n chartDatumSvg,\n computeDomain,\n escapeXml,\n extendDomainToNice,\n MAX_AXIS_TICKS,\n mapLog,\n mapRange,\n niceLogTicks,\n niceStep,\n type ReferenceLine,\n referenceLineAttributes,\n svgRoot,\n} from \"../charts/core/svg-renderers\";\nimport { chartMessages } from \"./chart-message-catalog\";\n\n/**\n * Bar chart options: stdlib's `charts.bar` options plus a title for the category axis and a separate value format.\n * The wrapper owns size and inspection.\n */\nexport type BarChartOptions = {\n data?: BarItem[];\n /** Aligned categories and series. Null observations are gaps. */\n x?: string[];\n series?: { label: string; data: (number | null)[] }[];\n layout?: \"columns\" | \"rows\" | \"grouped\" | \"stacked\";\n normalize?: boolean;\n /** Explicit rows form a ranked list; shares include every source item, including the remainder. */\n share?: boolean;\n limit?: number;\n tone?: \"in\" | \"out\";\n\n locale?: string;\n compare?: { label: string; data: (number | null)[] };\n\n /** Value axis. `label` titles it, `format` writes its ticks and, without `valueFormat`, the printed values. */\n yAxis?: AxisOptions;\n /**\n * Category axis. `label` titles it. `ordered` marks categories that follow each other, such as days or steps: they\n * stay columns, and only every n-th label shows when they would not fit, as on a time axis. Unordered categories each\n * keep their label and turn into rows instead.\n */\n xAxis?: { label?: string; ordered?: boolean };\n /** Writes printed values and tooltip values. Defaults to `yAxis.format`. */\n valueFormat?: (value: number) => string;\n colorByBar?: boolean;\n references?: ReferenceLine[];\n /** Print every value at its bar. Default: whenever the values stay readable; rows always print them. */\n showValues?: boolean;\n /** A legend of the bar colors; used only with `colorByBar` in columns, where labels sit below the plot. */\n legend?: boolean;\n className?: string;\n title?: string;\n subtitle?: string;\n /**\n * The narrowest width in CSS pixels at which the drawing is shown; labels are laid out to fit it. Defaults to a\n * 320px phone column. A host that draws at its measured width passes that width.\n */\n displayWidth?: number;\n /** Logical insets of the column layout. Rows place their labels and values themselves. */\n padding?: number | { top?: number; right?: number; bottom?: number; left?: number };\n};\n\nexport type BarChartLayout = \"columns\" | \"rows\";\n\n/**\n * Text keeps its pixel size while the drawing stretches to its box, and the drawing is never measured. Labels are\n * laid out for the narrowest chart, a 320px phone column, so they fit in every wider one.\n */\nconst NARROW_PX = 296;\n/** Tick, category and value labels are 11px (see the `.k2b-chart` rules). */\nconst FONT_PX = 11;\n/** A label column takes at most this share of the narrowest chart; longer labels wrap to a second line. */\nconst LABEL_SHARE = 0.4;\nconst ROW_MIN = 22;\nconst ROW_TWO_LINES = 32;\nconst ROW_MAX = 36;\n/** Rows aim for the height of the other Cartesian charts before they grow. */\nconst ROWS_TARGET_HEIGHT = 280;\nconst BAR_MAX = 20;\nconst COLUMN_MAX = 40;\nconst GAP_PX = 6;\nconst LEGEND_ROW = 20;\n/** Rows keep at least this share of the narrowest chart for their bars; wider values go to the tooltip and table. */\nconst MIN_PLOT_SHARE = 0.3;\n\nconst narrow = (opts: BarChartOptions) => opts.displayWidth ?? NARROW_PX;\nconst fmt = (value: number) => (Number.isFinite(value) ? `${Math.round(value * 100) / 100}` : \"0\");\n\n/** Estimated width of `text` at `size` pixels in the UI sans font with tabular figures; a little wide on purpose. */\nexport const chartTextWidth = (text: string, size = FONT_PX): number => {\n let em = 0;\n for (const char of text) {\n if (/[\\s.,:;!|'’ilIjft()[\\]-]/.test(char)) em += 0.34;\n else if (/[MWmw@%]/.test(char)) em += 0.86;\n else if (/[A-Z0-9#$€&]/.test(char)) em += 0.66;\n else if (char.codePointAt(0)! > 0x2e80) em += 1;\n else em += 0.56;\n }\n return em * size;\n};\n\n/** Split a label into at most `lines` lines of `maxPx`; the last line ends with an ellipsis when the label is longer. */\nexport const wrapLabel = (label: string, maxPx: number, lines: number): { lines: string[]; truncated: boolean } => {\n const words = label.trim().split(/\\s+/);\n const result: string[] = [];\n let current = \"\";\n const breakWord = (word: string) => {\n // A word wider than a line breaks inside the word.\n let part = \"\";\n for (const char of word) {\n if (part && chartTextWidth(part + char) > maxPx) {\n result.push(part);\n part = \"\";\n }\n part += char;\n }\n return part;\n };\n for (const word of words) {\n const candidate = current ? `${current} ${word}` : word;\n if (chartTextWidth(candidate) <= maxPx) current = candidate;\n else {\n if (current) result.push(current);\n current = chartTextWidth(word) > maxPx ? breakWord(word) : word;\n }\n }\n if (current) result.push(current);\n if (result.length <= lines) return { lines: result, truncated: false };\n let last = result[lines - 1]!;\n while (last && chartTextWidth(`${last}…`) > maxPx) last = last.slice(0, -1).trimEnd();\n return { lines: [...result.slice(0, lines - 1), `${last}…`], truncated: true };\n};\n\ntype Scale = { domain: [number, number]; ticks: number[]; log: boolean };\n\n/** The value scale of stdlib's bar chart: nice linear ticks including zero, or decades on a log axis. */\nconst valueScale = (values: number[], axis: AxisOptions | undefined, nice: boolean): Scale => {\n const log = axis?.scale === \"log\";\n if (axis?.domain) {\n const [lo, hi] = axis.domain;\n if (!Number.isFinite(lo) || !Number.isFinite(hi) || lo >= hi || (log && lo <= 0))\n throw new RangeError(\"Chart axis domain must have finite increasing bounds (positive for log scales)\");\n // Bars rest on zero, so a linear domain must contain it like every value.\n if ((log ? values : [...values, 0]).some((value) => (!log || value > 0) && (value < lo || value > hi)))\n throw new RangeError(\"Chart axis domain must contain all plotted values and bounds\");\n if (log) return { domain: [lo, hi], ticks: niceLogTicks(lo, hi).ticks.filter((tick) => tick >= lo && tick <= hi), log };\n const step = niceStep(hi - lo, axis.ticks ?? 5);\n const ticks = [lo];\n if (step > 0 && Number.isFinite(step) && (hi - lo) / step <= MAX_AXIS_TICKS)\n for (let value = Math.ceil(lo / step) * step; value < hi; ) {\n if (value > lo) ticks.push(value);\n const next = value + step;\n if (next <= value) break;\n value = next;\n }\n return { domain: [lo, hi], ticks: [...ticks, hi], log };\n }\n if (log) {\n const positive = values.filter((value) => value > 0);\n if (!positive.length) return { domain: [1, 10], ticks: [1, 10], log };\n return { ...niceLogTicks(Math.min(...positive), Math.max(...positive)), log };\n }\n const [min, max] = computeDomain([...values, 0]);\n if (!nice) return { domain: [min, max], ticks: [], log };\n return { ...extendDomainToNice(min, max, niceStep(max - min, axis?.ticks ?? 5)), log };\n};\n\nconst project = (scale: Scale, value: number, range: [number, number]) => (scale.log ? mapLog : mapRange)(value, scale.domain, range);\n\ntype Plan = {\n layout: BarChartLayout;\n height: number;\n finite: { item: BarItem; index: number }[];\n header: number;\n};\n\nconst finiteItems = (data: BarItem[]) => data.flatMap((item, index) => (Number.isFinite(item.value) ? [{ item, index }] : []));\nexport const headerHeight = (opts: Pick<BarChartOptions, \"title\" | \"subtitle\">) =>\n opts.title || opts.subtitle ? (opts.title ? 14 : 0) + (opts.subtitle ? 6 : 0) + 16 : 0;\nconst valueFormat = (opts: BarChartOptions) => opts.valueFormat ?? opts.yAxis?.format ?? ((value: number) => String(value));\nconst tickFormat = (opts: BarChartOptions) => opts.yAxis?.format ?? ((value: number) => String(value));\n\n/** Columns, when every category label fits below its column on the narrowest chart; rows otherwise. */\nconst columnsFit = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const columns = columnGeometry(opts, finite, width, 280);\n const slotPx = (columns.x1 - columns.x0) / finite.length / units;\n if (finite.some(({ item }) => chartTextWidth(item.label) + GAP_PX > slotPx)) return false;\n // Asked-for values must stay readable too; rows always have room for them.\n return opts.showValues !== true || columns.valuesFit;\n};\n\n/** The renderer's plan for a chart: its layout and logical height at `width`, derived from the data alone. */\nconst barChartPlan = (opts: BarChartOptions, width = 480): Plan => {\n const finite = finiteItems(opts.data ?? []);\n if (opts.layout === \"rows\" && !opts.series)\n return { layout: \"rows\", height: rankedBarLayout(opts, { width, height: 280 }).height, finite, header: headerHeight(opts) };\n if (opts.series) return { layout: \"columns\", height: 280, finite, header: headerHeight(opts) };\n const header = headerHeight(opts);\n if (!finite.length) return { layout: \"columns\", height: 280, finite, header };\n if (opts.layout === \"columns\" || (opts.layout !== \"rows\" && (opts.xAxis?.ordered || columnsFit(opts, finite, width))))\n return { layout: \"columns\", height: 280, finite, header };\n const rows = rowGeometry(opts, finite, width, header);\n return { layout: \"rows\", height: rows.height, finite, header };\n};\n\n/** The layout a bar chart takes and its logical height, so server and browser reserve the same box. */\nexport const barChartLayout = (opts: BarChartOptions, width = 480): { layout: BarChartLayout; height: number } => {\n const { layout, height } = barChartPlan(opts, width);\n return { layout, height };\n};\n\nconst columnGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, height: number) => {\n const units = width / narrow(opts);\n const given =\n typeof opts.padding === \"number\" ? { top: opts.padding, right: opts.padding, bottom: opts.padding, left: opts.padding } : opts.padding;\n const values = finite.map(({ item }) => item.value);\n const scale = valueScale(values, opts.yAxis, true);\n const ticks = tickFormat(opts);\n const longestTick = Math.max(0, ...scale.ticks.map((tick) => chartTextWidth(ticks(tick))));\n const legendRows = opts.colorByBar && opts.legend ? legendLayout(opts, finite, width).rows : 0;\n const header = headerHeight(opts);\n const x0 = given?.left ?? Math.max(40, Math.ceil((longestTick + GAP_PX + 2) * units));\n const x1 = width - (given?.right ?? 16);\n const y0 = header + (given?.top ?? 16) + (opts.yAxis?.label ? 16 : 0);\n const y1 = height - (given?.bottom ?? 22) - (opts.xAxis?.label ? 16 : 0) - legendRows * LEGEND_ROW;\n const slotPx = (x1 - x0) / Math.max(1, finite.length) / units;\n const format = valueFormat(opts);\n const valuesFit = finite.every(({ item }) => chartTextWidth(format(item.value)) + 2 <= slotPx);\n const printValues = opts.showValues ?? valuesFit;\n // A printed negative value hangs below its bar: the plot ends a line above the category labels.\n const plotBottom = y1 - (printValues && values.some((value) => value < 0) ? 14 : 0);\n return { x0, x1, y0, y1, plotBottom, scale, valuesFit, printValues, legendRows };\n};\n\nconst rowGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number) => {\n const printed = rowGeometryWith(opts, finite, width, header, opts.showValues !== false);\n // Values too wide to leave the bars room stay in the tooltip and table; a value axis replaces them.\n if (printed.showValues && (printed.x1 - printed.x0) / (width / narrow(opts)) < narrow(opts) * MIN_PLOT_SHARE)\n return rowGeometryWith(opts, finite, width, header, false);\n return printed;\n};\n\nconst rowGeometryWith = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number, showValues: boolean) => {\n const units = width / narrow(opts);\n const maxLabelPx = narrow(opts) * LABEL_SHARE;\n const labels = finite.map(({ item }) => wrapLabel(item.label, maxLabelPx, 2));\n const twoLines = labels.some((label) => label.lines.length > 1);\n const labelPx = Math.min(maxLabelPx, Math.max(0, ...labels.flatMap((label) => label.lines.map((line) => chartTextWidth(line)))));\n const format = valueFormat(opts);\n const positivePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value >= 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const negativePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value < 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const refLabels = (opts.references ?? []).some((ref) => (ref.axis ?? \"y\") === \"y\" && ref.label);\n const titled = !!(opts.xAxis?.label || opts.yAxis?.label || refLabels);\n const top = header + (titled ? 20 : 4);\n const bottom = showValues ? 4 : 24;\n const minimum = twoLines ? ROW_TWO_LINES : ROW_MIN;\n const pitch = Math.min(ROW_MAX, Math.max(minimum, (ROWS_TARGET_HEIGHT - top - bottom) / finite.length));\n const labelEnd = Math.ceil(labelPx * units);\n const x0 = labelEnd + GAP_PX * units + (negativePx ? (negativePx + GAP_PX) * units : 0);\n const x1 = width - (positivePx ? (positivePx + GAP_PX) * units : 8 * units);\n return { labels, labelEnd, x0, x1, top, pitch, twoLines, showValues, height: Math.ceil(top + pitch * finite.length + bottom) };\n};\n\nconst legendLayout = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const rows: { label: string; color: number; x: number }[][] = [[]];\n let cursor = 0;\n finite.forEach(({ item }, index) => {\n const itemWidth = (8 + 4 + chartTextWidth(item.label)) * units;\n if (cursor > 0 && cursor + 12 * units + itemWidth > width) {\n rows.push([]);\n cursor = 0;\n }\n const x = cursor ? cursor + 12 * units : 0;\n rows.at(-1)!.push({ label: item.label, color: colorIndex(item, index), x });\n cursor = x + itemWidth;\n });\n return { rows: rows.length, items: rows };\n};\n\nconst colorIndex = (item: BarItem, fallback: number) => {\n const index = item.colorIndex ?? fallback;\n if (!Number.isInteger(index) || index < 0) throw new RangeError(\"Chart colorIndex must be a nonnegative integer\");\n return index % 8;\n};\n\nexport const renderHeader = (opts: Pick<BarChartOptions, \"title\" | \"subtitle\">, width: number) => {\n const parts: string[] = [];\n let y = 16;\n if (opts.title) {\n parts.push(`<text class=\"stdlib-chart-title\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.title)}</text>`);\n y += 14;\n }\n if (opts.subtitle)\n parts.push(\n `<text class=\"stdlib-chart-subtitle\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.subtitle)}</text>`,\n );\n return parts.join(\"\");\n};\n\nconst datum = (item: BarItem, index: number, anchor: [number, number], format: (value: number) => string) => ({\n index,\n role: \"item\" as const,\n label: item.label,\n anchor,\n values: [{ key: \"value\", value: item.value, formatted: format(item.value) }],\n});\n\nconst renderColumns = (opts: BarChartOptions, plan: Plan, width: number, height: number, inspect: boolean) => {\n const { finite } = plan;\n const units = width / narrow(opts);\n const g = columnGeometry(opts, finite, width, height);\n const ticks = tickFormat(opts);\n const format = valueFormat(opts);\n const showValues = g.printValues;\n const parts: string[] = [renderHeader(opts, width)];\n const y = (value: number) => project(g.scale, value, [g.plotBottom, g.y0]);\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.y0 - 8)}\" text-anchor=\"start\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n for (const tick of g.scale.ticks) {\n const ty = y(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ty)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(g.x0 - GAP_PX * units)}\" y=\"${fmt(ty)}\" dy=\"4\" text-anchor=\"end\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n if (opts.yAxis?.minorTicks && !g.scale.log)\n g.scale.ticks.slice(1).forEach((tick, index) => {\n const previous = g.scale.ticks[index]!;\n for (let step = 1; step < 5; step++) {\n const ty = y(previous + ((tick - previous) * step) / 5);\n parts.push(`<line class=\"stdlib-chart-minor-tick\" x1=\"${fmt(g.x0 - 3)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x0)}\" y2=\"${fmt(ty)}\"/>`);\n }\n });\n const baseline = g.scale.log ? g.plotBottom : y(0);\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(baseline)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(baseline)}\"/>`);\n const slot = (g.x1 - g.x0) / finite.length;\n const barWidth = Math.min(slot * 0.8, COLUMN_MAX);\n // Text keeps its pixel size around its x/y anchor (`.k2b-chart` CSS), and so does a `dy` offset: labels anchored on\n // the plot's bottom edge stay clear of the axis in a box shorter than the drawing.\n const labelY = g.y1;\n // Unordered columns fit every label (see columnsFit); ordered ones label every n-th column that leaves room, from\n // the first column whose label stays inside the drawing.\n const visibleLabels = visibleCategoryLabels(\n finite.map(({ item }) => item.label),\n g.x0,\n slot,\n width,\n units,\n );\n finite.forEach(({ item, index }, position) => {\n const center = g.x0 + slot * (position + 0.5);\n if (visibleLabels.has(position))\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(center)}\" y=\"${fmt(labelY)}\" dy=\"16\" text-anchor=\"middle\">${escapeXml(item.label)}</text>`,\n );\n if (g.scale.log && item.value <= 0) return;\n const valueY = y(item.value);\n const top = Math.min(valueY, baseline);\n const barHeight = Math.abs(valueY - baseline);\n const x = center - barWidth / 2;\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(x)}\" y=\"${fmt(top)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(barHeight)}\"/>`,\n datum(item, index, [center, top + barHeight / 2], format),\n inspect,\n ),\n );\n if (showValues)\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(center)}\" y=\"${fmt(item.value < 0 ? top + barHeight + 13 : top - 4)}\" text-anchor=\"middle\">${escapeXml(format(item.value))}</text>`,\n );\n });\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < g.scale.domain[0] || ref.value > g.scale.domain[1])\n continue;\n const ry = y(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(g.x0)}\" y1=\"${fmt(ry)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ry)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(g.x1 - 4)}\" y=\"${fmt(ry - 4)}\" text-anchor=\"end\">${escapeXml(ref.label)}</text>`,\n );\n }\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt((g.x0 + g.x1) / 2)}\" y=\"${fmt(labelY)}\" dy=\"34\" text-anchor=\"middle\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (g.legendRows) {\n const legend = legendLayout(opts, finite, width);\n const top = height - g.legendRows * LEGEND_ROW;\n parts.push('<g class=\"stdlib-chart-legend\">');\n legend.items.forEach((row, rowIndex) => {\n const middle = top + rowIndex * LEGEND_ROW + LEGEND_ROW / 2;\n for (const entry of row)\n parts.push(\n `<g class=\"stdlib-chart-legend-item stdlib-chart-series-${entry.color}\"><rect class=\"stdlib-chart-legend-swatch\" x=\"${fmt(entry.x)}\" y=\"${fmt(middle - 4)}\" width=\"${fmt(8 * units)}\" height=\"8\" rx=\"1\"/><text class=\"stdlib-chart-legend-label\" x=\"${fmt(entry.x + 12 * units)}\" y=\"${fmt(middle + 4)}\">${escapeXml(entry.label)}</text></g>`,\n );\n });\n parts.push(\"</g>\");\n }\n return parts.join(\"\");\n};\n\nconst renderRows = (opts: BarChartOptions, plan: Plan, width: number, inspect: boolean) => {\n const { finite, header } = plan;\n const units = width / narrow(opts);\n const g = rowGeometry(opts, finite, width, header);\n const format = valueFormat(opts);\n const scale = valueScale(\n finite.map(({ item }) => item.value),\n opts.yAxis,\n !g.showValues,\n );\n const x = (value: number) => project(scale, value, [g.x0, g.x1]);\n const baseline = scale.log ? g.x0 : x(0);\n const plotBottom = g.top + g.pitch * finite.length;\n const thickness = Math.min(BAR_MAX, g.pitch - (g.twoLines ? 14 : 8));\n const parts: string[] = [renderHeader(opts, width)];\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.top - 8)}\" text-anchor=\"start\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${width}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"end\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n if (!g.showValues) {\n const ticks = tickFormat(opts);\n for (const tick of scale.ticks) {\n const tx = x(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(tx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(tx)}\" y2=\"${fmt(plotBottom)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(tx)}\" y=\"${fmt(plotBottom + 16)}\" text-anchor=\"middle\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n }\n finite.forEach(({ item, index }, position) => {\n const rowTop = g.top + g.pitch * position;\n const middle = rowTop + g.pitch / 2;\n const label = g.labels[position]!;\n const title = label.truncated ? `<title>${escapeXml(item.label)}</title>` : \"\";\n label.lines.forEach((line, lineIndex) => {\n const lineY = middle + 4 + (label.lines.length > 1 ? (lineIndex === 0 ? -6.5 : 6.5) : 0);\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(g.labelEnd)}\" y=\"${fmt(lineY)}\" text-anchor=\"end\">${title}${escapeXml(line)}</text>`,\n );\n });\n if (scale.log && item.value <= 0) return;\n const valueX = x(item.value);\n const left = Math.min(valueX, baseline);\n const barWidth = Math.abs(valueX - baseline);\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(left)}\" y=\"${fmt(middle - thickness / 2)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(thickness)}\"/>`,\n datum(item, index, [left + barWidth / 2, middle], format),\n inspect,\n ),\n );\n if (g.showValues) {\n const negative = item.value < 0;\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(valueX + (negative ? -GAP_PX : GAP_PX) * units)}\" y=\"${fmt(middle + 4)}\" text-anchor=\"${negative ? \"end\" : \"start\"}\">${escapeXml(format(item.value))}</text>`,\n );\n }\n });\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(baseline)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(baseline)}\" y2=\"${fmt(plotBottom)}\"/>`);\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < scale.domain[0] || ref.value > scale.domain[1]) continue;\n const rx = x(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(rx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(rx)}\" y2=\"${fmt(plotBottom)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(rx)}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"middle\">${escapeXml(ref.label)}</text>`,\n );\n }\n return parts.join(\"\");\n};\n\n/**\n * Render a bar chart in which every category has its label. Few short labels stand below vertical columns; otherwise\n * each category becomes a horizontal row with its label left of the bar and its value at the bar's end. Rows grow the\n * drawing instead of dropping labels: use {@link barChartLayout} for its logical height.\n */\nexport const renderBarChartSvg = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }): string => {\n if (opts.series) return renderSeriesBars(opts);\n if (opts.layout === \"rows\") return renderRankedBars(opts);\n const plan = barChartPlan(opts, opts.width);\n // The empty drawing of stdlib's bar chart, written here so bundles leave out stdlib's whole bar renderer.\n if (!plan.finite.length)\n return svgRoot(\n { width: opts.width, height: opts.height, className: opts.className },\n `<text class=\"stdlib-chart-empty-text\" x=\"${fmt(opts.width / 2)}\" y=\"${fmt(opts.height / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\">no data</text>`,\n );\n const body =\n plan.layout === \"rows\"\n ? renderRows(opts, plan, opts.width, opts.inspect ?? false)\n : renderColumns(opts, plan, opts.width, opts.height, opts.inspect ?? false);\n return svgRoot({ width: opts.width, height: opts.height, className: opts.className }, body).replace(\n \"<svg \",\n `<svg data-bar-layout=\"${plan.layout}\" `,\n );\n};\n\n/** Stable wrapping legend slots reserve the widest total or category value before interaction. */\nexport function barSeriesLegend(\n entries: { label: string; data: (number | null)[] }[],\n format: (v: number) => string,\n width = 480,\n displayWidth = 296,\n maxHeight = Infinity,\n) {\n const unit = width / displayWidth;\n let x = 0,\n row = 0;\n const items = entries.map((entry) => {\n const finite = entry.data.filter((v): v is number => v !== null && Number.isFinite(v));\n const total = finite.length ? finite.reduce((sum, v) => sum + v, 0) : null;\n const valueWidth = Math.max(\n chartTextWidth(total === null ? \"–\" : format(total)),\n ...entry.data.filter((v): v is number => v !== null && Number.isFinite(v)).map((v) => chartTextWidth(format(v))),\n );\n const labelWidth = Math.max(8, Math.min(96, displayWidth - valueWidth - 32, chartTextWidth(entry.label)));\n const slot = Math.min(width, (14 + labelWidth + 6 + valueWidth + 16) * unit);\n if (x && x + slot > width) {\n x = 0;\n row++;\n }\n const item = { ...entry, total, x, y: row * 20 + 12, labelWidth, valueX: x + slot - 16 * unit };\n x += slot;\n return item;\n });\n const rows = Math.max(1, Math.floor(maxHeight / 20));\n const overflow = row + 1 > rows;\n const visible = overflow ? items.filter((item) => item.y <= (rows - 1) * 20) : items;\n return { items: visible, hidden: items.length - visible.length, height: entries.length ? Math.min(row + 1, rows) * 20 : 0 };\n}\n\n/** Category geometry shared by SVG, server snapshots and browser inspection. */\nexport function seriesBarLayout(opts: BarChartOptions, size = { width: 480, height: 280 }) {\n const categories = opts.x ?? [];\n const series = opts.series ?? [];\n if (series.some((s) => s.data.length !== categories.length) || (opts.compare && opts.compare.data.length !== categories.length))\n throw new RangeError(\"Bar series must have the same length as x\");\n if (opts.compare && series.length !== 1) throw new RangeError(\"Bar comparison needs exactly one current series\");\n if (opts.normalize && opts.layout !== \"stacked\") throw new RangeError(\"Normalized bars must be stacked\");\n if (opts.layout === \"stacked\" && opts.yAxis?.scale === \"log\") throw new RangeError(\"Stacked bars need a linear axis\");\n if (opts.layout === \"stacked\" && series.some((s) => s.data.some((v) => v !== null && v < 0)))\n throw new RangeError(\"Stacked bars require nonnegative values\");\n const totals = categories.map((_, i) =>\n series.some((s) => Number.isFinite(s.data[i]))\n ? series.reduce((sum, s) => sum + (Number.isFinite(s.data[i]) ? s.data[i]! : 0), 0)\n : null,\n );\n const values =\n opts.layout === \"stacked\"\n ? totals.filter((v): v is number => v !== null)\n : series.flatMap((s) => s.data.filter((v): v is number => v !== null));\n const scale = valueScale(\n opts.normalize ? [0, 1] : [...values, ...(opts.compare?.data.filter((v): v is number => v !== null) ?? [])],\n opts.yAxis,\n true,\n );\n const format = valueFormat(opts);\n const units = size.width / narrow(opts);\n const legend = opts.legend !== false;\n // Keep the legend within one quarter of the frame, leaving room for the plot.\n const entries = [...series, ...(opts.compare ? [opts.compare] : [])];\n const legendLayout = barSeriesLegend(entries, format, size.width, narrow(opts), size.height * 0.25);\n const top = headerHeight(opts) + 8 + (legend ? legendLayout.height : 0) + (opts.yAxis?.label ? 16 : 0);\n const left = Math.max(\n 40,\n ...scale.ticks.map((v) => (chartTextWidth(opts.normalize ? `${Math.round(v * 100)}%` : tickFormat(opts)(v)) + 8) * units),\n );\n const right = size.width - 4;\n const bottom = size.height - 24 - (opts.xAxis?.label ? 18 : 0);\n const slot = (right - left) / Math.max(1, categories.length);\n const y = (value: number) => project(scale, value, [bottom, top]);\n const columns = categories.map((label, index) => {\n const center = left + slot * (index + 0.5);\n let acc = 0;\n const current = series.map((s, seriesIndex) => {\n const raw = s.data[index];\n const value =\n raw === null || !Number.isFinite(raw) || (opts.normalize && totals[index] === 0)\n ? null\n : opts.normalize\n ? raw! / totals[index]!\n : raw!;\n const base = opts.layout === \"stacked\" ? acc : 0;\n if (value !== null && opts.layout === \"stacked\") acc += value;\n return { seriesIndex, raw, value, base };\n });\n return { label, index, center, current, total: totals[index]!, previous: opts.compare?.data[index] };\n });\n const barWidthPx =\n (opts.compare\n ? Math.min(slot * 0.32, 26)\n : Math.min(slot * (opts.layout === \"stacked\" ? 0.56 : 0.8 / Math.max(1, entries.length)), opts.layout === \"stacked\" ? 40 : 22)) /\n units;\n return { ...size, columns, totals, scale, left, right, top, bottom, slot, y, format, units, entries, legend, legendLayout, barWidthPx };\n}\n\nconst renderSeriesBars = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }) => {\n const g = seriesBarLayout(opts, opts);\n const parts = [renderHeader(opts, opts.width)];\n const labels = chartMessages.resolve([opts.locale ?? \"en\"]).t;\n const change = new Intl.NumberFormat(opts.locale ?? \"en\", { style: \"percent\", maximumFractionDigits: 1, signDisplay: \"exceptZero\" });\n const text = (x: number, y: number, value: string, cls = \"stdlib-chart-tick-label\", anchor = \"start\", extra = \"\") =>\n `<text class=\"${cls}\" x=\"${fmt(x)}\" y=\"${fmt(y)}\" text-anchor=\"${anchor}\" ${extra}>${escapeXml(value)}</text>`;\n if (g.legend)\n g.legendLayout.items.forEach((entry, i) => {\n const y = headerHeight(opts) + entry.y;\n const x = entry.x;\n parts.push(\n `<rect class=\"stdlib-chart-series-${i < (opts.series?.length ?? 0) ? i % 8 : 0}\" x=\"${x}\" y=\"${y - 8}\" width=\"${8 * g.units}\" height=\"8\" ${i >= (opts.series?.length ?? 0) ? 'style=\"fill:none;stroke:var(--stdlib-chart-c1);\"' : \"\"}/>`,\n );\n if (i >= (opts.series?.length ?? 0))\n parts.push(\n `<path d=\"M ${x} ${y - 4} l ${4 * g.units} -4 M ${x + 2 * g.units} ${y} l ${6 * g.units} -6 M ${x + 6 * g.units} ${y} l ${2 * g.units} -2\" fill=\"none\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1\"/>`,\n );\n const label = wrapLabel(entry.label, Math.max(8, entry.labelWidth), 1).lines[0] ?? entry.label;\n const value = escapeXml(entry.total === null ? \"–\" : g.format(entry.total));\n // One text run keeps the value six CSS pixels after its label even when the SVG stretches.\n parts.push(\n `<text x=\"${fmt(x + 14 * g.units)}\" y=\"${fmt(y)}\"><tspan class=\"stdlib-chart-tick-label\">${escapeXml(label)}</tspan><tspan class=\"stdlib-chart-bar-value\" dx=\"6\" data-chart-legend-value data-field=\"${i < (opts.series?.length ?? 0) ? `series:${i}` : \"previous\"}\" data-default=\"${value}\">${value}</tspan></text>`,\n );\n });\n if (g.legend && g.legendLayout.hidden)\n parts.push(text(0, headerHeight(opts) + g.legendLayout.height - 8, `+${g.legendLayout.hidden}`, \"stdlib-chart-tick-label\"));\n if (opts.yAxis?.label) parts.push(text(0, g.top - 6, opts.yAxis.label, \"stdlib-chart-axis-label\"));\n for (const tick of g.scale.ticks) {\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.y(tick)}\" y2=\"${g.y(tick)}\"/>`);\n parts.push(\n text(g.left - 6 * g.units, g.y(tick) + 4, opts.normalize ? `${Math.round(tick * 100)}%` : tickFormat(opts)(tick), undefined, \"end\"),\n );\n }\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.bottom}\" y2=\"${g.bottom}\"/>`);\n const visibleLabels = visibleCategoryLabels(\n g.columns.map((c) => c.label),\n g.left,\n g.slot,\n opts.width,\n g.units,\n );\n for (const column of g.columns) {\n const fields = column.current.map((v, i) => ({\n key: `series:${i}`,\n value: v.raw === null || !Number.isFinite(v.raw) ? \"–\" : v.raw!,\n formatted: v.raw === null || !Number.isFinite(v.raw) ? \"–\" : g.format(v.raw!),\n }));\n if (opts.compare) {\n const previous = column.previous;\n fields.push({\n key: \"previous\",\n value: previous ?? \"–\",\n formatted: previous === null || !Number.isFinite(previous) ? \"–\" : g.format(previous!),\n });\n const current = column.current[0]?.raw;\n const delta =\n current == null || previous == null || !Number.isFinite(current) || !Number.isFinite(previous) ? null : current - previous;\n fields.push({\n key: \"delta\",\n value: delta ?? \"–\",\n formatted: delta === null || previous === 0 ? \"–\" : change.format(delta / Math.abs(previous!)),\n });\n } else if (opts.layout === \"stacked\") {\n fields.reverse();\n fields.push({ key: \"total\", value: column.total ?? \"–\", formatted: column.total === null ? \"–\" : g.format(column.total) });\n }\n let marks = `<rect class=\"k2b-chart-category-band\" fill=\"none\" pointer-events=\"all\" x=\"${column.center - g.slot / 2}\" y=\"${g.top}\" width=\"${g.slot}\" height=\"${Math.max(0, g.bottom - g.top)}\" rx=\"6\"/>`;\n const bar = (value: number, base: number, x: number, width: number, color: number, previous = false) => {\n const y0 = g.y(g.scale.log ? g.scale.domain[0] : base),\n y1 = g.y(base + value);\n const rect = `<rect class=\"stdlib-chart-bar stdlib-chart-series-${color % 8}\" x=\"${fmt(x)}\" y=\"${fmt(Math.min(y0, y1))}\" width=\"${fmt(Math.max(0, width))}\" height=\"${fmt(Math.abs(y0 - y1))}\" rx=\"3\"/>`;\n if (!previous) return rect;\n // Inline strokes avoid document-global SVG pattern IDs, including duplicate charts during SSR.\n const lines: string[] = [];\n for (let d = -Math.abs(y0 - y1); d < width; d += 6) {\n const lo = Math.max(0, -d),\n hi = Math.min(Math.abs(y0 - y1), width - d);\n if (hi > lo)\n lines.push(\n `<line x1=\"${x + d + lo}\" y1=\"${Math.max(y0, y1) - lo}\" x2=\"${x + d + hi}\" y2=\"${Math.max(y0, y1) - hi}\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1.5\"/>`,\n );\n }\n return `<g class=\"k2b-chart-previous\">${rect.replace(\"/>\", ' style=\"fill:var(--stdlib-chart-c1,#3b82f6);fill-opacity:.14\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1\"/>')}${lines.join(\"\")}</g>`;\n };\n if (opts.compare) {\n const bw = Math.min(g.slot * 0.32, 26);\n const gap = Math.min(1.5, g.slot * 0.08);\n if (column.previous !== null && Number.isFinite(column.previous) && (!g.scale.log || column.previous! > 0))\n marks += bar(column.previous!, 0, column.center - bw - gap, bw, 0, true);\n const value = column.current[0]?.value;\n if (value != null && (!g.scale.log || value > 0)) marks += bar(value, 0, column.center + gap, bw, 0);\n } else\n column.current.forEach((v) => {\n if (v.value === null || (g.scale.log && v.value <= 0)) return;\n const stacked = opts.layout === \"stacked\";\n const bw = stacked ? Math.min(g.slot * 0.56, 40) : Math.min((g.slot * 0.8) / g.entries.length, 22);\n const gap = bw / g.units > 4 ? 2 : 0;\n const x = stacked ? column.center - bw / 2 : column.center - (g.entries.length * bw) / 2 + v.seriesIndex * bw + gap / 2;\n const segment = bar(v.value, v.base, x, stacked ? bw : bw - gap, v.seriesIndex);\n if (\n stacked &&\n v.value > 0 &&\n column.current.some((next) => next.seriesIndex > v.seriesIndex && next.value !== null && next.value > 0)\n ) {\n const fullHeight = Math.abs(g.y(v.base) - g.y(v.base + v.value));\n const gap = Math.min(1.5, fullHeight / 2);\n marks += segment\n .replace(/y=\"[^\"]*\"/, `y=\"${g.y(v.base + v.value) + gap}\"`)\n .replace(/height=\"[^\"]*\"/, `height=\"${fullHeight - gap}\"`);\n } else marks += segment;\n });\n parts.push(\n chartDatumSvg(\n marks,\n { role: \"item\", index: column.index, label: column.label, anchor: [column.center, g.top], values: fields },\n opts.inspect ?? false,\n [\n column.label,\n ...fields.map(\n (field) =>\n `${field.key.startsWith(\"series:\") ? opts.series![Number(field.key.slice(7))]!.label : field.key === \"previous\" ? opts.compare!.label : field.key === \"delta\" ? labels.chartFields({ key: \"delta\" }) : labels.chartFields({ key: \"total\" })}: ${field.formatted}`,\n ),\n ].join(\" · \"),\n ),\n );\n if (visibleLabels.has(column.index))\n parts.push(text(column.center, g.bottom, column.label, \"stdlib-chart-tick-label stdlib-chart-category-label\", \"middle\", 'dy=\"16\"'));\n }\n for (const ref of opts.references ?? [])\n if ((ref.axis ?? \"y\") === \"y\" && Number.isFinite(ref.value) && ref.value >= g.scale.domain[0] && ref.value <= g.scale.domain[1]) {\n parts.push(`<line class=\"stdlib-chart-reference\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.y(ref.value)}\" y2=\"${g.y(ref.value)}\"/>`);\n if (ref.label) parts.push(text(g.right, g.y(ref.value) - 4, ref.label, \"stdlib-chart-reference-label\", \"end\"));\n }\n if (opts.xAxis?.label) parts.push(text((g.left + g.right) / 2, opts.height - 2, opts.xAxis.label, \"stdlib-chart-axis-label\", \"middle\"));\n return svgRoot(opts, parts.join(\"\")).replace(\"<svg \", '<svg data-bar-layout=\"columns\" ');\n};\n\nconst visibleCategoryLabels = (labels: string[], left: number, slot: number, width: number, units: number) => {\n const labelPx = Math.max(0, ...labels.map((label) => chartTextWidth(label))) + GAP_PX;\n const step = Math.max(1, Math.ceil(labelPx / (slot / units)));\n const inside = (i: number) => {\n const half = (chartTextWidth(labels[i]!) * units) / 2,\n center = left + slot * (i + 0.5);\n return center - half >= 0 && center + half <= width;\n };\n const first = Math.max(\n 0,\n labels.findIndex((_, i) => inside(i)),\n );\n return new Set(labels.flatMap((_, i) => (i >= first && (i - first) % step === 0 && inside(i) ? [i] : [])));\n};\n\n/** Ranked rows retain original indices. A limit changes the drawing, never the denominator or source data. */\nexport function rankedBarLayout(opts: BarChartOptions, size = { width: 480, height: 280 }) {\n if (opts.limit !== undefined && (!Number.isInteger(opts.limit) || opts.limit < 1))\n throw new RangeError(\"Bar list limit must be a positive integer\");\n if (opts.data?.some((d) => Number.isFinite(d.value) && d.value < 0)) throw new RangeError(\"Ranked bar lists require nonnegative values\");\n const sorted = (opts.data ?? [])\n .map((item, index) => ({ ...item, index }))\n .sort((a, b) => (Number.isFinite(b.value) ? b.value : -Infinity) - (Number.isFinite(a.value) ? a.value : -Infinity));\n const total = sorted.reduce((sum, d) => sum + (Number.isFinite(d.value) ? d.value : 0), 0);\n const shown = sorted.slice(0, opts.limit),\n rest = sorted.slice(shown.length);\n const top = headerHeight(opts),\n unit = size.width / narrow(opts),\n format = opts.valueFormat ?? opts.yAxis?.format ?? ((v: number) => new Intl.NumberFormat(opts.locale ?? \"en\").format(v)),\n percent = barPercent(opts.locale);\n const shareWidth = opts.share ? 48 * unit : 0;\n const valueWidth = Math.max(20, ...shown.map((d) => chartTextWidth(Number.isFinite(d.value) ? format(d.value) : \"–\"))) * unit;\n const labelWidth = Math.max(8, (size.width - shareWidth - valueWidth - 36 * unit) / unit);\n const max = Math.max(0, ...sorted.map((d) => (Number.isFinite(d.value) ? d.value : 0)));\n const rows = shown.map((d, rank) => ({\n ...d,\n rank: rank + 1,\n y: top + rank * 36,\n width: Number.isFinite(d.value) && max > 0 ? (d.value / max) * size.width : 0,\n share: Number.isFinite(d.value) && total > 0 ? d.value / total : null,\n }));\n return {\n ...size,\n height: Math.max(size.height, top + rows.length * 36 + (rest.length ? 24 : 0)),\n rows,\n total,\n rest,\n restValue: rest.some((d) => Number.isFinite(d.value))\n ? rest.reduce((sum, d) => sum + (Number.isFinite(d.value) ? d.value : 0), 0)\n : null,\n top,\n unit,\n format,\n percent,\n shareWidth,\n labelWidth,\n };\n}\n\nconst renderRankedBars = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }) => {\n const g = rankedBarLayout(opts, opts),\n labels = chartMessages.resolve([opts.locale ?? \"en\"]).t;\n const parts = [renderHeader(opts, opts.width)];\n const color = opts.tone ? `var(--k2b-flow-${opts.tone}-mark,var(--stdlib-chart-c1,#3b82f6))` : \"var(--stdlib-chart-c1,#3b82f6)\";\n const text = (x: number, y: number, value: string, anchor = \"start\", cls = \"stdlib-chart-tick-label\") =>\n `<text class=\"${cls}\" x=\"${x}\" y=\"${y}\" text-anchor=\"${anchor}\">${escapeXml(value)}</text>`;\n for (const row of g.rows) {\n const value = Number.isFinite(row.value) ? row.value : null,\n written = value === null ? \"–\" : g.format(value);\n const share = row.share === null ? \"–\" : g.percent.format(row.share);\n const label = wrapLabel(row.label, (g.labelWidth * 11) / 13, 1).lines[0] ?? row.label;\n const marks = `<rect class=\"k2b-chart-category-band\" fill=\"none\" pointer-events=\"all\" x=\"0\" y=\"${row.y}\" width=\"${g.width}\" height=\"32\" rx=\"6\"/><rect x=\"0\" y=\"${row.y}\" width=\"${row.width}\" height=\"32\" rx=\"6\" style=\"fill:${color};fill-opacity:.16;pointer-events:none\"/>${text(10 * g.unit, row.y + 20, label)}${text(g.width - 10 * g.unit - g.shareWidth, row.y + 20, written, \"end\", \"stdlib-chart-bar-value\")}${opts.share ? text(g.width - 10 * g.unit, row.y + 20, share, \"end\") : \"\"}`;\n parts.push(\n chartDatumSvg(\n marks,\n {\n role: \"item\",\n index: row.index,\n label: row.label,\n anchor: [g.width / 2, row.y],\n values: [\n { key: \"value\", value: value ?? \"–\", formatted: written },\n { key: \"percent\", value: row.share === null ? \"–\" : row.share * 100, formatted: share },\n { key: \"rank\", value: row.rank },\n ],\n },\n opts.inspect ?? false,\n `${row.label} · ${written} · ${share} · ${labels.chartFields({ key: \"rank\" })}: ${row.rank}`,\n ),\n );\n }\n if (g.rest.length)\n parts.push(\n text(\n 10 * g.unit,\n g.top + g.rows.length * 36 + 16,\n `${labels.chartBarMore({ n: g.rest.length })} · ${g.restValue === null ? \"–\" : g.format(g.restValue)}`,\n ),\n );\n return svgRoot({ ...opts, height: g.height, className: [opts.className, \"k2b-chart-ranked\"].filter(Boolean).join(\" \") }, parts.join(\"\"))\n .replace(\"</style>\", \".k2b-chart-ranked :is(.stdlib-chart-tick-label,.stdlib-chart-bar-value){font-size:13px}</style>\")\n .replace(\"<svg \", '<svg data-bar-layout=\"rows\" ');\n};\n"],"mappings":"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","ignoreList":[]}