@bicharts/chart-host 0.6.108 → 0.6.110
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-ABGDJ3NJ.mjs → chunk-3JCWTEEH.mjs} +11 -1
- package/dist/{chunk-MO2GR56D.mjs → chunk-5VQ3IQF7.mjs} +426 -20
- package/dist/{chunk-OSREEGBN.mjs → chunk-7XT5OJ6M.mjs} +1 -1
- package/dist/{chunk-UKXGOQMS.mjs → chunk-AEO5SFEQ.mjs} +1 -1
- package/dist/{chunk-JU2PQ22J.mjs → chunk-FT75ONSB.mjs} +17 -1
- package/dist/{chunk-ESBH2L6E.mjs → chunk-IL5M7K6Z.mjs} +2 -2
- package/dist/{chunk-LGWTV5PB.mjs → chunk-KGVNZR23.mjs} +1 -1
- package/dist/{chunk-PHUUFCJY.mjs → chunk-KY4FI2HA.mjs} +3 -1
- package/dist/{chunk-SYUJ4TPX.mjs → chunk-NJWR3DFK.mjs} +133 -132
- package/dist/{chunk-FCLPMC6Q.mjs → chunk-PELRAFYZ.mjs} +1 -1
- package/dist/{chunk-MU4BWWO6.mjs → chunk-Q43WOKSV.mjs} +1 -1
- package/dist/{chunk-5WTQN5DL.mjs → chunk-S564YXNE.mjs} +1 -1
- package/dist/geo-world.mjs +1 -1
- package/dist/geo.mjs +1 -1
- package/dist/{geoWorld110m.generated-TD2TA7S7.mjs → geoWorld110m-3PRV3V4G.mjs} +1 -1
- package/dist/index.mjs +32 -12
- package/dist/legend-fit.mjs +3 -3
- package/dist/page.mjs +6 -4
- package/dist/provinces.mjs +2 -2
- package/dist/react.mjs +38 -12
- package/dist/testing.mjs +1 -1
- package/dist/types/annotations.d.ts +3 -1
- package/dist/types/contract.d.ts +19 -1
- package/dist/types/defaults.d.ts +2 -1
- package/dist/types/filterScope.d.ts +8 -0
- package/dist/types/focusKeep.d.ts +12 -0
- package/dist/types/geo-world.d.ts +1 -1
- package/dist/types/geoWorld110m.d.ts +1 -0
- package/dist/types/host.d.ts +10 -0
- package/dist/types/index.d.ts +4 -2
- package/dist/types/keyboardMarks.d.ts +44 -0
- package/dist/types/page.d.ts +1 -1
- package/dist/types/react.d.ts +10 -1
- package/dist/zoom-memory.mjs +1 -1
- package/package.json +1 -1
|
@@ -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
|
SNAPSHOT_SVG_ATTR
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-KY4FI2HA.mjs";
|
|
5
5
|
|
|
6
6
|
// src/snapshot.ts
|
|
7
7
|
var DEFAULT_TIMEOUT_MS = 2e3;
|
|
@@ -59,7 +59,7 @@ async function loadGeo(geoKind) {
|
|
|
59
59
|
} else if (asset === "us-zip3") {
|
|
60
60
|
byAsset.set(asset, (await import("./geoUsZip3.generated-VSWL7D6F.mjs")).US_ZIP3);
|
|
61
61
|
} else {
|
|
62
|
-
byAsset.set(asset, (await import("./geoWorld110m
|
|
62
|
+
byAsset.set(asset, (await import("./geoWorld110m-3PRV3V4G.mjs")).WORLD_110M);
|
|
63
63
|
}
|
|
64
64
|
return fromAssets(key);
|
|
65
65
|
}
|
package/dist/geo-world.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
|
WORLD_110M
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-3JCWTEEH.mjs";
|
|
5
5
|
import "./chunk-GHODWOAL.mjs";
|
|
6
6
|
export {
|
|
7
7
|
WORLD_110M
|
package/dist/geo.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
|
WORLD_110M
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-3JCWTEEH.mjs";
|
|
5
5
|
import "./chunk-GHODWOAL.mjs";
|
|
6
6
|
export {
|
|
7
7
|
WORLD_110M
|
package/dist/index.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
formatSourceDateFor,
|
|
6
6
|
isExcelDateFormat,
|
|
7
7
|
normaliseAggregation
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-Q43WOKSV.mjs";
|
|
9
9
|
import {
|
|
10
10
|
captureSvgSnapshot,
|
|
11
11
|
chartSvgOf,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
svgNaturalSize,
|
|
16
16
|
svgToDataUrl,
|
|
17
17
|
tableHostOf
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-PELRAFYZ.mjs";
|
|
19
19
|
import {
|
|
20
20
|
ANNOTATION_CLASS,
|
|
21
21
|
ANNOTATION_LAYER_CLASS,
|
|
@@ -29,6 +29,8 @@ import {
|
|
|
29
29
|
DARK_TEXT,
|
|
30
30
|
EXPORT_FORMATS,
|
|
31
31
|
GLYPH_SAMPLE_N,
|
|
32
|
+
KEYBOARD_CLASS,
|
|
33
|
+
KEYBOARD_STAMP,
|
|
32
34
|
LABEL_CONTRAST_CAP,
|
|
33
35
|
LABEL_CONTRAST_DONE_ATTR,
|
|
34
36
|
LABEL_PILL_CLASS,
|
|
@@ -47,6 +49,7 @@ import {
|
|
|
47
49
|
STRADDLE_TARGET_CONTRAST,
|
|
48
50
|
VALUE_AXIS_MIN_FIT,
|
|
49
51
|
WHITE_TEXT_BG_LUM,
|
|
52
|
+
WIRED_ATTR,
|
|
50
53
|
XLSX_MIME,
|
|
51
54
|
applyLabelContrast,
|
|
52
55
|
assembleD3,
|
|
@@ -63,8 +66,10 @@ import {
|
|
|
63
66
|
censusColourSpread,
|
|
64
67
|
censusMarks,
|
|
65
68
|
censusValuePlacement,
|
|
69
|
+
cleanFilterScope,
|
|
66
70
|
cleanHostSelection,
|
|
67
71
|
clippedTextFlag,
|
|
72
|
+
codeHasKeyboardStamp,
|
|
68
73
|
colourSpreadFlag,
|
|
69
74
|
compileRenderFn,
|
|
70
75
|
compositeOver,
|
|
@@ -80,6 +85,7 @@ import {
|
|
|
80
85
|
exportFormatsFor,
|
|
81
86
|
exportTableService,
|
|
82
87
|
glyphSampleGrid,
|
|
88
|
+
installKeyboard,
|
|
83
89
|
invalidSentinelReason,
|
|
84
90
|
isBlankRender,
|
|
85
91
|
isInvalidSentinelError,
|
|
@@ -90,9 +96,12 @@ import {
|
|
|
90
96
|
pickColorOver,
|
|
91
97
|
pillBacksGlyph,
|
|
92
98
|
relativeLuminance,
|
|
99
|
+
rememberFocus,
|
|
93
100
|
requiredD3Plugins,
|
|
94
101
|
resolveAutoColorScale,
|
|
95
102
|
resolveOptions,
|
|
103
|
+
restoreFocus,
|
|
104
|
+
rowNameOf,
|
|
96
105
|
scopeChartIds,
|
|
97
106
|
sessionViewStateProvider,
|
|
98
107
|
sheetName,
|
|
@@ -106,7 +115,7 @@ import {
|
|
|
106
115
|
toRGBA,
|
|
107
116
|
toSourceRows,
|
|
108
117
|
valuePlacementFlag
|
|
109
|
-
} from "./chunk-
|
|
118
|
+
} from "./chunk-5VQ3IQF7.mjs";
|
|
110
119
|
import {
|
|
111
120
|
LASSO_AXES_SLOT,
|
|
112
121
|
LASSO_COUNT_CLASS,
|
|
@@ -133,13 +142,13 @@ import {
|
|
|
133
142
|
lassoVerdict,
|
|
134
143
|
pointInShape,
|
|
135
144
|
registerLassoAction
|
|
136
|
-
} from "./chunk-
|
|
145
|
+
} from "./chunk-IL5M7K6Z.mjs";
|
|
137
146
|
import {
|
|
138
147
|
MIN_HIT_BAND_PX,
|
|
139
148
|
censusHitBands,
|
|
140
149
|
ensureCrossfilterHitTargets,
|
|
141
150
|
hitBandFlag
|
|
142
|
-
} from "./chunk-
|
|
151
|
+
} from "./chunk-AEO5SFEQ.mjs";
|
|
143
152
|
import {
|
|
144
153
|
CONTAINER_SLOT_PRESS_AT,
|
|
145
154
|
DRAG_NOT_CLICK_PX,
|
|
@@ -164,7 +173,7 @@ import {
|
|
|
164
173
|
selectionRuleOf,
|
|
165
174
|
trackPress,
|
|
166
175
|
validRowSet
|
|
167
|
-
} from "./chunk-
|
|
176
|
+
} from "./chunk-KGVNZR23.mjs";
|
|
168
177
|
import {
|
|
169
178
|
AXIS_PIN_BAND_PAD_PX,
|
|
170
179
|
AXIS_PIN_MAX_BAND_FRACTION,
|
|
@@ -193,7 +202,7 @@ import {
|
|
|
193
202
|
svgInkReach,
|
|
194
203
|
takeScroll,
|
|
195
204
|
unpinScrolledAxis
|
|
196
|
-
} from "./chunk-
|
|
205
|
+
} from "./chunk-7XT5OJ6M.mjs";
|
|
197
206
|
import {
|
|
198
207
|
clearGeoCache,
|
|
199
208
|
geoAssetFor,
|
|
@@ -201,12 +210,12 @@ import {
|
|
|
201
210
|
loadGeo,
|
|
202
211
|
registerGeo,
|
|
203
212
|
registerGeoAsset
|
|
204
|
-
} from "./chunk-
|
|
213
|
+
} from "./chunk-S564YXNE.mjs";
|
|
205
214
|
import {
|
|
206
|
-
|
|
215
|
+
Ot,
|
|
207
216
|
l,
|
|
208
217
|
o
|
|
209
|
-
} from "./chunk-
|
|
218
|
+
} from "./chunk-NJWR3DFK.mjs";
|
|
210
219
|
import "./chunk-A2GMXZP7.mjs";
|
|
211
220
|
import {
|
|
212
221
|
ACTIVE_TICK_CLASS,
|
|
@@ -244,6 +253,7 @@ import {
|
|
|
244
253
|
HOST_CONTRACT_VERSION,
|
|
245
254
|
LEGEND_MARK_CLASS,
|
|
246
255
|
LIFT_SELECTED_CLASS,
|
|
256
|
+
MARKS_INERT_CLASS,
|
|
247
257
|
MARK_CLASS,
|
|
248
258
|
MARK_KEY_ATTR,
|
|
249
259
|
MARK_SELECTED_CLASS,
|
|
@@ -262,7 +272,7 @@ import {
|
|
|
262
272
|
chartOwnsTimeline,
|
|
263
273
|
periodTickSuppressesFeedback,
|
|
264
274
|
withoutViewOnlyKeys
|
|
265
|
-
} from "./chunk-
|
|
275
|
+
} from "./chunk-KY4FI2HA.mjs";
|
|
266
276
|
import "./chunk-GHODWOAL.mjs";
|
|
267
277
|
|
|
268
278
|
// src/hostLinks.ts
|
|
@@ -2299,7 +2309,7 @@ function fingerprintComponentDigest(components) {
|
|
|
2299
2309
|
|
|
2300
2310
|
// src/index.ts
|
|
2301
2311
|
function registerCityTable(packed) {
|
|
2302
|
-
|
|
2312
|
+
Ot(packed);
|
|
2303
2313
|
}
|
|
2304
2314
|
export {
|
|
2305
2315
|
ACTIVE_TICK_CLASS,
|
|
@@ -2368,6 +2378,9 @@ export {
|
|
|
2368
2378
|
HOST_CONTAINER_CLASS,
|
|
2369
2379
|
HOST_CONTRACT_VERSION,
|
|
2370
2380
|
INLINE_FILTER_MIN_ROWS,
|
|
2381
|
+
KEYBOARD_CLASS,
|
|
2382
|
+
KEYBOARD_STAMP,
|
|
2383
|
+
WIRED_ATTR as KEYBOARD_WIRED_ATTR,
|
|
2371
2384
|
LABEL_CONTRAST_CAP,
|
|
2372
2385
|
LABEL_CONTRAST_DONE_ATTR,
|
|
2373
2386
|
LABEL_PILL_CLASS,
|
|
@@ -2394,6 +2407,7 @@ export {
|
|
|
2394
2407
|
LIGHT_TEXT,
|
|
2395
2408
|
LIMIT_COUNT_MAX,
|
|
2396
2409
|
LIVE_OPTION_KEYS,
|
|
2410
|
+
MARKS_INERT_CLASS,
|
|
2397
2411
|
MARK_CLASS,
|
|
2398
2412
|
MARK_KEY_ATTR,
|
|
2399
2413
|
MARK_SELECTED_CLASS,
|
|
@@ -2480,6 +2494,7 @@ export {
|
|
|
2480
2494
|
chartOwnsTimeline,
|
|
2481
2495
|
chartSvgOf,
|
|
2482
2496
|
chooserFitsViewport,
|
|
2497
|
+
cleanFilterScope,
|
|
2483
2498
|
cleanHostSelection,
|
|
2484
2499
|
clearGeoCache,
|
|
2485
2500
|
clearLasso,
|
|
@@ -2487,6 +2502,7 @@ export {
|
|
|
2487
2502
|
clearSelectionGlyphs,
|
|
2488
2503
|
clickWasDrag,
|
|
2489
2504
|
clippedTextFlag,
|
|
2505
|
+
codeHasKeyboardStamp,
|
|
2490
2506
|
codeReadsDatesInLocalTime,
|
|
2491
2507
|
codeReadsOption,
|
|
2492
2508
|
collectD3GlyphCenters,
|
|
@@ -2537,6 +2553,7 @@ export {
|
|
|
2537
2553
|
htmlNaturalSize,
|
|
2538
2554
|
htmlToSvgDataUrl,
|
|
2539
2555
|
inlineFilterGate,
|
|
2556
|
+
installKeyboard,
|
|
2540
2557
|
installLasso,
|
|
2541
2558
|
invalidSentinelReason,
|
|
2542
2559
|
isBlankRender,
|
|
@@ -2630,11 +2647,14 @@ export {
|
|
|
2630
2647
|
registerGeoAsset,
|
|
2631
2648
|
registerLassoAction,
|
|
2632
2649
|
relativeLuminance,
|
|
2650
|
+
rememberFocus,
|
|
2633
2651
|
rememberScroll,
|
|
2634
2652
|
requiredD3Plugins,
|
|
2635
2653
|
resolveAutoColorScale,
|
|
2636
2654
|
resolveOptions,
|
|
2655
|
+
restoreFocus,
|
|
2637
2656
|
rowIdxsFromMark,
|
|
2657
|
+
rowNameOf,
|
|
2638
2658
|
sameMarker,
|
|
2639
2659
|
sameRowSet,
|
|
2640
2660
|
scopeChartIds,
|
package/dist/legend-fit.mjs
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
import {
|
|
3
3
|
chartSvgOf,
|
|
4
4
|
tableHostOf
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-PELRAFYZ.mjs";
|
|
6
6
|
import {
|
|
7
7
|
FIT_CONTENT_SELECTOR,
|
|
8
8
|
ctmScaleOf,
|
|
9
9
|
isPhantomBox
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-7XT5OJ6M.mjs";
|
|
11
|
+
import "./chunk-KY4FI2HA.mjs";
|
|
12
12
|
import "./chunk-GHODWOAL.mjs";
|
|
13
13
|
|
|
14
14
|
// src/legendFit/legendReconcile.ts
|
package/dist/page.mjs
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
createControls,
|
|
8
8
|
createFilter,
|
|
9
9
|
createFilterScope,
|
|
10
|
+
filterScopeOf,
|
|
10
11
|
fromVegaInteraction,
|
|
11
12
|
noteBadges,
|
|
12
13
|
notesFor,
|
|
@@ -14,10 +15,10 @@ import {
|
|
|
14
15
|
readControls,
|
|
15
16
|
viewFromToken,
|
|
16
17
|
viewToken
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-FT75ONSB.mjs";
|
|
19
|
+
import "./chunk-IL5M7K6Z.mjs";
|
|
20
|
+
import "./chunk-KGVNZR23.mjs";
|
|
21
|
+
import "./chunk-KY4FI2HA.mjs";
|
|
21
22
|
import "./chunk-GHODWOAL.mjs";
|
|
22
23
|
export {
|
|
23
24
|
LINKED_HOVER_CLASS,
|
|
@@ -27,6 +28,7 @@ export {
|
|
|
27
28
|
createControls,
|
|
28
29
|
createFilter,
|
|
29
30
|
createFilterScope,
|
|
31
|
+
filterScopeOf,
|
|
30
32
|
fromVegaInteraction,
|
|
31
33
|
noteBadges,
|
|
32
34
|
notesFor,
|
package/dist/provinces.mjs
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import {
|
|
3
3
|
geoFromCache,
|
|
4
4
|
registerGeo
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-S564YXNE.mjs";
|
|
6
6
|
import {
|
|
7
7
|
Si,
|
|
8
8
|
W,
|
|
9
9
|
bt
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-NJWR3DFK.mjs";
|
|
11
11
|
import "./chunk-A2GMXZP7.mjs";
|
|
12
12
|
import "./chunk-GHODWOAL.mjs";
|
|
13
13
|
|
package/dist/react.mjs
CHANGED
|
@@ -7,35 +7,36 @@ import {
|
|
|
7
7
|
createControls,
|
|
8
8
|
createFilter,
|
|
9
9
|
createFilterScope,
|
|
10
|
+
filterScopeOf,
|
|
10
11
|
fromVegaInteraction,
|
|
11
12
|
noteBadges,
|
|
12
13
|
notesFor,
|
|
13
14
|
payloadRowReader,
|
|
14
15
|
viewFromToken,
|
|
15
16
|
viewToken
|
|
16
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-FT75ONSB.mjs";
|
|
17
18
|
import {
|
|
18
19
|
assembleD3,
|
|
19
20
|
createChartGroup,
|
|
20
21
|
createChartHost,
|
|
21
22
|
syncMemberSelection,
|
|
22
23
|
toSourceRows
|
|
23
|
-
} from "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
24
|
+
} from "./chunk-5VQ3IQF7.mjs";
|
|
25
|
+
import "./chunk-IL5M7K6Z.mjs";
|
|
26
|
+
import "./chunk-AEO5SFEQ.mjs";
|
|
27
|
+
import "./chunk-KGVNZR23.mjs";
|
|
28
|
+
import "./chunk-7XT5OJ6M.mjs";
|
|
28
29
|
import {
|
|
29
30
|
geoFromCache,
|
|
30
31
|
loadGeo
|
|
31
|
-
} from "./chunk-
|
|
32
|
-
import "./chunk-
|
|
32
|
+
} from "./chunk-S564YXNE.mjs";
|
|
33
|
+
import "./chunk-NJWR3DFK.mjs";
|
|
33
34
|
import "./chunk-A2GMXZP7.mjs";
|
|
34
|
-
import "./chunk-
|
|
35
|
+
import "./chunk-KY4FI2HA.mjs";
|
|
35
36
|
import "./chunk-GHODWOAL.mjs";
|
|
36
37
|
|
|
37
38
|
// src/react.tsx
|
|
38
|
-
import { createContext, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
39
|
+
import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
39
40
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
40
41
|
var Ctx = createContext(null);
|
|
41
42
|
function useBicSelection() {
|
|
@@ -65,7 +66,7 @@ function BicChart(props) {
|
|
|
65
66
|
const {
|
|
66
67
|
code,
|
|
67
68
|
renderFn,
|
|
68
|
-
options,
|
|
69
|
+
options: pageOptions,
|
|
69
70
|
d3,
|
|
70
71
|
geoKind,
|
|
71
72
|
viewState,
|
|
@@ -85,9 +86,29 @@ function BicChart(props) {
|
|
|
85
86
|
className,
|
|
86
87
|
style,
|
|
87
88
|
selects,
|
|
89
|
+
scopedBy,
|
|
88
90
|
controls,
|
|
89
91
|
ariaLabel
|
|
90
92
|
} = props;
|
|
93
|
+
const scopeList = scopedBy == null ? [] : Array.isArray(scopedBy) ? scopedBy : [scopedBy];
|
|
94
|
+
const scopeIds = scopeList.map((f) => f?.id).join("");
|
|
95
|
+
const subscribeScope = useCallback((cb) => {
|
|
96
|
+
const offs = scopeList.map((f) => f?.onChange?.(() => cb()));
|
|
97
|
+
return () => {
|
|
98
|
+
for (const off of offs) off?.();
|
|
99
|
+
};
|
|
100
|
+
}, [scopeIds]);
|
|
101
|
+
const scopeSnapshot = () => scopeList.map((f) => f?.version).join(",");
|
|
102
|
+
useSyncExternalStore(subscribeScope, scopeSnapshot, scopeSnapshot);
|
|
103
|
+
const [scopeEver, setScopeEver] = useState(scopedBy !== void 0);
|
|
104
|
+
if (scopedBy !== void 0 && !scopeEver) setScopeEver(true);
|
|
105
|
+
const scopeFact = scopedBy === void 0 ? void 0 : filterScopeOf(scopeList);
|
|
106
|
+
const scopeKey = scopeFact ? JSON.stringify(scopeFact) : "";
|
|
107
|
+
const options = useMemo(
|
|
108
|
+
() => scopeEver ? { ...pageOptions ?? {}, filterScope: scopeFact ?? pageOptions?.filterScope } : pageOptions,
|
|
109
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
110
|
+
[pageOptions, scopeEver, scopeKey]
|
|
111
|
+
);
|
|
91
112
|
const ref = useRef(null);
|
|
92
113
|
const hostRef = useRef(null);
|
|
93
114
|
const rowMapRef = useRef(null);
|
|
@@ -185,7 +206,11 @@ function BicChart(props) {
|
|
|
185
206
|
// siblings of a chart that has an id in a group. This binding always
|
|
186
207
|
// subscribes to the selection (for onSelect), so the host cannot count
|
|
187
208
|
// subscribers here; an onSelect callback alone is not the page's filter.
|
|
188
|
-
selectionReachesPage: () => !!reachRef.current.selects || !!(reachRef.current.group && reachRef.current.id)
|
|
209
|
+
selectionReachesPage: () => !!reachRef.current.selects || !!(reachRef.current.group && reachRef.current.id),
|
|
210
|
+
// Whether a click on a mark does anything at all: the same two,
|
|
211
|
+
// or an onSelect the page passed. A chart with none of them draws its marks
|
|
212
|
+
// inert rather than dimming the others for a click that filters nothing.
|
|
213
|
+
marksSelect: () => !!reachRef.current.selects || !!(reachRef.current.group && reachRef.current.id) || typeof onSelectRef.current === "function"
|
|
189
214
|
});
|
|
190
215
|
hostRef.current = host;
|
|
191
216
|
builtAnnKeyRef.current = annKey;
|
|
@@ -499,6 +524,7 @@ export {
|
|
|
499
524
|
createControls,
|
|
500
525
|
createFilter,
|
|
501
526
|
createFilterScope,
|
|
527
|
+
filterScopeOf,
|
|
502
528
|
fromVegaInteraction,
|
|
503
529
|
noteBadges,
|
|
504
530
|
notesFor,
|
package/dist/testing.mjs
CHANGED
|
@@ -40,4 +40,6 @@ export interface AnnotationLayer {
|
|
|
40
40
|
readonly report: AnnotationReport;
|
|
41
41
|
destroy(): void;
|
|
42
42
|
}
|
|
43
|
-
export declare function createAnnotationLayer(container: HTMLElement, onClick?: (a: MarkAnnotation) => void
|
|
43
|
+
export declare function createAnnotationLayer(container: HTMLElement, onClick?: (a: MarkAnnotation) => void, opts?: {
|
|
44
|
+
keyboard?: () => boolean;
|
|
45
|
+
}): AnnotationLayer;
|
package/dist/types/contract.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ExportFormat, ExportTableService, SaveFileService } from "./exportTable";
|
|
2
|
-
export declare const HOST_CONTRACT_VERSION = "1.
|
|
2
|
+
export declare const HOST_CONTRACT_VERSION = "1.23.0";
|
|
3
3
|
export type GeoPointPrecision = "latlon" | "city" | "zip3" | "state" | "country";
|
|
4
4
|
/** Every valid tier, ordered most precise → coarsest. Runtime form of GeoPointPrecision. */
|
|
5
5
|
export declare const GEO_POINT_PRECISIONS: readonly GeoPointPrecision[];
|
|
@@ -51,6 +51,18 @@ export interface HostSelectionFact {
|
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
export declare const CONTAINER_SLOT_HOST_SELECTION = "__lchHostSelection";
|
|
54
|
+
/**
|
|
55
|
+
* THE PAGE FILTER THAT NARROWED THIS CHART'S ROWS BEFORE THEY ARRIVED (1.23.0), as RenderOptions.filterScope. Untrusted
|
|
56
|
+
* on the chart side like every option: resolveOptions keeps values to non-blank text, each once.
|
|
57
|
+
*/
|
|
58
|
+
export interface FilterScopeFact {
|
|
59
|
+
/** The field the filter is on, as the reader knows it ("Country"); "" when the host can't name it. */
|
|
60
|
+
field: string;
|
|
61
|
+
/** The values it keeps, as the reader reads them ("United States"); never empty. */
|
|
62
|
+
values: string[];
|
|
63
|
+
/** The host's own phrase for the whole filter ("the two neighbours"), used instead of one made from the values. */
|
|
64
|
+
label?: string;
|
|
65
|
+
}
|
|
54
66
|
export declare const CONTAINER_SLOT_ANIM_STOP = "__llmAnimStop";
|
|
55
67
|
export declare const CONTAINER_SLOT_XF_CLEAR = "__llmXfClear";
|
|
56
68
|
export declare const CONTAINER_SLOT_INITIAL_XF_MARK = "__llmInitialXfMark";
|
|
@@ -90,6 +102,7 @@ export interface ViewStateProvider {
|
|
|
90
102
|
export declare const HOST_CONTAINER_CLASS = "bic-chart-host";
|
|
91
103
|
export declare const SELECTION_ACTIVE_CLASS = "lch-has-selection";
|
|
92
104
|
export declare const MARK_SELECTED_CLASS = "lch-mark-selected";
|
|
105
|
+
export declare const MARKS_INERT_CLASS = "lch-marks-inert";
|
|
93
106
|
export declare const ACTIVE_TICK_CLASS = "lch-tick-active";
|
|
94
107
|
export declare const DIM_OPACITY_VAR = "--lch-dim-opacity";
|
|
95
108
|
export declare const DIM_OPACITY_DEFAULT = 0.25;
|
|
@@ -148,6 +161,7 @@ export interface RenderOptions {
|
|
|
148
161
|
rowsWithheld?: number;
|
|
149
162
|
rowsFilteredOut?: number;
|
|
150
163
|
hostSelection?: HostSelectionFact;
|
|
164
|
+
filterScope?: FilterScopeFact;
|
|
151
165
|
openUrl?: (url: string) => void;
|
|
152
166
|
copyText?: (text: string) => boolean | void | Promise<boolean | void>;
|
|
153
167
|
saveFile?: SaveFileService;
|
|
@@ -196,6 +210,10 @@ export interface RenderOptions {
|
|
|
196
210
|
selectionGlyph?: "none" | "dot" | "check";
|
|
197
211
|
/** A host FACT from the generate answer: this chart's family never takes a selection glyph. */
|
|
198
212
|
suppressSelectionGlyph?: boolean;
|
|
213
|
+
/** A host FACT: this chart works from the keyboard (its code carries the keyboard stamp), so the host has made its
|
|
214
|
+
* selectable marks focusable. A chart or helper drawing its own controls (a flip arrow, a sort header) gives them
|
|
215
|
+
* a tabindex, a role and an Enter / Space press when this is true. */
|
|
216
|
+
keyboardMarks?: boolean;
|
|
199
217
|
animAutoPlay?: boolean;
|
|
200
218
|
animPlaySpeedMs?: number;
|
|
201
219
|
animLoopDelaySec?: number;
|
package/dist/types/defaults.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { type RenderOptions, type HostSelectionFact } from "./contract";
|
|
1
|
+
import { type RenderOptions, type HostSelectionFact, type FilterScopeFact } from "./contract";
|
|
2
2
|
export declare function cleanHostSelection(v: unknown): HostSelectionFact | undefined;
|
|
3
|
+
export declare function cleanFilterScope(v: unknown): FilterScopeFact | undefined;
|
|
3
4
|
export type ResolveOptionsInput = {
|
|
4
5
|
[K in keyof RenderOptions]?: any;
|
|
5
6
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ChartHost } from "./host";
|
|
2
2
|
import type { Controls } from "./controls";
|
|
3
|
+
import type { FilterScopeFact } from "./contract";
|
|
3
4
|
/** Why a filter changed. */
|
|
4
5
|
export type FilterChangeReason = "click" | "clear" | "page" | "data";
|
|
5
6
|
/** One selected key: a value per key column, in the filter's column order. */
|
|
@@ -118,6 +119,13 @@ export declare function viewFromToken(token: string | null | undefined): PageVie
|
|
|
118
119
|
export declare function createFilter(columns: string | readonly string[], opts?: FilterOptions): Filter;
|
|
119
120
|
/** Make a page's filter scope. */
|
|
120
121
|
export declare function createFilterScope(): FilterScope;
|
|
122
|
+
/**
|
|
123
|
+
* THE PAGE FILTERS THAT NARROWED A CHART'S ROWS, as the fact the chart is told (RenderOptions.filterScope, contract
|
|
124
|
+
* 1.23.0). For filters applied to the chart's QUERY, so its rows arrive already narrowed and it can't see the filter.
|
|
125
|
+
* Only the active ones count. The field is each one's label (its key columns when it has none), joined ", "; the values
|
|
126
|
+
* are what its chip shows for each key, in order, each once. Nothing active, nothing to say: undefined.
|
|
127
|
+
*/
|
|
128
|
+
export declare function filterScopeOf(filters: Filter | readonly Filter[] | null | undefined): FilterScopeFact | undefined;
|
|
121
129
|
export interface FilterBinding {
|
|
122
130
|
/**
|
|
123
131
|
* Call after the chart is handed new data. The selection is repainted where its keys are drawn now, and a key the new
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface FocusMemory {
|
|
2
|
+
sig: string;
|
|
3
|
+
nth: number;
|
|
4
|
+
start: number | null;
|
|
5
|
+
end: number | null;
|
|
6
|
+
dir: "forward" | "backward" | "none" | null;
|
|
7
|
+
}
|
|
8
|
+
/** The focused element inside the container and its caret, or null when focus is elsewhere (or on the container). */
|
|
9
|
+
export declare function rememberFocus(container: HTMLElement): FocusMemory | null;
|
|
10
|
+
/** Give focus back to the same element of the new draw, with its caret. Nothing when the chart already moved focus into
|
|
11
|
+
* itself, or when the new draw has no such element. Returns whether focus was restored. */
|
|
12
|
+
export declare function restoreFocus(container: HTMLElement, memory: FocusMemory | null): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { WORLD_110M } from "./geoWorld110m
|
|
1
|
+
export { WORLD_110M } from "./geoWorld110m";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const WORLD_110M: any;
|
package/dist/types/host.d.ts
CHANGED
|
@@ -280,6 +280,16 @@ export interface ChartHostConfig {
|
|
|
280
280
|
* `selects` and the group itself. Never throws through: an answer that throws counts as reached.
|
|
281
281
|
*/
|
|
282
282
|
selectionReachesPage?: () => boolean;
|
|
283
|
+
/**
|
|
284
|
+
* WHETHER A CLICK ON A MARK SELECTS ANYTHING. False: nothing listens to this chart's selection - no
|
|
285
|
+
* page filter, no group sibling, no callback - so its marks are drawn inert: no pointer cursor (over the chart's own
|
|
286
|
+
* inline one), no hover dimming of the others, and the reader's click, or a selection the chart dispatches itself,
|
|
287
|
+
* lights and dims nothing. A selection the page hands in (selection.highlight) still paints. Read at every click and
|
|
288
|
+
* every paint, so a binding added later counts at once. Absent: true, which every host but React relies on (a Power
|
|
289
|
+
* BI click always reaches its selection manager; an Excel click always opens a selection card). An answer that
|
|
290
|
+
* throws counts as true.
|
|
291
|
+
*/
|
|
292
|
+
marksSelect?: () => boolean;
|
|
283
293
|
}
|
|
284
294
|
export interface ChartHost {
|
|
285
295
|
/** Replace the notes drawn on marks (see ChartHostConfig.annotations); redraws them at once. */
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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, CONTAINER_SLOT_HOST_SELECTION, 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, type HostSelectionFact, } from "./contract";
|
|
2
|
-
export { resolveOptions, cleanHostSelection, type ResolveOptionsInput } from "./defaults";
|
|
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, CONTAINER_SLOT_HOST_SELECTION, VIEW_ONLY_UI_STATE_KEYS, withoutViewOnlyKeys, HOST_CONTAINER_CLASS, SELECTION_ACTIVE_CLASS, MARK_SELECTED_CLASS, MARKS_INERT_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, type HostSelectionFact, type FilterScopeFact, } from "./contract";
|
|
2
|
+
export { resolveOptions, cleanHostSelection, cleanFilterScope, type ResolveOptionsInput } from "./defaults";
|
|
3
3
|
export { hostLinkServices, type HostLinkServices, type ClipboardLike } from "./hostLinks";
|
|
4
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";
|
|
5
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";
|
|
@@ -11,6 +11,8 @@ export { buildRenderPayload, type RenderPayload, type GeoPointBinding, type GeoB
|
|
|
11
11
|
export { codeReadsDatesInLocalTime, vegaSpecReadsDatesInLocalTime } from "./dateCells";
|
|
12
12
|
export { createChartHost, compileRenderFn, stripEsmExports, requiredD3Plugins, explainRenderFailure, sessionViewStateProvider, noopViewStateProvider, assembleD3, D3_PLUGIN_PACKAGES, type ChartHost, type ChartHostConfig, type RenderFn, type SelectionPaintReport, type SelectionChangeMeta } from "./host";
|
|
13
13
|
export { ANNOTATION_CLASS, ANNOTATION_LAYER_CLASS, type MarkAnnotation, type AnnotationReport } from "./annotations";
|
|
14
|
+
export { KEYBOARD_STAMP, KEYBOARD_CLASS, WIRED_ATTR as KEYBOARD_WIRED_ATTR, codeHasKeyboardStamp, installKeyboard, rowNameOf, type KeyboardEnv, type KeyboardHandle } from "./keyboardMarks";
|
|
15
|
+
export { rememberFocus, restoreFocus, type FocusMemory } from "./focusKeep";
|
|
14
16
|
export type { MarkNoteLike, NoteBadgeOptions } from "./markNotes";
|
|
15
17
|
export type { Controls, ControlInfo, ControlsAttachment } from "./controls";
|
|
16
18
|
export { createChartGroup, toSourceRows, syncMemberSelection, type ChartGroup, type ChartGroupMember, type ChartGroupSelection, type ChartGroupChange, type ChartGroupMemberOptions, type ChartGroupSourceOptions, type ChartGroupPayload } from "./group";
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare const KEYBOARD_STAMP = "// bic:keyboard-marks";
|
|
2
|
+
/** Whether the code carries the keyboard stamp in its header. */
|
|
3
|
+
export declare function codeHasKeyboardStamp(code: unknown): boolean;
|
|
4
|
+
/** On the container while its chart works from the keyboard. */
|
|
5
|
+
export declare const KEYBOARD_CLASS = "lch-keyboard";
|
|
6
|
+
/** On each element the host made focusable, so it never touches one the chart made focusable itself. */
|
|
7
|
+
export declare const WIRED_ATTR = "data-lch-kb";
|
|
8
|
+
export interface KeyboardEnv {
|
|
9
|
+
container: HTMLElement;
|
|
10
|
+
/** The elements a click selects (the host's click selector). */
|
|
11
|
+
markSelector: string;
|
|
12
|
+
/** Elements pressed with Enter: the chart's declared controls and the host's badges. */
|
|
13
|
+
pressSelector: string;
|
|
14
|
+
/** Elements never to treat as marks (the host's own layers). */
|
|
15
|
+
skipSelector: string;
|
|
16
|
+
/** True while a click on a mark selects nothing (the marks are then not made focusable). */
|
|
17
|
+
inert(): boolean;
|
|
18
|
+
/** Select a mark as a click on it would. */
|
|
19
|
+
select(mark: Element, mods: {
|
|
20
|
+
ctrl: boolean;
|
|
21
|
+
shift: boolean;
|
|
22
|
+
}): void;
|
|
23
|
+
/** The reader's clear: Ctrl+Shift+C on every host (Power BI's own clear-selection key), and Escape where the host
|
|
24
|
+
* lets it (escapeClears). */
|
|
25
|
+
clear(): void;
|
|
26
|
+
/** Whether Escape clears. False for a host whose frame uses Escape to move focus out of the chart (Power BI), so
|
|
27
|
+
* leaving the chart never wipes the reader's selection there. Default true. */
|
|
28
|
+
escapeClears?: boolean;
|
|
29
|
+
isSelected(mark: Element): boolean;
|
|
30
|
+
/** What a screen reader calls a mark that names nothing itself. */
|
|
31
|
+
labelOf(mark: Element): string | null;
|
|
32
|
+
/** A stable key for a mark across redraws (its rows). */
|
|
33
|
+
keyOf(mark: Element): string;
|
|
34
|
+
}
|
|
35
|
+
export interface KeyboardHandle {
|
|
36
|
+
/** Re-apply tab stops, roles, names and pressed state after a draw or a selection change. */
|
|
37
|
+
refresh(): void;
|
|
38
|
+
destroy(): void;
|
|
39
|
+
}
|
|
40
|
+
/** What a screen reader calls a row: its first few values, numbers and dates in the reader's culture, internal columns
|
|
41
|
+
* left out. A Date is read as the reader's date, never as its String() (weekday, time and time zone); one that names
|
|
42
|
+
* no day is skipped like a blank. Text is kept as it is. Shared so every host names a mark the same way. */
|
|
43
|
+
export declare function rowNameOf(columns: ReadonlyArray<unknown>, row: ReadonlyArray<unknown> | null | undefined, culture?: string): string | null;
|
|
44
|
+
export declare function installKeyboard(env: KeyboardEnv): KeyboardHandle;
|
package/dist/types/page.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { viewToken, viewFromToken, LINKED_HOVER_CLASS, type PageView } from "./filterScope";
|
|
2
|
-
export { createFilter, createFilterScope, bindFilter, payloadRowReader, fromVegaInteraction, type Filter, type FilterScope, type FilterOptions, type FilterKey, type FilterChangeReason, type FilterBinding, type BindFilterOptions, type VegaInteractionEvent } from "./filterScope";
|
|
2
|
+
export { createFilter, createFilterScope, bindFilter, payloadRowReader, fromVegaInteraction, filterScopeOf, type Filter, type FilterScope, type FilterOptions, type FilterKey, type FilterChangeReason, type FilterBinding, type BindFilterOptions, type VegaInteractionEvent } from "./filterScope";
|
|
3
3
|
export { createControls, attachControls, readControls, type Controls, type ControlInfo, type ControlsAttachment } from "./controls";
|
|
4
4
|
export { noteBadges, badgeKey, notesFor, type MarkNoteLike, type NoteBadgeOptions } from "./markNotes";
|