@bicharts/chart-host 0.6.102 → 0.6.105
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.
- package/dist/adapters.mjs +3 -3
- package/dist/card.mjs +2 -2
- package/dist/chunk-5WTQN5DL.mjs +96 -0
- package/dist/{chunk-M7MBTLDP.mjs → chunk-7XRQUFVH.mjs} +3 -1
- package/dist/{chunk-ASLRGGLV.mjs → chunk-CPLWAW3Z.mjs} +1 -1
- package/dist/{chunk-B6BLSIID.mjs → chunk-IE426WU6.mjs} +2 -2
- package/dist/{chunk-3JBJ2SIF.mjs → chunk-IE7TM6DX.mjs} +1 -1
- package/dist/{chunk-ALX4D2I2.mjs → chunk-K6UXTDMR.mjs} +675 -132
- package/dist/{chunk-D6A37G2G.mjs → chunk-MU4BWWO6.mjs} +10 -10
- package/dist/{chunk-5OCL4EFM.mjs → chunk-P2DLK7WZ.mjs} +1 -1
- package/dist/{chunk-PMA56BKD.mjs → chunk-PA5V6J6K.mjs} +1 -1
- package/dist/{chunk-CNT3QA3R.mjs → chunk-SYUJ4TPX.mjs} +961 -771
- package/dist/{chunk-WSNDXS3Z.mjs → chunk-TLIBO5PT.mjs} +1 -1
- package/dist/index.mjs +207 -17
- package/dist/legend-fit.mjs +3 -3
- package/dist/page.mjs +4 -4
- package/dist/provinces.mjs +229 -0
- package/dist/react.mjs +12 -10
- package/dist/testing.mjs +1 -1
- package/dist/types/admin1LookupLoader.d.ts +26 -0
- package/dist/types/contract.d.ts +9 -1
- package/dist/types/exportTable.d.ts +100 -0
- package/dist/types/host.d.ts +3 -2
- package/dist/types/hostLinks.d.ts +11 -0
- package/dist/types/index.d.ts +5 -2
- package/dist/types/optionsVocabulary.d.ts +5 -0
- package/dist/types/payload.d.ts +63 -4
- package/dist/types/provinceGeo.d.ts +38 -0
- package/dist/types/provinceHost.d.ts +47 -0
- package/dist/types/provinces.d.ts +3 -0
- package/dist/types/shareRate.d.ts +90 -0
- package/dist/zoom-memory.mjs +1 -1
- package/package.json +6 -1
package/dist/react.mjs
CHANGED
|
@@ -13,23 +13,25 @@ import {
|
|
|
13
13
|
payloadRowReader,
|
|
14
14
|
viewFromToken,
|
|
15
15
|
viewToken
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-TLIBO5PT.mjs";
|
|
17
17
|
import {
|
|
18
18
|
assembleD3,
|
|
19
19
|
createChartGroup,
|
|
20
20
|
createChartHost,
|
|
21
|
-
geoFromCache,
|
|
22
|
-
loadGeo,
|
|
23
21
|
syncMemberSelection,
|
|
24
22
|
toSourceRows
|
|
25
|
-
} from "./chunk-
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import
|
|
23
|
+
} from "./chunk-K6UXTDMR.mjs";
|
|
24
|
+
import "./chunk-IE426WU6.mjs";
|
|
25
|
+
import "./chunk-CPLWAW3Z.mjs";
|
|
26
|
+
import "./chunk-P2DLK7WZ.mjs";
|
|
27
|
+
import "./chunk-IE7TM6DX.mjs";
|
|
28
|
+
import {
|
|
29
|
+
geoFromCache,
|
|
30
|
+
loadGeo
|
|
31
|
+
} from "./chunk-5WTQN5DL.mjs";
|
|
32
|
+
import "./chunk-SYUJ4TPX.mjs";
|
|
31
33
|
import "./chunk-A2GMXZP7.mjs";
|
|
32
|
-
import "./chunk-
|
|
34
|
+
import "./chunk-7XRQUFVH.mjs";
|
|
33
35
|
import "./chunk-GHODWOAL.mjs";
|
|
34
36
|
|
|
35
37
|
// src/react.tsx
|
package/dist/testing.mjs
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Where the lookup is served, relative to the site origin. Versioned in the file name, so a rebuilt lookup is a new
|
|
2
|
+
* URL rather than a stale cache entry. */
|
|
3
|
+
export declare const ADMIN1_LOOKUP_PATH = "/geo/admin1-lookup.v1.json";
|
|
4
|
+
/**
|
|
5
|
+
* Fetch and register the lookup. Resolves true once it is registered (immediately when it already is), false on a
|
|
6
|
+
* timeout, a failed fetch or a body that is not a lookup - and never throws. One fetch is in flight at a time, so N
|
|
7
|
+
* charts on a page cause one request. `timeoutMs` bounds how long a host waits before profiling without it (default
|
|
8
|
+
* 3000); a late arrival still registers, for the next profile.
|
|
9
|
+
*/
|
|
10
|
+
export declare function loadAdmin1Lookup(url: string, opts?: {
|
|
11
|
+
timeoutMs?: number;
|
|
12
|
+
fetchJson?: (url: string) => Promise<any>;
|
|
13
|
+
log?: (tag: string, data?: any) => void;
|
|
14
|
+
}): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Is the lookup worth loading for a table, judged from its profile? True when a column was profiled as a country or a
|
|
17
|
+
* city, or when a dimension's name reads as a city or a first-level division. Takes plain column records, so a host
|
|
18
|
+
* passes its profile as is.
|
|
19
|
+
*/
|
|
20
|
+
export declare function needsAdmin1Lookup(columns: ReadonlyArray<{
|
|
21
|
+
name?: string | null;
|
|
22
|
+
geoKind?: string | null;
|
|
23
|
+
isMeasure?: boolean | null;
|
|
24
|
+
}> | null | undefined): boolean;
|
|
25
|
+
/** Forget an in-flight load. Tests only. */
|
|
26
|
+
export declare function resetAdmin1LookupLoaderForTests(): void;
|
package/dist/types/contract.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import type { ExportFormat, ExportTableService, SaveFileService } from "./exportTable";
|
|
2
|
+
export declare const HOST_CONTRACT_VERSION = "1.20.0";
|
|
2
3
|
export type GeoPointPrecision = "latlon" | "city" | "zip3" | "state" | "country";
|
|
3
4
|
/** Every valid tier, ordered most precise → coarsest. Runtime form of GeoPointPrecision. */
|
|
4
5
|
export declare const GEO_POINT_PRECISIONS: readonly GeoPointPrecision[];
|
|
@@ -13,6 +14,7 @@ export declare const AXIS_FILTER_CLASS = "d3-axis-filter";
|
|
|
13
14
|
export declare const LIFT_SELECTED_CLASS = "d3-lift-selected";
|
|
14
15
|
export declare const CONTROL_CLASS = "lch-control";
|
|
15
16
|
export declare const ROW_IDX_ATTR = "data-row-idx";
|
|
17
|
+
export declare const NOTE_STYLE_ATTR = "data-bic-note-style";
|
|
16
18
|
export declare const SELECTION_RULE_ATTR = "data-lch-sel-rule";
|
|
17
19
|
export declare const SELECTION_RULE_CLICKED_MARKS = "clicked-marks";
|
|
18
20
|
export declare const MARK_KEY_ATTR = "data-mark-key";
|
|
@@ -126,6 +128,11 @@ export interface RenderOptions {
|
|
|
126
128
|
dataComplete?: boolean;
|
|
127
129
|
rowsWithheld?: number;
|
|
128
130
|
rowsFilteredOut?: number;
|
|
131
|
+
openUrl?: (url: string) => void;
|
|
132
|
+
copyText?: (text: string) => boolean | void | Promise<boolean | void>;
|
|
133
|
+
saveFile?: SaveFileService;
|
|
134
|
+
exportFormats?: readonly ExportFormat[];
|
|
135
|
+
exportTable?: ExportTableService;
|
|
129
136
|
geoPointDest?: {
|
|
130
137
|
precision: GeoPointPrecision | null;
|
|
131
138
|
precisionCounts: Record<GeoPointPrecision, number>;
|
|
@@ -150,6 +157,7 @@ export interface RenderOptions {
|
|
|
150
157
|
colorScaleSelfClampPct?: number;
|
|
151
158
|
geoLandColor?: string;
|
|
152
159
|
geoNoDataColor?: string;
|
|
160
|
+
geoBorders?: boolean;
|
|
153
161
|
aggregation?: string;
|
|
154
162
|
uiState?: unknown;
|
|
155
163
|
setUiState?: (s: unknown) => void;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/** The kind of value one exported column holds. Anything that is not a number, a date or a yes/no is text. */
|
|
2
|
+
export type ExportColumnType = "text" | "number" | "date" | "boolean";
|
|
3
|
+
/** One exported column, in the order the reader sees it. */
|
|
4
|
+
export interface ExportColumn {
|
|
5
|
+
/** The header, as the reader sees it. */
|
|
6
|
+
name: string;
|
|
7
|
+
type: ExportColumnType;
|
|
8
|
+
/** The d3-format specifier the chart prints this number with (a number column only). Wins over modelFormat. */
|
|
9
|
+
d3Format?: string | null;
|
|
10
|
+
/** The data model's own number format (an Excel / Power BI format string), used when there is no d3Format. */
|
|
11
|
+
modelFormat?: string | null;
|
|
12
|
+
}
|
|
13
|
+
/** One cell's value. A blank (null, undefined, "" or a value its column's type cannot read) is an empty cell. */
|
|
14
|
+
export type ExportCell = string | number | boolean | Date | null | undefined;
|
|
15
|
+
/** What a chart hands out: the visible columns in display order, and the rows in display order. */
|
|
16
|
+
export interface ExportTable {
|
|
17
|
+
/** Names the file and the worksheet. Absent: "table". */
|
|
18
|
+
title?: string | null;
|
|
19
|
+
columns: ExportColumn[];
|
|
20
|
+
rows: ExportCell[][];
|
|
21
|
+
}
|
|
22
|
+
export type ExportFormat = "csv" | "xlsx";
|
|
23
|
+
/** The formats a chart may offer, best first. */
|
|
24
|
+
export declare const EXPORT_FORMATS: readonly ExportFormat[];
|
|
25
|
+
/** A finished file, as a host's file service receives it. */
|
|
26
|
+
export interface ExportFile {
|
|
27
|
+
/** A file name with its extension, safe on every file system. */
|
|
28
|
+
name: string;
|
|
29
|
+
format: ExportFormat;
|
|
30
|
+
mime: string;
|
|
31
|
+
bytes: Uint8Array;
|
|
32
|
+
/** The same content as text, for a text format (the CSV); absent for a binary one. */
|
|
33
|
+
text?: string;
|
|
34
|
+
/**
|
|
35
|
+
* The table the file was written from, for a host that keeps it its own way (a spreadsheet add-in that must give
|
|
36
|
+
* the new sheet a name the open workbook does not already use, and so writes the workbook again under that name).
|
|
37
|
+
*/
|
|
38
|
+
table: ExportTable;
|
|
39
|
+
}
|
|
40
|
+
export declare const XLSX_MIME = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
41
|
+
export declare const CSV_MIME = "text/csv";
|
|
42
|
+
/**
|
|
43
|
+
* Excel's day number for a UTC time: days since 1899-12-30, the fraction being the time of day. Excel counts a
|
|
44
|
+
* 29 February 1900 that never was (day 60), so a day before 1 March 1900 is one lower to read back as itself.
|
|
45
|
+
*/
|
|
46
|
+
export declare function excelSerial(t: number): number;
|
|
47
|
+
/**
|
|
48
|
+
* The Excel number format for an exported number column, or null for General. `values` are the column's numbers, so a
|
|
49
|
+
* format that shows "up to" some decimals shows as many as the data has.
|
|
50
|
+
*/
|
|
51
|
+
export declare function excelNumberFormat(col: Pick<ExportColumn, "d3Format" | "modelFormat">, values?: readonly number[]): string | null;
|
|
52
|
+
/**
|
|
53
|
+
* The table as CSV text: a header row, then one line per row, CRLF between lines, RFC 4180 quoting. A number is its
|
|
54
|
+
* plain value (a point for the decimal, no grouping), a date its ISO day (and time, when the column has one), a yes/no
|
|
55
|
+
* TRUE or FALSE. The text starts with a byte-order mark so a spreadsheet reads it as UTF-8.
|
|
56
|
+
*/
|
|
57
|
+
export declare function tableToCsv(table: ExportTable): string;
|
|
58
|
+
/** A1-style column letters for a 0-based column index. */
|
|
59
|
+
export declare function columnLetters(ci: number): string;
|
|
60
|
+
/** A worksheet name Excel accepts: at most 31 characters, none of []:*?/\, not blank, not starting or ending with '. */
|
|
61
|
+
export declare function sheetName(title: string | null | undefined): string;
|
|
62
|
+
/** A file name safe on every file system, from a title: no reserved characters, at most 80 characters. */
|
|
63
|
+
export declare function exportFileName(title: string | null | undefined, format: ExportFormat): string;
|
|
64
|
+
/**
|
|
65
|
+
* The table as an .xlsx workbook's bytes. One worksheet named after the title: a bold header row, frozen, with filter
|
|
66
|
+
* buttons; typed cells (numbers with their format where Excel can carry it, dates as dates, TRUE/FALSE); each column as
|
|
67
|
+
* wide as its widest value, within limits. Rows past Excel's limit are left out (a sheet holds 1,048,576 rows).
|
|
68
|
+
*/
|
|
69
|
+
export declare function tableToXlsx(table: ExportTable): Uint8Array;
|
|
70
|
+
/**
|
|
71
|
+
* A ZIP archive of the given files, stored without compression (method 0) - every reader of a workbook accepts it. The
|
|
72
|
+
* entries carry a fixed timestamp, so the same table always gives the same bytes.
|
|
73
|
+
*/
|
|
74
|
+
export declare function zipStored(files: Array<[string, string | Uint8Array]>): Uint8Array;
|
|
75
|
+
/** Builds the finished file for a table in one of the export formats. */
|
|
76
|
+
export declare function buildExportFile(table: ExportTable, format: ExportFormat): ExportFile;
|
|
77
|
+
/** Base64 of a file's bytes, for a host whose file service takes binary content as base64 text. */
|
|
78
|
+
export declare function bytesToBase64(bytes: Uint8Array): string;
|
|
79
|
+
/** A host's file service: saves a finished file the host's own way. False, a throw or a rejection means it did not. */
|
|
80
|
+
export type SaveFileService = (file: ExportFile) => boolean | void | Promise<boolean | void>;
|
|
81
|
+
/** The chart-facing export: what options.exportTable is. Resolves true when the host saved the file. */
|
|
82
|
+
export type ExportTableService = (table: ExportTable, format: ExportFormat) => Promise<boolean>;
|
|
83
|
+
/**
|
|
84
|
+
* The formats a host's file service takes, best first: the host's own list (when it names one) kept to the formats
|
|
85
|
+
* this module writes, in EXPORT_FORMATS order, without repeats. Absent or not a list: every format. An empty result
|
|
86
|
+
* means the host can save none of them, so it gets no export.
|
|
87
|
+
*/
|
|
88
|
+
export declare function exportFormatsFor(hostFormats?: readonly unknown[] | null): ExportFormat[];
|
|
89
|
+
/**
|
|
90
|
+
* Builds the chart-facing exportTable from a host's file service. Never throws and never rejects: a table that cannot
|
|
91
|
+
* be written, a format the host does not take, or a host that refuses, resolves false, and the chart says the export
|
|
92
|
+
* did not happen.
|
|
93
|
+
*/
|
|
94
|
+
export declare function exportTableService(save: SaveFileService, formats?: readonly ExportFormat[]): ExportTableService;
|
|
95
|
+
/**
|
|
96
|
+
* A file service for a page in a browser: the file downloads through a link the page never shows. For a React or
|
|
97
|
+
* Blazor page, a Fabric App, or any page whose browser allows downloads; a sandboxed frame without the
|
|
98
|
+
* "allow-downloads" permission silently drops it, so a host in one passes its own service (or none) instead.
|
|
99
|
+
*/
|
|
100
|
+
export declare function browserSaveFile(doc?: Document): SaveFileService;
|
package/dist/types/host.d.ts
CHANGED
|
@@ -257,8 +257,9 @@ export interface ChartHostConfig {
|
|
|
257
257
|
/**
|
|
258
258
|
* NOTES ON MARKS. Each annotation names a key - a value in a column of this chart's data, such as a
|
|
259
259
|
* country code - and the host draws a badge on that key's mark after every render, wherever a filter,
|
|
260
|
-
* a re-query or a
|
|
261
|
-
*
|
|
260
|
+
* a re-query, a zoom or a scroll has put it. A chart that declares NOTE_STYLE_ATTR="dot" gets a small
|
|
261
|
+
* dot at a fixed spot instead, the label in its tooltip. Keyed by value, never by row position. Change
|
|
262
|
+
* them with setAnnotations; none (the default) draws nothing.
|
|
262
263
|
*/
|
|
263
264
|
annotations?: MarkAnnotation[];
|
|
264
265
|
/** A badge was clicked. The mark beneath is not selected. */
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** The clipboard half a host can supply: navigator.clipboard, or anything with the same writeText. */
|
|
2
|
+
export interface ClipboardLike {
|
|
3
|
+
writeText?: (text: string) => Promise<void>;
|
|
4
|
+
}
|
|
5
|
+
/** The two services, ready to spread into a host's render options: each is absent when the host supplied nothing for it. */
|
|
6
|
+
export interface HostLinkServices {
|
|
7
|
+
openUrl?: (url: string) => void;
|
|
8
|
+
copyText?: (text: string) => boolean | Promise<boolean>;
|
|
9
|
+
}
|
|
10
|
+
/** Builds openUrl and copyText from a host's own opener and clipboard. */
|
|
11
|
+
export declare function hostLinkServices(open: ((url: string) => void) | undefined | null, clipboard: ClipboardLike | undefined | null): HostLinkServices;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
export { HOST_CONTRACT_VERSION, GEO_POINT_PRECISIONS, MARK_CLASS, LEGEND_MARK_CLASS, AXIS_FILTER_CLASS, ROW_IDX_ATTR, LIFT_SELECTED_CLASS, CONTROL_CLASS, NO_ROW_MARKS_ATTR, SELECTION_RULE_ATTR, SELECTION_RULE_CLICKED_MARKS, MARK_KEY_ATTR, CONTAINER_SLOT_CLICKED_MARKS, SNAPSHOT_SVG_ATTR, XFILTER_REFRESH_EVENT, CONTAINER_SLOT_ANIM_STOP, CONTAINER_SLOT_XF_CLEAR, CONTAINER_SLOT_INITIAL_XF_MARK, CONTAINER_SLOT_UI_STATE, CONTAINER_SLOT_SCROLL, VIEW_ONLY_UI_STATE_KEYS, withoutViewOnlyKeys, HOST_CONTAINER_CLASS, SELECTION_ACTIVE_CLASS, MARK_SELECTED_CLASS, ACTIVE_TICK_CLASS, DIM_OPACITY_VAR, DIM_OPACITY_DEFAULT, DIM_OPACITY_MIN, chartOwnsTimeline, periodTickSuppressesFeedback, ANIM_PLAY_SPEED_DEFAULT, ANIM_PLAY_SPEED_MIN, ANIM_PLAY_SPEED_MAX, ANIM_LOOP_DELAY_DEFAULT, ANIM_LOOP_DELAY_MIN, ANIM_MAX_IDEAL_FRAMES_DEFAULT, ANIM_MAX_IDEAL_FRAMES_MIN, ANIM_MAX_IDEAL_FRAMES_MAX, ANIMATION_OPTION_KEYS, COLOR_SCALE_SELF_CLAMP_PCT_DEFAULT, COLOR_SCALE_SELF_CLAMP_PCT_MIN, COLOR_SCALE_SELF_CLAMP_PCT_MAX, FLIP_MODE_DEFAULT, FLIP_INTERVAL_MIN_MS, FLIP_INTERVAL_MAX_MS, FLIP_DIRECTION_DEFAULT, APPROXIMATE_POSITIONS_DEFAULT, VALUE_AXIS_BASELINE_DEFAULT, SEASONAL_MARKERS_DEFAULT, MAX_MAP_POINTS_DEFAULT, type GeoPointPrecision, type GeoMapKind, type TimelineStyle, type FlipMode, type FlipDirection, type ApproximatePositions, type ValueAxisBaseline, type SeasonalMarkers, type ColorScaleScope, type RenderOptions, type ViewStateProvider, type ChartControlChange, type XfilterRefreshDetail, } from "./contract";
|
|
1
|
+
export { HOST_CONTRACT_VERSION, GEO_POINT_PRECISIONS, MARK_CLASS, LEGEND_MARK_CLASS, AXIS_FILTER_CLASS, ROW_IDX_ATTR, LIFT_SELECTED_CLASS, CONTROL_CLASS, NO_ROW_MARKS_ATTR, NOTE_STYLE_ATTR, SELECTION_RULE_ATTR, SELECTION_RULE_CLICKED_MARKS, MARK_KEY_ATTR, CONTAINER_SLOT_CLICKED_MARKS, SNAPSHOT_SVG_ATTR, XFILTER_REFRESH_EVENT, CONTAINER_SLOT_ANIM_STOP, CONTAINER_SLOT_XF_CLEAR, CONTAINER_SLOT_INITIAL_XF_MARK, CONTAINER_SLOT_UI_STATE, CONTAINER_SLOT_SCROLL, VIEW_ONLY_UI_STATE_KEYS, withoutViewOnlyKeys, HOST_CONTAINER_CLASS, SELECTION_ACTIVE_CLASS, MARK_SELECTED_CLASS, ACTIVE_TICK_CLASS, DIM_OPACITY_VAR, DIM_OPACITY_DEFAULT, DIM_OPACITY_MIN, chartOwnsTimeline, periodTickSuppressesFeedback, ANIM_PLAY_SPEED_DEFAULT, ANIM_PLAY_SPEED_MIN, ANIM_PLAY_SPEED_MAX, ANIM_LOOP_DELAY_DEFAULT, ANIM_LOOP_DELAY_MIN, ANIM_MAX_IDEAL_FRAMES_DEFAULT, ANIM_MAX_IDEAL_FRAMES_MIN, ANIM_MAX_IDEAL_FRAMES_MAX, ANIMATION_OPTION_KEYS, COLOR_SCALE_SELF_CLAMP_PCT_DEFAULT, COLOR_SCALE_SELF_CLAMP_PCT_MIN, COLOR_SCALE_SELF_CLAMP_PCT_MAX, FLIP_MODE_DEFAULT, FLIP_INTERVAL_MIN_MS, FLIP_INTERVAL_MAX_MS, FLIP_DIRECTION_DEFAULT, APPROXIMATE_POSITIONS_DEFAULT, VALUE_AXIS_BASELINE_DEFAULT, SEASONAL_MARKERS_DEFAULT, MAX_MAP_POINTS_DEFAULT, type GeoPointPrecision, type GeoMapKind, type TimelineStyle, type FlipMode, type FlipDirection, type ApproximatePositions, type ValueAxisBaseline, type SeasonalMarkers, type ColorScaleScope, type RenderOptions, type ViewStateProvider, type ChartControlChange, type XfilterRefreshDetail, } from "./contract";
|
|
2
2
|
export { resolveOptions, type ResolveOptionsInput } from "./defaults";
|
|
3
|
+
export { hostLinkServices, type HostLinkServices, type ClipboardLike } from "./hostLinks";
|
|
4
|
+
export { tableToCsv, tableToXlsx, buildExportFile, exportFileName, sheetName as exportSheetName, excelNumberFormat, excelSerial, bytesToBase64, exportFormatsFor, exportTableService, browserSaveFile, EXPORT_FORMATS, XLSX_MIME, CSV_MIME, type ExportTable, type ExportColumn, type ExportColumnType, type ExportCell, type ExportFormat, type ExportFile, type SaveFileService, type ExportTableService, } from "./exportTable";
|
|
3
5
|
export { OPTIONS_VOCABULARY, LIVE_OPTION_KEYS, MAX_MAP_POINTS_MIN, MAX_MAP_POINTS_MAX, LIMIT_COUNT_MAX, wireLimitCount, codeReadsOption, type OptionVocabularyEntry, type OptionTiming, type OptionWire, type OptionKey, } from "./optionsVocabulary";
|
|
4
6
|
export { loadGeo, geoFromCache, registerGeo, registerGeoAsset, geoAssetFor, clearGeoCache, type GeoAssetName, } from "./geoLazy";
|
|
5
7
|
/** REPLACE the bundled city gazetteer with another packed table. Rarely needed — see the
|
|
6
8
|
* note above registerCityTable in shape-core's geoPoint.ts before using it. */
|
|
7
9
|
export declare function registerCityTable(packed: string): void;
|
|
8
|
-
export { buildRenderPayload, type RenderPayload, type GeoPointBinding } from "./payload";
|
|
10
|
+
export { buildRenderPayload, type RenderPayload, type GeoPointBinding, type GeoBinding, type GeoProvinceReport, type ProvinceJoin } from "./payload";
|
|
9
11
|
export { codeReadsDatesInLocalTime, vegaSpecReadsDatesInLocalTime } from "./dateCells";
|
|
10
12
|
export { createChartHost, compileRenderFn, stripEsmExports, requiredD3Plugins, explainRenderFailure, sessionViewStateProvider, noopViewStateProvider, assembleD3, D3_PLUGIN_PACKAGES, type ChartHost, type ChartHostConfig, type RenderFn, type SelectionPaintReport } from "./host";
|
|
11
13
|
export { ANNOTATION_CLASS, ANNOTATION_LAYER_CLASS, type MarkAnnotation, type AnnotationReport } from "./annotations";
|
|
@@ -21,6 +23,7 @@ export { captureSvgSnapshot, svgToDataUrl, svgNaturalSize, rasterizeSvgToPngData
|
|
|
21
23
|
export { shouldReview, buildReviewWire, bareBase64, actionFor, type ReviewGate, type ReviewWire, type ReviewVerdict, type ReviewAction } from "./review";
|
|
22
24
|
export { askApplyImprovements, type ReviewDialogOptions, type ReviewDialogText } from "./reviewDialog";
|
|
23
25
|
export { mountProductFeedbackBox, normaliseProductFeedbackText, productFeedbackSendable, buildProductFeedbackPayload, PRODUCT_FEEDBACK_MAX_CHARS, PRODUCT_FEEDBACK_MIN_CHARS, type ProductFeedbackBox, type ProductFeedbackBoxOptions, type ProductFeedbackText, type ProductFeedbackSendResult, type ProductFeedbackPayload, type ProductFeedbackIdentity, type ProductFeedbackHost, } from "./productFeedback";
|
|
26
|
+
export { mountShareRateLine, shareRateLineModel, type ShareRateLine, type ShareRateLineOptions, type ShareRateText, type ShareRateModel, type ShareLink, type ShareAskWire, type ShareTargetWire, } from "./shareRate";
|
|
24
27
|
export { qualifyGroupHeadingFor, newQualifyGroupState, type QualifyGroupRow, type QualifyGroupState, type QualifyGroupHeading, orderRefusalsForDisplay, refusalIsSelectable, hasRefusalsToShow, qualifyRefusalHeadingFor, newQualifyRefusalGroupState, qualifyRefusalReason, QUALIFY_REFUSAL_UNSPECIFIED, refusalIsTileBound, QUALIFY_TILE_REFUSAL_CODES, QUALIFY_TOO_SMALL_HEADING, type QualifyRefusalRow, type QualifyRefusalGroupState, type QualifyRefusalHeading, } from "./qualifyGroups";
|
|
25
28
|
export { qualifyPick, qualifyAuto, qualifyCancel, launchGenerates, launchFavorStyle, chooserFitsViewport, shouldOpenChooserOnGenerate, shouldOpenInlineChooserOnGenerate, canConfirmLaunch, confirmLaunch, qualifyFailureFallsOpen, CHOOSER_MIN_WIDTH_PX, CHOOSER_MIN_HEIGHT_PX, type QualifyLaunchOutcome, type ChooserGateInput, } from "./qualifyLaunch";
|
|
26
29
|
export { normalizeFilterTerm, filterQualifyRows, readQualifyChartRow, readQualifyRefusalRow, DEFAULT_FILTER_MATCH_STYLE, filterMatchStyleOf, type FilterMatchStyle, filterFitsChooser, listNeedsFilter, qualifyFilterGate, inlineFilterGate, FILTER_MIN_TERM_CHARS, FILTER_ROW_PX, FILTER_MIN_WIDTH_PX, FILTER_MIN_HEIGHT_PX, INLINE_FILTER_MIN_ROWS, computeQualifyFilterView, qualifyFilterCountText, type QualifyFilterTier, type QualifyFilterResult, type QualifyFilterRead, type QualifyFilterGateReason, type QualifyFilterGateInput, type QualifyFilterRow, type QualifyFilterGroup, type QualifyFilterView, type QualifyFilterNoteKind, } from "./qualifyFilter";
|
|
@@ -71,6 +71,11 @@ export declare const OPTIONS_VOCABULARY: Readonly<{
|
|
|
71
71
|
* that made the chart asked for them. "on" / "off" is a reader's choice and wins either way.
|
|
72
72
|
*/
|
|
73
73
|
hoverDropLines: OptionVocabularyEntry;
|
|
74
|
+
/** A province map draws the national borders over its provinces unless this is false (a reader's "Country borders"). */
|
|
75
|
+
geoBorders: OptionVocabularyEntry;
|
|
76
|
+
/** A reader's "Derive provinces": false measures no city or coordinate rollup, so only a real province column offers
|
|
77
|
+
* a province map. It changes what the profile measures, so it travels in the shape rather than as a field. */
|
|
78
|
+
deriveProvinces: OptionVocabularyEntry;
|
|
74
79
|
levelOfDetail: OptionVocabularyEntry;
|
|
75
80
|
favorLimitTo: OptionVocabularyEntry;
|
|
76
81
|
/** 0 asks for no limit, and travels as absent (`wireLimitCount`): any value the server receives is a limit. */
|
package/dist/types/payload.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export interface GeoPointBinding {
|
|
|
9
9
|
lon?: string;
|
|
10
10
|
country?: string;
|
|
11
11
|
mapKind?: GeoMapKind;
|
|
12
|
+
region?: string | null;
|
|
12
13
|
}
|
|
13
14
|
/** What a point binding's resolution ACHIEVED, so the chart can annotate honestly rather
|
|
14
15
|
* than implying a precision it does not have. Named (rather than inlined on RenderPayload)
|
|
@@ -25,9 +26,70 @@ export interface GeoPointReport {
|
|
|
25
26
|
rolesBackfilled?: string[];
|
|
26
27
|
rolesRefused?: string[];
|
|
27
28
|
}
|
|
29
|
+
/** How a province map's rows were placed (geo binding with grain "admin1"), so the chart can say what its provinces
|
|
30
|
+
* rest on: the reader's province values, their coordinates, or their cities rolled up. */
|
|
31
|
+
export interface GeoProvinceReport {
|
|
32
|
+
/** Rows placed by each source. */
|
|
33
|
+
sources: {
|
|
34
|
+
province: number;
|
|
35
|
+
coordinates: number;
|
|
36
|
+
city: number;
|
|
37
|
+
};
|
|
38
|
+
/** Rows whose city matched more than one province: not placed, never guessed. */
|
|
39
|
+
ambiguousRows: number;
|
|
40
|
+
ambiguousExamples: string[];
|
|
41
|
+
/** Rows whose coordinates landed in no province. */
|
|
42
|
+
unplacedPoints: number;
|
|
43
|
+
}
|
|
44
|
+
/** The province join a host hands a province-map binding: shape-core's buildProvinceIsoColumn. Typed here, not imported,
|
|
45
|
+
* because the province code lives off this package's main entry (its eager budget): a host already loads shape-core to
|
|
46
|
+
* profile, so it passes the function it has rather than this bundle carrying a second copy. */
|
|
47
|
+
export type ProvinceJoin = (rows: Array<{
|
|
48
|
+
province?: unknown;
|
|
49
|
+
city?: unknown;
|
|
50
|
+
country?: unknown;
|
|
51
|
+
lat?: unknown;
|
|
52
|
+
lon?: unknown;
|
|
53
|
+
}>, opts: {
|
|
54
|
+
provinceKind?: string | null;
|
|
55
|
+
deriveProvinces?: boolean;
|
|
56
|
+
locate?: (lat: number, lon: number) => string | null;
|
|
57
|
+
}) => {
|
|
58
|
+
iso: (string | null)[];
|
|
59
|
+
source: ("province" | "coordinates" | "city" | null)[];
|
|
60
|
+
unmatched: string[];
|
|
61
|
+
matchedRows: number;
|
|
62
|
+
totalRows: number;
|
|
63
|
+
ambiguousRows: number;
|
|
64
|
+
ambiguousExamples: string[];
|
|
65
|
+
unplacedPoints: number;
|
|
66
|
+
};
|
|
67
|
+
/** A geo binding. A province map adds `grain: "admin1"`, its continent and `join`; the province value, a blank province's
|
|
68
|
+
* coordinates (through `locate`, from "@bicharts/chart-host/provinces" provinceLocator) and its city are then read in that
|
|
69
|
+
* order (the city and coordinate columns may be named in `fallback` beside the bound column), unless the reader turned
|
|
70
|
+
* deriving provinces off. A province binding without `join` builds no join column. */
|
|
71
|
+
export interface GeoBinding {
|
|
72
|
+
column: string;
|
|
73
|
+
kind: string;
|
|
74
|
+
grain?: string | null;
|
|
75
|
+
region?: string | null;
|
|
76
|
+
fallback?: {
|
|
77
|
+
city?: string | null;
|
|
78
|
+
country?: string | null;
|
|
79
|
+
lat?: string | null;
|
|
80
|
+
lon?: string | null;
|
|
81
|
+
} | null;
|
|
82
|
+
deriveProvinces?: boolean;
|
|
83
|
+
/** Places a coordinate in its province (provinceLocator over the continent's geometry). Absent: coordinates do not place. */
|
|
84
|
+
locate?: ((lat: number, lon: number) => string | null) | null;
|
|
85
|
+
/** Builds the province join (shape-core buildProvinceIsoColumn). Required for grain "admin1". */
|
|
86
|
+
join?: ProvinceJoin | null;
|
|
87
|
+
}
|
|
28
88
|
export interface RenderPayload {
|
|
29
89
|
columns: any[];
|
|
30
90
|
rows: any[][];
|
|
91
|
+
/** Present only for a province map: what placed its rows. */
|
|
92
|
+
geoProvince?: GeoProvinceReport;
|
|
31
93
|
geoUnmatched?: {
|
|
32
94
|
count: number;
|
|
33
95
|
examples: string[];
|
|
@@ -77,10 +139,7 @@ export interface RenderPayload {
|
|
|
77
139
|
}
|
|
78
140
|
export declare function buildRenderPayload(cols: Array<{
|
|
79
141
|
name: string;
|
|
80
|
-
} & Record<string, any>>, rowObjs: Array<Record<string, any>>, geo?: {
|
|
81
|
-
column: string;
|
|
82
|
-
kind: string;
|
|
83
|
-
} | null, point?: GeoPointBinding | null, destination?: GeoPointBinding | null, opts?: {
|
|
142
|
+
} & Record<string, any>>, rowObjs: Array<Record<string, any>>, geo?: GeoBinding | null, point?: GeoPointBinding | null, destination?: GeoPointBinding | null, opts?: {
|
|
84
143
|
utcDays?: boolean;
|
|
85
144
|
localWallClock?: boolean;
|
|
86
145
|
aliases?: ReadonlyArray<{
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** The continents a province map is drawn for. */
|
|
2
|
+
export declare const PROVINCE_REGIONS: readonly ["europe", "asia", "africa", "south-america", "north-america", "oceania"];
|
|
3
|
+
export type ProvinceRegion = typeof PROVINCE_REGIONS[number];
|
|
4
|
+
/** Where a continent's provinces are served, relative to the site origin. Versioned in the name, like the lookup. */
|
|
5
|
+
export declare function provinceGeoPath(region: string): string;
|
|
6
|
+
/** The geometry key a province map renders against: pass it as the host's geoKind. */
|
|
7
|
+
export declare function provinceGeoKey(region: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* The geometry key for a generation's geo fields: a province map (grain "admin1") renders against its continent's
|
|
10
|
+
* provinces, every other geo chart against its geoKind as before.
|
|
11
|
+
*/
|
|
12
|
+
export declare function geoKeyFor(res: {
|
|
13
|
+
geoKind?: string | null;
|
|
14
|
+
geoRegion?: string | null;
|
|
15
|
+
geoGrain?: string | null;
|
|
16
|
+
}): string | null;
|
|
17
|
+
/**
|
|
18
|
+
* Fetch and register a continent's provinces. Resolves the FeatureCollection once registered (immediately when it
|
|
19
|
+
* already is), undefined on a failed fetch or a body that is not one - and never throws. One fetch per continent is in
|
|
20
|
+
* flight at a time. The file is fetched from `origin` (default: the page's own) at its served path, or from `url`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function loadProvinceGeo(region: string, opts?: {
|
|
23
|
+
origin?: string;
|
|
24
|
+
url?: string;
|
|
25
|
+
fetchJson?: (url: string) => Promise<any>;
|
|
26
|
+
log?: (tag: string, data?: any) => void;
|
|
27
|
+
}): Promise<any | undefined>;
|
|
28
|
+
/** How far outside every province a point may sit and still be placed in the nearest one, in degrees (about 5 km at
|
|
29
|
+
* the equator, less toward the poles): simplification moves coastlines, and a harbour city must not fall in the sea. */
|
|
30
|
+
export declare const PROVINCE_SNAP_DEG = 0.05;
|
|
31
|
+
/**
|
|
32
|
+
* A function placing a coordinate in its province: the province that contains it, else the nearest one within
|
|
33
|
+
* PROVINCE_SNAP_DEG (east-west distance scaled to the latitude), else null. Border lines are never a province. Built once
|
|
34
|
+
* per geometry object and reused.
|
|
35
|
+
*/
|
|
36
|
+
export declare function provinceLocator(geo: any, snapDeg?: number): (lat: number, lon: number) => string | null;
|
|
37
|
+
/** Forget in-flight loads. Tests only. */
|
|
38
|
+
export declare function resetProvinceGeoForTests(): void;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { GeoBinding } from "./payload";
|
|
2
|
+
/** The profile a host measures with: shape-core's IndexedText, by the members this needs. */
|
|
3
|
+
export interface ProvinceProfile {
|
|
4
|
+
deriveProvinces?: boolean;
|
|
5
|
+
getColumnsWithStats(privacyLevel: string, locale?: string): ReadonlyArray<{
|
|
6
|
+
name?: string | null;
|
|
7
|
+
geoKind?: string | null;
|
|
8
|
+
isMeasure?: boolean | null;
|
|
9
|
+
}>;
|
|
10
|
+
invalidateStats?(): void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Before a request is profiled: hand the profile the reader's Derive Provinces setting, and when the table could carry
|
|
14
|
+
* provinces, wait (up to `timeoutMs`, default 3000) for the hosted admin-1 lookup served at `origin`. Either change
|
|
15
|
+
* re-measures the profile, which keeps its rows. Never throws; a late or failed load costs a province map, never a chart.
|
|
16
|
+
*/
|
|
17
|
+
export declare function prepareProvinceProfile(profile: ProvinceProfile | null | undefined, opts: {
|
|
18
|
+
origin: string;
|
|
19
|
+
deriveProvinces: boolean;
|
|
20
|
+
privacyLevel: string;
|
|
21
|
+
locale?: string;
|
|
22
|
+
timeoutMs?: number;
|
|
23
|
+
fetchJson?: (url: string) => Promise<any>;
|
|
24
|
+
log?: (tag: string, data?: any) => void;
|
|
25
|
+
}): Promise<void>;
|
|
26
|
+
/** The geo fields a generation names, as every host keeps them. */
|
|
27
|
+
export interface GeoFields {
|
|
28
|
+
geoColumn?: string | null;
|
|
29
|
+
geoKind?: string | null;
|
|
30
|
+
geoRegion?: string | null;
|
|
31
|
+
geoGrain?: string | null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The geo binding for a render. A province map (grain "admin1") gets the province join, a locator over `geo` (the
|
|
35
|
+
* continent's province geometry, when the host has it), the reader's Derive Provinces setting and the columns a blank
|
|
36
|
+
* province falls back to, named from the profile; every other geo chart its column + kind. Null when nothing is bound.
|
|
37
|
+
*/
|
|
38
|
+
export declare function provinceBinding(res: GeoFields, cols: ReadonlyArray<{
|
|
39
|
+
name: string;
|
|
40
|
+
geoKind?: string | null;
|
|
41
|
+
isMeasure?: boolean | null;
|
|
42
|
+
}>, opts: {
|
|
43
|
+
deriveProvinces: boolean;
|
|
44
|
+
geo?: any;
|
|
45
|
+
}): GeoBinding | null;
|
|
46
|
+
/** The geometry key a generation renders against (geoKeyFor over a host's kept fields). */
|
|
47
|
+
export declare function geoKeyOfFields(res: GeoFields): string | null;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { loadProvinceGeo, geoKeyFor, provinceLocator } from "./provinceGeo";
|
|
2
|
+
export { loadAdmin1Lookup, needsAdmin1Lookup, ADMIN1_LOOKUP_PATH } from "./admin1LookupLoader";
|
|
3
|
+
export { prepareProvinceProfile, provinceBinding, geoKeyOfFields, type ProvinceProfile, type GeoFields } from "./provinceHost";
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/** The block as the service sends it. Either casing is accepted, because the hosts' status calls serialise differently.
|
|
2
|
+
* shape-core types the same block on the status answer (GetLicenseStatusResult.shareAsk); it is restated here because
|
|
3
|
+
* this package's published declarations import nothing they do not ship, and a typecheck test holds the two equal. */
|
|
4
|
+
export interface ShareAskWire {
|
|
5
|
+
productUrl?: string;
|
|
6
|
+
ProductUrl?: string;
|
|
7
|
+
rateUrl?: string;
|
|
8
|
+
RateUrl?: string;
|
|
9
|
+
targets?: ShareTargetWire[];
|
|
10
|
+
Targets?: ShareTargetWire[];
|
|
11
|
+
}
|
|
12
|
+
export interface ShareTargetWire {
|
|
13
|
+
id?: string;
|
|
14
|
+
Id?: string;
|
|
15
|
+
label?: string;
|
|
16
|
+
Label?: string;
|
|
17
|
+
url?: string;
|
|
18
|
+
Url?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ShareLink {
|
|
21
|
+
/** Short network id ("li", "fb", "x"); a host's click counter names it. */
|
|
22
|
+
id: string;
|
|
23
|
+
label: string;
|
|
24
|
+
url: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ShareRateModel {
|
|
27
|
+
share: ShareLink[];
|
|
28
|
+
/** The listing to rate; null when the block had none worth drawing. */
|
|
29
|
+
rateUrl: string | null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The links to draw for a service block, or null to draw nothing. Absent block, nothing https, or nothing usable: null.
|
|
33
|
+
* A target whose URL is not https, whose id is malformed or repeated, or which has no label is dropped; the order the
|
|
34
|
+
* service sent is kept.
|
|
35
|
+
*/
|
|
36
|
+
export declare function shareRateLineModel(ask: ShareAskWire | null | undefined): ShareRateModel | null;
|
|
37
|
+
/** The words a reader sees. Hosts localize; every field has an English default. Network names come from the service. */
|
|
38
|
+
export interface ShareRateText {
|
|
39
|
+
/** Before the network links: "Like it? Share it on". */
|
|
40
|
+
lead?: string;
|
|
41
|
+
/** Between the network links. */
|
|
42
|
+
separator?: string;
|
|
43
|
+
/** Between the share links and the rate link: ", or". */
|
|
44
|
+
or?: string;
|
|
45
|
+
/** The rate link after share links: "rate it on AppSource". */
|
|
46
|
+
rate?: string;
|
|
47
|
+
/** The rate link when there is nothing to share: "Like it? Rate it on AppSource". */
|
|
48
|
+
rateAlone?: string;
|
|
49
|
+
/** After the links: "Your ratings and feedback encourage us to do more." */
|
|
50
|
+
note?: string;
|
|
51
|
+
/** Menu layout, first: "Thanks for rating it." */
|
|
52
|
+
thanks?: string;
|
|
53
|
+
/** Menu layout, the rate link: "Rate it on AppSource too". */
|
|
54
|
+
rateToo?: string;
|
|
55
|
+
/** Menu layout, the toggle that reveals the networks: "Share it". */
|
|
56
|
+
shareMenu?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface ShareRateLineOptions {
|
|
59
|
+
/** The service's block, as it arrived. Nothing is drawn when it yields no links. */
|
|
60
|
+
ask: ShareAskWire | null | undefined;
|
|
61
|
+
/** Opens a URL through the host's own door. The line never navigates by itself. */
|
|
62
|
+
open: (url: string) => void;
|
|
63
|
+
text?: ShareRateText;
|
|
64
|
+
/** Added to the wrapper so the host can skin it. */
|
|
65
|
+
className?: string;
|
|
66
|
+
/** "inline" (the landing line: the networks named in the sentence) or "menu" (after a vote: a short thank-you, the
|
|
67
|
+
* rate link, and a "Share it" toggle that reveals the networks). The links, their order and the click contract are
|
|
68
|
+
* the same either way. */
|
|
69
|
+
layout?: "inline" | "menu";
|
|
70
|
+
/** Menu layout: the "Share it" toggle opened the networks. */
|
|
71
|
+
onMenu?: () => void;
|
|
72
|
+
/** Called once, when the line is mounted - the host's "shown" counter. A host that folds the line away counts it
|
|
73
|
+
* itself instead and passes nothing here. */
|
|
74
|
+
onShown?: () => void;
|
|
75
|
+
/** A network link was clicked. */
|
|
76
|
+
onShare?: (id: string) => void;
|
|
77
|
+
/** The rate link was clicked. */
|
|
78
|
+
onRate?: () => void;
|
|
79
|
+
}
|
|
80
|
+
export interface ShareRateLine {
|
|
81
|
+
element: HTMLElement;
|
|
82
|
+
destroy(): void;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Draw the line inside `container`, or return null (and draw nothing) when the block yields no links. The wrapper carries
|
|
86
|
+
* `bic-share-rate`; network links `bic-share-rate-share` with `data-target`; the rate link `bic-share-rate-rate`; the
|
|
87
|
+
* note `bic-share-rate-note`. Every link carries its real href (so it reads as a link, and a reader can copy it), but a
|
|
88
|
+
* click is cancelled and handed to `open`.
|
|
89
|
+
*/
|
|
90
|
+
export declare function mountShareRateLine(container: HTMLElement, opts: ShareRateLineOptions): ShareRateLine | null;
|
package/dist/zoom-memory.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*! @bicharts/chart-host — Apache-2.0. Bundled reference data: GeoNames (https://www.geonames.org/) CC BY 4.0; Natural Earth and US Census/TIGER (public domain). Full text: NOTICE in this package. */
|
|
2
2
|
import {
|
|
3
3
|
K
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SYUJ4TPX.mjs";
|
|
5
5
|
import "./chunk-GHODWOAL.mjs";
|
|
6
6
|
|
|
7
7
|
// src/zoomMemory/zoomMemory.ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bicharts/chart-host",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.105",
|
|
4
4
|
"description": "Run a BIC-generated D3 chart in any web host: compiles the generated render() function, applies the shared option defaults, resolves mark clicks (through tooltip overlays), owns the selection affordance, and translates row indices between cross-filtered charts. The same contract the BIC Power BI visual implements, minus Power BI. React bindings at @bicharts/chart-host/react.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -64,6 +64,11 @@
|
|
|
64
64
|
"import": "./dist/legend-fit.mjs",
|
|
65
65
|
"default": "./dist/legend-fit.mjs"
|
|
66
66
|
},
|
|
67
|
+
"./provinces": {
|
|
68
|
+
"types": "./dist/types/provinces.d.ts",
|
|
69
|
+
"import": "./dist/provinces.mjs",
|
|
70
|
+
"default": "./dist/provinces.mjs"
|
|
71
|
+
},
|
|
67
72
|
"./zoom-memory": {
|
|
68
73
|
"types": "./dist/types/zoomMemory/index.d.ts",
|
|
69
74
|
"import": "./dist/zoom-memory.mjs",
|