@c2n/list-item 0.0.12 → 0.0.14

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.
@@ -0,0 +1 @@
1
+ {"schemaVersion":"1.0.0","readme":"","modules":[{"kind":"javascript-module","path":"src/list-item.ts","declarations":[{"kind":"class","description":"A selectable row. On its own it is a toggle: click, Enter or Space flips `selected`. Inside a `c2-list` (and\ntherefore inside a `c2-select`) the list drives the selected state through context, handles the keyboard and the row\nonly reports clicks. The default slot is the primary text, `description` a second, muted line, `prefix-icon` and\n`suffix-icon` take an inline SVG, a `c2-feather-*` icon or a `c2-mat-icon` and are sized by\n`--c2-list-item__icon--size` — anything else in them, a shortcut hint or a badge, keeps its own size.\nWith `href` the row is a link. In a multiple-selection list, adjacent selected rows lose the corner radius between\nthem (the list marks them `joined-before` / `joined-after`) so a run of selected rows reads as one block.\n\nAccessibility: standalone rows are `role=\"button\"` with `aria-pressed`; rows in a list are `role=\"option\"` with\n`aria-selected` and a roving `tabindex` managed by the list. Set your own `role` to override.","name":"ListItem","cssProperties":[{"type":{"text":"pixel"},"name":"--c2-list-item--min-height","default":"36px"},{"type":{"text":"pixel"},"description":"Space between the icons and the content.","name":"--c2-list-item--gap","default":"8px"},{"type":{"text":"border-radius"},"name":"--c2-list-item--border-top-left-radius","default":"6px"},{"type":{"text":"border-radius"},"name":"--c2-list-item--border-top-right-radius","default":"6px"},{"type":{"text":"border-radius"},"name":"--c2-list-item--border-bottom-left-radius","default":"6px"},{"type":{"text":"border-radius"},"name":"--c2-list-item--border-bottom-right-radius","default":"6px"},{"type":{"text":"padding"},"name":"--c2-list-item--padding-top","default":"6px"},{"type":{"text":"padding"},"name":"--c2-list-item--padding-right","default":"10px"},{"type":{"text":"padding"},"name":"--c2-list-item--padding-bottom","default":"6px"},{"type":{"text":"padding"},"name":"--c2-list-item--padding-left","default":"10px"},{"type":{"text":"font-size"},"name":"--c2-list-item--font-size","default":"14px"},{"type":{"text":"font-weight"},"name":"--c2-list-item--font-weight"},{"type":{"text":"font-style"},"name":"--c2-list-item--font-style"},{"type":{"text":"font-family"},"name":"--c2-list-item--font-family"},{"type":{"text":"pixel"},"name":"--c2-list-item--line-height","default":"20px"},{"type":{"text":"border"},"name":"--c2-list-item--border-top"},{"type":{"text":"border"},"name":"--c2-list-item--border-bottom"},{"type":{"text":"border"},"name":"--c2-list-item--border-right"},{"type":{"text":"border"},"name":"--c2-list-item--border-left"},{"type":{"text":"color"},"name":"--c2-list-item--color","default":"#18181b"},{"type":{"text":"color"},"name":"--c2-list-item--background","default":"transparent"},{"type":{"text":"color"},"name":"--c2-list-item__description--color","default":"#71717a"},{"type":{"text":"font-size"},"name":"--c2-list-item__description--font-size","default":"12px"},{"type":{"text":"pixel"},"name":"--c2-list-item__description--line-height","default":"16px"},{"type":{"text":"pixel"},"name":"--c2-list-item__description--margin-top","default":"1px"},{"type":{"text":"border"},"name":"--c2-list-item__hover--border-top"},{"type":{"text":"border"},"name":"--c2-list-item__hover--border-bottom"},{"type":{"text":"border"},"name":"--c2-list-item__hover--border-right"},{"type":{"text":"border"},"name":"--c2-list-item__hover--border-left"},{"type":{"text":"color"},"name":"--c2-list-item__hover--color"},{"type":{"text":"color"},"name":"--c2-list-item__hover--background","default":"#f4f4f5"},{"type":{"text":"border"},"name":"--c2-list-item__selected--border-top"},{"type":{"text":"border"},"name":"--c2-list-item__selected--border-bottom"},{"type":{"text":"border"},"name":"--c2-list-item__selected--border-right"},{"type":{"text":"border"},"name":"--c2-list-item__selected--border-left"},{"type":{"text":"color"},"name":"--c2-list-item__selected--color","default":"#2f56e6"},{"type":{"text":"color"},"name":"--c2-list-item__selected--background","default":"#edf1fe"},{"type":{"text":"color"},"name":"--c2-list-item__selected__hover--background","default":"#e2e9fd"},{"type":{"text":"color"},"description":"Defaults to the description colour.","name":"--c2-list-item__selected__description--color"},{"type":{"text":"outline"},"name":"--c2-list-item__focus--outline","default":"2px solid rgba(2, 101, 220, 0.4)"},{"type":{"text":"pixel"},"name":"--c2-list-item__focus--outline-offset","default":"-2px"},{"type":{"text":"opacity"},"name":"--c2-list-item__disabled--opacity","default":"0.38"},{"type":{"text":"pixel"},"name":"--c2-list-item__icon--size","default":"16px"},{"type":{"text":"color"},"description":"Defaults to the row text colour.","name":"--c2-list-item__icon--color"}],"slots":[{"description":"The row content. Falls back to `label`, then `value`, when empty.","name":"default"},{"description":"Secondary line under the content (muted, smaller).","name":"description"},{"description":"Icon (or avatar, badge, …) shown before the content.","name":"prefix-icon"},{"description":"Icon shown after the content, e.g. a check mark or shortcut hint.","name":"suffix-icon"}],"members":[{"kind":"field","name":"contextConsumer","privacy":"private","default":"new ContextConsumer(this, { context: selectedItemValueContext, subscribe: true, callback: (value) => { this.selected = value ? value.includes(this.value) : false }, })"},{"kind":"field","name":"selected","type":{"text":"boolean"},"default":"false","description":"Whether the row is selected. Toggled by a click on a standalone row; controlled by the list otherwise.","attribute":"selected","reflects":true},{"kind":"field","name":"disabled","type":{"text":"boolean"},"default":"false","description":"Dims the row and ignores clicks and keyboard.","attribute":"disabled","reflects":true},{"kind":"field","name":"value","type":{"text":"string"},"default":"''","description":"The value reported to the parent list / select.","attribute":"value","reflects":true},{"kind":"field","name":"label","type":{"text":"string | undefined"},"description":"Text shown by the parent select for this row instead of the slotted content. Also the fallback content of the\ndefault slot when it is empty. Use it when the row content is rich (icons, two lines) but the trigger should show a\nshort label.","attribute":"label","reflects":true},{"kind":"field","name":"href","type":{"text":"string | undefined"},"default":"undefined","description":"Makes the row a link. Selection still works when the row sits in a list.","attribute":"href"},{"kind":"field","name":"target","type":{"text":"string | undefined"},"default":"undefined","description":"Browsing context used when `href` is set, such as `_blank`.","attribute":"target"},{"kind":"field","name":"data","type":{"text":"unknown | undefined"},"description":"Arbitrary payload returned alongside `value` in the list's `selection-change` event. Not an attribute."},{"kind":"field","name":"applyContext","type":{"text":"boolean"},"default":"false","description":"Private property, it will use context value to setup selected state of component."},{"kind":"field","name":"slotPresence","privacy":"private","readonly":true,"default":"new SlotPresenceController(this, ['description'])"},{"kind":"field","name":"contentSlot","type":{"text":"HTMLSlotElement"},"privacy":"private"},{"kind":"field","name":"authorRole","type":{"text":"string | null"},"privacy":"private","default":"null","description":"`role` written by the author, kept over the automatic one."},{"kind":"field","name":"displayText","type":{"text":"string"},"description":"The text a `c2-select` shows for this row: `label` when set, otherwise the text content of the default slot.","readonly":true},{"kind":"field","name":"blockDisabledClick","privacy":"private"},{"kind":"method","name":"activate","description":"Behaves like a click: dispatches `click` on the row and, for a standalone row, toggles `selected`."},{"kind":"field","name":"handleClick","privacy":"private"},{"kind":"field","name":"handleKeydown","privacy":"private"},{"kind":"method","name":"syncAria","privacy":"private"},{"kind":"method","name":"renderInner","privacy":"private"}],"events":[{"name":"click","type":{"text":"MouseEvent"},"description":"Fired when an enabled row is activated; a row with `href` also navigates."},{"name":"selected-change","type":{"text":"CustomEvent<{ selected: boolean; value: string }>"},"description":"Fired after `selected` changes, whether from a click or from the parent list."}],"attributes":[{"name":"selected","type":{"text":"boolean"},"default":"false","description":"Whether the row is selected. Toggled by a click on a standalone row; controlled by the list otherwise.","fieldName":"selected"},{"name":"disabled","type":{"text":"boolean"},"default":"false","description":"Dims the row and ignores clicks and keyboard.","fieldName":"disabled"},{"name":"value","type":{"text":"string"},"default":"''","description":"The value reported to the parent list / select.","fieldName":"value"},{"name":"label","type":{"text":"string | undefined"},"description":"Text shown by the parent select for this row instead of the slotted content. Also the fallback content of the\ndefault slot when it is empty. Use it when the row content is rich (icons, two lines) but the trigger should show a\nshort label.","fieldName":"label"},{"name":"href","type":{"text":"string | undefined"},"default":"undefined","description":"Makes the row a link. Selection still works when the row sits in a list.","fieldName":"href"},{"name":"target","type":{"text":"string | undefined"},"default":"undefined","description":"Browsing context used when `href` is set, such as `_blank`.","fieldName":"target"}],"superclass":{"name":"LitElement","package":"lit"},"tagName":"c2-list-item","customElement":true}],"exports":[{"kind":"js","name":"ListItem","declaration":{"name":"ListItem","module":"src/list-item.ts"}},{"kind":"custom-element-definition","name":"c2-list-item","declaration":{"name":"ListItem","module":"src/list-item.ts"}}]}]}
package/dist/list-item.js CHANGED
@@ -1,10 +1,11 @@
1
1
  import { t as selectedItemValueContext } from "./list-item-context-CXKVRXXI.js";
