UNPKG

ng-hub-ui-accordion

Version:

A flexible, accessible, and customizable accordion component for Angular 19, part of the ng-hub-ui family.

1 lines 17.2 kB
{"version":3,"file":"ng-hub-ui-accordion.mjs","sources":["../../../projects/accordion/src/lib/directives/accordion-panel-header.directive.ts","../../../projects/accordion/src/lib/components/accordion-panel/accordion-panel.component.ts","../../../projects/accordion/src/lib/components/accordion-panel/accordion-panel.component.html","../../../projects/accordion/src/lib/components/accordion/accordion.component.ts","../../../projects/accordion/src/lib/components/accordion/accordion.component.html","../../../projects/accordion/src/public-api.ts","../../../projects/accordion/src/ng-hub-ui-accordion.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[hubAccordionPanelHeader]'\n})\nexport class AccordionPanelHeaderDirective {\n\tconstructor(public templateRef: TemplateRef<any>) {}\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tComponent,\n\tcontentChild,\n\tinput,\n\tmodel,\n\toutput,\n\tTemplateRef\n} from '@angular/core';\nimport { AccordionPanelHeaderDirective } from '../../directives/accordion-panel-header.directive';\nimport { CollapseEvent } from '../../models/collapse-event';\n\n/**\n * A component that represents a single panel within an accordion.\n * Each panel can be expanded or collapsed independently and contains a header and content section.\n *\n * @example\n * ```html\n * <hub-accordion-panel [title]=\"'Panel Title'\" [value]=\"panelValue\">\n * <ng-template hubAccordionPanelHeader>Custom Header</ng-template>\n * Panel Content\n * </hub-accordion-panel>\n * ```\n *\n * @implements {OnInit}\n *\n * @property {number} index - The position of this panel within its parent accordion\n * @property {any} value - The value associated with this panel\n * @property {WritableSignal<boolean>} collapsed - Signal controlling the panel's collapsed state\n * @property {string} title - The title text displayed in the panel's header\n * @property {TemplateRef<any>} headerTpt - Template reference for custom header content\n *\n * @emits {collapseEvent} collapsedChange - Fired when the panel's collapsed state changes\n */\n@Component({\n\tselector: 'hub-accordion-panel',\n\timports: [NgTemplateOutlet],\n\ttemplateUrl: './accordion-panel.component.html',\n\thost: { class: 'hub-accordion-panel' }\n})\nexport class AccordionPanelComponent {\n\t/**\n\t * The position of this panel within its parent accordion.\n\t *\n\t * @type {number}\n\t */\n\tindex!: number;\n\n\tvalue: any = input();\n\n\t/**\n\t * Signal that controls the collapsed state of the accordion panel.\n\t * When true, the panel is collapsed. When false, the panel is expanded.\n\t * @default true\n\t */\n\tcollapsed = model(true);\n\n\t/**\n\t * The title of the accordion panel.\n\t *\n\t * @type {string}\n\t */\n\ttitle = input();\n\n\t/**\n\t * Reference to the header template of the accordion panel.\n\t * Uses contentChild query to find a template marked with AccordionPanelHeaderDirective.\n\t * The template reference is read using TemplateRef.\n\t */\n\theaderTpt = contentChild(AccordionPanelHeaderDirective, {\n\t\tread: TemplateRef\n\t});\n\n\t/**\n\t * Event emitter that fires when the panel's collapsed state changes.\n\t * Emits a collapseEvent object containing the collapse state and animation details.\n\t * @event\n\t */\n\tcollapsedChange = output<CollapseEvent>();\n\n\t/**\n\t * Toggles the collapse state of the accordion panel and emits the change event.\n\t * The event includes the panel's index and its new collapsed state.\n\t *\n\t * @emits collapsedChange - Emits an object containing the panel index and collapsed state\n\t */\n\ttoggleCollapse() {\n\t\tthis.collapsed.update((value) => !value);\n\t\tthis.collapsedChange.emit({\n\t\t\tindex: this.index,\n\t\t\tcollapsed: this.collapsed(),\n\t\t\tuncollapsed: !this.collapsed(),\n\t\t\tvalue: this.value()\n\t\t});\n\t}\n}\n","<h2 class=\"hub-accordion-header\">\n\t<button\n\t\tclass=\"hub-accordion-button\"\n\t\ttype=\"button\"\n\t\t[class.collapsed]=\"collapsed()\"\n\t\t[attr.data-bs-target]=\"'#collapse' + index\"\n\t\t[attr.aria-expanded]=\"!collapsed()\"\n\t\t[attr.aria-controls]=\"'collapse' + index\"\n\t\t(click)=\"toggleCollapse()\"\n\t>\n\t\t@if (headerTpt()) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"$any(headerTpt())\"></ng-container>\n\t\t} @else if (title()) {\n\t\t\t{{ title() }}\n\t\t}\n\t</button>\n</h2>\n<div\n\t[attr.id]=\"'collapse' + index\"\n\tclass=\"hub-accordion-collapse collapse\"\n\t[class.show]=\"!collapsed()\"\n>\n\t<div class=\"hub-accordion-body\">\n\t\t<ng-content></ng-content>\n\t</div>\n</div>\n","import {\n\tComponent,\n\tcontentChildren,\n\teffect,\n\tforwardRef,\n\tHostBinding,\n\tinput\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CollapseEvent } from '../../models/collapse-event';\nimport { AccordionPanelComponent } from '../accordion-panel/accordion-panel.component';\n\n/**\n * A component that implements an accordion UI pattern, allowing users to show and hide\n * sections of related content. Supports single or multiple expanded panels and flush styling.\n * Implements ControlValueAccessor for form integration.\n *\n * @example\n * ```html\n * <hub-accordion [multiple]=\"true\" [options]=\"{flush: true}\">\n * <hub-accordion-panel>...</hub-accordion-panel>\n * <hub-accordion-panel>...</hub-accordion-panel>\n * </hub-accordion>\n * ```\n *\n * @implements {ControlValueAccessor}\n * @extends {SelectMultipleControlValueAccessor}\n */\n@Component({\n\tselector: 'hub-accordion',\n\ttemplateUrl: './accordion.component.html',\n\thost: { class: 'hub-accordion' },\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => AccordionComponent),\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class AccordionComponent implements ControlValueAccessor {\n\t/**\n\t * The current value of the accordion component.\n\t * An array that may contain any type of data.\n\t */\n\tvalue: any[] = [];\n\n\t/**\n\t * Input binding that configures the property or attribute to bind to.\n\t * Defines the property that will be bound to the value of the accordion.\n\t * @default undefined\n\t */\n\tbindValue = input<string>();\n\n\t/**\n\t * Configuration options for the accordion component.\n\t *\n\t * @property {Object} options - The options object for configuring the accordion.\n\t * @property {boolean} options.flush - When true, removes some borders and rounded corners to render\n\t * accordions edge-to-edge with their parent container. Defaults to false.\n\t */\n\toptions = input<{ flush: boolean }>({ flush: false });\n\n\t/**\n\t * Defines a comparison function to determine if two accordion items are equal.\n\t * Used to track identity of objects in accordion selections.\n\t *\n\t * @param o1 First object to compare\n\t * @param o2 Second object to compare\n\t * @returns {boolean} True if objects are considered equal, false otherwise\n\t * @defaultValue Default implementation uses strict equality (===)\n\t */\n\treadonly compareWith = input<(o1: any, o2: any) => boolean>(\n\t\t(o1, o2) => o1 === o2\n\t);\n\n\t/**\n\t * When true, expanding an accordion item will close all other expanded items.\n\t * Defaults to false.\n\t */\n\tmultiple = input(false);\n\n\t/**\n\t * Collection of child AccordionPanelComponent instances within this accordion.\n\t * Uses Angular's contentChildren query to obtain all panel components.\n\t * @type {QueryList<AccordionPanelComponent>}\n\t */\n\tpanels = contentChildren(AccordionPanelComponent);\n\n\t/**\n\t * Effect that manages panel changes and their subscriptions.\n\t * Initializes panel indices and subscribes to collapse events for each panel.\n\t * This effect runs whenever the panels signal changes.\n\t *\n\t * For each panel:\n\t * - Sets its index based on array position\n\t * - Subscribes to panel collapse events to handle state changes\n\t */\n\tpanelsChangeEffect = effect(() => {\n\t\tthis.panels().forEach((panel, index) => {\n\t\t\tpanel.index = index;\n\t\t\tpanel.collapsedChange.subscribe((event) => {\n\t\t\t\tthis.handlePanelCollapse(event);\n\t\t\t});\n\t\t});\n\t});\n\n\t/**\n\t * Gets whether the accordion has the flush styling option enabled\n\t * @returns {boolean} True if the flush option is enabled, false otherwise\n\t */\n\t@HostBinding('class.hub-accordion-flush')\n\tget haveFlushClass() {\n\t\treturn this.options().flush;\n\t}\n\n\tonChange: any = () => {};\n\tonTouch: any = () => {};\n\n\t/**\n\t * Implements the ControlValueAccessor interface to write a new value to the form control.\n\t * If multiple selection is not enabled, wraps the value in an array.\n\t * @param obj The value to be written to the form control\n\t */\n\twriteValue(obj: any): void {\n\t\tif (!obj) {\n\t\t\tthis.value = [];\n\t\t\treturn;\n\t\t}\n\t\tthis.value = !this.multiple() ? [obj] : obj;\n\t\tthis.handleValue();\n\t}\n\n\t/**\n\t * Registers a callback function that is invoked when the control's value changes in the UI.\n\t * This is part of the ControlValueAccessor interface implementation.\n\t * @param fn - The callback function to register. This function will be called with the new value when the control's value changes.\n\t */\n\tregisterOnChange(fn: any): void {\n\t\tthis.onChange = fn;\n\t}\n\n\t/**\n\t * Registers a callback function that is called when the control receives a touch event.\n\t * Part of the ControlValueAccessor interface implementation.\n\t * @param fn - The callback function to register. Gets called when the control is touched.\n\t */\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onTouch = fn;\n\t}\n\n\t/**\n\t * Updates the collapse state of all panels based on the current value.\n\t * Each panel is collapsed if its value is not found in the accordion's value array using the compareWith function.\n\t * @internal\n\t */\n\thandleValue() {\n\t\tfor (const panel of this.panels()) {\n\t\t\tpanel.collapsed.set(\n\t\t\t\t!this.value.find((v) => this.compareWith()(v, panel.value()))\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the collapse/expand event of an accordion panel.\n\t * If the panel is being expanded and multiple is enabled,\n\t * all other panels will be collapsed.\n\t *\n\t * @param {CollapseEvent} param0 - Object containing panel index and collapse state\n\t * @param {number} param0.index - The index of the panel being toggled\n\t * @param {boolean} param0.collapsed - The new collapse state of the panel\n\t * @param {boolean} param0.value - The panel value\n\t */\n\thandlePanelCollapse({ index, collapsed, value }: CollapseEvent) {\n\t\tif (!Array.isArray(this.value)) {\n\t\t\tthis.value = [];\n\t\t}\n\n\t\tif (collapsed) {\n\t\t\tthis.value = this.value.filter(\n\t\t\t\t(item) => !this.compareWith()(item, value)\n\t\t\t);\n\t\t} else {\n\t\t\tthis.value = !this.multiple() ? [value] : [...this.value, value];\n\t\t}\n\t\tif (!collapsed && !this.multiple()) {\n\t\t\tfor (const panel of this.panels()) {\n\t\t\t\tif (panel.index === index) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tpanel.collapsed.set(true);\n\t\t\t}\n\t\t}\n\t\tthis.onChange(\n\t\t\t!this.multiple() ? (this.value.at(0) ?? null) : this.value\n\t\t);\n\t}\n}\n","<ng-content></ng-content>\n","/*\n * Public API Surface of accordion\n */\n\nexport * from './lib/components/accordion-panel/accordion-panel.component';\nexport * from './lib/components/accordion/accordion.component';\nexport * from './lib/directives/accordion-panel-header.directive';\nexport * from './lib/models/collapse-event';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAKa,6BAA6B,CAAA;AACzC,IAAA,WAAA,CAAmB,WAA6B,EAAA;QAA7B,IAAW,CAAA,WAAA,GAAX,WAAW;;8GADlB,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE;AACV,iBAAA;;;ACQD;;;;;;;;;;;;;;;;;;;;;AAqBG;MAOU,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;QAcC,IAAK,CAAA,KAAA,GAAQ,KAAK,EAAE;AAEpB;;;;AAIG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AAEvB;;;;AAIG;QACH,IAAK,CAAA,KAAA,GAAG,KAAK,EAAE;AAEf;;;;AAIG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,YAAY,CAAC,6BAA6B,EAAE;AACvD,YAAA,IAAI,EAAE;AACN,SAAA,CAAC;AAEF;;;;AAIG;QACH,IAAe,CAAA,eAAA,GAAG,MAAM,EAAiB;AAiBzC;AAfA;;;;;AAKG;IACH,cAAc,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,SAAA,CAAC;;8GArDS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,snBA6BV,6BAA6B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAC/C,WAAW,ECtEnB,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,6sBA0BA,4CDUW,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAId,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;+BACC,qBAAqB,EAAA,OAAA,EACtB,CAAC,gBAAgB,CAAC,QAErB,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAA,QAAA,EAAA,6sBAAA,EAAA;;;AE1BvC;;;;;;;;;;;;;;;AAeG;MAaU,kBAAkB,CAAA;AAZ/B,IAAA,WAAA,GAAA;AAaC;;;AAGG;QACH,IAAK,CAAA,KAAA,GAAU,EAAE;AAEjB;;;;AAIG;QACH,IAAS,CAAA,SAAA,GAAG,KAAK,EAAU;AAE3B;;;;;;AAMG;QACH,IAAO,CAAA,OAAA,GAAG,KAAK,CAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAErD;;;;;;;;AAQG;AACM,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAC3B,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CACrB;AAED;;;AAGG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AAEvB;;;;AAIG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,eAAe,CAAC,uBAAuB,CAAC;AAEjD;;;;;;;;AAQG;AACH,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,MAAK;YAChC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AACtC,gBAAA,KAAK,CAAC,KAAK,GAAG,KAAK;gBACnB,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACzC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAChC,iBAAC,CAAC;AACH,aAAC,CAAC;AACH,SAAC,CAAC;AAWF,QAAA,IAAA,CAAA,QAAQ,GAAQ,MAAK,GAAG;AACxB,QAAA,IAAA,CAAA,OAAO,GAAQ,MAAK,GAAG;AAiFvB;AA3FA;;;AAGG;AACH,IAAA,IACI,cAAc,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK;;AAM5B;;;;AAIG;AACH,IAAA,UAAU,CAAC,GAAQ,EAAA;QAClB,IAAI,CAAC,GAAG,EAAE;AACT,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YACf;;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;QAC3C,IAAI,CAAC,WAAW,EAAE;;AAGnB;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGnB;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;;AAGlB;;;;AAIG;IACH,WAAW,GAAA;QACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AAClC,YAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAClB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAC7D;;;AAIH;;;;;;;;;AASG;AACH,IAAA,mBAAmB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAiB,EAAA;QAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;QAGhB,IAAI,SAAS,EAAE;YACd,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAC7B,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAC1C;;aACK;YACN,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;;QAEjE,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AAClC,gBAAA,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE;oBAC1B;;AAED,gBAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;;;AAG3B,QAAA,IAAI,CAAC,QAAQ,CACZ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAC1D;;8GA5JU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EARnB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,qBAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAAA;AACV,YAAA;AACC,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE;AACP;SACD,EAiDwB,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAAA,uBAAuB,6CCvFjD,6BACA,EAAA,CAAA,CAAA;;2FDuCa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,QAEnB,EAAE,KAAK,EAAE,eAAe,EAAE,EACrB,SAAA,EAAA;AACV,wBAAA;AACC,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE;AACP;AACD,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA;8BA0EG,cAAc,EAAA,CAAA;sBADjB,WAAW;uBAAC,2BAA2B;;;AE/GzC;;AAEG;;ACFH;;AAEG;;;;"}