{"version":3,"file":"oneteme-jquery-core.mjs","sources":["../../../../projects/oneteme/jquery-core/src/lib/jquery-core.model.ts","../../../../projects/oneteme/jquery-core/src/lib/utils.ts","../../../../projects/oneteme/jquery-core/src/lib/jquery-view.model.ts","../../../../projects/oneteme/jquery-core/src/lib/jquery-interval.ts","../../../../projects/oneteme/jquery-core/src/lib/reshape.ts","../../../../projects/oneteme/jquery-core/src/lib/visual-snapshot.model.ts","../../../../projects/oneteme/jquery-core/src/lib/visual-snapshot.storage.ts","../../../../projects/oneteme/jquery-core/src/lib/fullscreen.manager.ts","../../../../projects/oneteme/jquery-core/src/public-api.ts","../../../../projects/oneteme/jquery-core/src/oneteme-jquery-core.ts"],"sourcesContent":["export declare type ChartType = 'pie' | 'donut' | 'funnel' | 'pyramid' | 'polar' | 'radar' | 'radarArea' | 'radial' | 'radialBar' | 'bar' | 'column' | 'columnpyramid' | 'line' | 'area' | 'spline' | 'areaspline' | 'scatter' | 'bubble' | 'treemap' | 'heatmap' | 'boxplot' | 'columnrange' | 'arearange' | 'areasplinerange' | 'rangeArea' | 'rangeBar' | 'rangeColumn' | 'map' | string;\n\nexport function values<T>(...values: T[]): DataProvider<T> {\n  return (o, idx) => {\n    if (idx < values.length) {\n      return values[idx];\n    }\n    throw new Error(`idx=${idx} out of values=[${values.join(', ')}]`);\n  };\n}\n\nexport function field<T>(name: string): DataProvider<T> {\n  return (o) => o[name];\n}\n\nexport function mapField<T>(name: string, map: Map<any, T>): DataProvider<T> {\n  return (o) => map.get(o[name]);\n}\n\nexport function joinFields(separator: string = '_', ...names: string[]): DataProvider<string> {\n  return combineFields(joiner(separator), names);\n}\n\nexport function combineFields<T>(combiner: (args: any[]) => T, names: string[]): DataProvider<T> {\n  return (o) => combiner(names.map(f => o[f]).filter(nonUndefined));\n}\n\nexport function joinProviders<T>(separator: string = '_', ...providers: DataProvider<T>[]): DataProvider<string> {\n  return combineProviders(joiner(separator), ...providers);\n}\n\nexport function combineProviders<T, R>(combiner: (args: T[]) => R, ...providers: DataProvider<T>[]): DataProvider<R> {\n  return (o, i) => combiner(providers.map(p => p(o, i)).filter(nonUndefined));\n}\n\nexport function joiner(separator: string = '_'): (args: any[]) => string {\n  return (args) => args.join(separator);\n}\n\nexport function rangeFields<T>(minName: string, maxName: string): DataProvider<T[]> {\n  return (o, i) => {\n    const min = (field(minName) as DataProvider<T>)(o, i);\n    const max = (field(maxName) as DataProvider<T>)(o, i);\n    return nonUndefined(min) && nonUndefined(max) ? [min, max] : undefined;\n  };\n}\n\nexport function buildSingleSerieChart<X extends XaxisType, Y extends YaxisType>(\n  objects: any[],\n  provider: ChartProvider<X, Y>,\n  defaultValue?: Y\n): CommonChart<X, Y | Coordinate2D> {\n  let copy = provider;\n  if (objects?.length > 1 && (provider.series?.length > 1 || typeof provider.series[0].name === 'function')) {\n    copy = {\n      ...provider,\n      pivot: false,\n      series: provider.series.map((s) => ({\n        data: {\n          // pivot & merge => single serie\n          x: (provider.pivot // TODO change that cast\n            ? combineProviders(joiner(), resolveDataProvider(s.name), s.data.x)\n            : combineProviders(\n                joiner(),\n                s.data.x,\n                resolveDataProvider(s.name)\n              )) as DataProvider<X>,\n          y: s.data.y,\n        },\n        color: s.color,\n        // no unit\n      })),\n    };\n  }\n  return {\n    ...buildChart(objects, copy, defaultValue),\n    pivot: provider.pivot\n  };\n}\n\nexport function buildChart<X extends XaxisType, Y extends YaxisType>(\n  objects: any[],\n  provider: ChartProvider<X, Y>,\n  defaultValue?: Y\n): CommonChart<X, Y | Coordinate2D> {\n  const mappers = provider.pivot\n    ? provider.series.map((m) => ({\n        name: resolveDataProvider(m.data.x),\n        data: { x: resolveDataProvider(m.name, ''), y: m.data.y },\n      }))\n    : provider.series;\n\n  const chart = newChart(provider);\n\n  if (!provider.continue) {\n    chart.categories = distinct(\n      objects,\n      mappers.map((m) => m.data.x)\n    );\n    if (provider.xorder) {\n      chart.categories.sort(naturalComparator(provider.xorder));\n    }\n  }\n\n  const series = {};\n  mappers.forEach((m) => {\n    const np = resolveDataProvider(m.name);\n    const sp = resolveDataProvider(m.stack);\n    const cp = resolveDataProvider(m.color);\n    const tp = resolveDataProvider(m.type);\n    const vp = resolveDataProvider(m.visible);\n    const yap = resolveDataProvider(m.yAxisIndex);\n    const unit = m.unit;\n\n    objects.forEach((o, i) => {\n      const name = np(o, i) || ''; // can't use undefined as a map key\n      if (!series[name]) {\n        // init serie\n        series[name] = {\n          data: provider.continue\n            ? []\n            : new Array(chart.categories.length).fill(defaultValue),\n        };\n        const stack = sp(o, i);\n        const color = cp(o, i);\n        const type = tp(o, i);\n        const visible = vp(o, i);\n        const yAxisIndex = yap(o, i);\n\n        if (name) {\n          series[name].name = name;\n        }\n        if (stack) {\n          series[name].stack = stack;\n        }\n        if (color) {\n          series[name].color = color;\n        }\n        if (type) {\n          series[name].type = type;\n        }\n        if (visible !== undefined) {\n          series[name].visible = visible;\n        }\n        if (unit) {\n          series[name].unit = unit;\n        }\n        if (yAxisIndex !== undefined) {\n          series[name].yAxisIndex = yAxisIndex;\n        }\n        const yAxisConfig = (m as any).yAxisConfig;\n        if (yAxisConfig) {\n          series[name].yAxisConfig = yAxisConfig;\n        }\n        const noDataStyle = (m as any).noDataStyle;\n        if (noDataStyle) {\n          series[name].noDataStyle = noDataStyle;\n        }\n      }\n\n      if (provider.continue) {\n        series[name].data.push({\n          x: m.data.x(o, i),\n          y: requireNonUndefined(m.data.y(o, i), defaultValue),\n          _o: o,\n        });\n      } else {\n        const key = m.data.x(o, i);\n        const idx = chart.categories.indexOf(key);\n        if (idx > -1) {\n          // if !exist\n          series[name].data[idx] = requireNonUndefined(\n            m.data.y(o, i),\n            defaultValue\n          );\n        } else {\n          throw new Error(`'${key}' not part of categories : [${chart.categories.join(', ')}]`);\n        }\n      }\n    });\n  });\n\n  chart.series = Object.values(series);\n\n  if (provider.continue && provider.xorder) {\n    chart.series.forEach((s) =>\n      s.data.sort(naturalFieldComparator(provider.xorder, field('x')))\n    );\n  }\n  return chart;\n}\n\nfunction newChart<X extends XaxisType, Y extends YaxisType>(\n  provider: ChartProvider<X, Y>\n): CommonChart<X, Y> {\n  return Object.entries(provider)\n    .filter((e) => ['series'].indexOf(e[0]) < 0)\n    .reduce(\n      (acc, e) => {\n        acc[e[0]] = e[1];\n        return acc;\n      },\n      { series: [] }\n    );\n}\n\nfunction resolveDataProvider<T>(\n  provider?: T | DataProvider<T>,\n  defaultValue?: T\n): DataProvider<T> {\n  if (provider === undefined || provider === null) {\n    return () => defaultValue;\n  }\n  if (typeof provider === 'function') {\n    return provider as DataProvider<T>;\n  }\n  return () => provider;\n}\n\nexport function distinct<T>(objects: any[], providers: DataProvider<T>[]): T[] { // T == XaxisType\n  const categs = new Set<T>();\n  providers.forEach((p) => objects.forEach((o, i) => categs.add(p(o, i))));\n  return [...categs];\n}\n\nfunction nonUndefined(o: any): boolean {\n  return !isUndefined(o);\n}\n\nfunction requireNonUndefined<T>(o: T, elseValue: T): T {\n  return isUndefined(o) ? elseValue : o;\n}\n\nfunction isUndefined(o: any): boolean {\n  return o === undefined;\n}\n\n// Config dynamique de Y avec auto-scaling intelligent.\n// Détecte automatiquement le meilleur format (µs, ms, s, etc.) basé sur l'ordre de grandeur des données.\nexport interface UnitConfig {\n  baseUnit: string;        // Unité source des données ('s', 'o', etc.)\n  scales: ScaleConfig[];   // Liste des formats disponibles (triée par seuil croissant)\n  precision?: number;      // Fixe les décimales (si non spécifié, utilise _smartFormatY adaptatif)\n  formatter?: (v: number, selectedUnit: string) => string; // Formatage personnalisé\n}\n\n// Définit un format d'affichage avec sa plage d'applicabilité.\nexport interface ScaleConfig {\n  unit: string;            // Unité affichée ('µs', 'ms', 's', 'KB', 'MB', etc.)\n  scale: number;           // Facteur de conversion (1000 pour s→ms, 1000000 pour s→µs)\n  threshold?: number;      // Utiliser ce format si max(values) > threshold (Infinity = défaut)\n}\n\nexport interface ChartProvider<X extends XaxisType, Y extends YaxisType> {\n  title?: string;\n  subtitle?: string;\n  xtitle?: string;\n  ytitle?: string | string[]; // single axis or multiple axes\n  width?: number;\n  height?: number;\n  stacked?: boolean; // barChart only\n  pivot?: boolean; // transpose data\n  continue?: boolean; // categories | [x,y]\n  xorder?: Sort;\n  series?: SerieProvider<X, Y>[];\n  options?: any;\n  showToolbar?: boolean;\n  group?: string; // groupe de synchronisation inter-graphiques\n  groupSync?: 'all' | 'datazoom' | 'tooltip' | ('datazoom' | 'tooltip')[]; // ce qui est synchronisé dans le groupe\n  mapEndpoint?: string; // Endpoint pour GeoJSON\n  mapParam?: string; // Param URL à lire pour la subdiv\n  mapDefaultValue?: string; // Subdiv défaut si param absent\n  mapColor?: 'blue' | 'green' | 'purple' | 'orange' | 'grey' | string; // couleur pour les maps\n  mapJoinBy?: [string, string]; // JoinBy par défaut pour les maps (ex: ['code', 'code'])\n  yUnit?: string | UnitConfig; // unité du Y : string simple ou config dynamique avec scales\n}\n\nexport interface SerieProvider<X extends XaxisType, Y extends YaxisType> {\n  data: CoordinateProvider<X, Y>; // | [X,Y]\n  name?: string | DataProvider<string>;\n  stack?: string | DataProvider<string>; // first time at init\n  color?: string | DataProvider<string>; // first time at init\n  type?: string | DataProvider<string>; // first time at init\n  visible?: boolean | DataProvider<boolean>; // pour masquer/afficher une série\n  unit?: string;\n  yAxisIndex?: number; // Pour les dual/multi-axis : 0 (défaut), 1, 2, etc.\n  yAxisConfig?: Record<string, any>; // Options personnalisées pour cet axe Y (ex: splitNumber)\n}\n\nexport declare type Coordinate2D = { x: XaxisType; y: YaxisType };\n\nexport declare type XaxisType = number | string | Date;\n\nexport declare type YaxisType = number | number[]; // 2D\n\nexport declare type CoordinateProvider<X, Y> = {\n  x: DataProvider<X>;\n  y: DataProvider<Y>;\n};\n\nexport declare type DataProvider<T> = (o: any, idx: number) => T;\n\nexport declare type Sort = 'asc' | 'desc';\n\nexport interface CommonChart<\n  X extends XaxisType,\n  Y extends YaxisType | Coordinate2D\n> {\n  series: CommonSerie<Y>[];\n  categories?: X[];\n  title?: string;\n  subtitle?: string;\n  xtitle?: string;\n  ytitle?: string | string[];\n  width?: number;\n  height?: number;\n  pivot?: boolean; // transpose data\n  continue?: boolean; // categories | [x,y]\n  stacked?: boolean;\n  xorder?: Sort;\n  options?: any;\n  showToolbar?: boolean;\n}\n\nexport interface CommonSerie<Y extends YaxisType | Coordinate2D> {\n  data: Y[];\n  name?: string;\n  stack?: string;\n  color?: string;\n  unit?: string;\n  visible?: boolean;\n  type?: string;\n  yAxisIndex?: number; // Pour les dual/multi-axis : 0 (défaut), 1, 2, etc.\n  yAxisConfig?: Record<string, any>; // Options personnalisées pour cet axe Y (ex: splitNumber)\n}\n\nexport function naturalFieldComparator<T>(\n  sens: Sort,\n  provider: DataProvider<T>\n): (o1: any, o2: any) => number {\n  if (provider) {\n    const v = sens === 'asc' ? 1 : -1;\n    return (o1, o2) => {\n      const a = provider(o1, undefined);\n      const b = provider(o2, undefined);\n      return a > b ? v : a < b ? -v : 0;\n    };\n  }\n  return naturalComparator(sens);\n}\n\nexport function naturalComparator<T>(sens: Sort): (o1: T, o2: T) => number {\n  const v = sens === 'asc' ? 1 : -1;\n  return (a: T, b: T) => (a > b ? v : a < b ? -v : 0);\n}\n\nexport function groupByFiled<T>(arr: [], name: string): { [key: string]: T[] } {\n  return groupBy(arr, field(name));\n}\n\nexport function groupBy<T>(\n  arr: [],\n  fn: DataProvider<string>\n): { [key: string]: T[] } {\n  return arr.reduce((acc, o, idx) => {\n    const key = fn(o, idx);\n    if (!acc[key]) {\n      acc[key] = [];\n    }\n    acc[key].push(o);\n    return acc;\n  }, {});\n}\n\nexport interface ChartView<X extends XaxisType, Y extends YaxisType> {\n  config: ChartProvider<X, Y>;\n  data: any[];\n  isLoading?: boolean;\n  canPivot?: boolean;\n  debug?: boolean;\n}\n","/**\n * Simple object check.\n * @param item\n * @returns {boolean}\n */\nexport function isObject(item: any): boolean {\n  return item && typeof item === 'object' && !Array.isArray(item);\n}\n\n/**\n * Deep merge two objects.\n * @param target\n * @param ...sources\n */\nexport function mergeDeep(target: any, ...sources: any[]): any {\n  if (!sources.length) return target;\n  const source = sources.shift();\n\n  if (isObject(target) && isObject(source)) {\n    for (const key in source) {\n      if (isObject(source[key])) {\n        if (!target[key]) Object.assign(target, { [key]: {} });\n        mergeDeep(target[key], source[key]);\n      } else {\n        Object.assign(target, { [key]: source[key] });\n      }\n    }\n  }\n\n  return mergeDeep(target, ...sources);\n}\n","import { ChartProvider, SerieProvider, XaxisType, YaxisType } from './jquery-core.model';\n\n/** Descripteur générique d'un champ disponible dans le panneau Organizer. */\nexport interface OrganizerFieldDef {\n  /** Identifiant unique du champ (ex: clé de colonne, nom de série). */\n  id: string;\n  /** Libellé affiché dans le panneau Organizer. */\n  label?: string;\n  /** Icône optionnelle associée au champ. */\n  icon?: string;\n  /** Le champ peut-il être utilisé comme critère de regroupement. Par défaut : true si label présent. */\n  groupable?: boolean;\n  /** Le champ peut-il être utilisé comme critère de slice. Par défaut : true si label présent. */\n  sliceable?: boolean;\n  /** Champ optionnel — masqué par défaut et ajoutables par l'utilisateur. */\n  optional?: boolean;\n}\n\n/** Configuration générique du panneau Organizer. */\nexport interface OrganizerConfig {\n  /** Active le bouton et le panneau Organizer. Par défaut : false. */\n  enabled?: boolean;\n  /** Autorise la suppression de champs non-optionnels via Organizer > Champs. Par défaut : true. */\n  enableFieldRemoval?: boolean;\n  /** Active le drag & drop pour réordonner les champs. Par défaut : false. */\n  enableFieldDragDrop?: boolean;\n}\n\n/** Snapshot de l'état courant du panneau Organizer. */\nexport interface OrganizerState {\n  /** Ids des champs actuellement sélectionnés, dans l'ordre d'affichage. */\n  selectedFieldIds: string[];\n  /** Id du champ de regroupement actif, null si aucun regroupement. */\n  groupByKey: string | null;\n  /** Ids des slices dynamiques actives. */\n  dynamicSliceKeys: string[];\n}\n\n/** Union typée des événements émis par la logique Organizer. */\nexport type OrganizerEvent =\n  | { type: 'groupByChanged'; key: string | null }\n  | { type: 'fieldsChanged'; fieldIds: string[] }\n  | { type: 'dynamicSlicesChanged'; keys: string[] };\n\n// ── Helpers purs (sans DOM)\n\n/** Construit un OrganizerFieldDef à partir d'un id et de propriétés optionnelles. */\nexport function organizerFieldDef(id: string, partial?: Partial<Omit<OrganizerFieldDef, 'id'>>): OrganizerFieldDef {\n  return { id, ...partial };\n}\n\n/** Retourne uniquement les champs utilisables comme critère de regroupement. */\nexport function groupableOrganizerFields(fields: OrganizerFieldDef[]): OrganizerFieldDef[] {\n  return fields.filter(f => f.groupable !== false && (f.label !== undefined || f.groupable === true));\n}\n\n/** Retourne uniquement les champs utilisables comme critère de slice. */\nexport function sliceableOrganizerFields(fields: OrganizerFieldDef[]): OrganizerFieldDef[] {\n  return fields.filter(f => f.sliceable !== false && (f.label !== undefined || f.sliceable === true));\n}\n\n/** Construit un OrganizerState initial : seuls les champs non-optionnels sont sélectionnés. */\nexport function initialOrganizerState(fields: OrganizerFieldDef[]): OrganizerState {\n  return {\n    selectedFieldIds: fields.filter(f => !f.optional).map(f => f.id),\n    groupByKey: null,\n    dynamicSliceKeys: [],\n  };\n}\n\n// ── Helpers charts\n\n/**\n * Extrait des OrganizerFieldDef depuis les séries d'un ChartProvider.\n * Seules les séries avec un nom statique (string) sont énumérables ; les\n * séries dont le nom est une fonction DataProvider ne peuvent pas être\n * pré-listées sans exécuter les données.\n */\nexport function organizerFieldDefsFromChartSeries(series: SerieProvider<any, any>[]): OrganizerFieldDef[] {\n  return (series ?? [])\n    .filter(s => typeof s.name === 'string' && !!s.name)\n    .map(s => ({ id: s.name as string, label: s.name as string }));\n}\n\n/**\n * Retourne un ChartProvider modifié avec `visible` appliqué selon le OrganizerState.\n * Les séries dont le nom est une fonction DataProvider sont laissées inchangées.\n */\nexport function applyOrganizerStateToSeries<X extends XaxisType, Y extends YaxisType>(\n  provider: ChartProvider<X, Y>,\n  state: Pick<OrganizerState, 'selectedFieldIds'>\n): ChartProvider<X, Y> {\n  if (!provider.series?.length) return provider;\n  const selected = new Set(state.selectedFieldIds);\n  return {\n    ...provider,\n    series: provider.series.map(s =>\n      typeof s.name === 'string' ? { ...s, visible: selected.has(s.name) } : s\n    ),\n  };\n}\n","/**\n * Interval utilities — shared across jquery-table, jquery-echarts, jquery-highcharts.\n * Part of @oneteme/jquery-core. No Angular / DOM dependencies.\n *\n * ── Manual strategies (static breakpoints) ───────────────────────────────\n *  - intervalsByBreakpoints([0.1, 0.5, 1, 5])  → n+1 open-ended intervals from n breakpoints\n *  - intervalsByCount(start, end, 5)            → 5 equal-width bounded intervals\n *\n * ── Smart strategies (data-driven, automatic breakpoints) ─────────────────\n *  - computeDataStats(data, extractor)          → descriptive stats (mean, median, quartiles…)\n *  - intervalsFromData(data, extractor, strategy, options)\n *      strategies:\n *        { type: 'quartile' }                   → Q1/Q2/Q3 → 4 balanced classes\n *        { type: 'quantile',    count: 4 }      → n-quantile → n balanced classes  (default)\n *        { type: 'equal-width', count: 5 }      → n equal-width classes from data range\n *        { type: 'mean-stddev', sigmas: [-2,-1,0,1,2] } → mean ± k·σ classes\n *        { type: 'jenks',       count: 5 }      → Fisher-Jenks natural breaks\n *\n * ── Membership helpers ────────────────────────────────────────────────────\n *  - inInterval(value, interval)                → boolean membership test\n *  - resolveInterval(value, intervals)           → find which bucket a value belongs to\n *\n * ── SliceConfig adapter ───────────────────────────────────────────────────\n *  - intervalCategories(intervals, extractor)   → { key, label, filter }[] ready for SliceConfig\n */\n\n// ── Types ─────────────────────────────────────────────────────────────────\n\n/** Value types supported as interval bounds. */\nexport type IntervalBound = number | Date;\n\n/**\n * A single interval with optional open bounds.\n *\n * Semantics: `[min, max)` (lower inclusive, upper exclusive).\n * - `min: null`  → no lower bound (−∞), i.e. `value < max`\n * - `max: null`  → no upper bound (+∞), i.e. `value >= min`\n * - `maxInclusive: true` → upper bound becomes inclusive: `[min, max]`\n *\n * The `key` field is stable across renders and suitable as a map key\n * or as a `SliceConfig.categories[].key` in `@oneteme/jquery-table`.\n */\nexport interface Interval<T extends IntervalBound> {\n  /** Stable unique identifier. */\n  key: string;\n  /** Human-readable label. */\n  label: string;\n  /** Lower bound (inclusive). `null` = −∞. */\n  min: T | null;\n  /** Upper bound. `null` = +∞. Exclusive unless `maxInclusive` is true. */\n  max: T | null;\n  /** When true the upper bound is inclusive. Used for the last interval of bounded ranges. */\n  maxInclusive?: boolean;\n}\n\n/** Customisation options shared by interval generation functions. */\nexport interface IntervalOptions<T extends IntervalBound> {\n  /**\n   * Custom label generator.\n   * `null` for `min` means open lower bound; `null` for `max` means open upper bound.\n   */\n  labelFn?: (min: T | null, max: T | null) => string;\n  /**\n   * Custom key generator.\n   * `null` for `min` means open lower bound; `null` for `max` means open upper bound.\n   */\n  keyFn?: (min: T | null, max: T | null) => string;\n}\n\n// ── Internal helpers ──────────────────────────────────────────────────────\n\n/** Normalises any IntervalBound to a plain number for arithmetic/comparison. */\nfunction toNum(v: IntervalBound): number {\n  return v instanceof Date ? v.getTime() : (v as number);\n}\n\n/** Default label: `< max`, `min – max`, or `≥ min`. */\nfunction defaultLabel(min: IntervalBound | null, max: IntervalBound | null): string {\n  const fmt = (v: IntervalBound) =>\n    v instanceof Date ? v.toISOString() : String(v);\n  if (min === null) return `< ${fmt(max!)}`;\n  if (max === null) return `\\u2265 ${fmt(min)}`;\n  return `${fmt(min)} \\u2013 ${fmt(max)}`;\n}\n\n/** Default key: `lt_max`, `min_max`, or `gte_min`. Dots replaced with `_` for stability. */\nfunction defaultKey(min: IntervalBound | null, max: IntervalBound | null): string {\n  const fmt = (v: IntervalBound) =>\n    v instanceof Date\n      ? v.getTime().toString()\n      : String(v).replace(/\\./g, '_');\n  if (min === null) return `lt_${fmt(max!)}`;\n  if (max === null) return `gte_${fmt(min)}`;\n  return `${fmt(min)}_${fmt(max)}`;\n}\n\nfunction makeInterval<T extends IntervalBound>(\n  min: T | null,\n  max: T | null,\n  maxInclusive: boolean,\n  opts?: IntervalOptions<T>\n): Interval<T> {\n  const iv: Interval<T> = {\n    key:   (opts?.keyFn   ?? defaultKey  )(min, max),\n    label: (opts?.labelFn ?? defaultLabel)(min, max),\n    min,\n    max,\n  };\n  if (maxInclusive) {\n    iv.maxInclusive = true;\n  }\n  return iv;\n}\n\n// ── Generation functions ──────────────────────────────────────────────────\n\n/**\n * Generates `breakpoints.length + 1` intervals from explicit breakpoints.\n *\n * The breakpoints array is automatically sorted before processing.\n *\n * Produces:\n * - **First**:  `(−∞, breakpoints[0])`        — open lower bound\n * - **Middle**: `[breakpoints[i], breakpoints[i+1])` for each adjacent pair\n * - **Last**:   `[breakpoints[n-1], +∞)`       — open upper bound\n *\n * Use `options.labelFn` / `options.keyFn` to customise labels and keys.\n *\n * @example\n * // Duration thresholds (seconds) → 5 readable slices\n * const durationIntervals = intervalsByBreakpoints<number>(\n *   [0.1, 0.5, 1, 5],\n *   {\n *     labelFn: (min, max) => {\n *       const fmt = (s: number) => s < 1 ? `${s * 1000}ms` : `${s}s`;\n *       if (min === null) return `< ${fmt(max!)}`;\n *       if (max === null) return `> ${fmt(min)}`;\n *       return `${fmt(min)} – ${fmt(max)}`;\n *     }\n *   }\n * );\n * // → '< 100ms' | '100ms – 500ms' | '500ms – 1s' | '1s – 5s' | '> 5s'\n *\n * @example\n * // HTTP status buckets\n * intervalsByBreakpoints([200, 300, 400, 500])\n * // → '< 200' | '200 – 300' | '300 – 400' | '400 – 500' | '≥ 500'\n */\nexport function intervalsByBreakpoints<T extends IntervalBound>(\n  breakpoints: T[],\n  options?: IntervalOptions<T>\n): Interval<T>[] {\n  if (breakpoints.length === 0) return [];\n  const sorted = [...breakpoints].sort((a, b) => toNum(a) - toNum(b));\n  const result: Interval<T>[] = [];\n  result.push(makeInterval<T>(null, sorted[0], false, options));\n  for (let i = 0; i < sorted.length - 1; i++) {\n    result.push(makeInterval<T>(sorted[i], sorted[i + 1], false, options));\n  }\n  result.push(makeInterval<T>(sorted[sorted.length - 1], null, false, options));\n  return result;\n}\n\n/**\n * Generates `count` equal-width intervals spanning `[start, end]`.\n *\n * All intervals are fully bounded.\n * The **last** interval uses an inclusive upper bound (`maxInclusive: true`)\n * so that `value === end` is correctly captured.\n *\n * Works for both `number` and `Date` bounds — the step is computed in\n * milliseconds for dates.\n *\n * @example\n * // 5 equal numeric buckets over [0, 100]\n * intervalsByCount(0, 100, 5)\n * // → [0,20) | [20,40) | [40,60) | [60,80) | [80,100]\n *\n * @example\n * // 4 monthly date buckets\n * intervalsByCount(new Date('2024-01-01'), new Date('2024-12-31'), 4, {\n *   labelFn: (min, max) => {\n *     const fmt = (d: Date | null) => d ? d.toLocaleDateString('fr-FR', { month: 'short', year: 'numeric' }) : '?';\n *     return `${fmt(min)} – ${fmt(max)}`;\n *   }\n * })\n */\nexport function intervalsByCount<T extends IntervalBound>(\n  start: T,\n  end: T,\n  count: number,\n  options?: IntervalOptions<T>\n): Interval<T>[] {\n  if (count <= 0) return [];\n  const startMs = toNum(start);\n  const endMs   = toNum(end);\n  const step    = (endMs - startMs) / count;\n  const isDate  = start instanceof Date;\n  const result: Interval<T>[] = [];\n  for (let i = 0; i < count; i++) {\n    const loMs = startMs + i * step;\n    const hiMs = i === count - 1 ? endMs : startMs + (i + 1) * step;\n    const min  = (isDate ? new Date(loMs) : loMs) as T;\n    const max  = (isDate ? new Date(hiMs) : hiMs) as T;\n    result.push(makeInterval<T>(min, max, i === count - 1, options));\n  }\n  return result;\n}\n\n// ── Membership helpers ────────────────────────────────────────────────────\n\n/**\n * Returns `true` if `value` falls within `interval`.\n *\n * - Lower bound: inclusive (`value >= min`), unconstrained if `min === null`.\n * - Upper bound: exclusive (`value < max`) unless `interval.maxInclusive`,\n *   then inclusive (`value <= max`). Unconstrained if `max === null`.\n */\nexport function inInterval<T extends IntervalBound>(\n  value: T,\n  interval: Interval<T>\n): boolean {\n  const v  = toNum(value);\n  if (interval.min !== null && v < toNum(interval.min)) return false;\n  if (interval.max !== null) {\n    const hi = toNum(interval.max);\n    if (interval.maxInclusive ? v > hi : v >= hi) return false;\n  }\n  return true;\n}\n\n/**\n * Finds and returns the first interval in `intervals` that contains `value`.\n * Returns `undefined` if no interval matches.\n *\n * @example\n * const iv = resolveInterval(0.7, durationIntervals);\n * iv?.label // '500ms – 1s'\n */\nexport function resolveInterval<T extends IntervalBound>(\n  value: T,\n  intervals: Interval<T>[]\n): Interval<T> | undefined {\n  return intervals.find(iv => inInterval(value, iv));\n}\n\n// ── SliceConfig adapter ───────────────────────────────────────────────────\n\n/**\n * Converts an interval array into a `{ key, label, filter }[]` array,\n * ready to use as `categories` inside a `SliceConfig` of `@oneteme/jquery-table`.\n *\n * A `nullCategory` entry can optionally be added **first** to capture rows\n * where the extracted value is `null` / `undefined`\n * (e.g., requests still in progress that have no `end` timestamp).\n *\n * @param intervals       Interval array from `intervalsByBreakpoints` or `intervalsByCount`.\n * @param valueExtractor  Extracts the value to classify from a table row.\n *                        Return `null` / `undefined` for rows that should fall in `nullCategory`.\n * @param nullCategory    Optional entry for rows with no value.\n *\n * @example\n * // Replace a hand-written SliceConfig.categories for duration slices\n * const DURATION_BREAKPOINTS = [0.1, 0.5, 1, 5]; // seconds\n * const durationLabelFn = (min: number | null, max: number | null) => {\n *   const fmt = (s: number) => s < 1 ? `${s * 1000}ms` : `${s}s`;\n *   if (min === null) return `< ${fmt(max!)}`;\n *   if (max === null) return `> ${fmt(min)}`;\n *   return `${fmt(min)} \\u2013 ${fmt(max)}`;\n * };\n *\n * const categories = intervalCategories(\n *   intervalsByBreakpoints(DURATION_BREAKPOINTS, { labelFn: durationLabelFn }),\n *   (row) => row.end != null ? row.end - row.start : null,\n *   { key: 'in-progress', label: 'En cours...' }\n * );\n * // Use as: { title: 'Durée', columnKey: 'duration', hidden: true, categories }\n */\nexport function intervalCategories<T extends IntervalBound>(\n  intervals: Interval<T>[],\n  valueExtractor: (row: any) => T | null | undefined,\n  nullCategory?: { key: string; label: string }\n): Array<{ key: string; label: string; filter: (row: any) => boolean }> {\n  const result: Array<{ key: string; label: string; filter: (row: any) => boolean }> = [];\n  if (nullCategory) {\n    result.push({\n      key:    nullCategory.key,\n      label:  nullCategory.label,\n      filter: (row: any) => valueExtractor(row) == null,\n    });\n  }\n  intervals.forEach(iv => {\n    result.push({\n      key:    iv.key,\n      label:  iv.label,\n      filter: (row: any) => {\n        const v = valueExtractor(row);\n        return v != null && inInterval(v as T, iv);\n      },\n    });\n  });\n  return result;\n}\n\n// ── Smart interval generation (data-driven) ───────────────────────────────\n\n// ── Statistics ────────────────────────────────────────────────────────────\n\n/**\n * Descriptive statistics computed from a dataset.\n * Returned by `computeDataStats()`.\n */\nexport interface DataStats {\n  /** Number of non-null values used for the computation. */\n  count: number;\n  min: number;\n  max: number;\n  mean: number;\n  /** Median (50th percentile). Alias for `q2`. */\n  median: number;\n  /** Population standard deviation. */\n  stdDev: number;\n  /** First quartile (25th percentile). */\n  q1: number;\n  /** Second quartile — median (50th percentile). */\n  q2: number;\n  /** Third quartile (75th percentile). */\n  q3: number;\n  /** Inter-quartile range: Q3 − Q1. */\n  iqr: number;\n  /**\n   * Returns the p-th percentile (0 ≤ p ≤ 100).\n   * Uses linear interpolation between adjacent sorted values.\n   */\n  percentile(p: number): number;\n}\n\n// ── Strategy types ────────────────────────────────────────────────────────\n\n/**\n * Quartile strategy — uses Q1, Q2, Q3 as breakpoints.\n * Produces 4 intervals with roughly equal numbers of values in each.\n * Equivalent to `{ type: 'quantile', count: 4 }`.\n */\nexport interface QuartileStrategy {\n  type: 'quartile';\n}\n\n/**\n * Quantile strategy — n equal-frequency intervals.\n * Breakpoints are chosen so each interval contains roughly the same number of data points.\n *\n * @default count 4\n */\nexport interface QuantileStrategy {\n  type: 'quantile';\n  /** Number of intervals. Default: 4 */\n  count?: number;\n}\n\n/**\n * Mean ± k·σ strategy — breakpoints derived from the mean and standard deviation.\n * Best suited for approximately normal (Gaussian) distributions.\n *\n * Each entry in `sigmas` produces a breakpoint at `mean + sigma * stdDev`.\n * Values are automatically sorted and deduplicated.\n *\n * @example\n * { type: 'mean-stddev', sigmas: [-2, -1, 0, 1, 2] }\n * // breakpoints: μ-2σ, μ-σ, μ, μ+σ, μ+2σ → 6 intervals\n *\n * @example\n * { type: 'mean-stddev', sigmas: [0, 1, 2] }\n * // → 4 intervals: below mean | mean→+1σ | +1σ→+2σ | above +2σ\n *\n * @default sigmas [-2, -1, 0, 1, 2]\n */\nexport interface MeanStdDevStrategy {\n  type: 'mean-stddev';\n  /**\n   * Sigma multipliers. Each produces a breakpoint at `mean + sigma * stdDev`.\n   * Default: `[-2, -1, 0, 1, 2]` (6 intervals centred on the mean).\n   */\n  sigmas?: number[];\n}\n\n/**\n * Equal-width strategy — divides the data range [min, max] into n equal-width intervals.\n * Unlike `quantile`, no account is taken of the data distribution.\n *\n * @default count 5\n */\nexport interface EqualWidthStrategy {\n  type: 'equal-width';\n  /** Number of intervals. Default: 5 */\n  count?: number;\n}\n\n/**\n * Jenks natural breaks strategy — Fisher-Jenks algorithm.\n * Minimises within-class variance and maximises between-class variance,\n * producing the most \"natural\" grouping of the data (best for clustered or multi-modal data).\n *\n * **Complexity**: O(n² · k). Datasets larger than `maxSamples` are\n * uniformly downsampled before the algorithm runs.\n *\n * @default count 5\n * @default maxSamples 1000\n */\nexport interface JenksStrategy {\n  type: 'jenks';\n  /** Number of natural-break classes. Default: 5 */\n  count?: number;\n  /**\n   * Maximum number of data points fed to the algorithm.\n   * Larger datasets are uniformly downsampled for performance.\n   * Default: 1000.\n   */\n  maxSamples?: number;\n}\n\n/**\n * Union of all data-driven interval strategies accepted by `intervalsFromData`.\n *\n * | Strategy      | Breakpoints based on           | Best for                              |\n * |--------------|--------------------------------|---------------------------------------|\n * | `quartile`    | Q1, Q2, Q3                     | Quick balanced 4-class view           |\n * | `quantile`    | n-quantile percentiles         | Balanced n-class view                 |\n * | `equal-width` | Linear range min→max           | Uniform / continuous distributions    |\n * | `mean-stddev` | mean ± k·σ                     | Near-normal distributions             |\n * | `jenks`       | Fisher-Jenks natural breaks    | Clustered / multi-modal data          |\n */\nexport type IntervalStrategy =\n  | QuartileStrategy\n  | QuantileStrategy\n  | MeanStdDevStrategy\n  | EqualWidthStrategy\n  | JenksStrategy;\n\n// ── Internal: extraction + statistics ────────────────────────────────────\n\n/** Extracts non-null numeric values from a dataset, sorted ascending. */\nfunction extractSortedNums<T extends IntervalBound>(\n  data: any[],\n  valueExtractor: (item: any) => T | null | undefined\n): number[] {\n  const nums: number[] = [];\n  for (const item of data) {\n    const v = valueExtractor(item);\n    if (v != null) nums.push(toNum(v));\n  }\n  return nums.sort((a, b) => a - b);\n}\n\n/** Builds a `DataStats` from a sorted numeric array. */\nfunction buildStats(sorted: number[]): DataStats {\n  const n      = sorted.length;\n  const min    = sorted[0];\n  const max    = sorted[n - 1];\n  const mean   = sorted.reduce((s, v) => s + v, 0) / n;\n  const variance = sorted.reduce((s, v) => s + (v - mean) ** 2, 0) / n;\n  const stdDev = Math.sqrt(variance);\n\n  const percentile = (p: number): number => {\n    if (p <= 0) return min;\n    if (p >= 100) return max;\n    const idx = (p / 100) * (n - 1);\n    const lo  = Math.floor(idx);\n    const hi  = Math.ceil(idx);\n    return lo === hi ? sorted[lo] : sorted[lo] + (idx - lo) * (sorted[hi] - sorted[lo]);\n  };\n\n  const q1 = percentile(25);\n  const q2 = percentile(50);\n  const q3 = percentile(75);\n\n  return { count: n, min, max, mean, median: q2, stdDev, q1, q2, q3, iqr: q3 - q1, percentile };\n}\n\n// ── Internal: Fisher-Jenks algorithm ─────────────────────────────────────\n\n/**\n * Computes k−1 natural-break points using the exact Fisher-Jenks DP algorithm.\n * Input `sorted` must already be sorted ascending.\n * Returns breakpoints as the first value of each class starting from class 2.\n */\nfunction jenksBreaks(sorted: number[], k: number, maxSamples: number): number[] {\n  const n = sorted.length;\n  if (k <= 1 || n <= 1) return [];\n  if (k >= n) {\n    // Trivial: more classes than points — one point per class\n    return sorted.slice(1, k);\n  }\n\n  // Downsample for performance\n  let data = sorted;\n  if (n > maxSamples) {\n    const step = (n - 1) / (maxSamples - 1);\n    data = Array.from({ length: maxSamples }, (_, i) => sorted[Math.round(i * step)]);\n  }\n  const m = data.length;\n\n  // Prefix sums for O(1) within-class SSD: sum of squared deviations for data[i..j]\n  const prefSum   = new Float64Array(m + 1);\n  const prefSumSq = new Float64Array(m + 1);\n  for (let i = 0; i < m; i++) {\n    prefSum[i + 1]   = prefSum[i]   + data[i];\n    prefSumSq[i + 1] = prefSumSq[i] + data[i] * data[i];\n  }\n  const ssd = (i: number, j: number): number => {\n    const cnt = j - i + 1;\n    const s   = prefSum[j + 1]   - prefSum[i];\n    const sq  = prefSumSq[j + 1] - prefSumSq[i];\n    return sq - (s * s) / cnt;\n  };\n\n  // DP: dp[c][i] = minimum total SSD using exactly c classes on data[0..i]\n  //     sp[c][i] = start index of the last class for dp[c][i]\n  const INF = Number.MAX_VALUE;\n  const dp: Float64Array[] = Array.from({ length: k + 1 }, () => new Float64Array(m).fill(INF));\n  const sp: Uint32Array[]  = Array.from({ length: k + 1 }, () => new Uint32Array(m));\n\n  // Base case: 1 class covers all data from 0 to i\n  for (let i = 0; i < m; i++) {\n    dp[1][i] = ssd(0, i);\n    sp[1][i] = 0;\n  }\n\n  // Fill DP for classes 2..k\n  for (let c = 2; c <= k; c++) {\n    for (let i = c - 1; i < m; i++) {\n      for (let j = c - 2; j < i; j++) {\n        const cost = dp[c - 1][j] + ssd(j + 1, i);\n        if (cost < dp[c][i]) {\n          dp[c][i] = cost;\n          sp[c][i] = j + 1;\n        }\n      }\n    }\n  }\n\n  // Backtrack: recover the start index of each class\n  const breaks: number[] = [];\n  let right = m - 1;\n  for (let c = k; c >= 2; c--) {\n    const start = sp[c][right];\n    breaks.unshift(data[start]); // first value of this class = breakpoint\n    right = start - 1;\n  }\n  return breaks;\n}\n\n// ── Internal: strategy dispatch ───────────────────────────────────────────\n\nfunction computeBreakpointsFromStrategy(\n  sorted: number[],\n  stats: DataStats,\n  strategy: IntervalStrategy\n): number[] {\n  switch (strategy.type) {\n    case 'quartile':\n      return [stats.q1, stats.q2, stats.q3];\n\n    case 'quantile': {\n      const count = strategy.count ?? 4;\n      return Array.from({ length: count - 1 }, (_, i) =>\n        stats.percentile(((i + 1) / count) * 100)\n      );\n    }\n\n    case 'mean-stddev': {\n      const sigmas = strategy.sigmas ?? [-2, -1, 0, 1, 2];\n      return sigmas\n        .slice()\n        .sort((a, b) => a - b)\n        .map(s => stats.mean + s * stats.stdDev);\n    }\n\n    case 'equal-width': {\n      const count = strategy.count ?? 5;\n      const step  = (stats.max - stats.min) / count;\n      return Array.from({ length: count - 1 }, (_, i) => stats.min + (i + 1) * step);\n    }\n\n    case 'jenks': {\n      const count      = strategy.count      ?? 5;\n      const maxSamples = strategy.maxSamples ?? 1000;\n      return jenksBreaks(sorted, count, maxSamples);\n    }\n\n    default:\n      return [];\n  }\n}\n\n// ── Public: smart interval API ────────────────────────────────────────────\n\n/**\n * Computes descriptive statistics for the values extracted from a dataset.\n *\n * Returns `null` when all extracted values are `null` / `undefined`.\n *\n * The returned `percentile(p)` function uses linear interpolation between\n * adjacent sorted values (same method as most statistical tools).\n *\n * @example\n * const stats = computeDataStats(requests, r => r.end != null ? r.end - r.start : null);\n * console.log(`mean: ${stats!.mean.toFixed(3)}s, σ: ${stats!.stdDev.toFixed(3)}s`);\n * console.log(`Q1: ${stats!.q1}  median: ${stats!.median}  Q3: ${stats!.q3}`);\n */\nexport function computeDataStats<T extends IntervalBound>(\n  data: any[],\n  valueExtractor: (item: any) => T | null | undefined\n): DataStats | null {\n  const sorted = extractSortedNums(data, valueExtractor);\n  return sorted.length === 0 ? null : buildStats(sorted);\n}\n\n/**\n * Generates intervals whose breakpoints are **automatically derived from the data**\n * using a configurable statistical strategy.\n *\n * This is the \"smart\" counterpart to the manual `intervalsByBreakpoints()`.\n * Use it when you don't have fixed thresholds and want the intervals to reflect\n * the actual distribution of the data.\n *\n * The **default strategy** is `{ type: 'quantile', count: 4 }` (4 balanced classes).\n *\n * ## Available strategies\n *\n * | Strategy      | Default params                | Description                                    |\n * |--------------|-------------------------------|------------------------------------------------|\n * | `quartile`    | —                             | Q1/Q2/Q3 → 4 balanced classes                 |\n * | `quantile`    | `count: 4`                    | n-quantile → n balanced classes                |\n * | `equal-width` | `count: 5`                    | Linear range min→max → n equal-width classes   |\n * | `mean-stddev` | `sigmas: [-2,-1,0,1,2]`       | Breakpoints at mean ± k·σ                      |\n * | `jenks`       | `count: 5, maxSamples: 1000`  | Fisher-Jenks natural breaks                    |\n *\n * All breakpoints outside the actual data range `(min, max)` are discarded,\n * and duplicates are removed, so the result always contains meaningful intervals.\n *\n * Works with both `number` and `Date` values.\n *\n * @param data           Source dataset.\n * @param valueExtractor Extracts the value to classify from each item. Return `null` to exclude.\n * @param strategy       Which algorithm to use and its parameters.\n * @param options        Optional `labelFn` / `keyFn` to customise interval labels and keys.\n *\n * @returns `Interval<T>[]` — same format as `intervalsByBreakpoints()`, ready for\n *          `inInterval()`, `resolveInterval()`, and `intervalCategories()`.\n *\n * @example\n * // 4 balanced quartile buckets from actual request durations\n * const intervals = intervalsFromData(\n *   requests,\n *   r => r.end != null ? r.end - r.start : null\n * );\n *\n * @example\n * // 5 Jenks natural-break classes\n * const intervals = intervalsFromData(\n *   requests,\n *   r => r.end != null ? r.end - r.start : null,\n *   { type: 'jenks', count: 5 }\n * );\n *\n * @example\n * // 6 symmetric mean±2σ buckets with a custom label\n * const intervals = intervalsFromData(\n *   requests,\n *   r => r.duration,\n *   { type: 'mean-stddev', sigmas: [-2, -1, 0, 1, 2] },\n *   {\n *     labelFn: (min, max) => {\n *       const fmt = (v: number | null) => v == null ? '∞' : `${v.toFixed(2)}s`;\n *       if (min === null) return `< ${fmt(max)}`;\n *       if (max === null) return `≥ ${fmt(min)}`;\n *       return `${fmt(min)} – ${fmt(max)}`;\n *     }\n *   }\n * );\n *\n * @example\n * // Use directly in intervalCategories to build a SliceConfig.categories\n * const categories = intervalCategories(\n *   intervalsFromData(requests, r => r.end != null ? r.end - r.start : null),\n *   r => r.end != null ? r.end - r.start : null,\n *   { key: 'in-progress', label: 'En cours...' }\n * );\n */\nexport function intervalsFromData<T extends IntervalBound>(\n  data: any[],\n  valueExtractor: (item: any) => T | null | undefined,\n  strategy: IntervalStrategy = { type: 'quantile', count: 4 },\n  options?: IntervalOptions<T>\n): Interval<T>[] {\n  const sorted = extractSortedNums(data, valueExtractor);\n  if (sorted.length === 0) return [];\n\n  const stats  = buildStats(sorted);\n  const isDate = data.some(item => { const v = valueExtractor(item); return v instanceof Date; });\n\n  const rawBreaks = computeBreakpointsFromStrategy(sorted, stats, strategy);\n\n  // Deduplicate, sort, and discard values outside the actual data range\n  const breakNums = [...new Set(rawBreaks)]\n    .sort((a, b) => a - b)\n    .filter(b => b > stats.min && b < stats.max);\n\n  if (breakNums.length === 0) {\n    // Degenerate case: all values identical or strategy produced nothing useful\n    const v = (isDate ? new Date(stats.min) : stats.min) as T;\n    return [makeInterval<T>(v, v, true, options)];\n  }\n\n  const breakpoints = breakNums.map(n => (isDate ? new Date(n) : n) as T);\n  return intervalsByBreakpoints(breakpoints, options);\n}\n","export type ReshapeKey = string | number;\n\nexport type ReshapeAccessor<T> = keyof T & string | ((row: T) => unknown);\n\nexport type ReshapeAggregate<T> =\n  | 'sum'\n  | 'count'\n  | 'min'\n  | 'max'\n  | ((values: unknown[], rows: T[]) => unknown);\n\nexport type PivotFill =\n  | string\n  | number\n  | boolean\n  | null\n  | ((value: string, index: ReshapeKey, column: ReshapeKey) => unknown);\n\nexport interface PivotRowsOptions<T extends Record<string, any>> {\n  index: ReshapeAccessor<T>;\n  columns: ReshapeAccessor<T>;\n  values: readonly (keyof T & string)[];\n  aggregate?: ReshapeAggregate<T>;\n  fill?: PivotFill;\n  indexValues?: readonly ReshapeKey[];\n  columnValues?: readonly ReshapeKey[];\n  normalizeKey?: (value: unknown) => ReshapeKey;\n  missingKey?: 'empty' | 'skip' | 'error';\n  separator?: string;\n  indexName?: string;\n  columnName?: (valueField: string, column: ReshapeKey) => string;\n}\n\nexport type PivotRow = Record<string, unknown>;\n\nfunction readValue<T extends Record<string, any>>(row: T, accessor: ReshapeAccessor<T>): unknown {\n  return typeof accessor === 'function' ? accessor(row) : row[accessor];\n}\n\nfunction defaultKey(value: unknown): ReshapeKey {\n  if (typeof value === 'string' || typeof value === 'number') {\n    return value;\n  }\n  if (value == null) {\n    return '';\n  }\n  return describeValue(value);\n}\n\nfunction getAccessorName<T extends Record<string, any>>(\n  accessor: ReshapeAccessor<T>,\n  explicitName: string | undefined,\n  role: string\n): string {\n  if (explicitName) {\n    return explicitName;\n  }\n  if (typeof accessor === 'string') {\n    return accessor;\n  }\n  throw new Error(`[jquery-core] indexName est requis quand ${role} est une fonction.`);\n}\n\nfunction isPresent(value: unknown): boolean {\n  return value !== undefined && value !== null;\n}\n\nfunction describeValue(value: unknown): string {\n  if (typeof value === 'object' && value !== null) {\n    return JSON.stringify(value) ?? Object.prototype.toString.call(value);\n  }\n  if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'\n    || typeof value === 'bigint' || typeof value === 'symbol') {\n    return String(value);\n  }\n  return typeof value;\n}\n\nfunction aggregateValues<T>(\n  values: unknown[],\n  rows: T[],\n  aggregate: ReshapeAggregate<T>,\n  fill: unknown\n): unknown {\n  if (typeof aggregate === 'function') {\n    return aggregate(values, rows);\n  }\n\n  if (aggregate === 'count') {\n    return values.filter(isPresent).length;\n  }\n\n  const presentValues = values.filter(isPresent);\n  if (presentValues.length === 0) {\n    return fill;\n  }\n\n  if (aggregate === 'sum') {\n    return presentValues.reduce<number>((total, value) => {\n      const numericValue = Number(value);\n      if (!Number.isFinite(numericValue)) {\n        throw new TypeError(`[jquery-core] Impossible d'additionner la valeur \"${describeValue(value)}\".`);\n      }\n      return total + numericValue;\n    }, 0);\n  }\n\n  if (aggregate === 'min' || aggregate === 'max') {\n    const numericValues = presentValues.map((value) => {\n      const numericValue = Number(value);\n      if (!Number.isFinite(numericValue)) {\n        throw new TypeError(`[jquery-core] Impossible de comparer la valeur \"${describeValue(value)}\".`);\n      }\n      return numericValue;\n    });\n    return aggregate === 'min' ? Math.min(...numericValues) : Math.max(...numericValues);\n  }\n\n  throw new Error(`[jquery-core] Agrégation inconnue : \"${String(aggregate)}\".`);\n}\n\nfunction validateAggregate<T>(aggregate: ReshapeAggregate<T>): void {\n  if (typeof aggregate === 'function') {\n    return;\n  }\n  if (!['sum', 'count', 'min', 'max'].includes(aggregate)) {\n    throw new TypeError(`[jquery-core] Agrégation inconnue : \"${String(aggregate)}\".`);\n  }\n}\n\ntype PivotGroup<T> = { value: ReshapeKey; cells: Map<ReshapeKey, T[]> };\n\nfunction resolveFill(fill: PivotFill | undefined): PivotFill | number {\n  if (fill === undefined) {\n    return 0;\n  }\n  return fill;\n}\n\nfunction resolvePivotKey(\n  value: unknown,\n  normalizeKey: (value: unknown) => ReshapeKey,\n  missingKey: 'empty' | 'skip' | 'error'\n): ReshapeKey | undefined {\n  if (isPresent(value)) {\n    return normalizeKey(value);\n  }\n  if (missingKey === 'skip') {\n    return undefined;\n  }\n  if (missingKey === 'error') {\n    throw new TypeError('[jquery-core] Une clé index/colonne est absente.');\n  }\n  return normalizeKey(value);\n}\n\nfunction getOrCreateGroup<T>(\n  grouped: Map<ReshapeKey, PivotGroup<T>>,\n  indexValue: ReshapeKey\n): PivotGroup<T> {\n  const existing = grouped.get(indexValue);\n  if (existing) {\n    return existing;\n  }\n  const group = { value: indexValue, cells: new Map<ReshapeKey, T[]>() };\n  grouped.set(indexValue, group);\n  return group;\n}\n\nfunction buildOutputNames<T extends Record<string, any>>(\n  indexName: string,\n  columns: ReshapeKey[],\n  values: readonly (keyof T & string)[],\n  columnName: (valueField: string, column: ReshapeKey) => string\n): Set<string> {\n  const outputNames = new Set<string>([indexName]);\n  for (const columnValue of columns) {\n    for (const valueField of values) {\n      const outputName = columnName(String(valueField), columnValue);\n      if (outputName === '__proto__' || outputName === 'constructor' || outputName === 'prototype') {\n        throw new TypeError(`[jquery-core] Nom de colonne interdit : \"${outputName}\".`);\n      }\n      if (outputNames.has(outputName)) {\n        throw new TypeError(`[jquery-core] Collision de nom de colonne : \"${outputName}\".`);\n      }\n      outputNames.add(outputName);\n    }\n  }\n  return outputNames;\n}\n\nexport function pivotRows<T extends Record<string, any>>(\n  rows: readonly T[],\n  options: PivotRowsOptions<T>\n): PivotRow[] {\n  if (!options.values.length) {\n    throw new Error('[jquery-core] pivotRows exige au moins une mesure dans values.');\n  }\n\n  const normalizeKey = options.normalizeKey ?? defaultKey;\n  const aggregate = options.aggregate ?? 'sum';\n  const fill = resolveFill(options.fill);\n  const separator = options.separator ?? '_';\n  const missingKey = options.missingKey ?? 'empty';\n  const indexName = getAccessorName(options.index, options.indexName, 'index');\n  if (indexName === '__proto__' || indexName === 'constructor' || indexName === 'prototype') {\n    throw new TypeError(`[jquery-core] Nom de colonne interdit : \"${indexName}\".`);\n  }\n  const discoveredColumns: ReshapeKey[] = [];\n  const discoveredColumnKeys = new Set<ReshapeKey>();\n  const grouped = new Map<ReshapeKey, PivotGroup<T>>();\n\n  validateAggregate(aggregate);\n\n  const addColumn = (value: unknown): ReshapeKey => {\n    const key = normalizeKey(value);\n    if (!discoveredColumnKeys.has(key)) {\n      discoveredColumnKeys.add(key);\n      discoveredColumns.push(key);\n    }\n    return key;\n  };\n\n  for (const value of options.columnValues ?? []) {\n    addColumn(value);\n  }\n\n  for (const value of options.indexValues ?? []) {\n    const indexValue = normalizeKey(value);\n    getOrCreateGroup(grouped, indexValue);\n  }\n\n  for (const row of rows) {\n    const rawIndex = readValue(row, options.index);\n    const rawColumn = readValue(row, options.columns);\n    const indexValue = resolvePivotKey(rawIndex, normalizeKey, missingKey);\n    const columnValue = resolvePivotKey(rawColumn, normalizeKey, missingKey);\n    if (indexValue === undefined || columnValue === undefined) {\n      continue;\n    }\n    addColumn(rawColumn);\n    const group = getOrCreateGroup(grouped, indexValue);\n    const cellRows = group.cells.get(columnValue) ?? [];\n    cellRows.push(row);\n    group.cells.set(columnValue, cellRows);\n  }\n\n  const columnName = options.columnName\n    ?? ((valueField: string, column: ReshapeKey) => `${valueField}${separator}${String(column)}`);\n  buildOutputNames(indexName, discoveredColumns, options.values, columnName);\n\n  return [...grouped.values()].map((group) => {\n    const result: PivotRow = { [indexName]: group.value };\n\n    for (const columnValue of discoveredColumns) {\n      const matchingRows = group.cells.get(columnValue) ?? [];\n\n      for (const valueField of options.values) {\n        const outputName = columnName(String(valueField), columnValue);\n        const cellValues = matchingRows.map((row) => row[valueField]);\n        const cellFill = typeof fill === 'function'\n          ? fill(outputName, group.value, columnValue)\n          : fill;\n        result[outputName] = matchingRows.length === 0\n          ? cellFill\n          : aggregateValues(cellValues, matchingRows, aggregate, cellFill);\n      }\n    }\n\n    return result;\n  });\n}","export type VisualSnapshotType = 'table' | 'chart';\n\nexport interface VisualCopyFeedbackConfig {\n  enabled?: boolean;\n  durationMs?: number;\n  message?: string;\n}\n\nexport interface VisualSnapshot {\n  id: string;\n  schemaVersion: 1;\n  type: VisualSnapshotType;\n  label: string;\n  createdAt: string;\n  updatedAt: string;\n  config: Record<string, unknown>;\n  state: Record<string, unknown>;\n  data: unknown[];\n  warnings: string[];\n}\n\nexport type VisualSnapshotDraft = Omit<VisualSnapshot, 'id' | 'schemaVersion' | 'createdAt' | 'updatedAt'>;\n\nexport interface VisualSnapshotCollection {\n  schemaVersion: 1;\n  snapshots: VisualSnapshot[];\n}\n\nexport interface VisualSnapshotApplyResult {\n  applied: boolean;\n  restored: string[];\n  skipped: string[];\n  warnings: string[];\n  data?: unknown[];\n}\n\nexport interface VisualSnapshotStorageOptions {\n  storage?: Storage;\n  storageKey?: string;\n  maxBytes?: number;\n}\n\nexport class DuplicateVisualSnapshotLabelError extends Error {\n  constructor(label: string) {\n    super(`A visual snapshot named \"${label}\" already exists.`);\n    this.name = 'DuplicateVisualSnapshotLabelError';\n  }\n}\n\nexport const VISUAL_SNAPSHOT_SCHEMA_VERSION = 1 as const;\nexport const VISUAL_SNAPSHOT_STORAGE_KEY = 'jquery_visual_snapshots';\nexport const VISUAL_SNAPSHOT_DEFAULT_MAX_BYTES = 4 * 1024 * 1024;\n\nexport function isVisualSnapshot(value: unknown): value is VisualSnapshot {\n  if (!value || typeof value !== 'object') return false;\n  const snapshot = value as Partial<VisualSnapshot>;\n  return snapshot.schemaVersion === VISUAL_SNAPSHOT_SCHEMA_VERSION\n    && typeof snapshot.id === 'string'\n    && typeof snapshot.label === 'string'\n    && (snapshot.type === 'table' || snapshot.type === 'chart')\n    && typeof snapshot.createdAt === 'string'\n    && typeof snapshot.updatedAt === 'string'\n    && isRecord(snapshot.config)\n    && isRecord(snapshot.state)\n    && Array.isArray(snapshot.data)\n    && Array.isArray(snapshot.warnings);\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n  return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n","import {\n  isVisualSnapshot,\n  VISUAL_SNAPSHOT_DEFAULT_MAX_BYTES,\n  VISUAL_SNAPSHOT_SCHEMA_VERSION,\n  VISUAL_SNAPSHOT_STORAGE_KEY,\n  VisualSnapshot,\n  VisualSnapshotDraft,\n  VisualSnapshotCollection,\n  VisualSnapshotStorageOptions,\n  DuplicateVisualSnapshotLabelError,\n} from './visual-snapshot.model';\n\nexport class VisualSnapshotStorage {\n  private readonly storage: Storage | null;\n  private readonly storageKey: string;\n  private readonly maxBytes: number;\n\n  constructor(options: VisualSnapshotStorageOptions = {}) {\n    this.storage = options.storage ?? getBrowserStorage();\n    this.storageKey = options.storageKey ?? VISUAL_SNAPSHOT_STORAGE_KEY;\n    this.maxBytes = options.maxBytes ?? VISUAL_SNAPSHOT_DEFAULT_MAX_BYTES;\n  }\n\n  list(): VisualSnapshot[] {\n    return this.readCollection().snapshots\n      .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));\n  }\n\n  get(snapshotId: string): VisualSnapshot | null {\n    return this.readCollection().snapshots.find(snapshot => snapshot.id === snapshotId) ?? null;\n  }\n\n  isLabelAvailable(label: string, excludeSnapshotId?: string): boolean {\n    const normalizedLabel = normalizeLabelKey(label);\n    if (!normalizedLabel) return false;\n    return !this.readCollection().snapshots.some(snapshot =>\n      snapshot.id !== excludeSnapshotId && normalizeLabelKey(snapshot.label) === normalizedLabel,\n    );\n  }\n\n  create(snapshot: VisualSnapshotDraft): VisualSnapshot {\n    const normalizedLabel = normalizeLabel(snapshot.label);\n    if (!normalizedLabel) throw new Error('A visual snapshot label is required.');\n    const collection = this.readCollection();\n    if (!this.isLabelAvailable(normalizedLabel)) {\n      throw new DuplicateVisualSnapshotLabelError(normalizedLabel);\n    }\n    const now = new Date().toISOString();\n    const created: VisualSnapshot = {\n      ...snapshot,\n      label: normalizedLabel,\n      id: createId(),\n      schemaVersion: VISUAL_SNAPSHOT_SCHEMA_VERSION,\n      createdAt: now,\n      updatedAt: now,\n    };\n    this.writeCollection({\n      schemaVersion: VISUAL_SNAPSHOT_SCHEMA_VERSION,\n      snapshots: [created, ...collection.snapshots],\n    });\n    return created;\n  }\n\n  replace(snapshot: VisualSnapshot): void {\n    if (!isVisualSnapshot(snapshot)) throw new Error('Invalid visual snapshot');\n    const snapshots = this.readCollection().snapshots;\n    const index = snapshots.findIndex(item => item.id === snapshot.id);\n    if (index === -1) throw new Error(`Unknown visual snapshot: ${snapshot.id}`);\n    snapshots[index] = { ...snapshot, updatedAt: new Date().toISOString() };\n    this.writeCollection({ schemaVersion: VISUAL_SNAPSHOT_SCHEMA_VERSION, snapshots });\n  }\n\n  rename(snapshotId: string, label: string): void {\n    const snapshot = this.get(snapshotId);\n    if (!snapshot) throw new Error(`Unknown visual snapshot: ${snapshotId}`);\n    const normalizedLabel = normalizeLabel(label);\n    if (!normalizedLabel) return;\n    if (!this.isLabelAvailable(normalizedLabel, snapshotId)) {\n      throw new DuplicateVisualSnapshotLabelError(normalizedLabel);\n    }\n    this.replace({ ...snapshot, label: normalizedLabel });\n  }\n\n  remove(snapshotId: string): void {\n    this.writeCollection({\n      schemaVersion: VISUAL_SNAPSHOT_SCHEMA_VERSION,\n      snapshots: this.readCollection().snapshots.filter(snapshot => snapshot.id !== snapshotId),\n    });\n  }\n\n  clear(): void {\n    try {\n      this.storage?.removeItem(this.storageKey);\n    } catch {\n      // Storage peut être indisponible en mode privé ou dans un contexte bloqué.\n    }\n  }\n\n  private readCollection(): VisualSnapshotCollection {\n    if (!this.storage) return emptyCollection();\n    try {\n      const raw = this.storage.getItem(this.storageKey);\n      if (!raw) return emptyCollection();\n      const parsed: unknown = JSON.parse(raw);\n      if (!isCollection(parsed)) {\n        this.clear();\n        return emptyCollection();\n      }\n      return parsed;\n    } catch {\n      return emptyCollection();\n    }\n  }\n\n  private writeCollection(collection: VisualSnapshotCollection): void {\n    if (!this.storage) throw new Error('Visual snapshot storage is unavailable');\n    const serialized = JSON.stringify(collection);\n    if (serialized.length > this.maxBytes) {\n      throw new Error(`Visual snapshot storage limit exceeded (${this.maxBytes} bytes)`);\n    }\n    try {\n      this.storage.setItem(this.storageKey, serialized);\n    } catch (error) {\n      throw new Error(`Unable to persist visual snapshots: ${String(error)}`);\n    }\n  }\n}\n\nfunction normalizeLabel(label: string): string {\n  return label.trim().replace(/\\s+/g, ' ');\n}\n\nfunction normalizeLabelKey(label: string): string {\n  return normalizeLabel(label).toLocaleLowerCase();\n}\n\nfunction isCollection(value: unknown): value is VisualSnapshotCollection {\n  if (!value || typeof value !== 'object') return false;\n  const collection = value as Partial<VisualSnapshotCollection>;\n  return collection.schemaVersion === VISUAL_SNAPSHOT_SCHEMA_VERSION\n    && Array.isArray(collection.snapshots)\n    && collection.snapshots.every(isVisualSnapshot);\n}\n\nfunction emptyCollection(): VisualSnapshotCollection {\n  return { schemaVersion: VISUAL_SNAPSHOT_SCHEMA_VERSION, snapshots: [] };\n}\n\nfunction getBrowserStorage(): Storage | null {\n  try {\n    return typeof localStorage === 'undefined' ? null : localStorage;\n  } catch {\n    return null;\n  }\n}\n\nfunction createId(): string {\n  try {\n    if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n      return crypto.randomUUID();\n    }\n  } catch {\n    // Utilise le fallback si randomUUID est indisponible.\n  }\n  return `snapshot-${Date.now()}-${fallbackId++}`;\n}\n\nlet fallbackId = 0;\n","export class FullscreenManager {\n  static isSupported(element?: Element): boolean {\n    return typeof document !== 'undefined'\n      && !!element\n      && typeof element.requestFullscreen === 'function'\n      && typeof document.exitFullscreen === 'function';\n  }\n\n  static isActive(element: Element): boolean {\n    return typeof document !== 'undefined' && document.fullscreenElement === element;\n  }\n\n  static async toggle(element: Element): Promise<boolean> {\n    if (!this.isSupported(element)) return false;\n    if (this.isActive(element)) {\n      await document.exitFullscreen();\n      return false;\n    }\n    await element.requestFullscreen();\n    return true;\n  }\n}\n","/*\n * Public API Surface of jquery-core\n */\n\nexport * from './lib/jquery-core.model';\nexport * from './lib/utils';\nexport * from './lib/jquery-view.model';\nexport * from './lib/jquery-interval';\nexport * from './lib/reshape';\nexport * from './lib/visual-snapshot.model';\nexport * from './lib/visual-snapshot.storage';\nexport * from './lib/fullscreen.manager';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["defaultKey"],"mappings":"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"}