2
2
  import { LitElement, html, nothing, unsafeCSS } from "lit";
3
- import { property, query, state } from "lit/decorators.js";
3
+ import { query } from "lit/decorators.js";
4
+ import { property } from "@c2n/core/lit-helper.js";
4
5
  import { customElement } from "@c2n/core/element-helper.js";
5
6
  import { ifDefined } from "lit/directives/if-defined.js";
6
7
  import { ContextConsumer } from "@c2n/core/controllers/context-consumer.js";
7
- import { redispatchEvent } from "@c2n/core/dom-helper.js";
8
+ import { SlotPresenceController, redispatchEvent } from "@c2n/core/dom-helper.js";
8
9
  //#region src/list-item.scss?inline
9
10
  var list_item_default = "/* ex : var((width: 24px), width, c2-checkbox) returns var(--c2-checkbox-width, 24px) */\n:host {\n display: block;\n flex: none;\n user-select: none;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.c2-list-item {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n cursor: pointer;\n text-decoration: none;\n min-height: var(--c2-list-item--min-height,36px);\n gap: var(--c2-list-item--gap,8px);\n font-size: var(--c2-list-item--font-size,14px);\n font-weight: var(--c2-list-item--font-weight);\n font-style: var(--c2-list-item--font-style);\n font-family: var(--c2-list-item--font-family);\n line-height: var(--c2-list-item--line-height,20px);\n border-top-left-radius: var(--c2-list-item--border-top-left-radius,6px);\n border-top-right-radius: var(--c2-list-item--border-top-right-radius,6px);\n border-bottom-left-radius: var(--c2-list-item--border-bottom-left-radius,6px);\n border-bottom-right-radius: var(--c2-list-item--border-bottom-right-radius,6px);\n padding-top: var(--c2-list-item--padding-top,6px);\n padding-right: var(--c2-list-item--padding-right,10px);\n padding-bottom: var(--c2-list-item--padding-bottom,6px);\n padding-left: var(--c2-list-item--padding-left,10px);\n border-top: var(--c2-list-item--border-top);\n border-bottom: var(--c2-list-item--border-bottom);\n border-right: var(--c2-list-item--border-right);\n border-left: var(--c2-list-item--border-left);\n background: var(--c2-list-item--background,transparent);\n color: var(--c2-list-item--color,#18181b);\n will-change: background, color, border;\n transition: background 250ms cubic-bezier(0.2, 0, 0, 1), color 250ms cubic-bezier(0.2, 0, 0, 1), border 250ms cubic-bezier(0.2, 0, 0, 1);\n}\n.c2-list-item:hover {\n border-top: var(--c2-list-item__hover--border-top,var(--c2-list-item--border-top));\n border-bottom: var(--c2-list-item__hover--border-bottom,var(--c2-list-item--border-bottom));\n border-right: var(--c2-list-item__hover--border-right,var(--c2-list-item--border-right));\n border-left: var(--c2-list-item__hover--border-left,var(--c2-list-item--border-left));\n background: var(--c2-list-item__hover--background,var(--c2-list-item--background,#f4f4f5));\n color: var(--c2-list-item__hover--color,var(--c2-list-item--color,#18181b));\n}\n\n.c2-list-item__content {\n flex: 1;\n min-width: 0;\n}\n\n.c2-list-item__description {\n margin-top: var(--c2-list-item__description--margin-top,1px);\n color: var(--c2-list-item__description--color,#71717a);\n font-size: var(--c2-list-item__description--font-size,12px);\n line-height: var(--c2-list-item__description--line-height,16px);\n font-weight: normal;\n}\n.c2-list-item__description[hidden] {\n display: none;\n}\n\n:host(:focus) {\n outline: none;\n}\n\n:host(:focus-visible) .c2-list-item {\n outline: var(--c2-list-item__focus--outline,2px solid rgba(2, 101, 220, 0.4));\n outline-offset: var(--c2-list-item__focus--outline-offset,-2px);\n}\n\n::slotted([slot=prefix-icon]),\n::slotted([slot=suffix-icon]) {\n flex: none;\n color: var(--c2-list-item__icon--color);\n --c2-feather-icon--size: var(--c2-list-item__icon--size,16px);\n --c2-mat-icon--font-size: var(--c2-list-item__icon--size,16px);\n}\n\n::slotted(svg[slot=prefix-icon]),\n::slotted(svg[slot=suffix-icon]) {\n width: var(--c2-list-item__icon--size,16px);\n height: var(--c2-list-item__icon--size,16px);\n}\n\n:host([selected]) .c2-list-item {\n border-top: var(--c2-list-item__selected--border-top,var(--c2-list-item--border-top));\n border-bottom: var(--c2-list-item__selected--border-bottom,var(--c2-list-item--border-bottom));\n border-right: var(--c2-list-item__selected--border-right,var(--c2-list-item--border-right));\n border-left: var(--c2-list-item__selected--border-left,var(--c2-list-item--border-left));\n background: var(--c2-list-item__selected--background,var(--c2-list-item--background,#edf1fe));\n color: var(--c2-list-item__selected--color,var(--c2-list-item--color,#2f56e6));\n}\n:host([selected]) .c2-list-item:hover {\n background: var(--c2-list-item__selected__hover--background,var(--c2-list-item__selected--background,#e2e9fd));\n}\n:host([selected]) .c2-list-item__description {\n color: var(--c2-list-item__selected__description--color,var(--c2-list-item__description--color,#71717a));\n}\n\n:host([selected][joined-before]) .c2-list-item {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n:host([selected][joined-after]) .c2-list-item {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n:host([disabled]) .c2-list-item {\n pointer-events: none;\n cursor: default;\n opacity: var(--c2-list-item__disabled--opacity,0.38);\n}";
