@slotted/angular 0.1.0-beta.1 → 0.1.0-beta.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.
Files changed (88) hide show
  1. package/README.md +4 -0
  2. package/docs/AGENTS.snippet.md +10 -0
  3. package/docs/checkbox.json +7 -0
  4. package/docs/checkbox.md +1 -0
  5. package/docs/event-calendar.json +7 -0
  6. package/docs/event-calendar.md +1 -0
  7. package/docs/guidelines/README.md +27 -0
  8. package/docs/guidelines/async-feedback.md +108 -0
  9. package/docs/guidelines/browsing.md +74 -0
  10. package/docs/guidelines/builders.md +97 -0
  11. package/docs/guidelines/composition.md +129 -0
  12. package/docs/guidelines/conversations.md +59 -0
  13. package/docs/guidelines/errors-and-conflicts.md +71 -0
  14. package/docs/guidelines/forms.md +192 -0
  15. package/docs/guidelines/index.md +121 -0
  16. package/docs/guidelines/layout-alignment.md +95 -0
  17. package/docs/guidelines/ledgers.md +45 -0
  18. package/docs/guidelines/list-pages.md +165 -0
  19. package/docs/guidelines/overviews.md +66 -0
  20. package/docs/guidelines/own-elements.md +115 -0
  21. package/docs/guidelines/reading-permissions.md +55 -0
  22. package/docs/guidelines/record-pages.md +178 -0
  23. package/docs/guidelines/reports.md +123 -0
  24. package/docs/guidelines/shell-composition.md +94 -0
  25. package/docs/guidelines/workspaces.md +46 -0
  26. package/docs/index.md +12 -0
  27. package/docs/progress-indicator.json +1 -2
  28. package/docs/progress-indicator.md +2 -2
  29. package/docs/skills/build-own-element/SKILL.md +90 -0
  30. package/docs/skills/compose-screen/SKILL.md +76 -0
  31. package/docs/skills/index.md +9 -0
  32. package/docs/skills/review-screen/SKILL.md +70 -0
  33. package/docs/skills/theme-app/SKILL.md +74 -0
  34. package/docs/skills/waiting-states/SKILL.md +139 -0
  35. package/docs/stat-card.json +1 -0
  36. package/docs/stat-card.md +1 -1
  37. package/docs/tabs.json +1 -4
  38. package/docs/tabs.md +1 -1
  39. package/docs/tokens.md +424 -0
  40. package/fesm2022/slotted-angular-app-shell.mjs +2 -2
  41. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
  42. package/fesm2022/slotted-angular-checkbox.mjs +11 -2
  43. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -1
  44. package/fesm2022/slotted-angular-column-manager.mjs +1 -1
  45. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
  46. package/fesm2022/slotted-angular-combobox.mjs +12 -6
  47. package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
  48. package/fesm2022/slotted-angular-dashboard-grid.mjs +18 -22
  49. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
  50. package/fesm2022/slotted-angular-data-grid.mjs +6 -2
  51. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
  52. package/fesm2022/slotted-angular-data-list.mjs +1 -1
  53. package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
  54. package/fesm2022/slotted-angular-drawer.mjs +5 -1
  55. package/fesm2022/slotted-angular-drawer.mjs.map +1 -1
  56. package/fesm2022/slotted-angular-event-calendar.mjs +17 -7
  57. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
  58. package/fesm2022/slotted-angular-loading-overlay.mjs +2 -2
  59. package/fesm2022/slotted-angular-markdown.mjs +1 -1
  60. package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
  61. package/fesm2022/slotted-angular-multi-select.mjs +32 -27
  62. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
  63. package/fesm2022/slotted-angular-number-field.mjs +2 -2
  64. package/fesm2022/slotted-angular-number-field.mjs.map +1 -1
  65. package/fesm2022/slotted-angular-progress-indicator.mjs +6 -6
  66. package/fesm2022/slotted-angular-select.mjs +1 -25
  67. package/fesm2022/slotted-angular-select.mjs.map +1 -1
  68. package/fesm2022/slotted-angular-stat-card.mjs +2 -2
  69. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
  70. package/fesm2022/slotted-angular-table.mjs +3 -3
  71. package/fesm2022/slotted-angular-table.mjs.map +1 -1
  72. package/fesm2022/slotted-angular-tabs.mjs +2 -2
  73. package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
  74. package/fesm2022/slotted-angular-transfer.mjs +1 -1
  75. package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
  76. package/fesm2022/slotted-angular-upload.mjs +2 -2
  77. package/package.json +3 -3
  78. package/types/slotted-angular-checkbox.d.ts +7 -1
  79. package/types/slotted-angular-checkbox.d.ts.map +1 -1
  80. package/types/slotted-angular-combobox.d.ts.map +1 -1
  81. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -1
  82. package/types/slotted-angular-data-grid.d.ts.map +1 -1
  83. package/types/slotted-angular-drawer.d.ts.map +1 -1
  84. package/types/slotted-angular-event-calendar.d.ts +9 -2
  85. package/types/slotted-angular-event-calendar.d.ts.map +1 -1
  86. package/types/slotted-angular-multi-select.d.ts +10 -0
  87. package/types/slotted-angular-multi-select.d.ts.map +1 -1
  88. package/types/slotted-angular-select.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-drawer.mjs","sources":["../../drawer/src/drawer-defaults.ts","../../drawer/src/drawer.ts","../../drawer/src/drawer-parts.ts","../../drawer/src/slotted-angular-drawer.ts"],"sourcesContent":["import type { ExtentSide } from '@slotted/core/extent';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\n\n/**\n * Whether the drawer is a layer over the page or a box beside it.\n *\n * One axis rather than two components, because the switch is the point: an\n * application binds it to its own breakpoint, and swapping one element for\n * another there would destroy the view — taking the panel's scroll position,\n * focus and every uncontrolled control inside it.\n */\nexport type DrawerMode = 'overlay' | 'inline';\n\n/**\n * Which edge the panel comes from. Logical, so the whole layout mirrors in a\n * right-to-left document without a second stylesheet.\n */\nexport type DrawerSide = ExtentSide;\n\n/**\n * The panel's resting measure. Five named steps rather than a pixel string: a\n * theme retunes a step and cannot retune `width: 400px`.\n */\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full' | 'content';\n\n/** When the panel exists. */\n/**\n * What a hand moves an overlay sheet from the bottom by. `panel` lets a touch\n * anywhere on it move it and hand itself to the scroll of what it holds;\n * `resizer` leaves the separator the only target. Only a bottom overlay sheet\n * reads it.\n */\nexport type DrawerDrag = 'panel' | 'resizer';\n\nexport type DrawerMount = 'active' | 'lazy' | 'eager';\n\n/** Whether a dismissal source closes the drawer. */\nexport type DrawerDismissPolicy = 'close' | 'none';\n\n/** Where focus goes when an overlay drawer opens. */\nexport type DrawerInitialFocus =\n 'first' | 'container' | HTMLElement | (() => HTMLElement | null) | false;\n\n/** Where focus goes when the drawer closes. Defaults to the trigger. */\nexport type DrawerFinalFocus = HTMLElement | false;\n\n/** Why the drawer opened or closed. */\nexport type DrawerOpenReason =\n 'pointer' | 'keyboard' | 'dismiss' | 'escape' | 'outsidePress' | 'back' | 'programmatic';\n\n/** Why the panel's measure moved. */\nexport type DrawerExtentReason = 'pointer' | 'keyboard' | 'programmatic';\n\ninterface Request<Value, Reason> {\n readonly value: Value;\n readonly previous: Value;\n readonly reason: Reason;\n readonly source?: unknown;\n readonly cancelled: boolean;\n cancel(): void;\n}\n\n/**\n * The request the family emits before the drawer moves, with the result the\n * close carried. `result` is what the platform calls `returnValue` and what\n * Angular Material returns from `afterClosed()`; it rides on the request rather\n * than declaring a second state model, because nothing about it is controlled.\n */\nexport interface DrawerChangeRequest extends Request<boolean, DrawerOpenReason> {\n readonly result?: string | undefined;\n}\n\n/** The request the separator emits before the measure moves. */\n/**\n * `undefined` is a value of this state and not the absence of one: it is the\n * panel back on the measure its size step gives it, which is where it starts\n * and where a double click on the separator puts it again.\n */\nexport type DrawerExtentRequest = Request<number | undefined, DrawerExtentReason>;\n\nexport interface DrawerDefaults {\n /** The platform's way back — a phone's gesture, a browser's button — closes a modal layer. */\n back: DrawerDismissPolicy;\n escape: DrawerDismissPolicy;\n mode: DrawerMode;\n modal: boolean;\n mount: DrawerMount;\n outsidePress: DrawerDismissPolicy;\n side: DrawerSide;\n /**\n * Unset, the size the side gives: `content` on `top` and `bottom`, where\n * every native sheet measures what it holds, and `md` on `start` and `end`.\n */\n size: DrawerSize | undefined;\n drag: DrawerDrag;\n}\n\nconst FALLBACK: DrawerDefaults = {\n back: 'close',\n escape: 'close',\n modal: true,\n mode: 'overlay',\n mount: 'active',\n outsidePress: 'close',\n side: 'end',\n size: undefined,\n drag: 'panel',\n};\n\nexport const DRAWER_DEFAULTS = new InjectionToken<DrawerDefaults>('slotted drawer defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its drawers behave and look, rather than\n * repeating the same seven inputs on every one in a product. Ant reaches the\n * same place through `ConfigProvider`; no React drawer in the surveyed set has\n * an equivalent, and React gets one here too rather than being levelled down.\n */\nexport function provideDrawerDefaults(defaults: Partial<DrawerDefaults>) {\n return {\n provide: DRAWER_DEFAULTS,\n useFactory: (): DrawerDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a drawer renders as here, before it states anything of its own. */\nexport function injectDrawerDefaults(): DrawerDefaults {\n return inject(DRAWER_DEFAULTS);\n}\n\n/**\n * Application-scoped rather than module-scoped, for the reason `field` records:\n * a module-level counter produces colliding sequences when two applications\n * render in one server process, and the server and the client sequences must\n * match for hydration.\n */\n@Injectable({ providedIn: 'root' })\nexport class SlDrawerIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-drawer-${this.count}`;\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { createDismissableLayer } from '@slotted/core/dismissable-layer';\nimport type { DismissableLayerHandle } from '@slotted/core/dismissable-layer';\nimport {\n attachSheetDrag,\n dampenExtent,\n extentBounds,\n isInlineSide,\n measureSheetStops,\n sameStop,\n settleExtent,\n stopAsExtent,\n} from '@slotted/core/extent';\nimport { createFocusScope } from '@slotted/core/focus';\nimport type { FocusScopeHandle } from '@slotted/core/focus';\nimport { drawerMessages, type DrawerMessages, type PartialMessages } from '@slotted/core/i18n';\nimport { clamp, observeKeyboardInset } from '@slotted/core/measure';\nimport { createPortalRoot } from '@slotted/core/portal';\nimport type { PortalRootHandle } from '@slotted/core/portal';\nimport { createPresence } from '@slotted/core/presence';\nimport type { PresenceHandle, PresenceStatus } from '@slotted/core/presence';\nimport { createControllable } from '@slotted/core/state';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n model,\n OnInit,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectDrawerDefaults, SlDrawerIdFactory } from './drawer-defaults';\nimport type {\n DrawerChangeRequest,\n DrawerDismissPolicy,\n DrawerDrag,\n DrawerExtentReason,\n DrawerExtentRequest,\n DrawerFinalFocus,\n DrawerInitialFocus,\n DrawerMode,\n DrawerMount,\n DrawerOpenReason,\n DrawerSide,\n DrawerSize,\n} from './drawer-defaults';\n\nconst NO_SNAP_POINTS: readonly number[] = [];\n\n/** What the stylesheet leaves above a content sheet, for the press outside. */\nconst CONTENT_RESERVE = 'var(--slotted-space-12, 4rem)';\n\n/**\n * A panel that comes in from an edge, and either covers the page or stands\n * beside it.\n *\n * The layer is composed from `packages/core` and rewritten nowhere: `portal`\n * decides where it lives and keeps the theme of the region that opened it,\n * `dismissable-layer` owns Escape, outside press, `inert`, the scroll lock and\n * the single z-index stack, `presence` keeps it mounted long enough to leave,\n * `focus` contains the keyboard and gives it back to the trigger, and `extent`\n * holds the arithmetic the separator's pointer and keyboard share.\n *\n * **The host is not the layer.** `<sl-drawer>` renders `display: contents` and\n * stays exactly where the consumer wrote it; the layer is the `div` in the\n * template. Under `mode=\"overlay\"` that `div` is moved into the portal and\n * given back before it is destroyed; under `mode=\"inline\"` it never moves,\n * which is what makes the host's own parent the drawer's place in the layout.\n * Either way the host is the portal's *origin*, so the layer keeps the scheme,\n * density, theme and direction of the region it was written in whether or not\n * a trigger exists — React has to use the trigger for that, and\n * `docs/history/designs/2026-09-04-drawer-design.md` §11 records the\n * asymmetry rather than levelling both down.\n */\n@Component({\n selector: 'sl-drawer',\n standalone: true,\n exportAs: 'slDrawer',\n template: `\n @if (mounted()) {\n <div\n #layer\n data-ui=\"drawer\"\n data-part=\"root\"\n [attr.data-mode]=\"resolvedMode()\"\n [attr.data-side]=\"resolvedSide()\"\n [attr.data-size]=\"resolvedSize()\"\n [attr.data-mount]=\"resolvedMount()\"\n [attr.data-modal]=\"resolvedModal() ? '' : null\"\n [attr.data-open]=\"visible() ? '' : null\"\n [attr.data-loading]=\"loading() ? '' : null\"\n [attr.data-dragging]=\"dragging() ? '' : null\"\n [attr.data-drag]=\"sheet() ? resolvedDrag() : null\"\n [attr.data-undimmed]=\"undimmed() ? '' : null\"\n [attr.inert]=\"interactive() ? null : ''\"\n [style.--slotted-drawer-extent]=\"extentLength()\"\n >\n @if (showBackdrop()) {\n <div data-part=\"backdrop\"></div>\n }\n <div\n #panel\n data-part=\"panel\"\n [id]=\"panelId\"\n [attr.role]=\"role()\"\n [attr.aria-modal]=\"resolvedModal() ? 'true' : null\"\n [attr.aria-label]=\"label()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n >\n <ng-content />\n </div>\n </div>\n }\n `,\n styleUrl: '../../../styles/src/drawer/drawer.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n /* The host is the origin the layer inherits its theme from, and nothing else. */\n host: { '[style.display]': \"'contents'\" },\n})\nexport class SlDrawer implements OnInit {\n /** Whether the drawer is open. Two-way, so a template may bind it directly. */\n readonly open = model<boolean>(false);\n\n /**\n * How much of the box the panel is measured in it takes, in `[0, 1]`. Unset\n * means the `size` step decides. It is a fraction rather than a length so\n * that the separator's three ARIA values, the limits and the snap points are\n * all the same kind of number.\n */\n readonly extent = model<number | undefined>(undefined);\n\n readonly mode = input<DrawerMode | undefined>(undefined);\n readonly side = input<DrawerSide | undefined>(undefined);\n readonly size = input<DrawerSize | undefined>(undefined);\n readonly mount = input<DrawerMount | undefined>(undefined);\n readonly escape = input<DrawerDismissPolicy | undefined>(undefined);\n readonly outsidePress = input<DrawerDismissPolicy | undefined>(undefined);\n /**\n * The platform's way back — a phone's gesture, a browser's button — closes\n * the layer instead of leaving the page, while the layer is modal.\n */\n readonly back = input<DrawerDismissPolicy | undefined>(undefined);\n /**\n * Whether the background is inert, the scroll is locked and focus is\n * contained. Fixed at `false` under `mode=\"inline\"`: a panel in the flow that\n * claimed `aria-modal` while the page around it stayed reachable is the\n * failure the APG calls severe.\n */\n readonly modal = input(true, { transform: booleanAttribute });\n /** Whether the panel's content is still on its way. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Words laid over the catalog of the language in force, key by key: the close control's name (`close`). */\n readonly messages = input<PartialMessages<DrawerMessages> | undefined>(undefined);\n /** What a hand moves an overlay sheet from the bottom by. */\n readonly drag = input<DrawerDrag | undefined>(undefined);\n /**\n * Below this fraction the scrim is not painted and a press reaches the page:\n * the sheet over a map. It pairs with `[modal]=\"false\"` and\n * `outsidePress=\"none\"`, because a page left undimmed and inert would promise\n * something it does not do.\n */\n readonly scrimFrom = input(0);\n /** The smallest the reader may make it. A drag released below it asks to close. */\n readonly minExtent = input(0.2);\n readonly maxExtent = input(1);\n /** The stops the separator lands on. Empty means the range is continuous. */\n readonly snapPoints = input<readonly number[]>(NO_SNAP_POINTS);\n /** A parent for this layer alone, instead of the shared portal root. */\n readonly container = input<Element | null | undefined>(undefined);\n readonly initialFocus = input<DrawerInitialFocus | undefined>(undefined);\n readonly finalFocus = input<DrawerFinalFocus | undefined>(undefined);\n\n /** One output per transition, each carrying its reason and its event. */\n readonly openChangeRequest = output<DrawerChangeRequest>();\n readonly extentChangeRequest = output<DrawerExtentRequest>();\n /**\n * What `afterClosed()` is in Angular Material, as an output. It fires once\n * the drawer has actually closed, with the result the close carried.\n */\n readonly closed = output<string | undefined>();\n\n private readonly defaults = injectDrawerDefaults();\n /** The family's words in the language in force, with this drawer's `messages` laid over them. */\n readonly t = injectMessages(drawerMessages, this.messages);\n private readonly host: HTMLElement = inject(ElementRef).nativeElement;\n /** The server lays nothing out, and its DOM cannot be measured. */\n private readonly browser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly destroyRef = inject(DestroyRef);\n private readonly baseId = inject(SlDrawerIdFactory).next();\n\n /** The element the consumer wrote us beside, recorded before anything moves. */\n private readonly origin = this.host.parentElement;\n\n /**\n * A consumer's own `aria-label` on `<sl-drawer>`, read before the host\n * bindings are written and moved to the panel, which is the element the role\n * is on. Without this a label written on the host would name a box with\n * `display: contents` and no role at all.\n */\n private readonly writtenLabel = inject(new HostAttributeToken('aria-label'), {\n optional: true,\n });\n\n protected readonly layerRef = viewChild<ElementRef<HTMLElement>>('layer');\n protected readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** The parts that have said they exist, so only what was rendered is wired. */\n readonly hasTitle = signal(false);\n readonly hasDescription = signal(false);\n readonly triggerNode = signal<HTMLElement | null>(null);\n /** Whether the reader has the separator under the pointer. */\n readonly dragging = signal(false);\n /**\n * Where the hand is holding the panel while the body is dragged, which may be\n * past the highest stop. `null` outside a gesture: the request is made once,\n * on release, rather than once per move.\n */\n readonly live = signal<number | null>(null);\n /**\n * What the panel measures at rest — the height of its content under\n * `size=\"content\"` — as a fraction, measured while `extent` is unset.\n */\n readonly rest = signal<number | undefined>(undefined);\n\n readonly titleId = `${this.baseId}-title`;\n readonly descriptionId = `${this.baseId}-description`;\n readonly panelId = `${this.baseId}-panel`;\n readonly triggerId = `${this.baseId}-trigger`;\n\n /**\n * The status rather than a boolean. `entering` is one frame long and it is\n * the whole reason it exists: a panel that appears already open gives its CSS\n * transition no closed style to start from.\n */\n private readonly status = signal<PresenceStatus>('unmounted');\n private readonly presence: PresenceHandle = createPresence({\n present: false,\n onStatusChange: (next) => this.status.set(next),\n });\n\n /** Whether this drawer has ever been open, which is what `lazy` reads. */\n private readonly seen = signal(false);\n private readonly result = signal<string | undefined>(undefined);\n /** The measured length the stylesheet reads, kept in step by an observer. */\n private readonly measured = signal<string | null>(null);\n\n readonly resolvedMode = computed(() => this.mode() ?? this.defaults.mode);\n readonly resolvedSide = computed(() => this.side() ?? this.defaults.side);\n /**\n * A sheet measures what it holds and a side panel takes a named step: every\n * native sheet sizes to its content, and Ant, Fluent and MUI all give a side\n * panel a width. The side decides only when nothing else has.\n */\n readonly resolvedSize = computed<DrawerSize>(() => {\n const side = this.resolvedSide();\n return (\n this.size() ?? this.defaults.size ?? (side === 'top' || side === 'bottom' ? 'content' : 'md')\n );\n });\n readonly resolvedDrag = computed<DrawerDrag>(() => this.drag() ?? this.defaults.drag);\n /** An overlay sheet from the bottom, which is the only panel a body drag moves. */\n readonly sheet = computed(\n () => this.resolvedMode() === 'overlay' && this.resolvedSide() === 'bottom',\n );\n /** The measure right now: the hand's while a body drag holds it, the state otherwise. */\n readonly currentExtent = computed(() => this.live() ?? this.extent());\n protected readonly undimmed = computed(\n () =>\n this.resolvedMode() === 'overlay' &&\n (this.currentExtent() ?? this.rest() ?? 1) < this.scrimFrom(),\n );\n readonly resolvedMount = computed(() => this.mount() ?? this.defaults.mount);\n readonly resolvedModal = computed(() =>\n this.resolvedMode() === 'inline' ? false : this.modal(),\n );\n readonly resolvedEscape = computed<DrawerDismissPolicy>(() =>\n this.resolvedMode() === 'inline' ? 'none' : (this.escape() ?? this.defaults.escape),\n );\n readonly resolvedBack = computed<DrawerDismissPolicy>(() =>\n this.resolvedMode() === 'inline' ? 'none' : (this.back() ?? this.defaults.back),\n );\n readonly resolvedOutsidePress = computed<DrawerDismissPolicy>(() =>\n this.resolvedMode() === 'inline' ? 'none' : (this.outsidePress() ?? this.defaults.outsidePress),\n );\n\n /**\n * The limits are the first and last stop when there are stops, because a\n * range whose ends no stop can reach has two values nothing produces.\n */\n readonly bounds = computed(() => {\n const stops = extentBounds(this.snapPoints(), this.minExtent(), this.maxExtent());\n /* Under `content` the height of the content is a stop above the snap\n points, so the range reaches past the last of them. */\n return this.resolvedSize() === 'content'\n ? { ...stops, max: Math.max(stops.max, this.maxExtent()) }\n : stops;\n });\n\n /**\n * An inline drawer is always in the document: its own measure is what opens\n * and closes, and a box that left the layout would take the page's columns\n * with it every time the reader closed the panel.\n */\n readonly mounted = computed(() => {\n if (this.resolvedMode() === 'inline') return true;\n const mount = this.resolvedMount();\n if (mount === 'eager') return true;\n if (mount === 'lazy') return this.seen();\n return this.status() !== 'unmounted';\n });\n\n /** What the stylesheet keys on, which is a frame behind what was asked. */\n readonly visible = computed(() =>\n this.resolvedMode() === 'inline' ? this.open() : this.status() === 'open',\n );\n /**\n * Whether the layer takes focus and the pointer. `entering` counts: the\n * focus scope enters in that frame, and a layer still `inert` then refuses\n * the initial focus and leaves it on `body`.\n */\n readonly interactive = computed(() => {\n if (this.resolvedMode() === 'inline') return this.open();\n const status = this.status();\n return status === 'entering' || status === 'open';\n });\n\n /**\n * The scrim belongs to the layer, not to the dismissal policy: `modal`\n * decides what happens to the page behind it and never what is painted.\n * `dialog` draws it the same way, and a consumer who wants none sets\n * `--slotted-drawer-scrim: transparent`.\n */\n protected readonly showBackdrop = computed(() => this.resolvedMode() === 'overlay');\n protected readonly extentLength = computed(() => this.measured());\n protected readonly labelledBy = computed(() =>\n this.hasTitle() && this.writtenLabel === null ? this.titleId : null,\n );\n protected readonly describedBy = computed(() =>\n this.hasDescription() ? this.descriptionId : null,\n );\n protected readonly label = computed(() => this.writtenLabel);\n /**\n * Under `inline` the panel is a region of the page rather than a window over\n * it, so it writes no role: a navigation drawer is a navigation landmark and\n * a filter panel is complementary, and a family that cannot know which one\n * guesses wrong half the time. A consumer names it on their own element.\n */\n protected readonly role = computed(() => (this.resolvedMode() === 'overlay' ? 'dialog' : null));\n\n private portal: PortalRootHandle | null = null;\n private layer: DismissableLayerHandle | null = null;\n private scope: FocusScopeHandle | null = null;\n\n /**\n * What the consumer's own binding said before the reader moved anything.\n *\n * Read in `ngOnInit` and not in the field initializer: Angular creates every\n * directive in a template before it binds any input, so a measure read at\n * construction is always the model's own default and never the consumer's.\n */\n private initialExtent: number | undefined = undefined;\n\n ngOnInit() {\n this.initialExtent = this.extent();\n }\n\n constructor() {\n effect(() => {\n if (this.open()) this.seen.set(true);\n this.presence.sync(this.open());\n });\n\n /* A sheet closed by a drag keeps the hand's position through its exit, so\n it slides from there; opening again starts from rest. */\n effect(() => {\n if (this.open()) untracked(() => this.live.set(null));\n });\n\n /** Where an overlay layer lives, for as long as it is in the document. */\n effect(() => {\n const node = this.layerRef()?.nativeElement ?? null;\n this.presence.setNode(node);\n\n if (node === null || this.resolvedMode() === 'inline') {\n this.releasePortal();\n return;\n }\n if (this.portal !== null) return;\n\n const named = this.container();\n this.portal = createPortalRoot({\n origin: this.origin,\n ...(named === undefined ? {} : { container: named }),\n });\n this.portal.container?.append(node);\n });\n\n /**\n * The measure as a length the stylesheet can use. The public value is a\n * fraction; a percentage would not do, because under `inline` the drawer is\n * the box being sized and a percentage of its own containing block resolves\n * against a track whose size depends on it. The observer is what keeps the\n * pixels and the fraction in step when the window changes.\n */\n effect((onCleanup) => {\n const box = this.measuringBox();\n const fraction = this.currentExtent();\n const inline = isInlineSide(this.resolvedSide());\n\n if (box === null || fraction === undefined || !this.browser) {\n this.measured.set(null);\n return;\n }\n\n const measure = () => {\n const rect = box.getBoundingClientRect();\n const span = inline ? rect.width : rect.height;\n if (span > 0) this.measured.set(`${Math.round(fraction * span)}px`);\n };\n\n measure();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(measure);\n observer.observe(box);\n onCleanup(() => observer.disconnect());\n });\n\n /**\n * Everything the drawer does while it is open, taken down when it closes\n * rather than when the node leaves — `presence` keeps the node mounted\n * through the exit, and a layer still holding the scroll lock and the\n * background's `inert` for those milliseconds is a page nobody can touch.\n *\n * An inline drawer composes neither the layer nor containment: it is a box\n * in the page, nothing is inert and nothing is contained. It still enters a\n * focus scope, because the scope is what returns focus to the trigger when\n * a panel the reader is standing in closes underneath them.\n */\n effect((onCleanup) => {\n const node = this.layerRef()?.nativeElement;\n const panel = this.panelRef()?.nativeElement;\n if (!this.open() || node === undefined || panel === undefined) return;\n\n const overlay = this.resolvedMode() === 'overlay';\n const escape = this.resolvedEscape() === 'close';\n const outsidePress = this.resolvedOutsidePress() === 'close';\n const modal = this.resolvedModal();\n /* A history entry is a modal layer's: a layer the page stays reachable\n under has no claim on the way back. */\n const back = modal && this.resolvedBack() === 'close';\n const trigger = this.triggerNode();\n\n if (overlay) {\n /* The panel is what a press is inside of; the scrim is the way out, on\n the click rather than the pointerdown so a selection dragged out of\n the panel is not a press on the scrim. */\n this.layer = createDismissableLayer(node, {\n back,\n branches: trigger === null ? [] : [trigger],\n content: panel,\n escape,\n modal,\n onDismiss: (request) => {\n if (request.reason === 'outsidePress' && !outsidePress) return request.cancel();\n this.request(false, request.reason as DrawerOpenReason, undefined, request.source);\n },\n outsidePress,\n outsidePressEvent: 'click',\n });\n }\n\n const wanted = this.initialFocus() ?? 'first';\n const returnTo = this.finalFocus();\n /**\n * Where focus goes back to with no `finalFocus`: what held it when the\n * drawer opened, or the trigger when that was nothing. A click does not\n * focus a button in Safari, so a drawer opened from its trigger there\n * had `body` as its origin and gave focus back to nowhere.\n */\n const origin = panel.ownerDocument.activeElement as HTMLElement | null;\n const originParent = origin?.parentElement ?? null;\n const fallback = (): HTMLElement | null => {\n if (origin === null || origin === origin.ownerDocument.body) return this.triggerNode();\n if (origin.isConnected) return origin;\n /* The row the drawer was opened from has gone: its nearest ancestor\n that is still in the document, as the contract's restore rule says. */\n let node: HTMLElement | null = originParent;\n while (node !== null && !node.isConnected) node = node.parentElement;\n return node;\n };\n this.scope = createFocusScope(panel, {\n contain: overlay && modal,\n initial: !overlay ? false : wanted instanceof HTMLElement ? () => wanted : wanted,\n restore: returnTo === undefined ? fallback : returnTo === false ? false : () => returnTo,\n });\n this.scope.enter();\n\n onCleanup(() => {\n /* The layer first: while it stands, a modal layer keeps every sibling\n up to the root `inert`, and focus given back to a trigger there is\n refused — the reader lands on `body`. */\n this.layer?.destroy();\n this.layer = null;\n this.scope?.destroy();\n this.scope = null;\n this.closed.emit(this.result());\n this.result.set(undefined);\n });\n });\n\n /**\n * What the panel measures at rest, as a fraction, while nothing has moved\n * it. It is what the separator reports and what `scrimFrom` compares\n * against, and content that arrives while the sheet is open moves it, so it\n * is observed rather than read once.\n */\n effect((onCleanup) => {\n const box = this.measuringBox();\n const panel = this.panelRef()?.nativeElement;\n if (\n !this.browser ||\n box === null ||\n panel === undefined ||\n !this.open() ||\n this.extent() !== undefined ||\n this.live() !== null\n ) {\n return;\n }\n const inline = isInlineSide(this.resolvedSide());\n const read = () => {\n const rect = box.getBoundingClientRect();\n const span = inline ? rect.width : rect.height;\n if (span <= 0) return;\n const own = inline ? panel.offsetWidth : panel.offsetHeight;\n this.rest.set(Math.round((own / span) * 1000) / 1000);\n };\n read();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(read);\n observer.observe(panel);\n observer.observe(box);\n onCleanup(() => observer.disconnect());\n });\n\n /**\n * The virtual keyboard. The layer recedes by what it covers, so the panel\n * lands above the keys; `@slotted/core/measure` reads it from the visual\n * viewport.\n */\n effect((onCleanup) => {\n const node = this.layerRef()?.nativeElement;\n if (node === undefined || !this.open() || this.resolvedMode() !== 'overlay') return;\n const stop = observeKeyboardInset(node.ownerDocument.defaultView, (pixels) => {\n if (pixels === 0) node.style.removeProperty('--slotted-keyboard-inset');\n else node.style.setProperty('--slotted-keyboard-inset', `${pixels}px`);\n });\n onCleanup(() => {\n stop();\n node.style.removeProperty('--slotted-keyboard-inset');\n });\n });\n\n /**\n * The body of a sheet from the bottom moves it under a touch, and hands the\n * gesture to the scroll of what it holds when that is what it is —\n * `attachSheetDrag` decides which. The request is made once, on release,\n * and the hand's position lives in `live` until then.\n */\n effect((onCleanup) => {\n const node = this.layerRef()?.nativeElement;\n const panel = this.panelRef()?.nativeElement;\n if (\n node === undefined ||\n panel === undefined ||\n !this.open() ||\n !this.sheet() ||\n this.resolvedDrag() !== 'panel'\n ) {\n return;\n }\n\n let span = 0;\n let start = 0;\n let last = 0;\n let measured: { stops: number[]; rest: number | undefined } = {\n rest: undefined,\n stops: [],\n };\n const now = () => {\n span = node.getBoundingClientRect().height;\n return span > 0 ? panel.offsetHeight / span : 0;\n };\n\n onCleanup(\n attachSheetDrag(panel, {\n enabled: () => this.open(),\n canGrow: () => {\n const at = now();\n const top = this.measureStops(panel, span).stops.at(-1);\n return top !== undefined && at < top && !sameStop(at, top);\n },\n onStart: () => {\n start = now();\n last = start;\n measured = this.measureStops(panel, span);\n this.dragging.set(true);\n this.live.set(start);\n },\n onMove: (distance) => {\n if (span <= 0) return;\n last = Math.max(0, start + distance / span);\n this.live.set(dampenExtent(last, measured.stops.at(-1) ?? start));\n },\n onEnd: (velocity) => {\n this.dragging.set(false);\n const landed = settleExtent({\n fraction: Math.min(last, measured.stops.at(-1) ?? last),\n span,\n stops: measured.stops,\n velocity: span > 0 ? velocity / span : 0,\n });\n if (landed === 'close') {\n /* The panel stays where the hand left it, so the exit slides from\n there; a close the consumer refused puts it back. */\n this.request(false, 'pointer', undefined, null);\n if (this.open()) this.live.set(null);\n return;\n }\n this.live.set(null);\n this.requestExtent(this.asRequest(landed, measured.rest), 'pointer', null);\n },\n }),\n );\n });\n\n this.destroyRef.onDestroy(() => {\n this.scope?.destroy();\n this.layer?.destroy();\n this.presence.destroy();\n this.releasePortal();\n });\n }\n\n /** The stops a sheet rests on and the rest among them, measured now. */\n measureStops(panel: HTMLElement, span: number) {\n return measureSheetStops({\n atRest: this.extent() === undefined && this.live() === null,\n content: this.resolvedSize() === 'content',\n panel,\n reserve: CONTENT_RESERVE,\n rest: this.rest(),\n snapPoints: this.snapPoints(),\n span,\n });\n }\n\n /**\n * What a settled fraction is asked as: the content stop is `undefined`, so\n * the sheet follows its content again when the content grows.\n */\n asRequest(fraction: number, rest: number | undefined) {\n return stopAsExtent(fraction, rest, this.resolvedSize() === 'content');\n }\n\n /**\n * The box the panel's measure is a fraction of: the layer under `overlay`,\n * which is fixed to the viewport, and the drawer's own parent under `inline`,\n * where the drawer is what is being sized and cannot measure itself.\n */\n measuringBox(): HTMLElement | null {\n const node = this.layerRef()?.nativeElement ?? null;\n if (node === null) return null;\n /* Under `inline` the layer's parent is the host, which renders\n `display: contents` and lays nothing out: the box is the host's own\n parent, the consumer's layout. */\n return this.resolvedMode() === 'inline' ? this.host.parentElement : node;\n }\n\n /**\n * The layer element is given back to the host before the portal goes, so\n * Angular removes a node that is where its own view expects it to be.\n */\n private releasePortal() {\n if (this.portal === null) return;\n const node = this.layerRef()?.nativeElement;\n if (node !== undefined) this.host.append(node);\n this.portal.release();\n this.portal = null;\n }\n\n /** Asks to open or close, carrying the reason, the result and the event. */\n request(next: boolean, reason: DrawerOpenReason, result: string | undefined, source: unknown) {\n if (next === this.open()) return;\n\n let cancelled = false;\n const state = createControllable<boolean>({\n initial: this.open(),\n onRequest: (raw) => {\n cancelled = raw.cancelled;\n this.openChangeRequest.emit({\n cancel: () => raw.cancel(),\n get cancelled() {\n return raw.cancelled;\n },\n previous: raw.previous,\n reason,\n result,\n source: raw.source,\n value: raw.value,\n });\n },\n });\n\n if (!state.request(next, reason, source) || cancelled) return;\n if (!next) this.result.set(result);\n this.open.set(next);\n }\n\n /**\n * Asks to move the measure. While the pointer is down the floor is not\n * enforced — a sheet the reader is pulling down has to follow the hand — and\n * the separator decides on release whether that means a smaller panel or a\n * closed one.\n */\n requestExtent(next: number | undefined, reason: DrawerExtentReason, source: unknown) {\n /* `undefined` travels whole: it is the panel back on its size step, and a\n clamp of it would be a clamp of a value that is not a fraction. */\n const wanted = next === undefined ? undefined : clamp(next, 0, this.bounds().max);\n if (wanted === this.extent()) return;\n\n let cancelled = false;\n const state = createControllable<number | undefined>({\n /* `undefined` is a value of this state — the panel on its size step —\n and not a gap to fill: a floor standing in for it made a request for\n the floor from the content stop look like no change at all. */\n initial: this.extent(),\n onRequest: (raw) => {\n cancelled = raw.cancelled;\n this.extentChangeRequest.emit({\n cancel: () => raw.cancel(),\n get cancelled() {\n return raw.cancelled;\n },\n previous: raw.previous,\n reason,\n source: raw.source,\n value: raw.value,\n });\n },\n });\n\n if (!state.request(wanted, reason, source) || cancelled) return;\n this.extent.set(wanted);\n }\n\n /**\n * Back to the measure the size step gives it, which is where the panel\n * started. Angular has one model rather than a controlled and an\n * uncontrolled input, so the measure to restore is the one the model held\n * before anything moved it, read once.\n */\n restoreExtent(reason: DrawerExtentReason, source: unknown) {\n this.requestExtent(this.initialExtent, reason, source);\n }\n\n /** Opens the drawer from code, carrying `programmatic`. */\n openDrawer() {\n this.request(true, 'programmatic', undefined, undefined);\n }\n\n /** Closes it from code, carrying `programmatic` and the result given. */\n close(result?: string) {\n this.request(false, 'programmatic', result, undefined);\n }\n\n /**\n * The panel, once it is in the document — what React's handle calls\n * `panel`. A family that composes the drawer reads it to hand the panel a\n * value only it knows, as `action-sheet` hands it its measure.\n */\n get panel(): HTMLElement | null {\n return this.panelRef()?.nativeElement ?? null;\n }\n\n /** Moves focus into the panel, as opening an overlay drawer does. */\n focus() {\n this.panelRef()?.nativeElement.focus();\n }\n}\n","import {\n EXTENT_LARGE_STEP_PX,\n EXTENT_STEP_PX,\n anchorsAtStart,\n extentAtPoint,\n extentVelocity,\n holdResizeGesture,\n isInlineSide,\n sameStop,\n settleExtent,\n SHEET_FLING_PX_PER_S,\n stepAmountFromPixels,\n stepExtent,\n} from '@slotted/core/extent';\nimport type { ExtentSample } from '@slotted/core/extent';\nimport { clamp } from '@slotted/core/measure';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\n\nimport { SlDrawer } from './drawer';\nimport type { DrawerOpenReason } from './drawer-defaults';\n\n/**\n * A click synthesised by the keyboard reports no detail; a real one reports the\n * click count. It is how `Enter`, `Space` and a pointer are told apart without\n * a key listener existing for something the platform already handles.\n */\nfunction activationReason(event: MouseEvent): DrawerOpenReason {\n return event.detail === 0 ? 'keyboard' : 'pointer';\n}\n\n/**\n * The control that opens a drawer.\n *\n * It is the consumer's own element, which is what this ecosystem composes with:\n * `<button slButton [slDrawerTrigger]=\"d\">` is the library's own button and\n * this adds the wiring to it. React reaches the same place with `render`,\n * because there the component owns the tag.\n *\n * The trigger is also an overlay layer's *branch*: a press on it is inside the\n * layer as far as `dismissable-layer` is concerned, or opening would\n * immediately be read as an outside press and close what it just opened.\n *\n * `aria-haspopup` is written only under `mode=\"overlay\"`. An inline drawer is a\n * disclosure, not a popup, and the property would promise a layer that never\n * arrives.\n */\n@Directive({\n selector: '[slDrawerTrigger]',\n standalone: true,\n exportAs: 'slDrawerTrigger',\n host: {\n '[attr.data-part]': 'part',\n type: 'button',\n '[attr.aria-haspopup]': 'haspopup()',\n '[attr.aria-expanded]': 'drawer().open()',\n '[attr.aria-controls]': 'controls()',\n '[attr.data-open]': \"drawer().open() ? '' : null\",\n '[id]': 'drawer().triggerId',\n '(click)': 'press($event)',\n },\n})\nexport class SlDrawerTrigger implements OnInit, OnDestroy {\n /** The drawer this control opens, reached with a template reference variable. */\n readonly drawer = input.required<SlDrawer>({ alias: 'slDrawerTrigger' });\n\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n\n /**\n * `trigger` names the control when it belongs to no family of its own. On\n * `slButton` the element is that family's root, and the part stays `root`:\n * two directives write one attribute, and the family the element is drawn by\n * keeps it, as React's `render` does by spreading the button's props last.\n */\n protected readonly part = this.native.hasAttribute('data-ui')\n ? this.native.getAttribute('data-part')\n : 'trigger';\n\n protected readonly controls = computed(() =>\n this.drawer().mounted() ? this.drawer().panelId : null,\n );\n protected readonly haspopup = computed(() =>\n this.drawer().resolvedMode() === 'overlay' ? 'dialog' : null,\n );\n\n ngOnInit() {\n this.drawer().triggerNode.set(this.native);\n }\n\n ngOnDestroy() {\n if (this.drawer().triggerNode() === this.native) this.drawer().triggerNode.set(null);\n }\n\n protected press(event: MouseEvent) {\n /* The consumer's own handler ran first, and `preventDefault()` refuses the\n open — composed with, never replaced. */\n if (event.defaultPrevented) return;\n const drawer = this.drawer();\n drawer.request(!drawer.open(), activationReason(event), undefined, event);\n }\n}\n\n@Directive({\n selector: '[slDrawerHeader]',\n standalone: true,\n exportAs: 'slDrawerHeader',\n host: { 'data-part': 'header' },\n})\nexport class SlDrawerHeader {}\n\n/**\n * The visible name, which `aria-labelledby` points at — on the panel and, as\n * the Window Splitter pattern requires, on the separator that sizes it.\n */\n@Directive({\n selector: '[slDrawerTitle]',\n standalone: true,\n exportAs: 'slDrawerTitle',\n host: { 'data-part': 'title', '[id]': 'drawer.titleId' },\n})\nexport class SlDrawerTitle implements OnInit, OnDestroy {\n protected readonly drawer = inject(SlDrawer);\n\n ngOnInit() {\n this.drawer.hasTitle.set(true);\n }\n\n ngOnDestroy() {\n this.drawer.hasTitle.set(false);\n }\n}\n\n/** The sentence that says what the drawer is about. */\n@Directive({\n selector: '[slDrawerDescription]',\n standalone: true,\n exportAs: 'slDrawerDescription',\n host: { 'data-part': 'description', '[id]': 'drawer.descriptionId' },\n})\nexport class SlDrawerDescription implements OnInit, OnDestroy {\n protected readonly drawer = inject(SlDrawer);\n\n ngOnInit() {\n this.drawer.hasDescription.set(true);\n }\n\n ngOnDestroy() {\n this.drawer.hasDescription.set(false);\n }\n}\n\n/**\n * The one row that scrolls, and the row `aria-busy` belongs to while the\n * content is still on its way — the header, the close button, Escape and the\n * separator all stay operable, because a drawer a reader cannot leave is the\n * worse failure of the two.\n */\n@Directive({\n selector: '[slDrawerBody]',\n standalone: true,\n exportAs: 'slDrawerBody',\n host: {\n 'data-part': 'body',\n '[attr.aria-busy]': \"drawer.loading() ? 'true' : null\",\n '[attr.data-inset]': 'inset() ?? null',\n },\n})\nexport class SlDrawerBody {\n protected readonly drawer = inject(SlDrawer);\n /** `none` drops the body's own padding, for content that brings its own inset — a page, a list on the panel's edges. */\n readonly inset = input<'none' | undefined>(undefined);\n}\n\n@Directive({\n selector: '[slDrawerFooter]',\n standalone: true,\n exportAs: 'slDrawerFooter',\n host: { 'data-part': 'footer' },\n})\nexport class SlDrawerFooter {}\n\n/**\n * The ✕ in the corner. It carries `dismiss`, which is the word the closed\n * vocabulary in `docs/state-and-events.md` already has for what a close button\n * means, and its `value` rides out on the request as the result.\n */\n@Component({\n selector: '[slDrawerClose]',\n standalone: true,\n exportAs: 'slDrawerClose',\n imports: [SlGlyph, SlIcon],\n /* The cross is drawn unless the consumer wrote content of their own. */\n template: `<ng-content\n ><span slIcon><svg slGlyph name=\"x\"></svg></span\n ></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'data-part': 'close',\n type: 'button',\n '[attr.aria-label]': 'label()',\n '(click)': 'press($event)',\n },\n})\nexport class SlDrawerClose {\n /** The result the close carries out, which is the platform's `returnValue`. */\n readonly value = input<string | undefined>(undefined);\n\n private readonly drawer = inject(SlDrawer);\n /** A consumer's own `aria-label`, which wins over the catalog. */\n private readonly ownLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n\n protected readonly label = computed(() => this.ownLabel ?? this.drawer.t('close'));\n\n protected press(event: MouseEvent) {\n if (event.defaultPrevented) return;\n this.drawer.request(false, 'dismiss', this.value(), event);\n }\n}\n\n/**\n * The separator the reader moves, from the WAI-ARIA Window Splitter pattern.\n *\n * **Rendering it is the capability.** There is no `resizable` input, so an\n * input with no separator, and a separator an input had switched off, are both\n * states this family cannot be in.\n *\n * The arrows are physical rather than logical, which is the pattern's own\n * reading: the key names a direction on the screen. `ArrowLeft` grows an\n * `end`-side panel in a left-to-right document and shrinks it in a mirrored\n * one, because there the panel is on the left and the reader is pushing its\n * edge toward the wall.\n */\n/** How far a press on the separator may wander and still be a tap. */\nconst TAP_SLOP_PX = 3;\n\n@Component({\n selector: '[slDrawerResizer]',\n standalone: true,\n exportAs: 'slDrawerResizer',\n /**\n * A component rather than a directive, and the template is the whole reason:\n * the separator draws its own picture now — two hairlines and a grip, or a\n * pill on a block side — and a directive has nothing to draw them with.\n *\n * Three elements rather than pseudo-elements because\n * `packages/styles/src/fallbacks.test.mjs` forbids a system colour inside\n * `::before` or `::after`, and both steps these take have one as their last\n * resort. The selector is unchanged, so no consumer's template moves.\n */\n template: `\n <span data-part=\"line\" aria-hidden=\"true\"></span>\n <span data-part=\"grip\" aria-hidden=\"true\"></span>\n <span data-part=\"line\" aria-hidden=\"true\"></span>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-part': 'resizer',\n role: 'separator',\n tabindex: '0',\n '[attr.aria-controls]': 'drawer.panelId',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-orientation]': 'orientation()',\n '[attr.aria-valuemin]': 'percent(floor())',\n '[attr.aria-valuemax]': 'percent(drawer.bounds().max)',\n '[attr.aria-valuenow]': 'valueNow()',\n '(pointerdown)': 'pointerDown($event)',\n '(pointermove)': 'pointerMove($event)',\n '(pointerup)': 'endDrag($event)',\n '(lostpointercapture)': 'endDrag($event)',\n '(keydown)': 'keyDown($event)',\n '(dblclick)': 'restore($event)',\n },\n})\nexport class SlDrawerResizer {\n /**\n * How far one arrow press moves the separator, **in pixels**, when there are\n * no snap points. A distance and not a proportion: a reader adjusting a pane\n * is placing an edge against the content beside it, and a proportion of a\n * wide layer is a jump.\n */\n readonly step = input(EXTENT_STEP_PX);\n /** How far `Shift` and an arrow move it, in pixels. */\n readonly largeStep = input(EXTENT_LARGE_STEP_PX);\n\n protected readonly drawer = inject(SlDrawer);\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n\n /** Where the pointer last was, which is what decides a dismissal on release. */\n private dragged: number | null = null;\n /** Where the pointer has been, for the velocity the release reads. */\n private samples: ExtentSample[] = [];\n /**\n * Where the press began and how far the panel's edge was from the pointer\n * then. The panel follows the pointer from that offset rather than jumping\n * its edge under it, so a press that does not move is a tap and moves nothing.\n */\n private press: { x: number; y: number; offset: number; moved: boolean } | null = null;\n /** What `Enter` restores to once it has collapsed the panel. */\n private collapsed: number | null = null;\n /** What the document looked like before the drag, and how to put it back. */\n private gesture: (() => void) | null = null;\n\n protected readonly orientation = computed(() =>\n isInlineSide(this.drawer.resolvedSide()) ? 'vertical' : 'horizontal',\n );\n protected readonly labelledBy = computed(() =>\n this.drawer.hasTitle() ? this.drawer.titleId : null,\n );\n /* A content sheet may rest below `minExtent`, and its rest is still a value\n the range holds. */\n protected readonly floor = computed(() => {\n const min = this.drawer.bounds().min;\n const rest = this.drawer.rest();\n return this.drawer.resolvedSize() === 'content' && rest !== undefined\n ? Math.min(min, rest)\n : min;\n });\n protected readonly valueNow = computed(() =>\n this.percent(clamp(this.current(), this.floor(), this.drawer.bounds().max)),\n );\n\n protected percent(value: number) {\n return Math.round(clamp(value, 0, 1) * 100);\n }\n\n private current() {\n return this.drawer.currentExtent() ?? this.drawer.rest() ?? this.drawer.bounds().min;\n }\n\n private isRtl() {\n return getComputedStyle(this.native).direction === 'rtl';\n }\n\n private span() {\n const box = this.drawer.measuringBox();\n if (box === null) return 0;\n const rect = box.getBoundingClientRect();\n return isInlineSide(this.drawer.resolvedSide()) ? rect.width : rect.height;\n }\n\n /**\n * The stops the keyboard, the release and a tap share. Without snap points\n * the range is continuous and there are none — the content stop joins only a\n * list the consumer started, or a separator with no stops would stop moving.\n */\n private stopsNow(): { stops: number[]; rest: number | undefined } {\n const panel = this.native.parentElement;\n if (panel === null || this.drawer.snapPoints().length === 0) {\n return { rest: this.drawer.rest(), stops: [] };\n }\n return this.drawer.measureStops(panel, this.span());\n }\n\n private fractionAt(event: PointerEvent) {\n const box = this.drawer.measuringBox();\n if (box === null) return null;\n return extentAtPoint({\n point: { x: event.clientX, y: event.clientY },\n rect: box.getBoundingClientRect(),\n rtl: this.isRtl(),\n side: this.drawer.resolvedSide(),\n });\n }\n\n protected pointerDown(event: PointerEvent) {\n if (event.defaultPrevented || event.button !== 0) return;\n const fraction = this.fractionAt(event);\n if (fraction === null) return;\n\n event.preventDefault();\n this.native.setPointerCapture(event.pointerId);\n this.native.focus();\n this.press = {\n moved: false,\n offset: this.current() - fraction,\n x: event.clientX,\n y: event.clientY,\n };\n this.samples = [];\n }\n\n protected pointerMove(event: PointerEvent) {\n const held = this.press;\n if (held === null) return;\n const at = this.fractionAt(event);\n if (at === null) return;\n\n if (!held.moved) {\n if (Math.hypot(event.clientX - held.x, event.clientY - held.y) < TAP_SLOP_PX) return;\n held.moved = true;\n /* The cursor has to survive the pointer leaving the separator, and a drag\n across the page must not select the text under it. Both are the\n document's and neither is reachable from the family's own stylesheet. */\n this.gesture?.();\n this.gesture = holdResizeGesture(\n this.native.ownerDocument,\n isInlineSide(this.drawer.resolvedSide()) ? 'col-resize' : 'row-resize',\n );\n this.drawer.dragging.set(true);\n }\n\n const fraction = clamp(at + held.offset, 0, 1);\n this.dragged = fraction;\n /* Three samples is what `extentVelocity` reads; keeping more would only let\n an older, slower stretch of the same drag dilute the flick. */\n this.samples = [...this.samples, { at: event.timeStamp, fraction }].slice(-3);\n this.drawer.requestExtent(fraction, 'pointer', event);\n }\n\n /**\n * A tap walks the stops upward and wraps from the highest to the lowest,\n * which is what the grabber of a native sheet does and what Ionic calls\n * `handleBehavior=\"cycle\"`. A separator with no stops has nowhere to walk.\n */\n private cycle(event: PointerEvent) {\n const { rest, stops } = this.stopsNow();\n if (stops.length < 2) return;\n /* Where the panel is, read with the stops rather than from state a frame old. */\n const at = this.drawer.currentExtent() ?? rest ?? this.current();\n const next = stops.find((stop) => stop > at && !sameStop(stop, at)) ?? (stops[0] as number);\n this.drawer.requestExtent(this.drawer.asRequest(next, rest), 'pointer', event);\n }\n\n /**\n * Where the release lands. With stops it is `settleExtent`, the same rule\n * the sheet's body answers: the closed position is the stop `0`, a fling goes\n * to the next stop, anything slower to the nearest to where it was heading.\n * Without stops the range is continuous — resizing is what a separator does\n * on a desktop screen — and only the floor, or a fling toward the edge, asks\n * to close. A close the consumer cancels leaves the panel at the floor.\n */\n protected endDrag(event: PointerEvent) {\n const held = this.press;\n if (held === null) return;\n this.press = null;\n if (this.native.hasPointerCapture(event.pointerId)) {\n this.native.releasePointerCapture(event.pointerId);\n }\n if (!held.moved) {\n if (event.type === 'pointerup') this.cycle(event);\n return;\n }\n\n this.gesture?.();\n this.gesture = null;\n this.drawer.dragging.set(false);\n\n const bounds = this.drawer.bounds();\n const span = this.span();\n const last = this.dragged ?? this.current();\n const velocity = extentVelocity(this.samples);\n this.dragged = null;\n this.samples = [];\n\n const { rest, stops } = this.stopsNow();\n if (stops.length > 0) {\n const landed = settleExtent({ fraction: last, span, stops, velocity });\n if (landed === 'close') {\n this.drawer.request(false, 'pointer', undefined, event);\n this.drawer.requestExtent(stops[0], 'pointer', event);\n return;\n }\n this.drawer.requestExtent(this.drawer.asRequest(landed, rest), 'pointer', event);\n return;\n }\n\n if (last < bounds.min || velocity * span <= -SHEET_FLING_PX_PER_S) {\n this.drawer.request(false, 'pointer', undefined, event);\n this.drawer.requestExtent(bounds.min, 'pointer', event);\n return;\n }\n this.drawer.requestExtent(clamp(last, bounds.min, bounds.max), 'pointer', event);\n }\n\n /**\n * Back to the measure the size step gives it, which is what `undefined`\n * means for this state. It is the one gesture in the family that restores\n * rather than moves, and every desktop pane divider answers a double click\n * with it.\n */\n protected restore(event: MouseEvent) {\n if (event.defaultPrevented) return;\n event.preventDefault();\n this.drawer.restoreExtent('pointer', event);\n }\n\n protected keyDown(event: KeyboardEvent) {\n if (event.defaultPrevented) return;\n\n const side = this.drawer.resolvedSide();\n const bounds = this.drawer.bounds();\n const inline = isInlineSide(side);\n const atStart = anchorsAtStart(side, this.isRtl());\n const towardFirstEdge = inline ? 'ArrowLeft' : 'ArrowUp';\n const towardLastEdge = inline ? 'ArrowRight' : 'ArrowDown';\n\n /**\n * A distance and not a proportion. Five per cent of a twelve-hundred-pixel\n * layer is sixty pixels, which is a jump rather than an adjustment; the\n * fraction is still what the family stores, and the pixels are converted\n * against the layer measured at the moment of the press.\n */\n const box = this.drawer.measuringBox();\n const amount =\n box === null\n ? 0\n : stepAmountFromPixels({\n pixels: event.shiftKey ? this.largeStep() : this.step(),\n rect: box.getBoundingClientRect(),\n side,\n });\n\n const { rest, stops } = this.stopsNow();\n const by = (direction: 1 | -1) => {\n event.preventDefault();\n const next = stepExtent({\n amount,\n direction,\n fraction: this.current(),\n max: stops.at(-1) ?? bounds.max,\n min: stops[0] ?? bounds.min,\n snapPoints: stops,\n });\n this.drawer.requestExtent(this.drawer.asRequest(next, rest), 'keyboard', event);\n };\n\n /** The two ends of the range: the first and last stop when there are stops. */\n const to = (target: number) => {\n event.preventDefault();\n this.drawer.requestExtent(this.drawer.asRequest(target, rest), 'keyboard', event);\n };\n\n switch (event.key) {\n case towardFirstEdge:\n return by(atStart ? -1 : 1);\n case towardLastEdge:\n return by(atStart ? 1 : -1);\n case 'Home':\n return to(stops[0] ?? bounds.min);\n case 'End':\n return to(stops.at(-1) ?? bounds.max);\n /**\n * The pattern's own key, and the one departure from it: \"collapses the\n * pane\" would mean closing the drawer, and Escape already means that. A\n * reader who presses Enter on a separator expects the separator to still\n * be there afterwards.\n */\n case 'Enter': {\n event.preventDefault();\n if (this.current() > bounds.min) {\n this.collapsed = this.current();\n return this.drawer.requestExtent(bounds.min, 'keyboard', event);\n }\n return this.drawer.requestExtent(this.collapsed ?? bounds.max, 'keyboard', event);\n }\n default:\n return;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slotted-angular-drawer.mjs","sources":["../../drawer/src/drawer-defaults.ts","../../drawer/src/drawer.ts","../../drawer/src/drawer-parts.ts","../../drawer/src/slotted-angular-drawer.ts"],"sourcesContent":["import type { ExtentSide } from '@slotted/core/extent';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\n\n/**\n * Whether the drawer is a layer over the page or a box beside it.\n *\n * One axis rather than two components, because the switch is the point: an\n * application binds it to its own breakpoint, and swapping one element for\n * another there would destroy the view — taking the panel's scroll position,\n * focus and every uncontrolled control inside it.\n */\nexport type DrawerMode = 'overlay' | 'inline';\n\n/**\n * Which edge the panel comes from. Logical, so the whole layout mirrors in a\n * right-to-left document without a second stylesheet.\n */\nexport type DrawerSide = ExtentSide;\n\n/**\n * The panel's resting measure. Five named steps rather than a pixel string: a\n * theme retunes a step and cannot retune `width: 400px`.\n */\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full' | 'content';\n\n/** When the panel exists. */\n/**\n * What a hand moves an overlay sheet from the bottom by. `panel` lets a touch\n * anywhere on it move it and hand itself to the scroll of what it holds;\n * `resizer` leaves the separator the only target. Only a bottom overlay sheet\n * reads it.\n */\nexport type DrawerDrag = 'panel' | 'resizer';\n\nexport type DrawerMount = 'active' | 'lazy' | 'eager';\n\n/** Whether a dismissal source closes the drawer. */\nexport type DrawerDismissPolicy = 'close' | 'none';\n\n/** Where focus goes when an overlay drawer opens. */\nexport type DrawerInitialFocus =\n 'first' | 'container' | HTMLElement | (() => HTMLElement | null) | false;\n\n/** Where focus goes when the drawer closes. Defaults to the trigger. */\nexport type DrawerFinalFocus = HTMLElement | false;\n\n/** Why the drawer opened or closed. */\nexport type DrawerOpenReason =\n 'pointer' | 'keyboard' | 'dismiss' | 'escape' | 'outsidePress' | 'back' | 'programmatic';\n\n/** Why the panel's measure moved. */\nexport type DrawerExtentReason = 'pointer' | 'keyboard' | 'programmatic';\n\ninterface Request<Value, Reason> {\n readonly value: Value;\n readonly previous: Value;\n readonly reason: Reason;\n readonly source?: unknown;\n readonly cancelled: boolean;\n cancel(): void;\n}\n\n/**\n * The request the family emits before the drawer moves, with the result the\n * close carried. `result` is what the platform calls `returnValue` and what\n * Angular Material returns from `afterClosed()`; it rides on the request rather\n * than declaring a second state model, because nothing about it is controlled.\n */\nexport interface DrawerChangeRequest extends Request<boolean, DrawerOpenReason> {\n readonly result?: string | undefined;\n}\n\n/** The request the separator emits before the measure moves. */\n/**\n * `undefined` is a value of this state and not the absence of one: it is the\n * panel back on the measure its size step gives it, which is where it starts\n * and where a double click on the separator puts it again.\n */\nexport type DrawerExtentRequest = Request<number | undefined, DrawerExtentReason>;\n\nexport interface DrawerDefaults {\n /** The platform's way back — a phone's gesture, a browser's button — closes a modal layer. */\n back: DrawerDismissPolicy;\n escape: DrawerDismissPolicy;\n mode: DrawerMode;\n modal: boolean;\n mount: DrawerMount;\n outsidePress: DrawerDismissPolicy;\n side: DrawerSide;\n /**\n * Unset, the size the side gives: `content` on `top` and `bottom`, where\n * every native sheet measures what it holds, and `md` on `start` and `end`.\n */\n size: DrawerSize | undefined;\n drag: DrawerDrag;\n}\n\nconst FALLBACK: DrawerDefaults = {\n back: 'close',\n escape: 'close',\n modal: true,\n mode: 'overlay',\n mount: 'active',\n outsidePress: 'close',\n side: 'end',\n size: undefined,\n drag: 'panel',\n};\n\nexport const DRAWER_DEFAULTS = new InjectionToken<DrawerDefaults>('slotted drawer defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its drawers behave and look, rather than\n * repeating the same seven inputs on every one in a product. Ant reaches the\n * same place through `ConfigProvider`; no React drawer in the surveyed set has\n * an equivalent, and React gets one here too rather than being levelled down.\n */\nexport function provideDrawerDefaults(defaults: Partial<DrawerDefaults>) {\n return {\n provide: DRAWER_DEFAULTS,\n useFactory: (): DrawerDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a drawer renders as here, before it states anything of its own. */\nexport function injectDrawerDefaults(): DrawerDefaults {\n return inject(DRAWER_DEFAULTS);\n}\n\n/**\n * Application-scoped rather than module-scoped, for the reason `field` records:\n * a module-level counter produces colliding sequences when two applications\n * render in one server process, and the server and the client sequences must\n * match for hydration.\n */\n@Injectable({ providedIn: 'root' })\nexport class SlDrawerIdFactory {\n private count = 0;\n\n next() {\n this.count += 1;\n return `slotted-drawer-${this.count}`;\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { createDismissableLayer } from '@slotted/core/dismissable-layer';\nimport type { DismissableLayerHandle } from '@slotted/core/dismissable-layer';\nimport {\n attachSheetDrag,\n dampenExtent,\n extentBounds,\n isInlineSide,\n measureSheetStops,\n sameStop,\n settleExtent,\n stopAsExtent,\n} from '@slotted/core/extent';\nimport { createFocusScope } from '@slotted/core/focus';\nimport type { FocusScopeHandle } from '@slotted/core/focus';\nimport { drawerMessages, type DrawerMessages, type PartialMessages } from '@slotted/core/i18n';\nimport { clamp, observeKeyboardInset } from '@slotted/core/measure';\nimport { createPortalRoot } from '@slotted/core/portal';\nimport type { PortalRootHandle } from '@slotted/core/portal';\nimport { createPresence } from '@slotted/core/presence';\nimport type { PresenceHandle, PresenceStatus } from '@slotted/core/presence';\nimport { createControllable } from '@slotted/core/state';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n model,\n OnInit,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectDrawerDefaults, SlDrawerIdFactory } from './drawer-defaults';\nimport type {\n DrawerChangeRequest,\n DrawerDismissPolicy,\n DrawerDrag,\n DrawerExtentReason,\n DrawerExtentRequest,\n DrawerFinalFocus,\n DrawerInitialFocus,\n DrawerMode,\n DrawerMount,\n DrawerOpenReason,\n DrawerSide,\n DrawerSize,\n} from './drawer-defaults';\n\nconst NO_SNAP_POINTS: readonly number[] = [];\n\n/** What the stylesheet leaves above a content sheet, for the press outside. */\nconst CONTENT_RESERVE = 'var(--slotted-space-12, 4rem)';\n\n/**\n * A panel that comes in from an edge, and either covers the page or stands\n * beside it.\n *\n * The layer is composed from `packages/core` and rewritten nowhere: `portal`\n * decides where it lives and keeps the theme of the region that opened it,\n * `dismissable-layer` owns Escape, outside press, `inert`, the scroll lock and\n * the single z-index stack, `presence` keeps it mounted long enough to leave,\n * `focus` contains the keyboard and gives it back to the trigger, and `extent`\n * holds the arithmetic the separator's pointer and keyboard share.\n *\n * **The host is not the layer.** `<sl-drawer>` renders `display: contents` and\n * stays exactly where the consumer wrote it; the layer is the `div` in the\n * template. Under `mode=\"overlay\"` that `div` is moved into the portal and\n * given back before it is destroyed; under `mode=\"inline\"` it never moves,\n * which is what makes the host's own parent the drawer's place in the layout.\n * Either way the host is the portal's *origin*, so the layer keeps the scheme,\n * density, theme and direction of the region it was written in whether or not\n * a trigger exists — React has to use the trigger for that, and\n * `docs/history/designs/2026-09-04-drawer-design.md` §11 records the\n * asymmetry rather than levelling both down.\n */\n@Component({\n selector: 'sl-drawer',\n standalone: true,\n exportAs: 'slDrawer',\n template: `\n @if (mounted()) {\n <div\n #layer\n data-ui=\"drawer\"\n data-part=\"root\"\n [attr.data-mode]=\"resolvedMode()\"\n [attr.data-side]=\"resolvedSide()\"\n [attr.data-size]=\"resolvedSize()\"\n [attr.data-mount]=\"resolvedMount()\"\n [attr.data-modal]=\"resolvedModal() ? '' : null\"\n [attr.data-open]=\"visible() ? '' : null\"\n [attr.data-loading]=\"loading() ? '' : null\"\n [attr.data-dragging]=\"dragging() ? '' : null\"\n [attr.data-drag]=\"sheet() ? resolvedDrag() : null\"\n [attr.data-undimmed]=\"undimmed() ? '' : null\"\n [attr.inert]=\"interactive() ? null : ''\"\n [style.--slotted-drawer-extent]=\"extentLength()\"\n >\n @if (showBackdrop()) {\n <div data-part=\"backdrop\"></div>\n }\n <div\n #panel\n data-part=\"panel\"\n [id]=\"panelId\"\n [attr.role]=\"role()\"\n [attr.aria-modal]=\"resolvedModal() ? 'true' : null\"\n [attr.aria-label]=\"label()\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n >\n <ng-content />\n </div>\n </div>\n }\n `,\n styleUrl: '../../../styles/src/drawer/drawer.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n /* The host is the origin the layer inherits its theme from, and nothing else. */\n host: { '[style.display]': \"'contents'\" },\n})\nexport class SlDrawer implements OnInit {\n /** Whether the drawer is open. Two-way, so a template may bind it directly. */\n readonly open = model<boolean>(false);\n\n /**\n * How much of the box the panel is measured in it takes, in `[0, 1]`. Unset\n * means the `size` step decides. It is a fraction rather than a length so\n * that the separator's three ARIA values, the limits and the snap points are\n * all the same kind of number.\n */\n readonly extent = model<number | undefined>(undefined);\n\n readonly mode = input<DrawerMode | undefined>(undefined);\n readonly side = input<DrawerSide | undefined>(undefined);\n readonly size = input<DrawerSize | undefined>(undefined);\n readonly mount = input<DrawerMount | undefined>(undefined);\n readonly escape = input<DrawerDismissPolicy | undefined>(undefined);\n readonly outsidePress = input<DrawerDismissPolicy | undefined>(undefined);\n /**\n * The platform's way back — a phone's gesture, a browser's button — closes\n * the layer instead of leaving the page, while the layer is modal.\n */\n readonly back = input<DrawerDismissPolicy | undefined>(undefined);\n /**\n * Whether the background is inert, the scroll is locked and focus is\n * contained. Fixed at `false` under `mode=\"inline\"`: a panel in the flow that\n * claimed `aria-modal` while the page around it stayed reachable is the\n * failure the APG calls severe.\n */\n readonly modal = input(true, { transform: booleanAttribute });\n /** Whether the panel's content is still on its way. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Words laid over the catalog of the language in force, key by key: the close control's name (`close`). */\n readonly messages = input<PartialMessages<DrawerMessages> | undefined>(undefined);\n /** What a hand moves an overlay sheet from the bottom by. */\n readonly drag = input<DrawerDrag | undefined>(undefined);\n /**\n * Below this fraction the scrim is not painted and a press reaches the page:\n * the sheet over a map. It pairs with `[modal]=\"false\"` and\n * `outsidePress=\"none\"`, because a page left undimmed and inert would promise\n * something it does not do.\n */\n readonly scrimFrom = input(0);\n /** The smallest the reader may make it. A drag released below it asks to close. */\n readonly minExtent = input(0.2);\n readonly maxExtent = input(1);\n /** The stops the separator lands on. Empty means the range is continuous. */\n readonly snapPoints = input<readonly number[]>(NO_SNAP_POINTS);\n /** A parent for this layer alone, instead of the shared portal root. */\n readonly container = input<Element | null | undefined>(undefined);\n readonly initialFocus = input<DrawerInitialFocus | undefined>(undefined);\n readonly finalFocus = input<DrawerFinalFocus | undefined>(undefined);\n\n /** One output per transition, each carrying its reason and its event. */\n readonly openChangeRequest = output<DrawerChangeRequest>();\n readonly extentChangeRequest = output<DrawerExtentRequest>();\n /**\n * What `afterClosed()` is in Angular Material, as an output. It fires once\n * the drawer has actually closed, with the result the close carried.\n */\n readonly closed = output<string | undefined>();\n\n private readonly defaults = injectDrawerDefaults();\n /** The family's words in the language in force, with this drawer's `messages` laid over them. */\n readonly t = injectMessages(drawerMessages, this.messages);\n private readonly host: HTMLElement = inject(ElementRef).nativeElement;\n /** The server lays nothing out, and its DOM cannot be measured. */\n private readonly browser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly destroyRef = inject(DestroyRef);\n private readonly baseId = inject(SlDrawerIdFactory).next();\n\n /** The element the consumer wrote us beside, recorded before anything moves. */\n private readonly origin = this.host.parentElement;\n\n /**\n * A consumer's own `aria-label` on `<sl-drawer>`, read before the host\n * bindings are written and moved to the panel, which is the element the role\n * is on. Without this a label written on the host would name a box with\n * `display: contents` and no role at all.\n */\n private readonly writtenLabel = inject(new HostAttributeToken('aria-label'), {\n optional: true,\n });\n\n protected readonly layerRef = viewChild<ElementRef<HTMLElement>>('layer');\n protected readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** The parts that have said they exist, so only what was rendered is wired. */\n readonly hasTitle = signal(false);\n readonly hasDescription = signal(false);\n readonly triggerNode = signal<HTMLElement | null>(null);\n /** Whether the reader has the separator under the pointer. */\n readonly dragging = signal(false);\n /**\n * Where the hand is holding the panel while the body is dragged, which may be\n * past the highest stop. `null` outside a gesture: the request is made once,\n * on release, rather than once per move.\n */\n readonly live = signal<number | null>(null);\n /**\n * What the panel measures at rest — the height of its content under\n * `size=\"content\"` — as a fraction, measured while `extent` is unset.\n */\n readonly rest = signal<number | undefined>(undefined);\n\n readonly titleId = `${this.baseId}-title`;\n readonly descriptionId = `${this.baseId}-description`;\n readonly panelId = `${this.baseId}-panel`;\n readonly triggerId = `${this.baseId}-trigger`;\n\n /**\n * The status rather than a boolean. `entering` is one frame long and it is\n * the whole reason it exists: a panel that appears already open gives its CSS\n * transition no closed style to start from.\n */\n private readonly status = signal<PresenceStatus>('unmounted');\n private readonly presence: PresenceHandle = createPresence({\n present: false,\n onStatusChange: (next) => this.status.set(next),\n });\n\n /** Whether this drawer has ever been open, which is what `lazy` reads. */\n private readonly seen = signal(false);\n private readonly result = signal<string | undefined>(undefined);\n /** The measured length the stylesheet reads, kept in step by an observer. */\n private readonly measured = signal<string | null>(null);\n\n readonly resolvedMode = computed(() => this.mode() ?? this.defaults.mode);\n readonly resolvedSide = computed(() => this.side() ?? this.defaults.side);\n /**\n * A sheet measures what it holds and a side panel takes a named step: every\n * native sheet sizes to its content, and Ant, Fluent and MUI all give a side\n * panel a width. The side decides only when nothing else has.\n */\n readonly resolvedSize = computed<DrawerSize>(() => {\n const side = this.resolvedSide();\n return (\n this.size() ?? this.defaults.size ?? (side === 'top' || side === 'bottom' ? 'content' : 'md')\n );\n });\n readonly resolvedDrag = computed<DrawerDrag>(() => this.drag() ?? this.defaults.drag);\n /** An overlay sheet from the bottom, which is the only panel a body drag moves. */\n readonly sheet = computed(\n () => this.resolvedMode() === 'overlay' && this.resolvedSide() === 'bottom',\n );\n /** The measure right now: the hand's while a body drag holds it, the state otherwise. */\n readonly currentExtent = computed(() => this.live() ?? this.extent());\n protected readonly undimmed = computed(\n () =>\n this.resolvedMode() === 'overlay' &&\n (this.currentExtent() ?? this.rest() ?? 1) < this.scrimFrom(),\n );\n readonly resolvedMount = computed(() => this.mount() ?? this.defaults.mount);\n readonly resolvedModal = computed(() =>\n this.resolvedMode() === 'inline' ? false : this.modal(),\n );\n readonly resolvedEscape = computed<DrawerDismissPolicy>(() =>\n this.resolvedMode() === 'inline' ? 'none' : (this.escape() ?? this.defaults.escape),\n );\n readonly resolvedBack = computed<DrawerDismissPolicy>(() =>\n this.resolvedMode() === 'inline' ? 'none' : (this.back() ?? this.defaults.back),\n );\n readonly resolvedOutsidePress = computed<DrawerDismissPolicy>(() =>\n this.resolvedMode() === 'inline' ? 'none' : (this.outsidePress() ?? this.defaults.outsidePress),\n );\n\n /**\n * The limits are the first and last stop when there are stops, because a\n * range whose ends no stop can reach has two values nothing produces.\n */\n readonly bounds = computed(() => {\n const stops = extentBounds(this.snapPoints(), this.minExtent(), this.maxExtent());\n /* Under `content` the height of the content is a stop above the snap\n points, so the range reaches past the last of them. */\n return this.resolvedSize() === 'content'\n ? { ...stops, max: Math.max(stops.max, this.maxExtent()) }\n : stops;\n });\n\n /**\n * An inline drawer is always in the document: its own measure is what opens\n * and closes, and a box that left the layout would take the page's columns\n * with it every time the reader closed the panel.\n */\n readonly mounted = computed(() => {\n if (this.resolvedMode() === 'inline') return true;\n const mount = this.resolvedMount();\n if (mount === 'eager') return true;\n if (mount === 'lazy') return this.seen();\n return this.status() !== 'unmounted';\n });\n\n /** What the stylesheet keys on, which is a frame behind what was asked. */\n readonly visible = computed(() =>\n this.resolvedMode() === 'inline' ? this.open() : this.status() === 'open',\n );\n /**\n * Whether the layer takes focus and the pointer. `entering` counts: the\n * focus scope enters in that frame, and a layer still `inert` then refuses\n * the initial focus and leaves it on `body`.\n */\n readonly interactive = computed(() => {\n if (this.resolvedMode() === 'inline') return this.open();\n const status = this.status();\n return status === 'entering' || status === 'open';\n });\n\n /**\n * The scrim belongs to the layer, not to the dismissal policy: `modal`\n * decides what happens to the page behind it and never what is painted.\n * `dialog` draws it the same way, and a consumer who wants none sets\n * `--slotted-drawer-scrim: transparent`.\n */\n protected readonly showBackdrop = computed(() => this.resolvedMode() === 'overlay');\n protected readonly extentLength = computed(() => this.measured());\n /* An inline panel writes no role, and a name on a generic element names\n nothing: the consumer's landmark around it carries the name. */\n protected readonly labelledBy = computed(() =>\n this.resolvedMode() === 'overlay' && this.hasTitle() && this.writtenLabel === null\n ? this.titleId\n : null,\n );\n protected readonly describedBy = computed(() =>\n this.hasDescription() ? this.descriptionId : null,\n );\n protected readonly label = computed(() => this.writtenLabel);\n /**\n * Under `inline` the panel is a region of the page rather than a window over\n * it, so it writes no role: a navigation drawer is a navigation landmark and\n * a filter panel is complementary, and a family that cannot know which one\n * guesses wrong half the time. A consumer names it on their own element.\n */\n protected readonly role = computed(() => (this.resolvedMode() === 'overlay' ? 'dialog' : null));\n\n private portal: PortalRootHandle | null = null;\n private layer: DismissableLayerHandle | null = null;\n private scope: FocusScopeHandle | null = null;\n\n /**\n * What the consumer's own binding said before the reader moved anything.\n *\n * Read in `ngOnInit` and not in the field initializer: Angular creates every\n * directive in a template before it binds any input, so a measure read at\n * construction is always the model's own default and never the consumer's.\n */\n private initialExtent: number | undefined = undefined;\n\n ngOnInit() {\n this.initialExtent = this.extent();\n }\n\n constructor() {\n effect(() => {\n if (this.open()) this.seen.set(true);\n this.presence.sync(this.open());\n });\n\n /* A sheet closed by a drag keeps the hand's position through its exit, so\n it slides from there; opening again starts from rest. */\n effect(() => {\n if (this.open()) untracked(() => this.live.set(null));\n });\n\n /** Where an overlay layer lives, for as long as it is in the document. */\n effect(() => {\n const node = this.layerRef()?.nativeElement ?? null;\n this.presence.setNode(node);\n\n if (node === null || this.resolvedMode() === 'inline') {\n this.releasePortal();\n return;\n }\n if (this.portal !== null) return;\n\n const named = this.container();\n this.portal = createPortalRoot({\n origin: this.origin,\n ...(named === undefined ? {} : { container: named }),\n });\n this.portal.container?.append(node);\n });\n\n /**\n * The measure as a length the stylesheet can use. The public value is a\n * fraction; a percentage would not do, because under `inline` the drawer is\n * the box being sized and a percentage of its own containing block resolves\n * against a track whose size depends on it. The observer is what keeps the\n * pixels and the fraction in step when the window changes.\n */\n effect((onCleanup) => {\n const box = this.measuringBox();\n const fraction = this.currentExtent();\n const inline = isInlineSide(this.resolvedSide());\n\n if (box === null || fraction === undefined || !this.browser) {\n this.measured.set(null);\n return;\n }\n\n const measure = () => {\n const rect = box.getBoundingClientRect();\n const span = inline ? rect.width : rect.height;\n if (span > 0) this.measured.set(`${Math.round(fraction * span)}px`);\n };\n\n measure();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(measure);\n observer.observe(box);\n onCleanup(() => observer.disconnect());\n });\n\n /**\n * Everything the drawer does while it is open, taken down when it closes\n * rather than when the node leaves — `presence` keeps the node mounted\n * through the exit, and a layer still holding the scroll lock and the\n * background's `inert` for those milliseconds is a page nobody can touch.\n *\n * An inline drawer composes neither the layer nor containment: it is a box\n * in the page, nothing is inert and nothing is contained. It still enters a\n * focus scope, because the scope is what returns focus to the trigger when\n * a panel the reader is standing in closes underneath them.\n */\n effect((onCleanup) => {\n const node = this.layerRef()?.nativeElement;\n const panel = this.panelRef()?.nativeElement;\n if (!this.open() || node === undefined || panel === undefined) return;\n\n const overlay = this.resolvedMode() === 'overlay';\n const escape = this.resolvedEscape() === 'close';\n const outsidePress = this.resolvedOutsidePress() === 'close';\n const modal = this.resolvedModal();\n /* A history entry is a modal layer's: a layer the page stays reachable\n under has no claim on the way back. */\n const back = modal && this.resolvedBack() === 'close';\n const trigger = this.triggerNode();\n\n if (overlay) {\n /* The panel is what a press is inside of; the scrim is the way out, on\n the click rather than the pointerdown so a selection dragged out of\n the panel is not a press on the scrim. */\n this.layer = createDismissableLayer(node, {\n back,\n branches: trigger === null ? [] : [trigger],\n content: panel,\n escape,\n modal,\n onDismiss: (request) => {\n if (request.reason === 'outsidePress' && !outsidePress) return request.cancel();\n this.request(false, request.reason as DrawerOpenReason, undefined, request.source);\n },\n outsidePress,\n outsidePressEvent: 'click',\n });\n }\n\n const wanted = this.initialFocus() ?? 'first';\n const returnTo = this.finalFocus();\n /**\n * Where focus goes back to with no `finalFocus`: what held it when the\n * drawer opened, or the trigger when that was nothing. A click does not\n * focus a button in Safari, so a drawer opened from its trigger there\n * had `body` as its origin and gave focus back to nowhere.\n */\n const origin = panel.ownerDocument.activeElement as HTMLElement | null;\n const originParent = origin?.parentElement ?? null;\n const fallback = (): HTMLElement | null => {\n if (origin === null || origin === origin.ownerDocument.body) return this.triggerNode();\n if (origin.isConnected) return origin;\n /* The row the drawer was opened from has gone: its nearest ancestor\n that is still in the document, as the contract's restore rule says. */\n let node: HTMLElement | null = originParent;\n while (node !== null && !node.isConnected) node = node.parentElement;\n return node;\n };\n this.scope = createFocusScope(panel, {\n contain: overlay && modal,\n initial: !overlay ? false : wanted instanceof HTMLElement ? () => wanted : wanted,\n restore: returnTo === undefined ? fallback : returnTo === false ? false : () => returnTo,\n });\n this.scope.enter();\n\n onCleanup(() => {\n /* The layer first: while it stands, a modal layer keeps every sibling\n up to the root `inert`, and focus given back to a trigger there is\n refused — the reader lands on `body`. */\n this.layer?.destroy();\n this.layer = null;\n this.scope?.destroy();\n this.scope = null;\n this.closed.emit(this.result());\n this.result.set(undefined);\n });\n });\n\n /**\n * What the panel measures at rest, as a fraction, while nothing has moved\n * it. It is what the separator reports and what `scrimFrom` compares\n * against, and content that arrives while the sheet is open moves it, so it\n * is observed rather than read once.\n */\n effect((onCleanup) => {\n const box = this.measuringBox();\n const panel = this.panelRef()?.nativeElement;\n if (\n !this.browser ||\n box === null ||\n panel === undefined ||\n !this.open() ||\n this.extent() !== undefined ||\n this.live() !== null\n ) {\n return;\n }\n const inline = isInlineSide(this.resolvedSide());\n const read = () => {\n const rect = box.getBoundingClientRect();\n const span = inline ? rect.width : rect.height;\n if (span <= 0) return;\n const own = inline ? panel.offsetWidth : panel.offsetHeight;\n this.rest.set(Math.round((own / span) * 1000) / 1000);\n };\n read();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(read);\n observer.observe(panel);\n observer.observe(box);\n onCleanup(() => observer.disconnect());\n });\n\n /**\n * The virtual keyboard. The layer recedes by what it covers, so the panel\n * lands above the keys; `@slotted/core/measure` reads it from the visual\n * viewport.\n */\n effect((onCleanup) => {\n const node = this.layerRef()?.nativeElement;\n if (node === undefined || !this.open() || this.resolvedMode() !== 'overlay') return;\n const stop = observeKeyboardInset(node.ownerDocument.defaultView, (pixels) => {\n if (pixels === 0) node.style.removeProperty('--slotted-keyboard-inset');\n else node.style.setProperty('--slotted-keyboard-inset', `${pixels}px`);\n });\n onCleanup(() => {\n stop();\n node.style.removeProperty('--slotted-keyboard-inset');\n });\n });\n\n /**\n * The body of a sheet from the bottom moves it under a touch, and hands the\n * gesture to the scroll of what it holds when that is what it is —\n * `attachSheetDrag` decides which. The request is made once, on release,\n * and the hand's position lives in `live` until then.\n */\n effect((onCleanup) => {\n const node = this.layerRef()?.nativeElement;\n const panel = this.panelRef()?.nativeElement;\n if (\n node === undefined ||\n panel === undefined ||\n !this.open() ||\n !this.sheet() ||\n this.resolvedDrag() !== 'panel'\n ) {\n return;\n }\n\n let span = 0;\n let start = 0;\n let last = 0;\n let measured: { stops: number[]; rest: number | undefined } = {\n rest: undefined,\n stops: [],\n };\n const now = () => {\n span = node.getBoundingClientRect().height;\n return span > 0 ? panel.offsetHeight / span : 0;\n };\n\n onCleanup(\n attachSheetDrag(panel, {\n enabled: () => this.open(),\n canGrow: () => {\n const at = now();\n const top = this.measureStops(panel, span).stops.at(-1);\n return top !== undefined && at < top && !sameStop(at, top);\n },\n onStart: () => {\n start = now();\n last = start;\n measured = this.measureStops(panel, span);\n this.dragging.set(true);\n this.live.set(start);\n },\n onMove: (distance) => {\n if (span <= 0) return;\n last = Math.max(0, start + distance / span);\n this.live.set(dampenExtent(last, measured.stops.at(-1) ?? start));\n },\n onEnd: (velocity) => {\n this.dragging.set(false);\n const landed = settleExtent({\n fraction: Math.min(last, measured.stops.at(-1) ?? last),\n span,\n stops: measured.stops,\n velocity: span > 0 ? velocity / span : 0,\n });\n if (landed === 'close') {\n /* The panel stays where the hand left it, so the exit slides from\n there; a close the consumer refused puts it back. */\n this.request(false, 'pointer', undefined, null);\n if (this.open()) this.live.set(null);\n return;\n }\n this.live.set(null);\n this.requestExtent(this.asRequest(landed, measured.rest), 'pointer', null);\n },\n }),\n );\n });\n\n this.destroyRef.onDestroy(() => {\n this.scope?.destroy();\n this.layer?.destroy();\n this.presence.destroy();\n this.releasePortal();\n });\n }\n\n /** The stops a sheet rests on and the rest among them, measured now. */\n measureStops(panel: HTMLElement, span: number) {\n return measureSheetStops({\n atRest: this.extent() === undefined && this.live() === null,\n content: this.resolvedSize() === 'content',\n panel,\n reserve: CONTENT_RESERVE,\n rest: this.rest(),\n snapPoints: this.snapPoints(),\n span,\n });\n }\n\n /**\n * What a settled fraction is asked as: the content stop is `undefined`, so\n * the sheet follows its content again when the content grows.\n */\n asRequest(fraction: number, rest: number | undefined) {\n return stopAsExtent(fraction, rest, this.resolvedSize() === 'content');\n }\n\n /**\n * The box the panel's measure is a fraction of: the layer under `overlay`,\n * which is fixed to the viewport, and the drawer's own parent under `inline`,\n * where the drawer is what is being sized and cannot measure itself.\n */\n measuringBox(): HTMLElement | null {\n const node = this.layerRef()?.nativeElement ?? null;\n if (node === null) return null;\n /* Under `inline` the layer's parent is the host, which renders\n `display: contents` and lays nothing out: the box is the host's own\n parent, the consumer's layout. */\n return this.resolvedMode() === 'inline' ? this.host.parentElement : node;\n }\n\n /**\n * The layer element is given back to the host before the portal goes, so\n * Angular removes a node that is where its own view expects it to be.\n */\n private releasePortal() {\n if (this.portal === null) return;\n const node = this.layerRef()?.nativeElement;\n if (node !== undefined) this.host.append(node);\n this.portal.release();\n this.portal = null;\n }\n\n /** Asks to open or close, carrying the reason, the result and the event. */\n request(next: boolean, reason: DrawerOpenReason, result: string | undefined, source: unknown) {\n if (next === this.open()) return;\n\n let cancelled = false;\n const state = createControllable<boolean>({\n initial: this.open(),\n onRequest: (raw) => {\n cancelled = raw.cancelled;\n this.openChangeRequest.emit({\n cancel: () => raw.cancel(),\n get cancelled() {\n return raw.cancelled;\n },\n previous: raw.previous,\n reason,\n result,\n source: raw.source,\n value: raw.value,\n });\n },\n });\n\n if (!state.request(next, reason, source) || cancelled) return;\n if (!next) this.result.set(result);\n this.open.set(next);\n }\n\n /**\n * Asks to move the measure. While the pointer is down the floor is not\n * enforced — a sheet the reader is pulling down has to follow the hand — and\n * the separator decides on release whether that means a smaller panel or a\n * closed one.\n */\n requestExtent(next: number | undefined, reason: DrawerExtentReason, source: unknown) {\n /* `undefined` travels whole: it is the panel back on its size step, and a\n clamp of it would be a clamp of a value that is not a fraction. */\n const wanted = next === undefined ? undefined : clamp(next, 0, this.bounds().max);\n if (wanted === this.extent()) return;\n\n let cancelled = false;\n const state = createControllable<number | undefined>({\n /* `undefined` is a value of this state — the panel on its size step —\n and not a gap to fill: a floor standing in for it made a request for\n the floor from the content stop look like no change at all. */\n initial: this.extent(),\n onRequest: (raw) => {\n cancelled = raw.cancelled;\n this.extentChangeRequest.emit({\n cancel: () => raw.cancel(),\n get cancelled() {\n return raw.cancelled;\n },\n previous: raw.previous,\n reason,\n source: raw.source,\n value: raw.value,\n });\n },\n });\n\n if (!state.request(wanted, reason, source) || cancelled) return;\n this.extent.set(wanted);\n }\n\n /**\n * Back to the measure the size step gives it, which is where the panel\n * started. Angular has one model rather than a controlled and an\n * uncontrolled input, so the measure to restore is the one the model held\n * before anything moved it, read once.\n */\n restoreExtent(reason: DrawerExtentReason, source: unknown) {\n this.requestExtent(this.initialExtent, reason, source);\n }\n\n /** Opens the drawer from code, carrying `programmatic`. */\n openDrawer() {\n this.request(true, 'programmatic', undefined, undefined);\n }\n\n /** Closes it from code, carrying `programmatic` and the result given. */\n close(result?: string) {\n this.request(false, 'programmatic', result, undefined);\n }\n\n /**\n * The panel, once it is in the document — what React's handle calls\n * `panel`. A family that composes the drawer reads it to hand the panel a\n * value only it knows, as `action-sheet` hands it its measure.\n */\n get panel(): HTMLElement | null {\n return this.panelRef()?.nativeElement ?? null;\n }\n\n /** Moves focus into the panel, as opening an overlay drawer does. */\n focus() {\n this.panelRef()?.nativeElement.focus();\n }\n}\n","import {\n EXTENT_LARGE_STEP_PX,\n EXTENT_STEP_PX,\n anchorsAtStart,\n extentAtPoint,\n extentVelocity,\n holdResizeGesture,\n isInlineSide,\n sameStop,\n settleExtent,\n SHEET_FLING_PX_PER_S,\n stepAmountFromPixels,\n stepExtent,\n} from '@slotted/core/extent';\nimport type { ExtentSample } from '@slotted/core/extent';\nimport { clamp } from '@slotted/core/measure';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\n\nimport { SlDrawer } from './drawer';\nimport type { DrawerOpenReason } from './drawer-defaults';\n\n/**\n * A click synthesised by the keyboard reports no detail; a real one reports the\n * click count. It is how `Enter`, `Space` and a pointer are told apart without\n * a key listener existing for something the platform already handles.\n */\nfunction activationReason(event: MouseEvent): DrawerOpenReason {\n return event.detail === 0 ? 'keyboard' : 'pointer';\n}\n\n/**\n * The control that opens a drawer.\n *\n * It is the consumer's own element, which is what this ecosystem composes with:\n * `<button slButton [slDrawerTrigger]=\"d\">` is the library's own button and\n * this adds the wiring to it. React reaches the same place with `render`,\n * because there the component owns the tag.\n *\n * The trigger is also an overlay layer's *branch*: a press on it is inside the\n * layer as far as `dismissable-layer` is concerned, or opening would\n * immediately be read as an outside press and close what it just opened.\n *\n * `aria-haspopup` is written only under `mode=\"overlay\"`. An inline drawer is a\n * disclosure, not a popup, and the property would promise a layer that never\n * arrives.\n */\n@Directive({\n selector: '[slDrawerTrigger]',\n standalone: true,\n exportAs: 'slDrawerTrigger',\n host: {\n '[attr.data-part]': 'part',\n type: 'button',\n '[attr.aria-haspopup]': 'haspopup()',\n '[attr.aria-expanded]': 'drawer().open()',\n '[attr.aria-controls]': 'controls()',\n '[attr.data-open]': \"drawer().open() ? '' : null\",\n '[id]': 'drawer().triggerId',\n '(click)': 'press($event)',\n },\n})\nexport class SlDrawerTrigger implements OnInit, OnDestroy {\n /** The drawer this control opens, reached with a template reference variable. */\n readonly drawer = input.required<SlDrawer>({ alias: 'slDrawerTrigger' });\n\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n\n /**\n * `trigger` names the control when it belongs to no family of its own. On\n * `slButton` the element is that family's root, and the part stays `root`:\n * two directives write one attribute, and the family the element is drawn by\n * keeps it, as React's `render` does by spreading the button's props last.\n */\n protected readonly part = this.native.hasAttribute('data-ui')\n ? this.native.getAttribute('data-part')\n : 'trigger';\n\n protected readonly controls = computed(() =>\n this.drawer().mounted() ? this.drawer().panelId : null,\n );\n protected readonly haspopup = computed(() =>\n this.drawer().resolvedMode() === 'overlay' ? 'dialog' : null,\n );\n\n ngOnInit() {\n this.drawer().triggerNode.set(this.native);\n }\n\n ngOnDestroy() {\n if (this.drawer().triggerNode() === this.native) this.drawer().triggerNode.set(null);\n }\n\n protected press(event: MouseEvent) {\n /* The consumer's own handler ran first, and `preventDefault()` refuses the\n open — composed with, never replaced. */\n if (event.defaultPrevented) return;\n const drawer = this.drawer();\n drawer.request(!drawer.open(), activationReason(event), undefined, event);\n }\n}\n\n@Directive({\n selector: '[slDrawerHeader]',\n standalone: true,\n exportAs: 'slDrawerHeader',\n host: { 'data-part': 'header' },\n})\nexport class SlDrawerHeader {}\n\n/**\n * The visible name, which `aria-labelledby` points at — on the panel and, as\n * the Window Splitter pattern requires, on the separator that sizes it.\n */\n@Directive({\n selector: '[slDrawerTitle]',\n standalone: true,\n exportAs: 'slDrawerTitle',\n host: { 'data-part': 'title', '[id]': 'drawer.titleId' },\n})\nexport class SlDrawerTitle implements OnInit, OnDestroy {\n protected readonly drawer = inject(SlDrawer);\n\n ngOnInit() {\n this.drawer.hasTitle.set(true);\n }\n\n ngOnDestroy() {\n this.drawer.hasTitle.set(false);\n }\n}\n\n/** The sentence that says what the drawer is about. */\n@Directive({\n selector: '[slDrawerDescription]',\n standalone: true,\n exportAs: 'slDrawerDescription',\n host: { 'data-part': 'description', '[id]': 'drawer.descriptionId' },\n})\nexport class SlDrawerDescription implements OnInit, OnDestroy {\n protected readonly drawer = inject(SlDrawer);\n\n ngOnInit() {\n this.drawer.hasDescription.set(true);\n }\n\n ngOnDestroy() {\n this.drawer.hasDescription.set(false);\n }\n}\n\n/**\n * The one row that scrolls, and the row `aria-busy` belongs to while the\n * content is still on its way — the header, the close button, Escape and the\n * separator all stay operable, because a drawer a reader cannot leave is the\n * worse failure of the two.\n */\n@Directive({\n selector: '[slDrawerBody]',\n standalone: true,\n exportAs: 'slDrawerBody',\n host: {\n 'data-part': 'body',\n '[attr.aria-busy]': \"drawer.loading() ? 'true' : null\",\n '[attr.data-inset]': 'inset() ?? null',\n },\n})\nexport class SlDrawerBody {\n protected readonly drawer = inject(SlDrawer);\n /** `none` drops the body's own padding, for content that brings its own inset — a page, a list on the panel's edges. */\n readonly inset = input<'none' | undefined>(undefined);\n}\n\n@Directive({\n selector: '[slDrawerFooter]',\n standalone: true,\n exportAs: 'slDrawerFooter',\n host: { 'data-part': 'footer' },\n})\nexport class SlDrawerFooter {}\n\n/**\n * The ✕ in the corner. It carries `dismiss`, which is the word the closed\n * vocabulary in `docs/state-and-events.md` already has for what a close button\n * means, and its `value` rides out on the request as the result.\n */\n@Component({\n selector: '[slDrawerClose]',\n standalone: true,\n exportAs: 'slDrawerClose',\n imports: [SlGlyph, SlIcon],\n /* The cross is drawn unless the consumer wrote content of their own. */\n template: `<ng-content\n ><span slIcon><svg slGlyph name=\"x\"></svg></span\n ></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'data-part': 'close',\n type: 'button',\n '[attr.aria-label]': 'label()',\n '(click)': 'press($event)',\n },\n})\nexport class SlDrawerClose {\n /** The result the close carries out, which is the platform's `returnValue`. */\n readonly value = input<string | undefined>(undefined);\n\n private readonly drawer = inject(SlDrawer);\n /** A consumer's own `aria-label`, which wins over the catalog. */\n private readonly ownLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n\n protected readonly label = computed(() => this.ownLabel ?? this.drawer.t('close'));\n\n protected press(event: MouseEvent) {\n if (event.defaultPrevented) return;\n this.drawer.request(false, 'dismiss', this.value(), event);\n }\n}\n\n/**\n * The separator the reader moves, from the WAI-ARIA Window Splitter pattern.\n *\n * **Rendering it is the capability.** There is no `resizable` input, so an\n * input with no separator, and a separator an input had switched off, are both\n * states this family cannot be in.\n *\n * The arrows are physical rather than logical, which is the pattern's own\n * reading: the key names a direction on the screen. `ArrowLeft` grows an\n * `end`-side panel in a left-to-right document and shrinks it in a mirrored\n * one, because there the panel is on the left and the reader is pushing its\n * edge toward the wall.\n */\n/** How far a press on the separator may wander and still be a tap. */\nconst TAP_SLOP_PX = 3;\n\n@Component({\n selector: '[slDrawerResizer]',\n standalone: true,\n exportAs: 'slDrawerResizer',\n /**\n * A component rather than a directive, and the template is the whole reason:\n * the separator draws its own picture now — two hairlines and a grip, or a\n * pill on a block side — and a directive has nothing to draw them with.\n *\n * Three elements rather than pseudo-elements because\n * `packages/styles/src/fallbacks.test.mjs` forbids a system colour inside\n * `::before` or `::after`, and both steps these take have one as their last\n * resort. The selector is unchanged, so no consumer's template moves.\n */\n template: `\n <span data-part=\"line\" aria-hidden=\"true\"></span>\n <span data-part=\"grip\" aria-hidden=\"true\"></span>\n <span data-part=\"line\" aria-hidden=\"true\"></span>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-part': 'resizer',\n role: 'separator',\n tabindex: '0',\n '[attr.aria-controls]': 'drawer.panelId',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-orientation]': 'orientation()',\n '[attr.aria-valuemin]': 'percent(floor())',\n '[attr.aria-valuemax]': 'percent(drawer.bounds().max)',\n '[attr.aria-valuenow]': 'valueNow()',\n '(pointerdown)': 'pointerDown($event)',\n '(pointermove)': 'pointerMove($event)',\n '(pointerup)': 'endDrag($event)',\n '(lostpointercapture)': 'endDrag($event)',\n '(keydown)': 'keyDown($event)',\n '(dblclick)': 'restore($event)',\n },\n})\nexport class SlDrawerResizer {\n /**\n * How far one arrow press moves the separator, **in pixels**, when there are\n * no snap points. A distance and not a proportion: a reader adjusting a pane\n * is placing an edge against the content beside it, and a proportion of a\n * wide layer is a jump.\n */\n readonly step = input(EXTENT_STEP_PX);\n /** How far `Shift` and an arrow move it, in pixels. */\n readonly largeStep = input(EXTENT_LARGE_STEP_PX);\n\n protected readonly drawer = inject(SlDrawer);\n private readonly native: HTMLElement = inject(ElementRef).nativeElement;\n\n /** Where the pointer last was, which is what decides a dismissal on release. */\n private dragged: number | null = null;\n /** Where the pointer has been, for the velocity the release reads. */\n private samples: ExtentSample[] = [];\n /**\n * Where the press began and how far the panel's edge was from the pointer\n * then. The panel follows the pointer from that offset rather than jumping\n * its edge under it, so a press that does not move is a tap and moves nothing.\n */\n private press: { x: number; y: number; offset: number; moved: boolean } | null = null;\n /** What `Enter` restores to once it has collapsed the panel. */\n private collapsed: number | null = null;\n /** What the document looked like before the drag, and how to put it back. */\n private gesture: (() => void) | null = null;\n\n protected readonly orientation = computed(() =>\n isInlineSide(this.drawer.resolvedSide()) ? 'vertical' : 'horizontal',\n );\n protected readonly labelledBy = computed(() =>\n this.drawer.hasTitle() ? this.drawer.titleId : null,\n );\n /* A content sheet may rest below `minExtent`, and its rest is still a value\n the range holds. */\n protected readonly floor = computed(() => {\n const min = this.drawer.bounds().min;\n const rest = this.drawer.rest();\n return this.drawer.resolvedSize() === 'content' && rest !== undefined\n ? Math.min(min, rest)\n : min;\n });\n protected readonly valueNow = computed(() =>\n this.percent(clamp(this.current(), this.floor(), this.drawer.bounds().max)),\n );\n\n protected percent(value: number) {\n return Math.round(clamp(value, 0, 1) * 100);\n }\n\n private current() {\n return this.drawer.currentExtent() ?? this.drawer.rest() ?? this.drawer.bounds().min;\n }\n\n private isRtl() {\n return getComputedStyle(this.native).direction === 'rtl';\n }\n\n private span() {\n const box = this.drawer.measuringBox();\n if (box === null) return 0;\n const rect = box.getBoundingClientRect();\n return isInlineSide(this.drawer.resolvedSide()) ? rect.width : rect.height;\n }\n\n /**\n * The stops the keyboard, the release and a tap share. Without snap points\n * the range is continuous and there are none — the content stop joins only a\n * list the consumer started, or a separator with no stops would stop moving.\n */\n private stopsNow(): { stops: number[]; rest: number | undefined } {\n const panel = this.native.parentElement;\n if (panel === null || this.drawer.snapPoints().length === 0) {\n return { rest: this.drawer.rest(), stops: [] };\n }\n return this.drawer.measureStops(panel, this.span());\n }\n\n private fractionAt(event: PointerEvent) {\n const box = this.drawer.measuringBox();\n if (box === null) return null;\n return extentAtPoint({\n point: { x: event.clientX, y: event.clientY },\n rect: box.getBoundingClientRect(),\n rtl: this.isRtl(),\n side: this.drawer.resolvedSide(),\n });\n }\n\n protected pointerDown(event: PointerEvent) {\n if (event.defaultPrevented || event.button !== 0) return;\n const fraction = this.fractionAt(event);\n if (fraction === null) return;\n\n event.preventDefault();\n this.native.setPointerCapture(event.pointerId);\n this.native.focus();\n this.press = {\n moved: false,\n offset: this.current() - fraction,\n x: event.clientX,\n y: event.clientY,\n };\n this.samples = [];\n }\n\n protected pointerMove(event: PointerEvent) {\n const held = this.press;\n if (held === null) return;\n const at = this.fractionAt(event);\n if (at === null) return;\n\n if (!held.moved) {\n if (Math.hypot(event.clientX - held.x, event.clientY - held.y) < TAP_SLOP_PX) return;\n held.moved = true;\n /* The cursor has to survive the pointer leaving the separator, and a drag\n across the page must not select the text under it. Both are the\n document's and neither is reachable from the family's own stylesheet. */\n this.gesture?.();\n this.gesture = holdResizeGesture(\n this.native.ownerDocument,\n isInlineSide(this.drawer.resolvedSide()) ? 'col-resize' : 'row-resize',\n );\n this.drawer.dragging.set(true);\n }\n\n const fraction = clamp(at + held.offset, 0, 1);\n this.dragged = fraction;\n /* Three samples is what `extentVelocity` reads; keeping more would only let\n an older, slower stretch of the same drag dilute the flick. */\n this.samples = [...this.samples, { at: event.timeStamp, fraction }].slice(-3);\n this.drawer.requestExtent(fraction, 'pointer', event);\n }\n\n /**\n * A tap walks the stops upward and wraps from the highest to the lowest,\n * which is what the grabber of a native sheet does and what Ionic calls\n * `handleBehavior=\"cycle\"`. A separator with no stops has nowhere to walk.\n */\n private cycle(event: PointerEvent) {\n const { rest, stops } = this.stopsNow();\n if (stops.length < 2) return;\n /* Where the panel is, read with the stops rather than from state a frame old. */\n const at = this.drawer.currentExtent() ?? rest ?? this.current();\n const next = stops.find((stop) => stop > at && !sameStop(stop, at)) ?? (stops[0] as number);\n this.drawer.requestExtent(this.drawer.asRequest(next, rest), 'pointer', event);\n }\n\n /**\n * Where the release lands. With stops it is `settleExtent`, the same rule\n * the sheet's body answers: the closed position is the stop `0`, a fling goes\n * to the next stop, anything slower to the nearest to where it was heading.\n * Without stops the range is continuous — resizing is what a separator does\n * on a desktop screen — and only the floor, or a fling toward the edge, asks\n * to close. A close the consumer cancels leaves the panel at the floor.\n */\n protected endDrag(event: PointerEvent) {\n const held = this.press;\n if (held === null) return;\n this.press = null;\n if (this.native.hasPointerCapture(event.pointerId)) {\n this.native.releasePointerCapture(event.pointerId);\n }\n if (!held.moved) {\n if (event.type === 'pointerup') this.cycle(event);\n return;\n }\n\n this.gesture?.();\n this.gesture = null;\n this.drawer.dragging.set(false);\n\n const bounds = this.drawer.bounds();\n const span = this.span();\n const last = this.dragged ?? this.current();\n const velocity = extentVelocity(this.samples);\n this.dragged = null;\n this.samples = [];\n\n const { rest, stops } = this.stopsNow();\n if (stops.length > 0) {\n const landed = settleExtent({ fraction: last, span, stops, velocity });\n if (landed === 'close') {\n this.drawer.request(false, 'pointer', undefined, event);\n this.drawer.requestExtent(stops[0], 'pointer', event);\n return;\n }\n this.drawer.requestExtent(this.drawer.asRequest(landed, rest), 'pointer', event);\n return;\n }\n\n if (last < bounds.min || velocity * span <= -SHEET_FLING_PX_PER_S) {\n this.drawer.request(false, 'pointer', undefined, event);\n this.drawer.requestExtent(bounds.min, 'pointer', event);\n return;\n }\n this.drawer.requestExtent(clamp(last, bounds.min, bounds.max), 'pointer', event);\n }\n\n /**\n * Back to the measure the size step gives it, which is what `undefined`\n * means for this state. It is the one gesture in the family that restores\n * rather than moves, and every desktop pane divider answers a double click\n * with it.\n */\n protected restore(event: MouseEvent) {\n if (event.defaultPrevented) return;\n event.preventDefault();\n this.drawer.restoreExtent('pointer', event);\n }\n\n protected keyDown(event: KeyboardEvent) {\n if (event.defaultPrevented) return;\n\n const side = this.drawer.resolvedSide();\n const bounds = this.drawer.bounds();\n const inline = isInlineSide(side);\n const atStart = anchorsAtStart(side, this.isRtl());\n const towardFirstEdge = inline ? 'ArrowLeft' : 'ArrowUp';\n const towardLastEdge = inline ? 'ArrowRight' : 'ArrowDown';\n\n /**\n * A distance and not a proportion. Five per cent of a twelve-hundred-pixel\n * layer is sixty pixels, which is a jump rather than an adjustment; the\n * fraction is still what the family stores, and the pixels are converted\n * against the layer measured at the moment of the press.\n */\n const box = this.drawer.measuringBox();\n const amount =\n box === null\n ? 0\n : stepAmountFromPixels({\n pixels: event.shiftKey ? this.largeStep() : this.step(),\n rect: box.getBoundingClientRect(),\n side,\n });\n\n const { rest, stops } = this.stopsNow();\n const by = (direction: 1 | -1) => {\n event.preventDefault();\n const next = stepExtent({\n amount,\n direction,\n fraction: this.current(),\n max: stops.at(-1) ?? bounds.max,\n min: stops[0] ?? bounds.min,\n snapPoints: stops,\n });\n this.drawer.requestExtent(this.drawer.asRequest(next, rest), 'keyboard', event);\n };\n\n /** The two ends of the range: the first and last stop when there are stops. */\n const to = (target: number) => {\n event.preventDefault();\n this.drawer.requestExtent(this.drawer.asRequest(target, rest), 'keyboard', event);\n };\n\n switch (event.key) {\n case towardFirstEdge:\n return by(atStart ? -1 : 1);\n case towardLastEdge:\n return by(atStart ? 1 : -1);\n case 'Home':\n return to(stops[0] ?? bounds.min);\n case 'End':\n return to(stops.at(-1) ?? bounds.max);\n /**\n * The pattern's own key, and the one departure from it: \"collapses the\n * pane\" would mean closing the drawer, and Escape already means that. A\n * reader who presses Enter on a separator expects the separator to still\n * be there afterwards.\n */\n case 'Enter': {\n event.preventDefault();\n if (this.current() > bounds.min) {\n this.collapsed = this.current();\n return this.drawer.requestExtent(bounds.min, 'keyboard', event);\n }\n return this.drawer.requestExtent(this.collapsed ?? bounds.max, 'keyboard', event);\n }\n default:\n return;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAiGA,MAAM,QAAQ,GAAmB;AAC/B,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,YAAY,EAAE,OAAO;AACrB,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,IAAI,EAAE,OAAO;CACd;MAEY,eAAe,GAAG,IAAI,cAAc,CAAiB,yBAAyB,EAAE;AAC3F,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM,QAAQ;AACxB,CAAA;AAED;;;;;AAKG;AACG,SAAU,qBAAqB,CAAC,QAAiC,EAAA;IACrE,OAAO;AACL,QAAA,OAAO,EAAE,eAAe;AACxB,QAAA,UAAU,EAAE,OAAuB,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;KACjE;AACH;AAEA;SACgB,oBAAoB,GAAA;AAClC,IAAA,OAAO,MAAM,CAAC,eAAe,CAAC;AAChC;AAEA;;;;;AAKG;MAEU,iBAAiB,CAAA;IACpB,KAAK,GAAG,CAAC;IAEjB,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC;AACf,QAAA,OAAO,CAAA,eAAA,EAAkB,IAAI,CAAC,KAAK,EAAE;IACvC;uGANW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC9ElC,MAAM,cAAc,GAAsB,EAAE;AAE5C;AACA,MAAM,eAAe,GAAG,+BAA+B;AAEvD;;;;;;;;;;;;;;;;;;;;;AAqBG;MAgDU,QAAQ,CAAA;;IAEV,IAAI,GAAG,KAAK,CAAU,KAAK;6EAAC;AAErC;;;;;AAKG;IACM,MAAM,GAAG,KAAK,CAAqB,SAAS;+EAAC;IAE7C,IAAI,GAAG,KAAK,CAAyB,SAAS;6EAAC;IAC/C,IAAI,GAAG,KAAK,CAAyB,SAAS;6EAAC;IAC/C,IAAI,GAAG,KAAK,CAAyB,SAAS;6EAAC;IAC/C,KAAK,GAAG,KAAK,CAA0B,SAAS;8EAAC;IACjD,MAAM,GAAG,KAAK,CAAkC,SAAS;+EAAC;IAC1D,YAAY,GAAG,KAAK,CAAkC,SAAS;qFAAC;AACzE;;;AAGG;IACM,IAAI,GAAG,KAAK,CAAkC,SAAS;6EAAC;AACjE;;;;;AAKG;IACM,KAAK,GAAG,KAAK,CAAC,IAAI,6EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEpD,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAEvD,QAAQ,GAAG,KAAK,CAA8C,SAAS;iFAAC;;IAExE,IAAI,GAAG,KAAK,CAAyB,SAAS;6EAAC;AACxD;;;;;AAKG;IACM,SAAS,GAAG,KAAK,CAAC,CAAC;kFAAC;;IAEpB,SAAS,GAAG,KAAK,CAAC,GAAG;kFAAC;IACtB,SAAS,GAAG,KAAK,CAAC,CAAC;kFAAC;;IAEpB,UAAU,GAAG,KAAK,CAAoB,cAAc;mFAAC;;IAErD,SAAS,GAAG,KAAK,CAA6B,SAAS;kFAAC;IACxD,YAAY,GAAG,KAAK,CAAiC,SAAS;qFAAC;IAC/D,UAAU,GAAG,KAAK,CAA+B,SAAS;mFAAC;;IAG3D,iBAAiB,GAAG,MAAM,EAAuB;IACjD,mBAAmB,GAAG,MAAM,EAAuB;AAC5D;;;AAGG;IACM,MAAM,GAAG,MAAM,EAAsB;IAE7B,QAAQ,GAAG,oBAAoB,EAAE;;IAEzC,CAAC,GAAG,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC;AACzC,IAAA,IAAI,GAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;;IAEpD,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAChD,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE;;AAGzC,IAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AAEjD;;;;;AAKG;IACc,YAAY,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE;AAC3E,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CAAC;IAEiB,QAAQ,GAAG,SAAS,CAA0B,OAAO;iFAAC;IACtD,QAAQ,GAAG,SAAS,CAA0B,OAAO;iFAAC;;IAGhE,QAAQ,GAAG,MAAM,CAAC,KAAK;iFAAC;IACxB,cAAc,GAAG,MAAM,CAAC,KAAK;uFAAC;IAC9B,WAAW,GAAG,MAAM,CAAqB,IAAI;oFAAC;;IAE9C,QAAQ,GAAG,MAAM,CAAC,KAAK;iFAAC;AACjC;;;;AAIG;IACM,IAAI,GAAG,MAAM,CAAgB,IAAI;6EAAC;AAC3C;;;AAGG;IACM,IAAI,GAAG,MAAM,CAAqB,SAAS;6EAAC;AAE5C,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,QAAQ;AAChC,IAAA,aAAa,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,cAAc;AAC5C,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,QAAQ;AAChC,IAAA,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,UAAU;AAE7C;;;;AAIG;IACc,MAAM,GAAG,MAAM,CAAiB,WAAW;+EAAC;IAC5C,QAAQ,GAAmB,cAAc,CAAC;AACzD,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,cAAc,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAChD,KAAA,CAAC;;IAGe,IAAI,GAAG,MAAM,CAAC,KAAK;6EAAC;IACpB,MAAM,GAAG,MAAM,CAAqB,SAAS;+EAAC;;IAE9C,QAAQ,GAAG,MAAM,CAAgB,IAAI;iFAAC;AAE9C,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI;qFAAC;AAChE,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI;qFAAC;AACzE;;;;AAIG;AACM,IAAA,YAAY,GAAG,QAAQ,CAAa,MAAK;AAChD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,QACE,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;IAEjG,CAAC;qFAAC;AACO,IAAA,YAAY,GAAG,QAAQ,CAAa,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI;qFAAC;;AAE5E,IAAA,KAAK,GAAG,QAAQ,CACvB,MAAM,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ;8EAC5E;;AAEQ,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;sFAAC;IAClD,QAAQ,GAAG,QAAQ,CACpC,MACE,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS;AACjC,QAAA,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;iFAChE;AACQ,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK;sFAAC;IACnE,aAAa,GAAG,QAAQ,CAAC,MAChC,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;sFACxD;AACQ,IAAA,cAAc,GAAG,QAAQ,CAAsB,MACtD,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;uFACpF;AACQ,IAAA,YAAY,GAAG,QAAQ,CAAsB,MACpD,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;qFAChF;AACQ,IAAA,oBAAoB,GAAG,QAAQ,CAAsB,MAC5D,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,GAAG,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;6FAChG;AAED;;;AAGG;AACM,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AACjF;AACyD;AACzD,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK;cAC3B,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;cACtD,KAAK;IACX,CAAC;+EAAC;AAEF;;;;AAIG;AACM,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;AACjD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;QAClC,IAAI,KAAK,KAAK,OAAO;AAAE,YAAA,OAAO,IAAI;QAClC,IAAI,KAAK,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE;AACxC,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,WAAW;IACtC,CAAC;gFAAC;;IAGO,OAAO,GAAG,QAAQ,CAAC,MAC1B,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,MAAM;gFAC1E;AACD;;;;AAIG;AACM,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE;AACxD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,MAAM;IACnD,CAAC;oFAAC;AAEF;;;;;AAKG;IACgB,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS;qFAAC;IAChE,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;qFAAC;AACjE;AACkE;IAC/C,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,YAAY,KAAK;UAC1E,IAAI,CAAC;AACP,UAAE,IAAI;mFACT;AACkB,IAAA,WAAW,GAAG,QAAQ,CAAC,MACxC,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI;oFAClD;IACkB,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY;8EAAC;AAC5D;;;;;AAKG;IACgB,IAAI,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;6EAAC;IAEvF,MAAM,GAA4B,IAAI;IACtC,KAAK,GAAkC,IAAI;IAC3C,KAAK,GAA4B,IAAI;AAE7C;;;;;;AAMG;IACK,aAAa,GAAuB,SAAS;IAErD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE;IACpC;AAEA,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACjC,QAAA,CAAC,CAAC;AAEF;AAC2D;QAC3D,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,gBAAA,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvD,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;YACV,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,IAAI,IAAI;AACnD,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YAE3B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,EAAE;gBACrD,IAAI,CAAC,aAAa,EAAE;gBACpB;YACF;AACA,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;gBAAE;AAE1B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC;gBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,gBAAA,IAAI,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACrD,aAAA,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC;AACrC,QAAA,CAAC,CAAC;AAEF;;;;;;AAMG;AACH,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;YACrC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAEhD,YAAA,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAC3D,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvB;YACF;YAEA,MAAM,OAAO,GAAG,MAAK;AACnB,gBAAA,MAAM,IAAI,GAAG,GAAG,CAAC,qBAAqB,EAAE;AACxC,gBAAA,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;gBAC9C,IAAI,IAAI,GAAG,CAAC;AAAE,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAA,EAAA,CAAI,CAAC;AACrE,YAAA,CAAC;AAED,YAAA,OAAO,EAAE;YACT,IAAI,OAAO,cAAc,KAAK,WAAW;gBAAE;AAC3C,YAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC;AAC5C,YAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;YACrB,SAAS,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;AACxC,QAAA,CAAC,CAAC;AAEF;;;;;;;;;;AAUG;AACH,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;AAC5C,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;gBAAE;YAE/D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,OAAO;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,KAAK,OAAO;AAC5D,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC;AACyC;YACzC,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO;AACrD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;YAElC,IAAI,OAAO,EAAE;AACX;;AAE4C;AAC5C,gBAAA,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,IAAI,EAAE;oBACxC,IAAI;AACJ,oBAAA,QAAQ,EAAE,OAAO,KAAK,IAAI,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC;AAC3C,oBAAA,OAAO,EAAE,KAAK;oBACd,MAAM;oBACN,KAAK;AACL,oBAAA,SAAS,EAAE,CAAC,OAAO,KAAI;AACrB,wBAAA,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,IAAI,CAAC,YAAY;AAAE,4BAAA,OAAO,OAAO,CAAC,MAAM,EAAE;AAC/E,wBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAA0B,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;oBACpF,CAAC;oBACD,YAAY;AACZ,oBAAA,iBAAiB,EAAE,OAAO;AAC3B,iBAAA,CAAC;YACJ;YAEA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,OAAO;AAC7C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;AAClC;;;;;AAKG;AACH,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,aAAmC;AACtE,YAAA,MAAM,YAAY,GAAG,MAAM,EAAE,aAAa,IAAI,IAAI;YAClD,MAAM,QAAQ,GAAG,MAAyB;gBACxC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,CAAC,aAAa,CAAC,IAAI;AAAE,oBAAA,OAAO,IAAI,CAAC,WAAW,EAAE;gBACtF,IAAI,MAAM,CAAC,WAAW;AAAE,oBAAA,OAAO,MAAM;AACrC;AACyE;gBACzE,IAAI,IAAI,GAAuB,YAAY;AAC3C,gBAAA,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,oBAAA,IAAI,GAAG,IAAI,CAAC,aAAa;AACpE,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC;AACD,YAAA,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE;gBACnC,OAAO,EAAE,OAAO,IAAI,KAAK;gBACzB,OAAO,EAAE,CAAC,OAAO,GAAG,KAAK,GAAG,MAAM,YAAY,WAAW,GAAG,MAAM,MAAM,GAAG,MAAM;gBACjF,OAAO,EAAE,QAAQ,KAAK,SAAS,GAAG,QAAQ,GAAG,QAAQ,KAAK,KAAK,GAAG,KAAK,GAAG,MAAM,QAAQ;AACzF,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAElB,SAAS,CAAC,MAAK;AACb;;AAE2C;AAC3C,gBAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AACrB,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,gBAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AACrB,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAC/B,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF;;;;;AAKG;AACH,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;YAC5C,IACE,CAAC,IAAI,CAAC,OAAO;AACb,gBAAA,GAAG,KAAK,IAAI;AACZ,gBAAA,KAAK,KAAK,SAAS;gBACnB,CAAC,IAAI,CAAC,IAAI,EAAE;AACZ,gBAAA,IAAI,CAAC,MAAM,EAAE,KAAK,SAAS;AAC3B,gBAAA,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EACpB;gBACA;YACF;YACA,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,MAAK;AAChB,gBAAA,MAAM,IAAI,GAAG,GAAG,CAAC,qBAAqB,EAAE;AACxC,gBAAA,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;gBAC9C,IAAI,IAAI,IAAI,CAAC;oBAAE;AACf,gBAAA,MAAM,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY;gBAC3D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AACvD,YAAA,CAAC;AACD,YAAA,IAAI,EAAE;YACN,IAAI,OAAO,cAAc,KAAK,WAAW;gBAAE;AAC3C,YAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC;AACzC,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AACvB,YAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;YACrB,SAAS,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;AACxC,QAAA,CAAC,CAAC;AAEF;;;;AAIG;AACH,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;AAC3C,YAAA,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS;gBAAE;AAC7E,YAAA,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,MAAM,KAAI;gBAC3E,IAAI,MAAM,KAAK,CAAC;AAAE,oBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,0BAA0B,CAAC;;oBAClE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,CAAC;AACxE,YAAA,CAAC,CAAC;YACF,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,EAAE;AACN,gBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,0BAA0B,CAAC;AACvD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF;;;;;AAKG;AACH,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;YAC5C,IACE,IAAI,KAAK,SAAS;AAClB,gBAAA,KAAK,KAAK,SAAS;gBACnB,CAAC,IAAI,CAAC,IAAI,EAAE;gBACZ,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,gBAAA,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO,EAC/B;gBACA;YACF;YAEA,IAAI,IAAI,GAAG,CAAC;YACZ,IAAI,KAAK,GAAG,CAAC;YACb,IAAI,IAAI,GAAG,CAAC;AACZ,YAAA,IAAI,QAAQ,GAAkD;AAC5D,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE,EAAE;aACV;YACD,MAAM,GAAG,GAAG,MAAK;AACf,gBAAA,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,MAAM;AAC1C,gBAAA,OAAO,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC;AACjD,YAAA,CAAC;AAED,YAAA,SAAS,CACP,eAAe,CAAC,KAAK,EAAE;AACrB,gBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE;gBAC1B,OAAO,EAAE,MAAK;AACZ,oBAAA,MAAM,EAAE,GAAG,GAAG,EAAE;AAChB,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvD,oBAAA,OAAO,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;gBAC5D,CAAC;gBACD,OAAO,EAAE,MAAK;oBACZ,KAAK,GAAG,GAAG,EAAE;oBACb,IAAI,GAAG,KAAK;oBACZ,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;AACzC,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBACtB,CAAC;AACD,gBAAA,MAAM,EAAE,CAAC,QAAQ,KAAI;oBACnB,IAAI,IAAI,IAAI,CAAC;wBAAE;AACf,oBAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;oBAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;gBACnE,CAAC;AACD,gBAAA,KAAK,EAAE,CAAC,QAAQ,KAAI;AAClB,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;oBACxB,MAAM,MAAM,GAAG,YAAY,CAAC;AAC1B,wBAAA,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;wBACvD,IAAI;wBACJ,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,wBAAA,QAAQ,EAAE,IAAI,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,GAAG,CAAC;AACzC,qBAAA,CAAC;AACF,oBAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACtB;AACuD;wBACvD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC;wBAC/C,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,4BAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;wBACpC;oBACF;AACA,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC;gBAC5E,CAAC;AACF,aAAA,CAAC,CACH;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC,CAAC;IACJ;;IAGA,YAAY,CAAC,KAAkB,EAAE,IAAY,EAAA;AAC3C,QAAA,OAAO,iBAAiB,CAAC;AACvB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI;AAC3D,YAAA,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS;YAC1C,KAAK;AACL,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;YAC7B,IAAI;AACL,SAAA,CAAC;IACJ;AAEA;;;AAGG;IACH,SAAS,CAAC,QAAgB,EAAE,IAAwB,EAAA;AAClD,QAAA,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC;IACxE;AAEA;;;;AAIG;IACH,YAAY,GAAA;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,IAAI,IAAI;QACnD,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AAC9B;;AAEoC;AACpC,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI;IAC1E;AAEA;;;AAGG;IACK,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;QAC3C,IAAI,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAC9C,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;;AAGA,IAAA,OAAO,CAAC,IAAa,EAAE,MAAwB,EAAE,MAA0B,EAAE,MAAe,EAAA;AAC1F,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;YAAE;QAE1B,IAAI,SAAS,GAAG,KAAK;QACrB,MAAM,KAAK,GAAG,kBAAkB,CAAU;AACxC,YAAA,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;AACpB,YAAA,SAAS,EAAE,CAAC,GAAG,KAAI;AACjB,gBAAA,SAAS,GAAG,GAAG,CAAC,SAAS;AACzB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1B,oBAAA,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE;AAC1B,oBAAA,IAAI,SAAS,GAAA;wBACX,OAAO,GAAG,CAAC,SAAS;oBACtB,CAAC;oBACD,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,MAAM;oBACN,MAAM;oBACN,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,KAAK,EAAE,GAAG,CAAC,KAAK;AACjB,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,SAAS;YAAE;AACvD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACrB;AAEA;;;;;AAKG;AACH,IAAA,aAAa,CAAC,IAAwB,EAAE,MAA0B,EAAE,MAAe,EAAA;AACjF;AACqE;QACrE,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC;AACjF,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;YAAE;QAE9B,IAAI,SAAS,GAAG,KAAK;QACrB,MAAM,KAAK,GAAG,kBAAkB,CAAqB;AACnD;;AAEiE;AACjE,YAAA,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;AACtB,YAAA,SAAS,EAAE,CAAC,GAAG,KAAI;AACjB,gBAAA,SAAS,GAAG,GAAG,CAAC,SAAS;AACzB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5B,oBAAA,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE;AAC1B,oBAAA,IAAI,SAAS,GAAA;wBACX,OAAO,GAAG,CAAC,SAAS;oBACtB,CAAC;oBACD,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,MAAM;oBACN,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,KAAK,EAAE,GAAG,CAAC,KAAK;AACjB,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,SAAS;YAAE;AACzD,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;IACzB;AAEA;;;;;AAKG;IACH,aAAa,CAAC,MAA0B,EAAE,MAAe,EAAA;QACvD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC;IACxD;;IAGA,UAAU,GAAA;QACR,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC;IAC1D;;AAGA,IAAA,KAAK,CAAC,MAAe,EAAA;QACnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC;IACxD;AAEA;;;;AAIG;AACH,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,IAAI,IAAI;IAC/C;;IAGA,KAAK,GAAA;QACH,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;uGAjqBW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,MAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,YAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3CT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,k3nBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAOU,QAAQ,EAAA,UAAA,EAAA,CAAA;kBA/CpB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,QAAA,EACN,UAAU,EAAA,QAAA,EACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAE/B,EAAE,iBAAiB,EAAE,YAAY,EAAE,EAAA,MAAA,EAAA,CAAA,k3nBAAA,CAAA,EAAA;AAsFwB,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,OAAO,kEACP,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACzL1E;;;;AAIG;AACH,SAAS,gBAAgB,CAAC,KAAiB,EAAA;AACzC,IAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,GAAG,SAAS;AACpD;AAEA;;;;;;;;;;;;;;;AAeG;MAgBU,eAAe,CAAA;;IAEjB,MAAM,GAAG,KAAK,CAAC,QAAQ,6EAAa,KAAK,EAAE,iBAAiB,EAAA,CAAG;AAEvD,IAAA,MAAM,GAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;AAEvE;;;;;AAKG;IACgB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS;UACxD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW;UACpC,SAAS;IAEM,QAAQ,GAAG,QAAQ,CAAC,MACrC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,GAAG,IAAI;iFACvD;IACkB,QAAQ,GAAG,QAAQ,CAAC,MACrC,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,KAAK,SAAS,GAAG,QAAQ,GAAG,IAAI;iFAC7D;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5C;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IACtF;AAEU,IAAA,KAAK,CAAC,KAAiB,EAAA;AAC/B;AAC2C;QAC3C,IAAI,KAAK,CAAC,gBAAgB;YAAE;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC;IAC3E;uGArCW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAf3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,IAAI,EAAE;AACJ,wBAAA,kBAAkB,EAAE,MAAM;AAC1B,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,sBAAsB,EAAE,iBAAiB;AACzC,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,kBAAkB,EAAE,6BAA6B;AACjD,wBAAA,MAAM,EAAE,oBAAoB;AAC5B,wBAAA,SAAS,EAAE,eAAe;AAC3B,qBAAA;AACF,iBAAA;;MA+CY,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE;AAChC,iBAAA;;AAGD;;;AAGG;MAOU,aAAa,CAAA;AACL,IAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;IAE5C,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IAChC;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IACjC;uGATW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE;AACzD,iBAAA;;AAaD;MAOa,mBAAmB,CAAA;AACX,IAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;IAE5C,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;IACtC;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IACvC;uGATW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,qBAAqB;oBAC/B,IAAI,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,sBAAsB,EAAE;AACrE,iBAAA;;AAaD;;;;;AAKG;MAWU,YAAY,CAAA;AACJ,IAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;;IAEnC,KAAK,GAAG,KAAK,CAAqB,SAAS;8EAAC;uGAH1C,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,kCAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAVxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACJ,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,kBAAkB,EAAE,kCAAkC;AACtD,wBAAA,mBAAmB,EAAE,iBAAiB;AACvC,qBAAA;AACF,iBAAA;;MAaY,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,IAAI,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE;AAChC,iBAAA;;AAGD;;;;AAIG;MAkBU,aAAa,CAAA;;IAEf,KAAK,GAAG,KAAK,CAAqB,SAAS;8EAAC;AAEpC,IAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAEzB,IAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEzE,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;8EAAC;AAExE,IAAA,KAAK,CAAC,KAAiB,EAAA;QAC/B,IAAI,KAAK,CAAC,gBAAgB;YAAE;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC;IAC5D;uGAbW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXd,CAAA;;iBAEK,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAJL,OAAO,oFAAE,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAad,aAAa,EAAA,UAAA,EAAA,CAAA;kBAjBzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;;AAE1B,oBAAA,QAAQ,EAAE,CAAA;;AAEK,gBAAA,CAAA;oBACf,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,WAAW,EAAE,OAAO;AACpB,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,mBAAmB,EAAE,SAAS;AAC9B,wBAAA,SAAS,EAAE,eAAe;AAC3B,qBAAA;AACF,iBAAA;;AAiBD;;;;;;;;;;;;AAYG;AACH;AACA,MAAM,WAAW,GAAG,CAAC;MAyCR,eAAe,CAAA;AAC1B;;;;;AAKG;IACM,IAAI,GAAG,KAAK,CAAC,cAAc;6EAAC;;IAE5B,SAAS,GAAG,KAAK,CAAC,oBAAoB;kFAAC;AAE7B,IAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,MAAM,GAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;;IAG/D,OAAO,GAAkB,IAAI;;IAE7B,OAAO,GAAmB,EAAE;AACpC;;;;AAIG;IACK,KAAK,GAAoE,IAAI;;IAE7E,SAAS,GAAkB,IAAI;;IAE/B,OAAO,GAAwB,IAAI;IAExB,WAAW,GAAG,QAAQ,CAAC,MACxC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,UAAU,GAAG,YAAY;oFACrE;IACkB,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;mFACpD;AACD;AACsB;AACH,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,SAAS,IAAI,IAAI,KAAK;cACxD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI;cAClB,GAAG;IACT,CAAC;8EAAC;AACiB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MACrC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;iFAC5E;AAES,IAAA,OAAO,CAAC,KAAa,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;IAC7C;IAEQ,OAAO,GAAA;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG;IACtF;IAEQ,KAAK,GAAA;QACX,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,KAAK;IAC1D;IAEQ,IAAI,GAAA;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;QACtC,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,CAAC;AAC1B,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,qBAAqB,EAAE;QACxC,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;IAC5E;AAEA;;;;AAIG;IACK,QAAQ,GAAA;AACd,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa;AACvC,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3D,YAAA,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAChD;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACrD;AAEQ,IAAA,UAAU,CAAC,KAAmB,EAAA;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;QACtC,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AAC7B,QAAA,OAAO,aAAa,CAAC;AACnB,YAAA,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE;AAC7C,YAAA,IAAI,EAAE,GAAG,CAAC,qBAAqB,EAAE;AACjC,YAAA,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE;AACjB,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACjC,SAAA,CAAC;IACJ;AAEU,IAAA,WAAW,CAAC,KAAmB,EAAA;QACvC,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACvC,IAAI,QAAQ,KAAK,IAAI;YAAE;QAEvB,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;AAC9C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACnB,IAAI,CAAC,KAAK,GAAG;AACX,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,QAAQ;YACjC,CAAC,EAAE,KAAK,CAAC,OAAO;YAChB,CAAC,EAAE,KAAK,CAAC,OAAO;SACjB;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACnB;AAEU,IAAA,WAAW,CAAC,KAAmB,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;QACvB,IAAI,IAAI,KAAK,IAAI;YAAE;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACjC,IAAI,EAAE,KAAK,IAAI;YAAE;AAEjB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW;gBAAE;AAC9E,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB;;AAE2E;AAC3E,YAAA,IAAI,CAAC,OAAO,IAAI;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAC9B,IAAI,CAAC,MAAM,CAAC,aAAa,EACzB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,YAAY,GAAG,YAAY,CACvE;YACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAChC;AAEA,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,OAAO,GAAG,QAAQ;AACvB;AACiE;QACjE,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;IACvD;AAEA;;;;AAIG;AACK,IAAA,KAAK,CAAC,KAAmB,EAAA;QAC/B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACvC,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE;;AAEtB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AAChE,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAK,KAAK,CAAC,CAAC,CAAY;QAC3F,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC;IAChF;AAEA;;;;;;;AAOG;AACO,IAAA,OAAO,CAAC,KAAmB,EAAA;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;QACvB,IAAI,IAAI,KAAK,IAAI;YAAE;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YAClD,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;QACpD;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;AAAE,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACjD;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,IAAI;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE;QAC3C,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7C,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QAEjB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACvC,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACtE,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;AACvD,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC;gBACrD;YACF;YACA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC;YAChF;QACF;AAEA,QAAA,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACjE,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;AACvD,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC;YACvD;QACF;QACA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC;IAClF;AAEA;;;;;AAKG;AACO,IAAA,OAAO,CAAC,KAAiB,EAAA;QACjC,IAAI,KAAK,CAAC,gBAAgB;YAAE;QAC5B,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC;IAC7C;AAEU,IAAA,OAAO,CAAC,KAAoB,EAAA;QACpC,IAAI,KAAK,CAAC,gBAAgB;YAAE;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACnC,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;QACjC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAClD,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS;QACxD,MAAM,cAAc,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW;AAE1D;;;;;AAKG;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACtC,QAAA,MAAM,MAAM,GACV,GAAG,KAAK;AACN,cAAE;cACA,oBAAoB,CAAC;AACnB,gBAAA,MAAM,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AACvD,gBAAA,IAAI,EAAE,GAAG,CAAC,qBAAqB,EAAE;gBACjC,IAAI;AACL,aAAA,CAAC;QAER,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AACvC,QAAA,MAAM,EAAE,GAAG,CAAC,SAAiB,KAAI;YAC/B,KAAK,CAAC,cAAc,EAAE;YACtB,MAAM,IAAI,GAAG,UAAU,CAAC;gBACtB,MAAM;gBACN,SAAS;AACT,gBAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;gBACxB,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG;gBAC/B,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG;AAC3B,gBAAA,UAAU,EAAE,KAAK;AAClB,aAAA,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;AACjF,QAAA,CAAC;;AAGD,QAAA,MAAM,EAAE,GAAG,CAAC,MAAc,KAAI;YAC5B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;AACnF,QAAA,CAAC;AAED,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,eAAe;AAClB,gBAAA,OAAO,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,EAAE,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,YAAA,KAAK,MAAM;gBACT,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;AACnC,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;AACvC;;;;;AAKG;YACH,KAAK,OAAO,EAAE;gBACZ,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE;AAC/B,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE;AAC/B,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC;gBACjE;AACA,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC;YACnF;AACA,YAAA;gBACE;;IAEN;uGA7RW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,WAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,8BAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzBhB;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAqBU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAvC3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B;;;;;;;;;AASG;AACH,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,WAAW,EAAE,SAAS;AACtB,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,QAAQ,EAAE,GAAG;AACb,wBAAA,sBAAsB,EAAE,gBAAgB;AACxC,wBAAA,wBAAwB,EAAE,cAAc;AACxC,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,sBAAsB,EAAE,kBAAkB;AAC1C,wBAAA,sBAAsB,EAAE,8BAA8B;AACtD,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,eAAe,EAAE,qBAAqB;AACtC,wBAAA,eAAe,EAAE,qBAAqB;AACtC,wBAAA,aAAa,EAAE,iBAAiB;AAChC,wBAAA,sBAAsB,EAAE,iBAAiB;AACzC,wBAAA,WAAW,EAAE,iBAAiB;AAC9B,wBAAA,YAAY,EAAE,iBAAiB;AAChC,qBAAA;AACF,iBAAA;;;AC7RD;;AAEG;;"}