@embedpdf/core-ui 3.0.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +192 -0
- package/dist/index.cjs +650 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +364 -0
- package/dist/index.d.ts +364 -0
- package/dist/index.js +630 -0
- package/dist/index.js.map +1 -0
- package/package.json +38 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
//#region src/schema.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* @embedpdf/core-ui — the structure-only schema vocabulary.
|
|
4
|
+
*
|
|
5
|
+
* The schema contains ONLY what a designer decides and the runtime cannot
|
|
6
|
+
* compute: order, grouping, importance, and each item's degradation ladder.
|
|
7
|
+
* Everything the runtime CAN compute is banned from it by construction:
|
|
8
|
+
* no breakpoints, no show/hide lists, no locale overrides, no dividers, no
|
|
9
|
+
* spacers, no hand-written overflow menus. Fit is measured and solved at
|
|
10
|
+
* runtime (see solver.ts); the overflow menu is derived (see projection.ts).
|
|
11
|
+
*/
|
|
12
|
+
/** Presentation ladder for a command button, richest first. */
|
|
13
|
+
type Variant = 'icon+label' | 'icon' | 'label';
|
|
14
|
+
/**
|
|
15
|
+
* Who yields space first. 1 = first to degrade/overflow · 3 = default ·
|
|
16
|
+
* 5 = pinned: may still degrade variants, but NEVER leaves the bar.
|
|
17
|
+
*/
|
|
18
|
+
type Importance = 1 | 2 | 3 | 4 | 5;
|
|
19
|
+
declare const PINNED: Importance;
|
|
20
|
+
interface BarItem {
|
|
21
|
+
/** The command this button runs — the only required field. */
|
|
22
|
+
readonly command: string;
|
|
23
|
+
/** Degradation ladder, richest first. Default: ['icon']. */
|
|
24
|
+
readonly variants?: readonly Variant[];
|
|
25
|
+
readonly importance?: Importance;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* An app-rendered slot (e.g. the inline zoom strip). Each named variant is
|
|
29
|
+
* measured like any command button. The ladder MUST terminate in a command
|
|
30
|
+
* (`terminal`) so the item always has a menu form when it overflows — this
|
|
31
|
+
* is what makes the overflow projection total.
|
|
32
|
+
*/
|
|
33
|
+
interface CustomItem {
|
|
34
|
+
readonly slot: string;
|
|
35
|
+
/** Named presentation variants, richest first. Default: ['default']. */
|
|
36
|
+
readonly variants?: readonly string[];
|
|
37
|
+
/** The command that stands in for this slot in menus (its last resort). */
|
|
38
|
+
readonly terminal: string;
|
|
39
|
+
readonly importance?: Importance;
|
|
40
|
+
}
|
|
41
|
+
type BarChild = BarItem | CustomItem | string;
|
|
42
|
+
interface BarGroup {
|
|
43
|
+
readonly id: string;
|
|
44
|
+
/** Titles the group's menu form (labeled submenu / section heading). */
|
|
45
|
+
readonly labelKey?: string;
|
|
46
|
+
/** Presentation hint: 'tabs' renders as a tab strip and projects as radio rows. */
|
|
47
|
+
readonly role?: 'buttons' | 'tabs';
|
|
48
|
+
/**
|
|
49
|
+
* Stage 1 of the GROUP degradation ladder: under pressure, move trailing
|
|
50
|
+
* children (rightmost first, at the CHILD's importance) into a derived
|
|
51
|
+
* group-local disclosure — a trigger rendered inside the group opening a
|
|
52
|
+
* menu of the hidden children. Never sheds the last visible child: below
|
|
53
|
+
* that floor the group `collapse`s (stage 2) or overflows whole. This is
|
|
54
|
+
* v2's `overflow-tabs-button`, computed instead of authored.
|
|
55
|
+
*/
|
|
56
|
+
readonly shed?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Stage 2: what the WHOLE group degrades to once its children have
|
|
59
|
+
* exhausted their ladders (and shedding, if enabled, has hit its floor): a
|
|
60
|
+
* single menu button or a select-style picker. Groups with neither `shed`
|
|
61
|
+
* nor `collapse` send children to the global overflow menu one by one.
|
|
62
|
+
*/
|
|
63
|
+
readonly collapse?: 'menu' | 'select';
|
|
64
|
+
readonly importance?: Importance;
|
|
65
|
+
readonly items: readonly BarChild[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Alignment regions. Separators derive between adjacent visible groups
|
|
69
|
+
* within a section — never across sections, never from schema data.
|
|
70
|
+
*
|
|
71
|
+
* The names are direction-aware (RTL flips start/end) and `center` is a
|
|
72
|
+
* SOFT contract: "balance this segment in the space left over by start and
|
|
73
|
+
* end". With symmetric flanks that coincides with true centering; with a
|
|
74
|
+
* heavy flank the segment drifts rather than fights — segments never
|
|
75
|
+
* overlap, matching how every toolbar convention (including v2's
|
|
76
|
+
* spacer-flanked tabs) treats its middle region. Strict geometric centering
|
|
77
|
+
* would be a solver concern (a tighter budget: 2×max(start,end)+center),
|
|
78
|
+
* deliberately not offered until a product needs it.
|
|
79
|
+
*/
|
|
80
|
+
interface BarSections {
|
|
81
|
+
readonly start?: readonly BarGroup[];
|
|
82
|
+
readonly center?: readonly BarGroup[];
|
|
83
|
+
readonly end?: readonly BarGroup[];
|
|
84
|
+
}
|
|
85
|
+
interface BarSchema {
|
|
86
|
+
readonly id: string;
|
|
87
|
+
readonly sections: BarSections;
|
|
88
|
+
}
|
|
89
|
+
/** A run of command rows; separators derive between sections. */
|
|
90
|
+
interface MenuSection {
|
|
91
|
+
/** Optional section heading (i18n key). */
|
|
92
|
+
readonly labelKey?: string;
|
|
93
|
+
readonly items: readonly string[];
|
|
94
|
+
}
|
|
95
|
+
interface MenuSchema {
|
|
96
|
+
readonly id: string;
|
|
97
|
+
readonly sections: readonly MenuSection[];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The shell FRAME — region arrangement and visibility. Regions are a FIXED
|
|
101
|
+
* vocabulary (each carries semantics the shell must own: the toolbar's
|
|
102
|
+
* measurement physics, the document gate, aria landmarks); what's YOURS is
|
|
103
|
+
* where they sit, whether they show, and — through the region slots — what
|
|
104
|
+
* fills them. Part of the chrome value because it is structure: owned, never
|
|
105
|
+
* merged. Free-form layout is deliberately not offered — wanting a different
|
|
106
|
+
* frame architecture is what headless is for.
|
|
107
|
+
*/
|
|
108
|
+
interface FrameSchema {
|
|
109
|
+
/** Where the main bar lives. Its mode band rides the CONTENT side (below a
|
|
110
|
+
* top bar, above a bottom bar). Default: 'top'. */
|
|
111
|
+
readonly toolbar?: 'top' | 'bottom';
|
|
112
|
+
/** Document tab strip: 'multiple' shows it only with >1 tab. A hidden
|
|
113
|
+
* region hides its SLOT too — visibility outranks slotted content.
|
|
114
|
+
* Default: 'always'. */
|
|
115
|
+
readonly tabs?: 'always' | 'multiple' | 'never';
|
|
116
|
+
/** The header row — a socket only: the chrome ships no header of its own,
|
|
117
|
+
* so it renders nothing until a `slot="header"` child fills it. `false`
|
|
118
|
+
* removes the socket, keeping a slotted header out. Default: true. */
|
|
119
|
+
readonly header?: boolean;
|
|
120
|
+
}
|
|
121
|
+
interface ChromeSchema {
|
|
122
|
+
/** Standalone bars (e.g. the main toolbar). */
|
|
123
|
+
readonly bars: Readonly<Record<string, BarSchema>>;
|
|
124
|
+
/** Secondary bars keyed by tool mode — WHICH one shows is derived from the
|
|
125
|
+
* interaction hub's active tool, never stored. */
|
|
126
|
+
readonly modeBars?: Readonly<Record<string, BarSchema>>;
|
|
127
|
+
/** Named dropdown menus referenced by commands' `menu:` targets. */
|
|
128
|
+
readonly menus?: Readonly<Record<string, MenuSchema>>;
|
|
129
|
+
/** Contextual strips (selection menus) — same BarSchema, same fit engine. */
|
|
130
|
+
readonly strips?: Readonly<Record<string, BarSchema>>;
|
|
131
|
+
/** Region arrangement & visibility. Omitted = the default frame. */
|
|
132
|
+
readonly frame?: FrameSchema;
|
|
133
|
+
}
|
|
134
|
+
declare function item(command: string, opts?: Omit<BarItem, 'command'>): BarItem;
|
|
135
|
+
declare function custom(slot: string, opts: Omit<CustomItem, 'slot'>): CustomItem;
|
|
136
|
+
declare function group(id: string, items: readonly BarChild[]): BarGroup;
|
|
137
|
+
declare function group(id: string, opts: Omit<BarGroup, 'id' | 'items'> & {
|
|
138
|
+
items?: readonly BarChild[];
|
|
139
|
+
}, items?: readonly BarChild[]): BarGroup;
|
|
140
|
+
type NormalizedUnit = {
|
|
141
|
+
readonly kind: 'command';
|
|
142
|
+
/** Unique within the bar: `${groupId}:${command}`. Measurement + assignment key. */
|
|
143
|
+
readonly key: string;
|
|
144
|
+
readonly command: string;
|
|
145
|
+
readonly variants: readonly string[];
|
|
146
|
+
readonly importance: Importance;
|
|
147
|
+
} | {
|
|
148
|
+
readonly kind: 'custom';
|
|
149
|
+
readonly key: string;
|
|
150
|
+
readonly slot: string;
|
|
151
|
+
readonly variants: readonly string[];
|
|
152
|
+
readonly terminal: string;
|
|
153
|
+
readonly importance: Importance;
|
|
154
|
+
};
|
|
155
|
+
interface NormalizedGroup {
|
|
156
|
+
readonly id: string;
|
|
157
|
+
readonly labelKey?: string;
|
|
158
|
+
readonly role: 'buttons' | 'tabs';
|
|
159
|
+
readonly shed: boolean;
|
|
160
|
+
readonly collapse?: 'menu' | 'select';
|
|
161
|
+
readonly importance: Importance;
|
|
162
|
+
readonly units: readonly NormalizedUnit[];
|
|
163
|
+
}
|
|
164
|
+
interface NormalizedSection {
|
|
165
|
+
readonly name: 'start' | 'center' | 'end';
|
|
166
|
+
readonly groups: readonly NormalizedGroup[];
|
|
167
|
+
}
|
|
168
|
+
interface NormalizedBar {
|
|
169
|
+
readonly id: string;
|
|
170
|
+
readonly sections: readonly NormalizedSection[];
|
|
171
|
+
}
|
|
172
|
+
declare const DEFAULT_IMPORTANCE: Importance;
|
|
173
|
+
/** Resolve shorthands + defaults; validate uniqueness. Solver/projection input. */
|
|
174
|
+
declare function normalizeBar(bar: BarSchema): NormalizedBar;
|
|
175
|
+
/**
|
|
176
|
+
* Drop units whose command is currently invisible (permissions, disabled
|
|
177
|
+
* categories, contextual visibility) BEFORE solving — an invisible unit must
|
|
178
|
+
* not consume budget or appear in the overflow. Groups that empty out vanish
|
|
179
|
+
* naturally in the solver's separator math and in the projection.
|
|
180
|
+
*/
|
|
181
|
+
declare function filterBar(bar: NormalizedBar, keep: (unit: NormalizedUnit) => boolean): NormalizedBar;
|
|
182
|
+
/**
|
|
183
|
+
* Identity + validation. Checks what is checkable without a command registry:
|
|
184
|
+
* bars normalize cleanly, and every `menu` a strip/bar could reference exists
|
|
185
|
+
* is left to `validateChrome` (which also takes the known command ids).
|
|
186
|
+
*/
|
|
187
|
+
declare function defineChrome<T extends ChromeSchema>(chrome: T): T;
|
|
188
|
+
/** Dev-time cross-check: every command referenced by the chrome exists. */
|
|
189
|
+
declare function validateChrome(chrome: ChromeSchema, knownCommands: ReadonlySet<string>): string[];
|
|
190
|
+
//#endregion
|
|
191
|
+
//#region src/transforms.d.ts
|
|
192
|
+
interface AddItemSpec {
|
|
193
|
+
/** Bar id ('main', 'annotate', …) or a modeBars surface key ('mode:annotate'). */
|
|
194
|
+
readonly bar: string;
|
|
195
|
+
readonly section: keyof BarSections;
|
|
196
|
+
/** Target group id. Unknown in the bar → a new group is created at the end
|
|
197
|
+
* of `section`; known but in a DIFFERENT section → error (group ids are
|
|
198
|
+
* bar-unique, so that is a contradiction, not a request). */
|
|
199
|
+
readonly group: string;
|
|
200
|
+
readonly item: BarChild;
|
|
201
|
+
/** Insert position within the group. Default: append. */
|
|
202
|
+
readonly at?: number;
|
|
203
|
+
}
|
|
204
|
+
/** Insert `spec.item` into a group of one bar. See AddItemSpec for semantics. */
|
|
205
|
+
declare function addItem(schema: ChromeSchema, spec: AddItemSpec): ChromeSchema;
|
|
206
|
+
/**
|
|
207
|
+
* Purge commands (or custom slots, by slot name) from every bar, mode bar,
|
|
208
|
+
* strip, and menu. Groups and menu sections that empty out are dropped;
|
|
209
|
+
* emptied menus keep their key (commands may still target them) with no rows.
|
|
210
|
+
*/
|
|
211
|
+
declare function removeItems(schema: ChromeSchema, ids: readonly string[]): ChromeSchema;
|
|
212
|
+
/**
|
|
213
|
+
* Swap a command in place everywhere it appears — bars, mode bars, strips,
|
|
214
|
+
* and (when the replacement is itself a plain command) menu rows.
|
|
215
|
+
*/
|
|
216
|
+
declare function replaceItem(schema: ChromeSchema, id: string, item: BarChild): ChromeSchema;
|
|
217
|
+
//#endregion
|
|
218
|
+
//#region src/helpers.d.ts
|
|
219
|
+
declare const chromeHelpers: {
|
|
220
|
+
readonly addItem: typeof addItem;
|
|
221
|
+
readonly removeItems: typeof removeItems;
|
|
222
|
+
readonly replaceItem: typeof replaceItem;
|
|
223
|
+
readonly item: typeof item;
|
|
224
|
+
readonly group: typeof group;
|
|
225
|
+
readonly custom: typeof custom;
|
|
226
|
+
readonly defineChrome: typeof defineChrome;
|
|
227
|
+
};
|
|
228
|
+
type ChromeHelpers = typeof chromeHelpers;
|
|
229
|
+
//#endregion
|
|
230
|
+
//#region src/solver.d.ts
|
|
231
|
+
interface FitMetrics {
|
|
232
|
+
/** Width of unit `key` rendered at `variant`; undefined = not yet measured. */
|
|
233
|
+
unit(key: string, variant: string): number | undefined;
|
|
234
|
+
/** Width of group `id` rendered in its collapsed form ('menu' | 'select'). */
|
|
235
|
+
groupCollapsed(groupId: string): number | undefined;
|
|
236
|
+
/** Width of group `id`'s disclosure trigger (shed groups only). */
|
|
237
|
+
groupTrigger(groupId: string): number | undefined;
|
|
238
|
+
/** Width of the overflow trigger button. */
|
|
239
|
+
readonly overflowTrigger: number;
|
|
240
|
+
/** Gap between adjacent visible units. */
|
|
241
|
+
readonly gap: number;
|
|
242
|
+
/** Width of a derived separator between adjacent visible groups (with its gaps). */
|
|
243
|
+
readonly separator: number;
|
|
244
|
+
}
|
|
245
|
+
type UnitAssignment = {
|
|
246
|
+
readonly kind: 'variant';
|
|
247
|
+
readonly variant: string;
|
|
248
|
+
} | {
|
|
249
|
+
readonly kind: 'shed';
|
|
250
|
+
} | {
|
|
251
|
+
readonly kind: 'collapsed';
|
|
252
|
+
} | {
|
|
253
|
+
readonly kind: 'overflow';
|
|
254
|
+
};
|
|
255
|
+
interface GroupAssignment {
|
|
256
|
+
/** How many children sit behind the group's disclosure trigger. */
|
|
257
|
+
readonly shedCount: number;
|
|
258
|
+
/** The group renders as its single collapsed control. */
|
|
259
|
+
readonly collapsed: boolean;
|
|
260
|
+
/** No part of the group is visible in the bar. */
|
|
261
|
+
readonly overflowed: boolean;
|
|
262
|
+
}
|
|
263
|
+
interface FitResult {
|
|
264
|
+
readonly units: ReadonlyMap<string, UnitAssignment>;
|
|
265
|
+
readonly groups: ReadonlyMap<string, GroupAssignment>;
|
|
266
|
+
readonly hasOverflow: boolean;
|
|
267
|
+
/** Total visible width at this assignment (diagnostics + tests). */
|
|
268
|
+
readonly width: number;
|
|
269
|
+
/** False when any consulted measurement was missing (treated as 0). */
|
|
270
|
+
readonly complete: boolean;
|
|
271
|
+
}
|
|
272
|
+
declare function solve(bar: NormalizedBar, metrics: FitMetrics, containerWidth: number): FitResult;
|
|
273
|
+
//#endregion
|
|
274
|
+
//#region src/projection.d.ts
|
|
275
|
+
type OverflowRow =
|
|
276
|
+
/** A plain command row. The renderer resolves label/icon/active from the registry. */
|
|
277
|
+
{
|
|
278
|
+
readonly type: 'command';
|
|
279
|
+
readonly command: string;
|
|
280
|
+
} |
|
|
281
|
+
/** A command that opens a menu — renders as `label ▸` nesting that menu. */
|
|
282
|
+
{
|
|
283
|
+
readonly type: 'submenu';
|
|
284
|
+
readonly command: string;
|
|
285
|
+
readonly menu: string;
|
|
286
|
+
};
|
|
287
|
+
interface OverflowSection {
|
|
288
|
+
/** From the group's labelKey — render as a section title or a nested submenu. */
|
|
289
|
+
readonly labelKey?: string;
|
|
290
|
+
/** 'radio' when the group is a tab strip: exactly one row is active. */
|
|
291
|
+
readonly role?: 'radio';
|
|
292
|
+
readonly rows: readonly OverflowRow[];
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* The one fact projection needs about a command: does it open a menu?
|
|
296
|
+
* (Label, icon, and active state stay live in the renderer.) Return null for
|
|
297
|
+
* unknown commands — they project as plain rows and resolve at render time.
|
|
298
|
+
*/
|
|
299
|
+
type ResolveMenuTarget = (commandId: string) => {
|
|
300
|
+
menu?: string;
|
|
301
|
+
} | null;
|
|
302
|
+
declare function projectOverflow(bar: NormalizedBar, fit: FitResult, resolve: ResolveMenuTarget): OverflowSection[];
|
|
303
|
+
/**
|
|
304
|
+
* The content of a group's disclosure trigger: its shed units, in bar order,
|
|
305
|
+
* in menu form — same totality rules as the global overflow. This is v2's
|
|
306
|
+
* hand-written `mode-tabs-overflow-menu`, derived.
|
|
307
|
+
*/
|
|
308
|
+
declare function projectShed(group: NormalizedGroup, fit: FitResult, resolve: ResolveMenuTarget): OverflowRow[];
|
|
309
|
+
/** One strip group: a separator boundary, its visible commands in bar order. */
|
|
310
|
+
interface StripGroup {
|
|
311
|
+
readonly id: string;
|
|
312
|
+
readonly labelKey?: string;
|
|
313
|
+
readonly commands: readonly string[];
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Strip projection — a bar projected for UN-measured rendering (a contextual
|
|
317
|
+
* strip anchored to a selection has no fit pressure to solve). The schema
|
|
318
|
+
* declares what COULD appear; `visible` (the command registry's runtime truth)
|
|
319
|
+
* decides what DOES: hidden commands drop out, groups that empty out vanish,
|
|
320
|
+
* and an all-hidden bar projects to [] — "render nothing" falls out. Custom
|
|
321
|
+
* units project through their `terminal` command, same totality rule as the
|
|
322
|
+
* overflow. Upgrading a strip to measured/overflowing rendering later is a
|
|
323
|
+
* renderer swap (<Toolbar>), never a schema change.
|
|
324
|
+
*/
|
|
325
|
+
declare function projectStrip(bar: NormalizedBar, visible: (command: string) => boolean): StripGroup[];
|
|
326
|
+
//#endregion
|
|
327
|
+
//#region src/shortcuts.d.ts
|
|
328
|
+
/**
|
|
329
|
+
* Shortcut parsing + matching — pure. No `navigator`: platform is an input
|
|
330
|
+
* (`isMac`), decided by the embedder, same rule as plugin-i18n's locale.
|
|
331
|
+
*
|
|
332
|
+
* Grammar: modifiers and one key joined by '+', e.g. 'Mod+K', 'Ctrl+=',
|
|
333
|
+
* 'Shift+Alt+D', 'Meta+NumpadAdd'. 'Mod' is ⌘ on mac and Ctrl elsewhere.
|
|
334
|
+
* Keys longer than one character (F1, Escape, NumpadAdd, ArrowLeft) match
|
|
335
|
+
* `event.key` OR `event.code` case-insensitively, so numpad shortcuts work.
|
|
336
|
+
*/
|
|
337
|
+
interface ParsedShortcut {
|
|
338
|
+
readonly key: string;
|
|
339
|
+
readonly mod: boolean;
|
|
340
|
+
readonly ctrl: boolean;
|
|
341
|
+
readonly meta: boolean;
|
|
342
|
+
readonly alt: boolean;
|
|
343
|
+
readonly shift: boolean;
|
|
344
|
+
}
|
|
345
|
+
/** The subset of KeyboardEvent the matcher reads — keeps this module DOM-free. */
|
|
346
|
+
interface KeyStroke {
|
|
347
|
+
readonly key: string;
|
|
348
|
+
readonly code?: string;
|
|
349
|
+
readonly ctrlKey: boolean;
|
|
350
|
+
readonly metaKey: boolean;
|
|
351
|
+
readonly altKey: boolean;
|
|
352
|
+
readonly shiftKey: boolean;
|
|
353
|
+
}
|
|
354
|
+
declare function parseShortcut(shortcut: string): ParsedShortcut;
|
|
355
|
+
declare function matchShortcut(parsed: ParsedShortcut, stroke: KeyStroke, opts: {
|
|
356
|
+
isMac: boolean;
|
|
357
|
+
}): boolean;
|
|
358
|
+
/** Display form for menu rows: '⌘K' on mac, 'Ctrl+K' elsewhere. */
|
|
359
|
+
declare function formatShortcut(shortcut: string, opts: {
|
|
360
|
+
isMac: boolean;
|
|
361
|
+
}): string;
|
|
362
|
+
//#endregion
|
|
363
|
+
export { type AddItemSpec, type BarChild, type BarGroup, type BarItem, type BarSchema, type BarSections, type ChromeHelpers, type ChromeSchema, type CustomItem, DEFAULT_IMPORTANCE, type FitMetrics, type FitResult, type FrameSchema, type GroupAssignment, type Importance, type KeyStroke, type MenuSchema, type MenuSection, type NormalizedBar, type NormalizedGroup, type NormalizedSection, type NormalizedUnit, type OverflowRow, type OverflowSection, PINNED, type ParsedShortcut, type ResolveMenuTarget, type StripGroup, type UnitAssignment, type Variant, addItem, chromeHelpers, custom, defineChrome, filterBar, formatShortcut, group, item, matchShortcut, normalizeBar, parseShortcut, projectOverflow, projectShed, projectStrip, removeItems, replaceItem, solve, validateChrome };
|
|
364
|
+
//# sourceMappingURL=index.d.ts.map
|