10
11
  //#endregion
@@ -33,7 +34,7 @@ var ListItem = class ListItem extends LitElement {
33
34
  this.href = void 0;
34
35
  this.target = void 0;
35
36
  this.applyContext = false;
36
- this.hasDescription = false;
37
+ this.slotPresence = new SlotPresenceController(this, ["description"]);
37
38
  this.authorRole = null;
38
39
  this.blockDisabledClick = (event) => {
39
40
  if (!this.disabled) return;
@@ -85,12 +86,6 @@ var ListItem = class ListItem extends LitElement {
85
86
  cancelable: true
86
87
  })) && !this.applyContext) this.selected = !this.selected;
87
88
  }
88
- handleDescriptionSlotChange(event) {
89
- this.updateDescription(event.target);
90
- }
91
- updateDescription(slot) {
92
- this.hasDescription = slot.assignedNodes({ flatten: true }).some((n) => n.nodeType === Node.ELEMENT_NODE || (n.textContent ?? "").trim() !== "");
93
- }
94
89
  willUpdate(changedProperties) {
95
90
  if (changedProperties.has("applyContext")) {
96
91
  if (this.applyContext) this.contextConsumer.applyContext();
@@ -132,8 +127,8 @@ var ListItem = class ListItem extends LitElement {
132
127
  <slot name="prefix-icon"></slot>
133
128
  <div class="c2-list-item__content">
134
129
  <div class="c2-list-item__text"><slot>${this.label ?? this.value}</slot></div>
135
- <div class="c2-list-item__description" ?hidden=${!this.hasDescription}>
136
- <slot name="description" @slotchange=${this.handleDescriptionSlotChange}></slot>
130
+ <div class="c2-list-item__description" ?hidden=${!this.slotPresence.has("description")}>
131
+ <slot name="description" @slotchange=${this.slotPresence.handleSlotChange}></slot>
137
132
  </div>
138
133
  </div>
139
134
  <slot name="suffix-icon"></slot>
@@ -166,7 +161,6 @@ __decorate([property()], ListItem.prototype, "href", void 0);
166
161
  __decorate([property()], ListItem.prototype, "target", void 0);
167
162
  __decorate([property({ attribute: false })], ListItem.prototype, "data", void 0);
168
163
  __decorate([property({ attribute: false })], ListItem.prototype, "applyContext", void 0);
169
- __decorate([state()], ListItem.prototype, "hasDescription", void 0);
170
164
  __decorate([query("slot:not([name])")], ListItem.prototype, "contentSlot", void 0);
171
165
  ListItem = __decorate([customElement("c2-list-item")], ListItem);
172
166
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c2n/list-item",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "type": "module",
5
5
  "main": "dist/list-item.js",
6
6
  "exports": {
@@ -25,6 +25,7 @@
25
25
  "files": [
26
26
  "dist",
27
27
  "types",
28
+ "custom-elements.json",
28
29
  "react.d.ts",
29
30
  "react.js",
30
31
  "vue.d.ts",
@@ -64,7 +65,7 @@
64
65
  }
65
66
  },
66
67
  "dependencies": {
67
- "@c2n/core": "0.0.12",
68
+ "@c2n/core": "0.0.14",
68
69
  "@lit/context": "1.1.6",
69
70
  "lit": "3.3.3"
70
71
  },
@@ -72,5 +73,5 @@
72
73
  "@c2n/config": "*"
73
74
  },
74
75
  "customElements": "custom-elements.json",
75
- "gitHead": "43e38b42ac221ffeef99a773c42dd3356961d26a"
76
+ "gitHead": "0261bfceaaa9f710a54e8f36cb57f946c0b83e53"
76
77
  }
@@ -115,7 +115,7 @@ export declare class ListItem extends LitElement {
115
115
  * Private property, it will use context value to setup selected state of component.
116
116
  */
117
117
  applyContext: boolean;
118
- private hasDescription;
118
+ private readonly slotPresence;
119
119
  private contentSlot;
120
120
  /** `role` written by the author, kept over the automatic one. */
121
121
  private authorRole;
@@ -128,8 +128,6 @@ export declare class ListItem extends LitElement {
128
128
  activate(): void;
129
129
  private handleClick;
130
130
  private handleKeydown;
131
- private handleDescriptionSlotChange;
132
- private updateDescription;
133
131
  protected willUpdate(changedProperties: PropertyValueMap<this>): void;
134
132
  protected updated(changedProperties: PropertyValueMap<this>): void;
135
133
  private syncAria;
@@ -1 +1 @@
1
- {"version":3,"file":"list-item.d.ts","sourceRoot":"","sources":["../../src/list-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAGjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAOhG,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,WAAW,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,KAAK,EAAE,UAAU,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,gBAAgB,EAAE,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;IACnE,mBAAmB,EAAE,wBAAwB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;CAC1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,qBACa,QAAS,SAAQ,UAAU;IACtC,OAAgB,MAAM,0BAAoB;IAE1C,OAAO,CAAC,eAAe,CAMrB;IAEF,6GAA6G;IACjE,QAAQ,UAAQ;IAE5D,oDAAoD;IACR,QAAQ,UAAQ;IAE5D,sDAAsD;IACzB,KAAK,SAAK;IAEvC;;;;OAIG;IAC0B,KAAK,CAAC,EAAE,MAAM,CAAA;IAE3C,+EAA+E;IACnE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAY;IAEhD,kEAAkE;IACtD,MAAM,EAAE,MAAM,GAAG,SAAS,CAAY;IAElD,6GAA6G;IAC7E,IAAI,CAAC,EAAE,OAAO,CAAA;IAE9C;;OAEG;IAC6B,YAAY,UAAQ;IAE3C,OAAO,CAAC,cAAc,CAAQ;IAGvC,OAAO,CAAC,WAAW,CAAkB;IAErC,iEAAiE;IACjE,OAAO,CAAC,UAAU,CAAsB;IAExC,mHAAmH;IACnH,IAAI,WAAW,IAAI,MAAM,CAYxB;IAEQ,iBAAiB;IAOjB,oBAAoB;IAM7B,OAAO,CAAC,kBAAkB,CAIzB;IAED,yGAAyG;IACzG,QAAQ;IAMR,OAAO,CAAC,WAAW,CAWlB;IAED,OAAO,CAAC,aAAa,CAQpB;IAED,OAAO,CAAC,2BAA2B;IAInC,OAAO,CAAC,iBAAiB;cAIN,UAAU,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI;cAU3D,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI;IAc3E,OAAO,CAAC,QAAQ;IAqBhB,OAAO,CAAC,WAAW;IAaV,MAAM;CAchB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,QAAQ,CAAA;KACzB;CACF"}
1
+ {"version":3,"file":"list-item.d.ts","sourceRoot":"","sources":["../../src/list-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,KAAK,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAIjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAOhG,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,WAAW,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,KAAK,EAAE,UAAU,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,gBAAgB,EAAE,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;IACnE,mBAAmB,EAAE,wBAAwB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;CAC1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,qBACa,QAAS,SAAQ,UAAU;IACtC,OAAgB,MAAM,0BAAoB;IAE1C,OAAO,CAAC,eAAe,CAMrB;IAEF,6GAA6G;IACjE,QAAQ,UAAQ;IAE5D,oDAAoD;IACR,QAAQ,UAAQ;IAE5D,sDAAsD;IACzB,KAAK,SAAK;IAEvC;;;;OAIG;IAC0B,KAAK,CAAC,EAAE,MAAM,CAAA;IAE3C,+EAA+E;IACnE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAY;IAEhD,kEAAkE;IACtD,MAAM,EAAE,MAAM,GAAG,SAAS,CAAY;IAElD,6GAA6G;IAC7E,IAAI,CAAC,EAAE,OAAO,CAAA;IAE9C;;OAEG;IAC6B,YAAY,UAAQ;IAEpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoD;IAGjF,OAAO,CAAC,WAAW,CAAkB;IAErC,iEAAiE;IACjE,OAAO,CAAC,UAAU,CAAsB;IAExC,mHAAmH;IACnH,IAAI,WAAW,IAAI,MAAM,CAYxB;IAEQ,iBAAiB;IAOjB,oBAAoB;IAM7B,OAAO,CAAC,kBAAkB,CAIzB;IAED,yGAAyG;IACzG,QAAQ;IAMR,OAAO,CAAC,WAAW,CAWlB;IAED,OAAO,CAAC,aAAa,CAQpB;cAEkB,UAAU,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI;cAU3D,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI;IAc3E,OAAO,CAAC,QAAQ;IAqBhB,OAAO,CAAC,WAAW;IAaV,MAAM;CAchB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,QAAQ,CAAA;KACzB;CACF"}