@inkbar/core 0.1.1 → 0.2.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 CHANGED
@@ -19,52 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
22
-
23
- ---
24
-
25
- Third-party notices
26
-
27
- The toolbar icons in src/dom/viewer/icons.ts (Hand, MousePointer2, Highlighter, Square,
28
- MessageSquare, ZoomIn and ZoomOut) are copied from Lucide (https://lucide.dev), under the ISC
29
- licence:
30
-
31
- ISC License
32
-
33
- Copyright (c) 2026 Lucide Icons and Contributors
34
-
35
- Permission to use, copy, modify, and/or distribute this software for any
36
- purpose with or without fee is hereby granted, provided that the above
37
- copyright notice and this permission notice appear in all copies.
38
-
39
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
40
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
41
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
42
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
43
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
44
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
45
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
46
-
47
- Of these, Square, ZoomIn and ZoomOut are derived from the Feather project, under the MIT
48
- licence:
49
-
50
- The MIT License (MIT) (for the icons listed above)
51
-
52
- Copyright (c) 2013-present Cole Bemis
53
-
54
- Permission is hereby granted, free of charge, to any person obtaining a copy
55
- of this software and associated documentation files (the "Software"), to deal
56
- in the Software without restriction, including without limitation the rights
57
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
58
- copies of the Software, and to permit persons to whom the Software is
59
- furnished to do so, subject to the following conditions:
60
-
61
- The above copyright notice and this permission notice shall be included in all
62
- copies or substantial portions of the Software.
63
-
64
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
65
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
66
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
67
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
68
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
69
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
70
- SOFTWARE.
package/README.md CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  ---
22
22
 
23
- `@inkbar/core` opens PDFs, renders pages with PDF.js and keeps annotations as typed data. The Vue, React and Svelte packages build on it. You can also use it on its own: `createViewer` puts a complete viewer, with toolbar, note threads and redaction review, into any element in a plain TypeScript app.
23
+ `@inkbar/core` opens PDFs, renders pages with PDF.js and keeps annotations as typed data. The Vue, React and Svelte packages build on it. You can also use it on its own: `createViewer` puts a complete viewer, with note threads, redaction review and controls to build your toolbars from, into any element in a plain TypeScript app.
24
24
 
25
25
  Every coordinate is stored in PDF user space (points, origin bottom-left, before `/Rotate`), so annotations stay put whatever the zoom, rotation or screen.
26
26
 
@@ -55,25 +55,49 @@ The DOM layer (`@inkbar/core/dom`) provides the viewport, canvas renderer, text
55
55
 
56
56
  ### Without a framework
57
57
 
58
- `createViewer` opens a document and renders a complete viewer into an element: a toolbar with tools, zoom and page controls, plus a note thread and a suggested-redaction card. It uses the same markup as the framework packages, so `@inkbar/theme` styles it.
58
+ `createViewer` opens a document and renders it into an element, with a note thread and a suggested-redaction card. The toolbars are yours: build them from the controls below, which use the same markup as the framework packages, so `@inkbar/theme` styles them.
59
59
 
60
60
  ```ts
61
- import { createViewer } from '@inkbar/core/dom'
61
+ import {
62
+ createViewer,
63
+ createToolbar,
64
+ createToolButton,
65
+ createPageInput,
66
+ createPageCount,
67
+ createZoomOut,
68
+ createZoomSelect,
69
+ createZoomIn,
70
+ } from '@inkbar/core/dom'
62
71
  import '@inkbar/theme/theme.css'
63
72
 
64
73
  const viewer = createViewer(el, { source: file, assets, zoom: 'fit-width' })
65
74
 
75
+ const tools = createToolbar()
76
+ tools.append(createToolButton(viewer, 'select'), createToolButton(viewer, 'highlight'))
77
+
66
78
  const undo = document.createElement('button')
67
79
  undo.textContent = 'Undo'
68
80
  undo.onclick = () => viewer.document.get()?.history.undo()
69
- viewer.toolbar?.append(undo) // buttons join the toolbar's arrow-key order
81
+ tools.append(undo) // buttons join the toolbar's arrow-key order
82
+
83
+ const pages = createToolbar({ label: 'Page and zoom' })
84
+ pages.append(
85
+ createPageInput(viewer),
86
+ createPageCount(viewer),
87
+ createZoomOut(viewer),
88
+ createZoomSelect(viewer),
89
+ createZoomIn(viewer)
90
+ )
91
+
92
+ viewer.element.prepend(tools) // above the document
93
+ viewer.element.append(pages) // below it
70
94
 
71
95
  viewer.open(otherFile) // destroys the current document; the latest call wins
72
96
  viewer.open(lockedFile, { password }) // this password applies to this load only
73
97
  viewer.destroy()
74
98
  ```
75
99
 
76
- It takes the [`mountViewer` options](#mounting-a-viewer) except `container` and `document`, plus `password`, `defaults`, `history`, `onReady` and `onError`. Set `toolbar`, `notes` or `suggestions` to `false` to leave that part out. `viewer.status`, `viewer.document` and `viewer.engine` are readables. A password you pass to `open` replaces the `createViewer` one for that load. An input, select or textarea you add keeps its arrow keys and its own `tabindex`: it is a Tab stop unless you give it `tabindex="-1"`.
100
+ It takes the [`mountViewer` options](#mounting-a-viewer) except `container` and `document`, plus `password`, `defaults`, `history`, `onReady` and `onError`. Set `notes` or `suggestions` to `false` to leave that part out. `viewer.status`, `viewer.document`, `viewer.engine`, `viewer.viewport` and `viewer.tools` are readables; the last two change when the engine rebuilds. A password you pass to `open` replaces the `createViewer` one for that load. The controls are `createToolButton`, `createUndo`, `createRedo`, `createZoomIn`, `createZoomOut`, `createZoomSelect`, `createPageInput`, `createPageCount`, `createPrevPage` and `createNextPage`. Each one disables itself while no document is ready and lives as long as its viewer. Buttons show an icon from [`@inkbar/icons`](https://github.com/inkbar/inkbar/tree/main/packages/icons). Replace their children with your own icon and the accessible name stays; `createIcon` draws any `@inkbar/icons` icon for your own buttons. `createToolbar` gives one Tab stop to all its buttons, with arrow keys between them, and `createToolbarSeparator` divides groups of controls in it. An input, select or textarea you add keeps its arrow keys and its own `tabindex`: it is a Tab stop unless you give it `tabindex="-1"`.
77
101
 
78
102
  `createViewer` reads the theme's colours from the element you pass, so that element needs to be in the page when you call it.
79
103
 
package/dist/dom.d.mts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { $ as NoteAnnotation, Ct as Matrix, Et as Rect, L as Annotation, M as cssVariableDefaults, St as PdfAssets, Tt as Quad, W as ConfidenceBucket, a as OpenOptions, b as AnnotationStore, bt as PageInfo, ht as Readable, i as InkStatus, j as AnnotationDefaults, l as DocumentSource, ot as RedactAnnotation, r as InkDocument, u as InkError, ut as Suggestion, wt as Point } from "./document-Cywnv8Sz.mjs";
2
+ import { IconNode } from "@inkbar/icons";
2
3
  //#region src/dom/transform.d.ts
3
4
  type ViewRotation = 0 | 90 | 180 | 270;
4
5
  /** CSS box: `left`,`top` from the rendered page's top-left corner, in CSS pixels. */
@@ -534,8 +535,6 @@ interface CreateViewerOptions extends Omit<MountViewerOptions, 'container' | 'do
534
535
  /** Default: read from the theme's CSS variables on the viewer root. */
535
536
  defaults?: AnnotationDefaults;
536
537
  history?: OpenOptions['history'];
537
- /** Default toolbar: tools, zoom, page. `false` leaves it out. */
538
- toolbar?: boolean;
539
538
  /** Note thread popover. Default true. */
540
539
  notes?: boolean;
541
540
  /** Suggested-redaction card. Default true. */
@@ -550,8 +549,12 @@ interface Viewer {
550
549
  readonly document: Readable<InkDocument | null>;
551
550
  /** Set while a document is ready; `null` otherwise. */
552
551
  readonly engine: Readable<ViewerEngine | null>;
553
- /** The toolbar element, for adding controls. `null` when `toolbar: false`. */
554
- readonly toolbar: HTMLElement | null;
552
+ /**
553
+ * The current viewport and tool controller; `null` while no document is ready. Both change
554
+ * when the engine rebuilds, so read them here rather than holding on to `engine.viewport`.
555
+ */
556
+ readonly viewport: Readable<Viewport | null>;
557
+ readonly tools: Readable<ToolController | null>;
555
558
  /**
556
559
  * Opens another document in place; the previous one is destroyed. Latest call wins.
557
560
  * `password` is used for this load only; without it, the constructor's `password` applies.
@@ -563,5 +566,45 @@ interface Viewer {
563
566
  }
564
567
  export declare function createViewer(el: HTMLElement, opts: CreateViewerOptions): Viewer;
565
568
  //#endregion
569
+ //#region src/dom/viewer/controls.d.ts
570
+ /**
571
+ * An `<svg>` drawing `icon` from `@inkbar/icons`, hidden from assistive technology: the
572
+ * control it sits in carries the name. The theme sizes it with `--ink-icon-size`.
573
+ */
574
+ export declare function createIcon(icon: IconNode): SVGSVGElement;
575
+ /**
576
+ * A toolbar following the WAI-ARIA toolbar pattern: its buttons share one Tab stop, with
577
+ * arrow keys, Home and End to move between them. Fields and selects are Tab stops of their
578
+ * own and keep their keys. Buttons added later join in.
579
+ */
580
+ export declare function createToolbar(opts?: {
581
+ label?: string;
582
+ }): HTMLElement;
583
+ /** A divider between groups of controls in a horizontal toolbar. Not focusable. */
584
+ export declare function createToolbarSeparator(): HTMLDivElement;
585
+ /** Undoes the last change to the document's annotations; disabled when there is none. */
586
+ export declare function createUndo(viewer: Viewer): HTMLButtonElement;
587
+ /** Redoes the last undone change; disabled when there is none. */
588
+ export declare function createRedo(viewer: Viewer): HTMLButtonElement;
589
+ /** Sets the tool; pressed while it is the active one. */
590
+ export declare function createToolButton(viewer: Viewer, tool: ToolId, opts?: {
591
+ label?: string;
592
+ }): HTMLButtonElement;
593
+ export declare function createZoomIn(viewer: Viewer): HTMLButtonElement;
594
+ export declare function createZoomOut(viewer: Viewer): HTMLButtonElement;
595
+ /** Fit width, fit page and the zoom levels; a zoom between levels gets an option of its own. */
596
+ export declare function createZoomSelect(viewer: Viewer): HTMLSelectElement;
597
+ /**
598
+ * The current page, 1-based. Enter or leaving the field goes to the page typed; a number out
599
+ * of range puts the current page back.
600
+ */
601
+ export declare function createPageInput(viewer: Viewer): HTMLInputElement;
602
+ /** "of 12": the page count, announced when it changes. */
603
+ export declare function createPageCount(viewer: Viewer): HTMLSpanElement;
604
+ /** Disabled on the first page. */
605
+ export declare function createPrevPage(viewer: Viewer): HTMLButtonElement;
606
+ /** Disabled on the last page. */
607
+ export declare function createNextPage(viewer: Viewer): HTMLButtonElement;
608
+ //#endregion
566
609
  export { type AnnotationSlotProps, type AnnotationState, type CreateViewerOptions, type CssLayout, type CssLayoutInput, type CssPageBox, type CssRect, type FocusReturn, type FocusReturnOptions, type LayoutMode, type MountViewerOptions, type NotePopoverSlotProps, type Overlay, type OverlayOptions, type PageHit, type PageLayer, type PageMount, type PageMountOptions, type PageRenderer, type PageRendererOptions, type PageTransform, type SelectionQuads, type SuggestionCardSlotProps, type TextLayerHandle, type TextLayerOptions, type Tool, type ToolContext, type ToolController, type ToolControllerOptions, type ToolId, type ViewRotation, type Viewer, type ViewerEngine, type Viewport, type ViewportHit, type ViewportKeysOptions, type ViewportOptions, type ZoomValue, cssVariableDefaults };
567
610
  //# sourceMappingURL=dom.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom.d.mts","names":[],"sources":["../src/dom/transform.ts","../src/dom/layout.ts","../src/dom/viewport.ts","../src/dom/viewport-keys.ts","../src/dom/page-renderer.ts","../src/dom/text-layer.ts","../src/dom/selection.ts","../src/dom/overlay.ts","../src/dom/overlay-render.ts","../src/dom/page-mount.ts","../src/dom/tools/controller.ts","../src/dom/tools/highlight.ts","../src/dom/tools/note.ts","../src/dom/tools/redact-area.ts","../src/dom/tools/select.ts","../src/dom/tools/view.ts","../src/dom/tools/index.ts","../src/dom/ui.ts","../src/dom/annotation-element.ts","../src/dom/popover-focus.ts","../src/dom/viewer-engine.ts","../src/dom/viewer/create-viewer.ts"],"mappings":"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"}
1
+ {"version":3,"file":"dom.d.mts","names":[],"sources":["../src/dom/transform.ts","../src/dom/layout.ts","../src/dom/viewport.ts","../src/dom/viewport-keys.ts","../src/dom/page-renderer.ts","../src/dom/text-layer.ts","../src/dom/selection.ts","../src/dom/overlay.ts","../src/dom/overlay-render.ts","../src/dom/page-mount.ts","../src/dom/tools/controller.ts","../src/dom/tools/highlight.ts","../src/dom/tools/note.ts","../src/dom/tools/redact-area.ts","../src/dom/tools/select.ts","../src/dom/tools/view.ts","../src/dom/tools/index.ts","../src/dom/ui.ts","../src/dom/annotation-element.ts","../src/dom/popover-focus.ts","../src/dom/viewer-engine.ts","../src/dom/viewer/create-viewer.ts","../src/dom/viewer/controls.ts"],"mappings":";;;KAWY;;UAGK;EACf;EACA;EACA;EACA;;UAGe;WACN,MAAM;;WAEN;;;;;WAKA;;WAEA,UAAU;;WAEV,eAAe;;WAEf;;WAEA;;WAEA,QAAQ;EACjB,MAAM,GAAG,QAAQ;EACjB,UAAU,GAAG,OAAO;EACpB,UAAU,GAAG,OAAO;;EAEpB,YAAY;EACZ,QAAQ,GAAG,QAAQ;EACnB,YAAY,GAAG,UAAU;;EAEzB,cAAc;;;wBAIA,kBAAkB,cAAc;;;;;wBAWhC,oBACd,MAAM,UACN,cACA,eAAc,eACb;;;KC/DS;;UAGK;EACf;EACA;EACA;EACA;EACA;;;UAIe;EACf,OAAO;EACP;EACA;;UAGe;EACf,gBAAgB;EAChB;EACA,UAAU;;EAEV;EACA,MAAM;;EAEN;;EAEA;;;wBASc,iBAAiB,OAAO,iBAAiB;;wBAyBzC,WACd,MAAM,UACN,UAAU,cACV;EAAa;EAAe;GAC5B,gCACA;;;;;wBAac,gBACd,QAAQ,WACR,mBACA,wBACA;;wBAec,mBACd,QAAQ,WACR,mBACA;;;KChFU;UAEK;EACf,WAAW;EACX,UAAU;;EAEV,OAAO;;EAEP,OAAO;;EAEP,WAAW;;EAEX;;EAEA;;EAEA;;EAEA;EACA,QAAQ,cAAc,MAAM,aAAa,WAAW;EACpD,SAAS,cAAc,MAAM,aAAa,WAAW;EACrD,UAAU,cAAc,MAAM;;;UAIf;EACf;EACA,MAAM;EACN,WAAW;;UAGI;WACN,MAAM,SAAS;;WAEf,OAAO;WACP,aAAa;WACb,SAAS;WACT,QAAQ,SAAS;WACjB,UAAU,SAAS;WACnB,MAAM,SAAS;;EAExB,QAAQ,MAAM,WAAW,YAAY;EACrC,OAAO,gBAAgB,YAAY;EACnC,QAAQ,MAAM;EACd,YAAY,UAAU;EACtB,aAAa,eAAe;IAAS,WAAW;;;EAEhD,aAAa,cAAc,MAAM;EACjC,aAAa,eAAe;EAC5B,QAAQ,eAAe;;EAEvB,UAAU,iBAAiB,kBAAkB;EAC7C;;wBAOc,eAAe,MAAM,kBAAkB;;;UCnFtC;EACf,UAAU;;EAEV;;;;;;;;;wBAiBc,mBACd,IAAI,aACJ,MAAM;;;UChBS;EACf,UAAU;;EAEV;;EAEA,MAAM;EACN,WAAW;;;;;EAKX;EACA;;EAEA,SAAS;;UAGM;WACN,SAAS;;;;;;WAMT,UAAU;EACnB,OAAO,WAAW;EAClB;;wBAMc,mBAAmB,MAAM,sBAAsB;;;UC9B9C;EACf,UAAU;;EAEV;;EAEA,MAAM;EACN,WAAW;;;;;EAKX,SAAS;;EAET;;UAGe;WACN,SAAS;;WAET,OAAO;EAChB,OAAO,WAAW;EAClB;;wBAGc,gBAAgB,MAAM,mBAAmB;;;UC7BxC;;EAEf;;EAEA,OAAO;EACP;;;;;;wBAOc,oBACd,OAAO,SAAS,UAChB,MAAM,aACN,WAAW,gBACV;;;;;;wBAsBa,kBACd,MAAM,aACN,UAAU,MAAM;EAAkB;EAAc,WAAW;gBAC1D;;;UC1Bc;EACf,MAAM;;EAEN;EACA,OAAO;EACP,WAAW;;EAEX,YAAY;;EAEZ,UAAU,YAAY;;UAGP;WACN,SAAS;;EAElB,OAAO,WAAW;EAClB,WAAW,aAAa;EACxB;;;wBAmCc,eAAe,GAAG;wBA6BlB,cAAc,MAAM,iBAAiB;;;;;;;;wBCjDrC,wBACd,IAAI,aACJ,GAAG,YACH,GAAG;;;UC9CY;EACf,UAAU;;EAEV;;EAEA,MAAM;EACN,WAAW;EACX,OAAO;EACP,YAAY;EACZ,UAAU,GAAG;;EAEb;;;;;EAKA,SAAS,gBAAgB,OAAO;;;;;EAKhC,YAAY,OAAO;;;KAIT;UAEK;WACN,UAAU;WACV,WAAW;WACX,SAAS;EAClB,OAAO,WAAW;EAClB;;;wBAIc,gBAAgB,MAAM,mBAAmB;;;KCpB7C;UAEK,gBAAgB;;EAE/B,MAAM;;EAEN,KAAK;;UAGU;EACf,OAAO;EACP,UAAU;;EAEV,MAAM;;EAEN,kBAAkB;EAClB;EACA,YAAY;;UAGG;EACf,IAAI;EACJ;EACA,SAAS,KAAK;EACd;;;;;;;;EAQA,eACE,GAAG,cACH,KAAK,qBACL;;;;;EAMF,eAAe,GAAG,cAAc,KAAK;EACrC,aAAa,GAAG,cAAc,KAAK;;EAEnC,iBAAiB,GAAG;EACpB,WAAW,GAAG;;UAGC;WACN,QAAQ,SAAS;EAC1B,IAAI,IAAI;EACR;;UAGe;EACf,KAAK;;EAEL,UAAU;EACV,OAAO;;;wBAsBO,OACd,KAAK,aACL;EAAK;EAAiB;IACrB;;;;;;;wBCtGa,iBAAiB;;;;;;;wBCQjB,YAAY;;;wBCDZ,kBAAkB;;;wBCyBlB,cAAc;;;;wBCnCd,YAAY;;;;wBCqBZ,gBAAgB;;wBAKhB,qBACd,MAAM,KAAK;EAAoC,QAAQ;IACtD;;;;qBCnBU,aAAa,SAAS,OAAO;;qBAS7B;;KAGD;;;;;UAMK;EACf,YAAY;EACZ,OAAO;EACP;EACA;EACA;;EAEA;;EAEA;;;UAIe;EACf,MAAM;EACN,SAAS;EACT,QAAQ;EACR,SAAS;EACT;EACA;;;UAIe;EACf,YAAY;EACZ,YAAY;EACZ,QAAQ;EACR;EACA;EACA;;;;;wBC1Dc,qBAAqB,MAAM,YAAY,aAAa;;;;;;;wBAUpD,yBACd,MAAM,aACN,YACA,WAAW,IAAI;;;;;;;;wBCHD,2BAA2B,QAAQ;UAOlC;EACf,YAAY;;EAEZ;;UAGe;;;;;;EAMf,aAAa,QAAQ,oBAAoB;;EAEzC,iBAAiB,OAAO,OAAO,QAAQ;;wBAGzB,kBAAkB,MAAM,qBAAqB;;;UCR5C;EACf,WAAW;EACX,UAAU;EACV,OAAO;EACP;EACA,OAAO;EACP,WAAW;EACX;EACA;EACA,OAAO;;EAEP;EACA,YAAY;;;;;EAKZ,SAAS,UAAU,UAAU,OAAO;;;;;;;EAOpC,aAAa,cAAc,OAAO,WAAW,MAAM;;EAEnD,eAAe;;;;;;;EAOf,aAAa,cAAc,OAAO;;UAGnB;WACN,UAAU;WACV,OAAO;WACP,OAAO,oBAAoB;;;;;;;EAOpC,QAAQ;IAAQ;IAAc;IAAiB;;EAC/C;;wBAGc,YAAY,MAAM,qBAAqB;;;UChDtC,4BAA4B,KAC3C;EAGA,QAAQ;EACR,QAAQ;;EAER;;EAEA,WAAW;EACX,UAAU;;EAEV;;EAEA;EACA,SAAS,YAAY,KAAK;EAC1B,SAAS,YAAY,OAAO;;UAGb;;WAEN,SAAS;WACT,QAAQ,SAAS;WACjB,UAAU,SAAS;;WAEnB,QAAQ,SAAS;;;;;WAKjB,UAAU,SAAS;WACnB,OAAO,SAAS;;;;;EAKzB,KAAK,QAAQ,gBAAgB;IAAS;;EACtC;;wBAGc,aAAa,IAAI,aAAa,MAAM,sBAAsB;;;;;;;wBCS1D,WAAW,MAAM,WAAW;;;;;;wBAiC5B,cAAc;EAAQ;IAAwB;;wBAa9C,0BAA0B;;wBAU1B,WAAW,QAAQ,SAAS;;wBAK5B,WAAW,QAAQ,SAAS;;wBAqB5B,iBACd,QAAQ,QACR,MAAM,QACN;EAAQ;IACP;wBAsBa,aAAa,QAAQ,SAAS;wBAO9B,cAAc,QAAQ,SAAS;;wBAY/B,iBAAiB,QAAQ,SAAS;;;;;wBAmDlC,gBAAgB,QAAQ,SAAS;;wBAuCjC,gBAAgB,QAAQ,SAAS;;wBAgBjC,eAAe,QAAQ,SAAS;;wBAKhC,eAAe,QAAQ,SAAS"}