@ixfx/components 0.13.0 → 0.13.2
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/bundle/index.d.ts +217 -73
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +375 -13
- package/bundle/index.js.map +1 -1
- package/dist/{button-BYuf72aR.d.ts → button-CTL45aBl.d.ts} +2 -2
- package/dist/{button-BYuf72aR.d.ts.map → button-CTL45aBl.d.ts.map} +1 -1
- package/dist/button.d.ts +1 -1
- package/dist/crumbs.d.ts +2 -2
- package/dist/{data-grid-BJ6XXvRc.d.ts → data-grid-Ck1Qx2H1.d.ts} +4 -4
- package/dist/{data-grid-BJ6XXvRc.d.ts.map → data-grid-Ck1Qx2H1.d.ts.map} +1 -1
- package/dist/data-grid.d.ts +2 -2
- package/dist/{detail-list-B0waVNeS.d.ts → detail-list-C1xzr1z7.d.ts} +4 -4
- package/dist/{detail-list-B0waVNeS.d.ts.map → detail-list-C1xzr1z7.d.ts.map} +1 -1
- package/dist/detail-list.d.ts +3 -3
- package/dist/editable-label-rzXkjf1H.d.ts.map +1 -1
- package/dist/editable-label.js +2 -2
- package/dist/editable-label.js.map +1 -1
- package/dist/{flat-list-eYItri8-.d.ts → flat-list-Ohxqsy0g.d.ts} +63 -5
- package/dist/flat-list-Ohxqsy0g.d.ts.map +1 -0
- package/dist/flat-list.d.ts +2 -2
- package/dist/flat-list.js +172 -9
- package/dist/flat-list.js.map +1 -1
- package/dist/{grid-list-_gI9ckcT.d.ts → grid-list-pefLORIr.d.ts} +4 -4
- package/dist/{grid-list-_gI9ckcT.d.ts.map → grid-list-pefLORIr.d.ts.map} +1 -1
- package/dist/grid-list.d.ts +2 -2
- package/dist/incr-search.d.ts +1 -1
- package/dist/{index-BvxHQUME.d.ts → index-CxZ61DO1.d.ts} +3 -3
- package/dist/{index-BvxHQUME.d.ts.map → index-CxZ61DO1.d.ts.map} +1 -1
- package/dist/{index-CW2QL33o.d.ts → index-Dq30pOnn.d.ts} +2 -2
- package/dist/{index-CW2QL33o.d.ts.map → index-Dq30pOnn.d.ts.map} +1 -1
- package/dist/index.d.ts +13 -13
- package/dist/{list-native-drag-controller-CllsHLxw.d.ts → list-native-drag-controller-ChIi3eK5.d.ts} +2 -2
- package/dist/{list-native-drag-controller-CllsHLxw.d.ts.map → list-native-drag-controller-ChIi3eK5.d.ts.map} +1 -1
- package/dist/menu.d.ts +1 -1
- package/dist/miller.d.ts +3 -3
- package/dist/{tree-component-DukLqesg.d.ts → tree-component-Cj8V3uar.d.ts} +2 -2
- package/dist/{tree-component-DukLqesg.d.ts.map → tree-component-Cj8V3uar.d.ts.map} +1 -1
- package/dist/tree.d.ts +4 -4
- package/dist/{types-D-kYF16b.d.ts → types-DQ7KOUIj.d.ts} +6 -1
- package/dist/types-DQ7KOUIj.d.ts.map +1 -0
- package/dist/{vertical-list-DheZSEmB.d.ts → vertical-list-CqBc-t8w.d.ts} +86 -4
- package/dist/vertical-list-CqBc-t8w.d.ts.map +1 -0
- package/dist/vertical-list.d.ts +3 -3
- package/dist/vertical-list.js +202 -2
- package/dist/vertical-list.js.map +1 -1
- package/docs-user/flat-list.md +45 -3
- package/docs-user/index.json +2 -2
- package/docs-user/vertical-list.md +59 -3
- package/package.json +1 -1
- package/dist/flat-list-eYItri8-.d.ts.map +0 -1
- package/dist/types-D-kYF16b.d.ts.map +0 -1
- package/dist/vertical-list-DheZSEmB.d.ts.map +0 -1
package/docs-user/flat-list.md
CHANGED
|
@@ -28,11 +28,16 @@ list.addEventListener('flat-list-activate', ({ detail }) => open(detail.node));
|
|
|
28
28
|
| `selectionMode` / `selection-mode` | | `'single'` | As `ixfx-vertical-list` |
|
|
29
29
|
| `interactionMode` / `interaction-mode` | | `'standard'` | As `ixfx-vertical-list` |
|
|
30
30
|
| `itemWrap`, `searchModes`, `itemsDraggable` | | | Passed to the inner list |
|
|
31
|
+
| `itemsDroppable` / `items-droppable` | `boolean` | `false` | Rows and empty space accept native drops. See [Drops](#drops) |
|
|
32
|
+
| `canDrop` | `(node, dataTransfer) => boolean` | | Refuse a drag up front. `node` is the row, or the current level's node over empty space |
|
|
33
|
+
| `validateEdit` | `(value, node) => boolean` | | Opts in to [rename](#rename) and validates the typed text |
|
|
34
|
+
| `markedKey` / `marked-key` | `string` | | Keep this node's row visibly marked across level changes. Not a selection |
|
|
35
|
+
| `virtualize`, `itemHeight` / `item-height` | `boolean`, `number` | `false`, `0` | Render only visible rows; needs a fixed row height. See [virtualisation](../vertical-list/README.md#virtualisation) |
|
|
31
36
|
| `withUp` / `with-up` | `boolean` | `true` | Up button in the crumb bar |
|
|
32
37
|
| `hideRoot` / `hide-root` | `boolean` | `false` | Hide the root crumb |
|
|
33
38
|
| `emptyText` / `empty-text` | `string` | `'Empty'` | Shown for a level with no children |
|
|
34
39
|
|
|
35
|
-
A node counts as a branch unless `item.isLeaf` is `true` or its `children` is `[]`. `item.icon`, `iconColor`, `textColor` and `badge` are honoured.
|
|
40
|
+
A node counts as a branch unless `item.isLeaf` is `true` or its `children` is `[]`. Set `item.isLeaf: false` to force a branch even when `children` is `[]`: an empty folder that can still be entered, showing `emptyText`. `item.icon`, `iconColor`, `textColor` and `badge` are honoured.
|
|
36
41
|
|
|
37
42
|
## Methods
|
|
38
43
|
|
|
@@ -43,6 +48,7 @@ A node counts as a branch unless `item.isLeaf` is `true` or its `children` is `[
|
|
|
43
48
|
| `navigateUp()` | Go to the parent. `false` at the root |
|
|
44
49
|
| `currentNode` | Node whose children are listed |
|
|
45
50
|
| `selectedNodes` | Selected `TreeNode`s in the current level |
|
|
51
|
+
| `beginEdit(key)` | Rename a row in place. Needs `validateEdit` and `item.editable`; `false` otherwise |
|
|
46
52
|
| `registry` / `dispatch(id, args)` | The inner list's command registry, e.g. `dispatch('list.search.filter')` |
|
|
47
53
|
| `list` | The inner `ixfx-vertical-list` |
|
|
48
54
|
|
|
@@ -53,6 +59,10 @@ A node counts as a branch unless `item.isLeaf` is `true` or its `children` is `[
|
|
|
53
59
|
| `flat-list-navigate` | `{ path, previousPath, node, direction }` | The level changed. `direction` is `into`, `up` or `jump` |
|
|
54
60
|
| `flat-list-select` | `{ selected, selectedKeys, previous }` | Selection changed (nodes, not elements) |
|
|
55
61
|
| `flat-list-activate` | `{ node }` | A **leaf** was double-clicked or Enter was pressed |
|
|
62
|
+
| `flat-list-drop` | `{ node, dataTransfer }` | Something was dropped. See [Drops](#drops) |
|
|
63
|
+
| `flat-list-context-menu` | `{ node, nodes, x, y }` | Cancelable. See [Context menu](#context-menu) |
|
|
64
|
+
| `flat-list-edit-commit` | `{ node, value }` | A rename was committed |
|
|
65
|
+
| `flat-list-edit-cancel` | `{ node }` | A rename ended without a change |
|
|
56
66
|
|
|
57
67
|
The inner list's `list-*` events also cross the shadow boundary, with row elements as their `item`.
|
|
58
68
|
|
|
@@ -67,14 +77,46 @@ The inner list's `list-*` events also cross the shadow boundary, with row elemen
|
|
|
67
77
|
|
|
68
78
|
Selection is cleared on every level change. Arrow Left and Backspace are ignored while the search field is focused.
|
|
69
79
|
|
|
80
|
+
## Drops
|
|
81
|
+
|
|
82
|
+
With `items-droppable`, a drag over a row, or over empty space, is accepted unless `canDrop` refuses it. A drop fires `flat-list-drop` with that row's node, or the **current level's node** for empty space. Dropping on a branch row reports it and does **not** enter it. Native OS drags work: `dataTransfer` carries `files`, `text/uri-list` and any custom MIME type the source wrote. The row under the drag gets the vertical-list [drop highlight](../vertical-list/README.md#drop-targets).
|
|
83
|
+
|
|
84
|
+
## Context menu
|
|
85
|
+
|
|
86
|
+
`flat-list-context-menu` fires on right-click or the menu key. The row is selected first, so `nodes` is the selection to act on and `node` is the row clicked. Open your own `ixfx-menu-container` at `x, y`. Call `preventDefault()` to suppress the native menu.
|
|
87
|
+
|
|
88
|
+
## Rename
|
|
89
|
+
|
|
90
|
+
Rename is **opt-in**: set `validateEdit = (value, node) => boolean`, and mark the rows that may be renamed with `item.editable: true`. Without both, rows are plain text and `beginEdit` returns `false`. Returning `false` from the validator rejects the text and the edit ends as a cancel.
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
list.validateEdit = (value, node) => value.trim() !== '' && !names.has(value);
|
|
94
|
+
list.addEventListener('flat-list-edit-commit', ({ detail }) => rename(detail.node.item.key, detail.value));
|
|
95
|
+
list.beginEdit('set:2'); // e.g. from your own context menu
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
`beginEdit(key)` starts the edit. Commit and cancel arrive as `flat-list-edit-commit` / `flat-list-edit-cancel`. The label is not rewritten for you: change `item.label` in your tree in response, and the level refreshes.
|
|
99
|
+
|
|
70
100
|
## Incremental search
|
|
71
101
|
|
|
72
102
|
Navigate / select / filter search works over the current level, as in [`ixfx-vertical-list`](../vertical-list/README.md#incremental-search) — see [`docs/infra-incremental.md`](../../docs/infra-incremental.md). `search-modes` limits the modes. There is no default shortcut: bind a key or button to `dispatch('list.search.filter')` (or `.navigate` / `.select`). The highlight rule is built in, so no page-level `::highlight()` rule is needed. The search is closed when the level changes.
|
|
73
103
|
|
|
74
104
|
## CSS variables
|
|
75
105
|
|
|
76
|
-
`--flat-list-bg`, `--flat-list-text`, `--flat-list-border`, `--flat-list-radius`, `--flat-list-crumb-padding`, `--flat-list-crumb-font-size` (default `--text-s`), `--flat-list-chevron-gap`, `--flat-list-empty-text`. Each falls back to the matching `--list-*` variable. Other `--list-*` variables (e.g. `--list-item-height`) reach the inner list.
|
|
106
|
+
`--flat-list-bg`, `--flat-list-text`, `--flat-list-border`, `--flat-list-radius`, `--flat-list-crumb-padding`, `--flat-list-crumb-font-size` (default `--text-s`), `--flat-list-toolbar-gap`, `--flat-list-chevron-gap`, `--flat-list-marked-bg`, `--flat-list-marked-bar`, `--flat-list-empty-text`. Each falls back to the matching `--list-*` variable. Other `--list-*` variables (e.g. `--list-item-height`) reach the inner list.
|
|
107
|
+
|
|
108
|
+
## Toolbar slot
|
|
109
|
+
|
|
110
|
+
Anything you put inside the element goes in a toolbar to the right of the crumb bar, which shrinks to make room. With nothing slotted, the crumbs use the full width.
|
|
111
|
+
|
|
112
|
+
```html
|
|
113
|
+
<ixfx-flat-list>
|
|
114
|
+
<ixfx-button>New Set</ixfx-button>
|
|
115
|
+
</ixfx-flat-list>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Space between items is `--flat-list-toolbar-gap`.
|
|
77
119
|
|
|
78
120
|
## CSS parts
|
|
79
121
|
|
|
80
|
-
`crumbs` (the bar above the list), `empty`.
|
|
122
|
+
`crumbs` (the bar above the list), `toolbar` (the slot's wrapper), `empty`.
|
package/docs-user/index.json
CHANGED
|
@@ -16,9 +16,12 @@ A scrollable vertical list of items with selection, keyboard navigation, and inc
|
|
|
16
16
|
8. [Native drag-out](#native-drag-out)
|
|
17
17
|
9. [Keyboard navigation](#keyboard-navigation)
|
|
18
18
|
10. [Incremental search](#incremental-search)
|
|
19
|
-
11. [
|
|
20
|
-
12. [
|
|
21
|
-
13. [
|
|
19
|
+
11. [Drop targets](#drop-targets)
|
|
20
|
+
12. [Context menu](#context-menu)
|
|
21
|
+
13. [In-place rename](#in-place-rename)
|
|
22
|
+
14. [Virtualisation](#virtualisation)
|
|
23
|
+
15. [CSS variables](#css-variables)
|
|
24
|
+
16. [CSS parts](#css-parts)
|
|
22
25
|
|
|
23
26
|
---
|
|
24
27
|
|
|
@@ -120,6 +123,9 @@ To reflect selection state inside the custom element's shadow DOM, target the `:
|
|
|
120
123
|
| `interactionMode` / `interaction-mode` | `ListInteractionMode` | `'standard'` | How gestures map to selection changes (see table below) |
|
|
121
124
|
| `virtualize` / `virtualize` | `boolean` | `false` | Only render the viewport window (+ overscan) into the DOM; pool and recycle the rest. See [Virtualisation](#virtualisation) |
|
|
122
125
|
| `itemHeight` / `item-height` | `number` | `0` | Fixed row height in px. Required for `virtualize` — every row must be exactly this tall |
|
|
126
|
+
| `itemsDroppable` / `items-droppable` | `boolean` | `false` | Rows and empty space accept native drops. See [Drop targets](#drop-targets) |
|
|
127
|
+
| `editValidator` | `((value, key) => boolean) \| undefined` | `undefined` | Opts in to [in-place rename](#in-place-rename) and validates the typed text. Unset ⇒ rows are plain text |
|
|
128
|
+
| `canDrop` | `((item, dataTransfer) => boolean) \| undefined` | `undefined` | Refuse a drag before any event or highlight |
|
|
123
129
|
| `filterPredicate` | `((el: Element) => boolean) \| undefined` | `undefined` | External filter; only items returning `true` are shown |
|
|
124
130
|
| `checkboxRenderer` | `((checked: boolean) => unknown) \| CustomCheckboxOptions \| undefined` | `undefined` | Custom content for the checkbox in `checked` mode. See [Custom checkbox](#custom-checkbox) |
|
|
125
131
|
| `formatter` | `((item: unknown, index: number) => unknown) \| undefined` | `undefined` | Renders one `items` entry into its row. See [Adapter items](#adapter-items) |
|
|
@@ -645,6 +651,56 @@ list.filterPredicate = undefined;
|
|
|
645
651
|
|
|
646
652
|
---
|
|
647
653
|
|
|
654
|
+
## Drop targets
|
|
655
|
+
|
|
656
|
+
Set `items-droppable` to make rows — and the empty space around them — accept native drags, including OS drags carrying files (`dataTransfer.files`, `text/uri-list`, custom MIME types).
|
|
657
|
+
|
|
658
|
+
| Event | Detail | Notes |
|
|
659
|
+
|---|---|---|
|
|
660
|
+
| `list-drag-over` | `{ key, item, dataTransfer }` | Cancelable. **`preventDefault()` accepts the drop**; without it the drag is refused. Fires repeatedly while the drag moves |
|
|
661
|
+
| `list-drop` | `{ key, item, dataTransfer }` | The drop landed |
|
|
662
|
+
| `list-drag-leave` | `{ key }` | The drag left its last target (also when it is cancelled) |
|
|
663
|
+
|
|
664
|
+
`key` / `item` are `undefined` over empty list space. The list sets `dropEffect` to `copy` when you accept without choosing one — set `dataTransfer.dropEffect` in the `list-drag-over` handler to override.
|
|
665
|
+
|
|
666
|
+
The row under the drag gets `data-drop-target` (the host does, over empty space). Style it with `--list-drop-target-bg` and `--list-drop-target-outline`.
|
|
667
|
+
|
|
668
|
+
`canDrop = (item, dataTransfer) => boolean` refuses a drag up front — no events, no highlight — e.g. to let a leaf row refuse what a folder row accepts.
|
|
669
|
+
|
|
670
|
+
```typescript
|
|
671
|
+
list.itemsDroppable = true;
|
|
672
|
+
list.canDrop = (item, dt) => item?.hasAttribute('data-folder') ?? false;
|
|
673
|
+
list.addEventListener('list-drag-over', e => e.preventDefault());
|
|
674
|
+
list.addEventListener('list-drop', ({ detail }) => addFiles(detail.key, detail.dataTransfer.files));
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
---
|
|
678
|
+
|
|
679
|
+
## Context menu
|
|
680
|
+
|
|
681
|
+
`list-context-menu` `{ key, item, x, y, selectedKeys }` fires on right-click, and for the menu key (or Shift+F10) on the cursor row. A row that is not selected is selected first, as dragging does, so `selectedKeys` is what the menu acts on. Open your own `ixfx-menu-container` at `x, y` (viewport coordinates).
|
|
682
|
+
|
|
683
|
+
The event is cancelable: call `preventDefault()` to suppress the browser's native menu. The menu key never shows the native menu; it only fires this event. Right-clicking empty space fires nothing.
|
|
684
|
+
|
|
685
|
+
---
|
|
686
|
+
|
|
687
|
+
## In-place rename
|
|
688
|
+
|
|
689
|
+
Rename is **opt-in**: set `editValidator = (value, key) => boolean` first. Without it `beginEdit` returns `false` and rows stay plain text. The validator runs on commit; returning `false` rejects the text and the edit ends as a cancel.
|
|
690
|
+
|
|
691
|
+
`list.beginEdit(key)` swaps an [`ixfx-editable-label`](../editable-label/README.md) into the row, selects its text and focuses it. It returns `false` if there is no `editValidator`, or the row is unknown or not rendered.
|
|
692
|
+
|
|
693
|
+
The editor replaces the row's `[data-edit-label]` element, or the whole row if there is none. Mark the text element in rows that carry icons or badges, and set `data-edit-value` there if the editable text differs from its content.
|
|
694
|
+
|
|
695
|
+
| Event | Detail | When |
|
|
696
|
+
|---|---|---|
|
|
697
|
+
| `list-edit-commit` | `{ key, value }` | Enter or blur with a changed value |
|
|
698
|
+
| `list-edit-cancel` | `{ key }` | Escape, an unchanged value, or one the label rejects |
|
|
699
|
+
|
|
700
|
+
The list never rewrites the label itself; the original row content returns when editing ends. Update your data in response to `list-edit-commit`. `editingKey` reports the row being edited. Keys typed in the editor do not reach the list.
|
|
701
|
+
|
|
702
|
+
---
|
|
703
|
+
|
|
648
704
|
## Virtualisation
|
|
649
705
|
|
|
650
706
|
Set `virtualize` to window the list: only the rows near the viewport (plus an overscan of 3 rows) ever exist in the DOM. Everything else is pooled off-DOM and recycled **by identity** as you scroll, so a list of tens of thousands of rows keeps a tiny, fast DOM. Works for hand-supplied `<li>` / `data-list-item` elements **and** adapter (`items`) rows.
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flat-list-eYItri8-.d.ts","names":[],"sources":["../src/flat-list/types.ts","../src/flat-list/flat-list.ts"],"mappings":";;;;;;;;;KAGY;KAEA;;WAED;;WAEA;;WAEA,MAAM;;WAEN;;KAGC;WACD,UAAU,YAAY;WACtB,cAAc;WACd,UAAU,YAAY;;KAGrB;WACD,MAAM;;KAGL,wBAAwB,YAAY;KACpC,sBAAsB,YAAY;KAClC,wBAAwB,YAAY;UAE/B;EACf,sBAAsB;EACtB,oBAAoB;EACpB,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCgGX,wBAAwB;;EAEnC,MAAM;EAGN,OAAO;;EAIP;;EAIA,cAAc;EAGd,iBAAiB;;EAIjB,QAAQ,GAAG,UAAU,GAAG;EAGxB,aAAa;EAGb,eAAe;EAGf,iBAAiB;EAGjB;EAGA;EAGA;EAGA;EAGA;;EAIA;;UAIQ;UAES;UACA;;MAcb,QAAQ;;MAKR,YAAY;;EAKhB,SAAS,mBAAmB,OAAO;;MAK/B,eAAe;MAIf,iBAAiB,YAAY;;EAWjC,WAAW;;EASX,aAAa;;EASb;EAqBS;YAQU,WAAW,SAAS;YAyBpB,QAAQ,SAAS;YAgNjB,wBAAM;SA0CT,sBAAM;;QA6EhB;YACI;IACR,kBAAkB;;;UAIL;EACf,iBAAiB,gBAAgB,yBAC/B,MAAM,GACN,WAAW,MAAM,iBAAiB,OAAO,wBAAwB,aACjE,oBAAoB;EAEtB,iBACE,cACA,UAAU,oCACV,oBAAoB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-D-kYF16b.d.ts","names":[],"sources":["../src/common/types.ts"],"mappings":";;KAQY;;EAEV;;EAEA;;EAEA;;EAEA;;EAEA;;;;;;EAMA;;;;;;EAMA;;;;;;;;EAQA;;EAEA;;EAEA;;;;;;;EAOA;;;KAIU;EACV,MAAM;;;;;;;EAON,WAAW;;;;;;;KAQD,uBAAuB;EAAgB,MAAM;EAAU;GAAiB;;;;;;KAOxE,uBAAuB,MAAM,UAAU;;;;;;;KAQvC;;;;;;;;;KAUA;;;;;;;;;KAUA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vertical-list-DheZSEmB.d.ts","names":[],"sources":["../src/vertical-list/vertical-list.ts"],"mappings":";;;;;;;UA4DiB;EACf,WAAW;EACX;EACA;;UAGe;;;;;;EAMf;;cAkCW,4BAA4B;;EAEvC,eAAe;EAGf,iBAAiB;EAGjB,mBAAmB,IAAI;;;;;;EAQvB;;;;;;;;;;;;;;;;;;;EAqBA,oBAAoB,gCAAgC;;;;;;EAQpD;;;;;;EAQA;;;;;EAOA,qBAAqB,wBAAwB;EAG7C,mBAAmB,8BAA8B;;;;;;;;;;;EAajD;;;;;EAOA;;;;;;;;;EAWA,aAAa,eAAe;;;;;;;EAS5B,QAAQ,eAAe;;;;;EAOvB,aAAa,eAAe;;;;;EAO5B,aAAa,eAAe;;;;;;EAQ5B,SAAS,eAAe;;;;;;;;;;;;;;;;;;EAoBxB;;;;;;EAQA;mBAyCiB;UAeT;UA6EA;;WA6EC,QAAM,qBAAA;;MAYX,YAAY;EA2BP;EAsBA;;;;;;YA4BU;EAwDV,QAAQ,SAAS;;MAgFtB,gBAAgB;;MAKhB,iBAAiB,YAAY;EAIjC,QAAQ,MAAM,kBAAkB,UAAU;;;;;;;EA4B1C,WAAW,MAAM,UAAU;;EA2B3B,YAAY,OAAO,SAAS,WAAW;EAIvC;;;;;;EAmBA,SAAS,gBAAgB;;;;;;EAwBzB,SAAS,WAAW,WAAW,OAAO;EAItC,OAAO,MAAM;EAIb,WAAW,OAAO,SAAS;EAI3B,SAAS,MAAM;EAIf;EAIA;;MAQI,gBAAgB;;MAKhB;;EAMJ,WAAW,MAAM;;EAKjB,gBAAgB,MAAM;;EAKtB,mBAAmB,MAAM;;;;;;EASzB,SAAS;;EAgCT,aAAa,cAAc;;;;;;;;EAW3B;;;;;;;EAuBA;EAsBE,eAAe,0CAA0C,UAAU;;;;;EA2CrE,YAAY,MAAM;;;;;;;;;;;EAclB,WAAW,aAAa;UAmiBhB;UAgBA;UAOA;UAiBA;;;;;;;UA4GA;;;;;UAuBA;UAcA;UAYA;UAQA;UAWA;UAMA;UAIA;UA0DA;UAUA;UAMA;SAUQ,sBAAM;EA2Kb,wBAAM;;QAeT;YACI;IACR,sBAAsB;;YAGd,4BAA4B;;UAGvB,oCAAoC;EACnD,iCAAiC;EACjC,0BAA0B,yBAAyB"}
|