@amboss/design-system 4.0.4 → 4.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/components/DataTable/DataTable.js +1 -1
- package/build/cjs/components/DataTable/TableBody.d.ts +4 -2
- package/build/cjs/components/DataTable/TableBody.js +1 -1
- package/build/cjs/components/DataTable/TableCell.d.ts +4 -3
- package/build/cjs/components/DataTable/TableCell.js +1 -1
- package/build/cjs/components/DataTable/header/SortableCellContent.d.ts +1 -4
- package/build/cjs/components/DataTable/header/TableHeader.d.ts +3 -1
- package/build/cjs/components/DataTable/header/TableHeader.js +1 -1
- package/build/cjs/components/DataTable/internal/DataTableDataRow.d.ts +20 -0
- package/build/cjs/components/DataTable/internal/DataTableDataRow.js +1 -0
- package/build/cjs/components/DataTable/internal/DataTableRowGroup.d.ts +2 -0
- package/build/cjs/components/DataTable/internal/DataTableRowGroup.js +1 -0
- package/build/cjs/components/DataTable/internal/buildInternalColumns.d.ts +9 -0
- package/build/cjs/components/DataTable/internal/buildInternalColumns.js +1 -0
- package/build/cjs/components/DataTable/internal/controlColumns/checkboxColumn.d.ts +2 -0
- package/build/cjs/components/DataTable/internal/controlColumns/checkboxColumn.js +1 -0
- package/build/cjs/components/DataTable/internal/getColumnSticky.d.ts +8 -0
- package/build/cjs/components/DataTable/internal/getColumnSticky.js +1 -0
- package/build/cjs/components/DataTable/internal/getVisibleColumnCount.d.ts +2 -0
- package/build/cjs/components/DataTable/internal/getVisibleColumnCount.js +1 -0
- package/build/cjs/components/DataTable/internal/resolveRowContext.d.ts +17 -0
- package/build/cjs/components/DataTable/internal/resolveRowContext.js +1 -0
- package/build/cjs/components/DataTable/internal/tablePrimitives.d.ts +35 -0
- package/build/cjs/components/DataTable/internal/tablePrimitives.js +1 -0
- package/build/cjs/components/DataTable/internal/types.d.ts +26 -0
- package/build/cjs/components/DataTable/internal/types.js +1 -0
- package/build/cjs/components/Internal/Drawer/Drawer.d.ts +0 -2
- package/build/cjs/components/Internal/Drawer/Drawer.js +8 -8
- package/build/cjs/components/Internal/Drawer/useExitAnimation.d.ts +21 -0
- package/build/cjs/components/Internal/Drawer/useExitAnimation.js +1 -0
- package/build/cjs/components/Internal/LayoutFloat/LayoutFloat.d.ts +14 -0
- package/build/cjs/components/Internal/LayoutFloat/LayoutFloat.js +1 -0
- package/build/cjs/components/Internal/Panel/Panel.d.ts +15 -2
- package/build/cjs/components/Internal/Panel/Panel.js +1 -1
- package/build/cjs/components/Internal/PanelHeader/PanelHeader.d.ts +31 -0
- package/build/cjs/components/Internal/PanelHeader/PanelHeader.js +1 -0
- package/build/cjs/components/Internal/Sandwich/-types.d.ts +10 -12
- package/build/cjs/components/Internal/Sandwich/Sandwich.d.ts +10 -8
- package/build/cjs/components/Internal/Sandwich/Sandwich.js +1 -1
- package/build/cjs/components/Internal/Sandwich/SandwichFooter.d.ts +5 -1
- package/build/cjs/components/Internal/Sandwich/SandwichFooter.js +1 -1
- package/build/cjs/components/Internal/Sandwich/SandwichHeader.d.ts +5 -1
- package/build/cjs/components/Internal/Sandwich/SandwichHeader.js +1 -1
- package/build/cjs/components/Internal/Sandwich/useSandwichContext.d.ts +12 -3
- package/build/cjs/components/Internal/Sandwich/useSandwichContext.js +1 -1
- package/build/cjs/components/Layout/-types.d.ts +112 -43
- package/build/cjs/components/Layout/{Content.d.ts → Content/Content.d.ts} +1 -1
- package/build/cjs/components/Layout/Content/Content.js +1 -0
- package/build/cjs/components/Layout/Layout.d.ts +16 -4
- package/build/cjs/components/Layout/Layout.js +1 -1
- package/build/cjs/components/Layout/LayoutProvider.js +1 -1
- package/build/cjs/components/Layout/LeftPanel/LeftPanel.d.ts +9 -0
- package/build/cjs/components/Layout/LeftPanel/LeftPanel.js +1 -0
- package/build/cjs/components/Layout/LeftPanel/LeftPanelDocked.d.ts +20 -0
- package/build/cjs/components/Layout/LeftPanel/LeftPanelDocked.js +1 -0
- package/build/cjs/components/Layout/LeftPanel/LeftPanelDrawer.d.ts +15 -0
- package/build/cjs/components/Layout/LeftPanel/LeftPanelDrawer.js +1 -0
- package/build/cjs/components/Layout/LeftPanel/LeftPanelFooter.d.ts +7 -0
- package/build/cjs/components/Layout/LeftPanel/LeftPanelFooter.js +1 -0
- package/build/cjs/components/Layout/LeftPanel/LeftPanelHeader.d.ts +7 -0
- package/build/cjs/components/Layout/LeftPanel/LeftPanelHeader.js +1 -0
- package/build/cjs/components/Layout/PanelContainer.d.ts +9 -0
- package/build/cjs/components/Layout/PanelContainer.js +1 -0
- package/build/cjs/components/Layout/PanelSlideBody.d.ts +18 -0
- package/build/cjs/components/Layout/PanelSlideBody.js +1 -0
- package/build/cjs/components/Layout/RightPanel/RightPanel.d.ts +13 -0
- package/build/cjs/components/Layout/RightPanel/RightPanel.js +1 -0
- package/build/cjs/components/Layout/RightPanel/RightPanelFooter.d.ts +7 -0
- package/build/cjs/components/Layout/RightPanel/RightPanelFooter.js +1 -0
- package/build/cjs/components/Layout/RightPanel/RightPanelHeader.d.ts +15 -0
- package/build/cjs/components/Layout/RightPanel/RightPanelHeader.js +1 -0
- package/build/cjs/components/Layout/{Split.d.ts → Split/Split.d.ts} +4 -2
- package/build/cjs/components/Layout/Split/Split.js +1 -0
- package/build/cjs/components/Layout/Split/SplitFooter.d.ts +7 -0
- package/build/cjs/components/Layout/Split/SplitFooter.js +1 -0
- package/build/cjs/components/Layout/Split/SplitHeader.d.ts +7 -0
- package/build/cjs/components/Layout/Split/SplitHeader.js +1 -0
- package/build/cjs/components/Layout/context.d.ts +14 -1
- package/build/cjs/components/Layout/context.js +1 -1
- package/build/cjs/components/Layout/index.d.ts +0 -1
- package/build/cjs/components/Layout/index.js +1 -1
- package/build/cjs/components/Layout/registry.d.ts +38 -1
- package/build/cjs/components/Layout/registry.js +1 -1
- package/build/cjs/components/Layout/useFloatablePortalTargets.d.ts +37 -0
- package/build/cjs/components/Layout/useFloatablePortalTargets.js +1 -0
- package/build/cjs/components/Layout/usePanelDockedSlide.d.ts +28 -0
- package/build/cjs/components/Layout/usePanelDockedSlide.js +1 -0
- package/build/cjs/components/Link/Link.js +1 -1
- package/build/cjs/components/Link/LinkContext.d.ts +19 -0
- package/build/cjs/components/Link/LinkContext.js +1 -0
- package/build/cjs/components/Link/getLinkDecorationStyles.d.ts +20 -0
- package/build/cjs/components/Link/getLinkDecorationStyles.js +1 -0
- package/build/cjs/components/Typography/Text/Text.d.ts +10 -6
- package/build/cjs/components/Typography/Text/Text.js +1 -1
- package/build/cjs/shared/prefersReducedMotion.d.ts +6 -0
- package/build/cjs/shared/prefersReducedMotion.js +1 -0
- package/build/esm/components/DataTable/DataTable.js +1 -1
- package/build/esm/components/DataTable/TableBody.d.ts +4 -2
- package/build/esm/components/DataTable/TableBody.js +1 -1
- package/build/esm/components/DataTable/TableCell.d.ts +4 -3
- package/build/esm/components/DataTable/TableCell.js +1 -1
- package/build/esm/components/DataTable/header/SortableCellContent.d.ts +1 -4
- package/build/esm/components/DataTable/header/TableHeader.d.ts +3 -1
- package/build/esm/components/DataTable/header/TableHeader.js +1 -1
- package/build/esm/components/DataTable/internal/DataTableDataRow.d.ts +20 -0
- package/build/esm/components/DataTable/internal/DataTableDataRow.js +1 -0
- package/build/esm/components/DataTable/internal/DataTableRowGroup.d.ts +2 -0
- package/build/esm/components/DataTable/internal/DataTableRowGroup.js +1 -0
- package/build/esm/components/DataTable/internal/buildInternalColumns.d.ts +9 -0
- package/build/esm/components/DataTable/internal/buildInternalColumns.js +1 -0
- package/build/esm/components/DataTable/internal/controlColumns/checkboxColumn.d.ts +2 -0
- package/build/esm/components/DataTable/internal/controlColumns/checkboxColumn.js +1 -0
- package/build/esm/components/DataTable/internal/getColumnSticky.d.ts +8 -0
- package/build/esm/components/DataTable/internal/getColumnSticky.js +1 -0
- package/build/esm/components/DataTable/internal/getVisibleColumnCount.d.ts +2 -0
- package/build/esm/components/DataTable/internal/getVisibleColumnCount.js +1 -0
- package/build/esm/components/DataTable/internal/resolveRowContext.d.ts +17 -0
- package/build/esm/components/DataTable/internal/resolveRowContext.js +1 -0
- package/build/esm/components/DataTable/internal/tablePrimitives.d.ts +35 -0
- package/build/esm/components/DataTable/internal/tablePrimitives.js +1 -0
- package/build/esm/components/DataTable/internal/types.d.ts +26 -0
- package/build/esm/components/DataTable/internal/types.js +1 -0
- package/build/esm/components/Internal/Drawer/Drawer.d.ts +0 -2
- package/build/esm/components/Internal/Drawer/Drawer.js +8 -8
- package/build/esm/components/Internal/Drawer/useExitAnimation.d.ts +21 -0
- package/build/esm/components/Internal/Drawer/useExitAnimation.js +1 -0
- package/build/esm/components/Internal/LayoutFloat/LayoutFloat.d.ts +14 -0
- package/build/esm/components/Internal/LayoutFloat/LayoutFloat.js +1 -0
- package/build/esm/components/Internal/Panel/Panel.d.ts +15 -2
- package/build/esm/components/Internal/Panel/Panel.js +1 -1
- package/build/esm/components/Internal/PanelHeader/PanelHeader.d.ts +31 -0
- package/build/esm/components/Internal/PanelHeader/PanelHeader.js +1 -0
- package/build/esm/components/Internal/Sandwich/-types.d.ts +10 -12
- package/build/esm/components/Internal/Sandwich/Sandwich.d.ts +10 -8
- package/build/esm/components/Internal/Sandwich/Sandwich.js +1 -1
- package/build/esm/components/Internal/Sandwich/SandwichFooter.d.ts +5 -1
- package/build/esm/components/Internal/Sandwich/SandwichFooter.js +1 -1
- package/build/esm/components/Internal/Sandwich/SandwichHeader.d.ts +5 -1
- package/build/esm/components/Internal/Sandwich/SandwichHeader.js +1 -1
- package/build/esm/components/Internal/Sandwich/useSandwichContext.d.ts +12 -3
- package/build/esm/components/Internal/Sandwich/useSandwichContext.js +1 -1
- package/build/esm/components/Layout/-types.d.ts +112 -43
- package/build/esm/components/Layout/{Content.d.ts → Content/Content.d.ts} +1 -1
- package/build/esm/components/Layout/Content/Content.js +1 -0
- package/build/esm/components/Layout/Layout.d.ts +16 -4
- package/build/esm/components/Layout/Layout.js +1 -1
- package/build/esm/components/Layout/LayoutProvider.js +1 -1
- package/build/esm/components/Layout/LeftPanel/LeftPanel.d.ts +9 -0
- package/build/esm/components/Layout/LeftPanel/LeftPanel.js +1 -0
- package/build/esm/components/Layout/LeftPanel/LeftPanelDocked.d.ts +20 -0
- package/build/esm/components/Layout/LeftPanel/LeftPanelDocked.js +1 -0
- package/build/esm/components/Layout/LeftPanel/LeftPanelDrawer.d.ts +15 -0
- package/build/esm/components/Layout/LeftPanel/LeftPanelDrawer.js +1 -0
- package/build/esm/components/Layout/LeftPanel/LeftPanelFooter.d.ts +7 -0
- package/build/esm/components/Layout/LeftPanel/LeftPanelFooter.js +1 -0
- package/build/esm/components/Layout/LeftPanel/LeftPanelHeader.d.ts +7 -0
- package/build/esm/components/Layout/LeftPanel/LeftPanelHeader.js +1 -0
- package/build/esm/components/Layout/PanelContainer.d.ts +9 -0
- package/build/esm/components/Layout/PanelContainer.js +1 -0
- package/build/esm/components/Layout/PanelSlideBody.d.ts +18 -0
- package/build/esm/components/Layout/PanelSlideBody.js +1 -0
- package/build/esm/components/Layout/RightPanel/RightPanel.d.ts +13 -0
- package/build/esm/components/Layout/RightPanel/RightPanel.js +1 -0
- package/build/esm/components/Layout/RightPanel/RightPanelFooter.d.ts +7 -0
- package/build/esm/components/Layout/RightPanel/RightPanelFooter.js +1 -0
- package/build/esm/components/Layout/RightPanel/RightPanelHeader.d.ts +15 -0
- package/build/esm/components/Layout/RightPanel/RightPanelHeader.js +1 -0
- package/build/esm/components/Layout/{Split.d.ts → Split/Split.d.ts} +4 -2
- package/build/esm/components/Layout/Split/Split.js +1 -0
- package/build/esm/components/Layout/Split/SplitFooter.d.ts +7 -0
- package/build/esm/components/Layout/Split/SplitFooter.js +1 -0
- package/build/esm/components/Layout/Split/SplitHeader.d.ts +7 -0
- package/build/esm/components/Layout/Split/SplitHeader.js +1 -0
- package/build/esm/components/Layout/context.d.ts +14 -1
- package/build/esm/components/Layout/context.js +1 -1
- package/build/esm/components/Layout/index.d.ts +0 -1
- package/build/esm/components/Layout/index.js +1 -1
- package/build/esm/components/Layout/registry.d.ts +38 -1
- package/build/esm/components/Layout/registry.js +1 -1
- package/build/esm/components/Layout/useFloatablePortalTargets.d.ts +37 -0
- package/build/esm/components/Layout/useFloatablePortalTargets.js +1 -0
- package/build/esm/components/Layout/usePanelDockedSlide.d.ts +28 -0
- package/build/esm/components/Layout/usePanelDockedSlide.js +1 -0
- package/build/esm/components/Link/Link.js +1 -1
- package/build/esm/components/Link/LinkContext.d.ts +19 -0
- package/build/esm/components/Link/LinkContext.js +1 -0
- package/build/esm/components/Link/getLinkDecorationStyles.d.ts +20 -0
- package/build/esm/components/Link/getLinkDecorationStyles.js +1 -0
- package/build/esm/components/Typography/Text/Text.d.ts +10 -6
- package/build/esm/components/Typography/Text/Text.js +1 -1
- package/build/esm/shared/prefersReducedMotion.d.ts +6 -0
- package/build/esm/shared/prefersReducedMotion.js +1 -0
- package/build/scss/_layout.scss +8 -3
- package/build/scss/_theming.scss +3 -0
- package/build/scss/_variables.scss +2 -0
- package/package.json +8 -8
- package/build/cjs/components/Internal/Drawer/useDrawerAnimation.d.ts +0 -26
- package/build/cjs/components/Internal/Drawer/useDrawerAnimation.js +0 -1
- package/build/cjs/components/Internal/Sandwich/SandwichBody.d.ts +0 -3
- package/build/cjs/components/Internal/Sandwich/SandwichBody.js +0 -1
- package/build/cjs/components/Layout/Content.js +0 -1
- package/build/cjs/components/Layout/LeftPanel.d.ts +0 -8
- package/build/cjs/components/Layout/LeftPanel.js +0 -1
- package/build/cjs/components/Layout/RightPanel.d.ts +0 -9
- package/build/cjs/components/Layout/RightPanel.js +0 -1
- package/build/cjs/components/Layout/RightPanelContainer.d.ts +0 -3
- package/build/cjs/components/Layout/RightPanelContainer.js +0 -1
- package/build/cjs/components/Layout/Split.js +0 -1
- package/build/cjs/components/Layout/usePortalContainerRefs.d.ts +0 -20
- package/build/cjs/components/Layout/usePortalContainerRefs.js +0 -1
- package/build/esm/components/Internal/Drawer/useDrawerAnimation.d.ts +0 -26
- package/build/esm/components/Internal/Drawer/useDrawerAnimation.js +0 -1
- package/build/esm/components/Internal/Sandwich/SandwichBody.d.ts +0 -3
- package/build/esm/components/Internal/Sandwich/SandwichBody.js +0 -1
- package/build/esm/components/Layout/Content.js +0 -1
- package/build/esm/components/Layout/LeftPanel.d.ts +0 -8
- package/build/esm/components/Layout/LeftPanel.js +0 -1
- package/build/esm/components/Layout/RightPanel.d.ts +0 -9
- package/build/esm/components/Layout/RightPanel.js +0 -1
- package/build/esm/components/Layout/RightPanelContainer.d.ts +0 -3
- package/build/esm/components/Layout/RightPanelContainer.js +0 -1
- package/build/esm/components/Layout/Split.js +0 -1
- package/build/esm/components/Layout/usePortalContainerRefs.d.ts +0 -20
- package/build/esm/components/Layout/usePortalContainerRefs.js +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type React from "react";
|
|
2
2
|
import type { PanelKey, SidePanelKey, SlotKey } from "./-constants";
|
|
3
|
-
import type {
|
|
3
|
+
import type { PanelHeaderTitle } from "../Internal/PanelHeader/PanelHeader";
|
|
4
4
|
/**
|
|
5
5
|
* Surface = compound components (`Layout.LeftPanel` / `Layout.RightPanel` /
|
|
6
6
|
* `Layout.Content` / `Layout.Split`) + one control hook
|
|
@@ -17,8 +17,15 @@ export type Size = number | string;
|
|
|
17
17
|
* - `offcanvas` - detached desktop overlay. ⚠️ **RESERVED - not implemented yet.**
|
|
18
18
|
* Currently treated like `sidebar` (renders in-flow); the overlay
|
|
19
19
|
* implementation lands in a later commit.
|
|
20
|
+
* - `float` - detached floating window pinned to the bottom-right viewport
|
|
21
|
+
* corner. Right panel only - the per-slot unions below make `"float"`
|
|
22
|
+
* unrepresentable on the left panel at compile time.
|
|
20
23
|
*/
|
|
21
|
-
export type Variant = "sidebar" | "offcanvas";
|
|
24
|
+
export type Variant = "sidebar" | "offcanvas" | "float";
|
|
25
|
+
/** Variants the left panel supports (`float` is right-panel only). */
|
|
26
|
+
export type LeftPanelVariant = Exclude<Variant, "float">;
|
|
27
|
+
/** Variants the right panel supports (all of them). */
|
|
28
|
+
export type RightPanelVariant = Variant;
|
|
22
29
|
export type { PanelKey, SidePanelKey, SlotKey };
|
|
23
30
|
export type SidePanelState = {
|
|
24
31
|
kind: "sidePanel";
|
|
@@ -49,10 +56,10 @@ export type LayoutState = {
|
|
|
49
56
|
content: PanelState;
|
|
50
57
|
splitview: PanelState;
|
|
51
58
|
};
|
|
52
|
-
export type SidePanelConfig = {
|
|
59
|
+
export type SidePanelConfig<V extends Variant = Variant> = {
|
|
53
60
|
defaultVisible?: boolean;
|
|
54
61
|
collapsible?: boolean;
|
|
55
|
-
variant?:
|
|
62
|
+
variant?: V;
|
|
56
63
|
defaultSize?: Size;
|
|
57
64
|
minSize?: Size;
|
|
58
65
|
maxSize?: Size;
|
|
@@ -63,9 +70,23 @@ export type PanelConfig = {
|
|
|
63
70
|
minSize?: Size;
|
|
64
71
|
maxSize?: Size;
|
|
65
72
|
};
|
|
73
|
+
/**
|
|
74
|
+
* Master switch for the side/split panels.
|
|
75
|
+
* - `false` (default) - panel markers declare nothing and render nothing;
|
|
76
|
+
* only `Layout.Content` shows.
|
|
77
|
+
* - `"mobile"` - only the mobile overlay presentations render (left-panel
|
|
78
|
+
* drawer, right-panel sheet). They are portals, so the resizable row - and
|
|
79
|
+
* with it the react-resizable-panels library - never mounts. Desktop
|
|
80
|
+
* viewports show no panels.
|
|
81
|
+
* - `true` - everything: docked resizable columns, float window, drawer,
|
|
82
|
+
* sheet.
|
|
83
|
+
*/
|
|
84
|
+
export type LayoutPanelsMode = boolean | "mobile";
|
|
66
85
|
export type LayoutConfig = {
|
|
67
|
-
|
|
68
|
-
|
|
86
|
+
/** See {@link LayoutPanelsMode}. Default `false`. */
|
|
87
|
+
enablePanels?: LayoutPanelsMode;
|
|
88
|
+
leftPanel?: SidePanelConfig<LeftPanelVariant>;
|
|
89
|
+
rightPanel?: SidePanelConfig<RightPanelVariant>;
|
|
69
90
|
content?: PanelConfig;
|
|
70
91
|
splitview?: PanelConfig;
|
|
71
92
|
};
|
|
@@ -105,7 +126,7 @@ export type LayoutStorage = {
|
|
|
105
126
|
getItem: (key: string) => string | null;
|
|
106
127
|
setItem: (key: string, value: string) => void;
|
|
107
128
|
};
|
|
108
|
-
export type SidePanelHandle = {
|
|
129
|
+
export type SidePanelHandle<V extends Variant = Variant> = {
|
|
109
130
|
/** Live state for this slot (visibility, size, variant). */
|
|
110
131
|
state: SidePanelState;
|
|
111
132
|
/** Whether the slot is currently shown. */
|
|
@@ -116,8 +137,9 @@ export type SidePanelHandle = {
|
|
|
116
137
|
hide: () => void;
|
|
117
138
|
/** Set the slot size (number = px, unitless string = %). */
|
|
118
139
|
resize: (size: Size) => void;
|
|
119
|
-
/** Switch render variant
|
|
120
|
-
|
|
140
|
+
/** Switch render variant. The union is per-slot: `"float"` compiles only on
|
|
141
|
+
* the right panel; `offcanvas` stays reserved (not implemented). */
|
|
142
|
+
setVariant: (variant: V) => void;
|
|
121
143
|
/** Restore this slot to its config default (hides it for page panels). */
|
|
122
144
|
reset: () => void;
|
|
123
145
|
};
|
|
@@ -132,14 +154,18 @@ export type PanelHandle = {
|
|
|
132
154
|
};
|
|
133
155
|
export type LayoutValue = {
|
|
134
156
|
state: LayoutState;
|
|
135
|
-
leftPanel: SidePanelHandle
|
|
136
|
-
rightPanel: SidePanelHandle
|
|
157
|
+
leftPanel: SidePanelHandle<LeftPanelVariant>;
|
|
158
|
+
rightPanel: SidePanelHandle<RightPanelVariant>;
|
|
137
159
|
content: PanelHandle;
|
|
138
160
|
splitview: PanelHandle;
|
|
139
161
|
};
|
|
140
|
-
export type SidePanelProps = {
|
|
162
|
+
export type SidePanelProps<V extends Variant = Variant> = {
|
|
163
|
+
/** Panel content in source order. Header/footer components
|
|
164
|
+
* (e.g. `<Layout.LeftPanelHeader />`) stick to the edges; the rest scrolls. */
|
|
141
165
|
children: React.ReactNode;
|
|
142
|
-
|
|
166
|
+
/** Accessible name; when set, the panel renders as a `region` landmark. */
|
|
167
|
+
"aria-label"?: string;
|
|
168
|
+
variant?: V;
|
|
143
169
|
collapsible?: boolean;
|
|
144
170
|
/** Number = pixels, unitless string = percent (e.g. `"30%"`). */
|
|
145
171
|
defaultSize?: Size;
|
|
@@ -148,6 +174,11 @@ export type SidePanelProps = {
|
|
|
148
174
|
/** Called whenever the panel's visibility changes, with the new value. */
|
|
149
175
|
onVisibleChange?: (visible: boolean) => void;
|
|
150
176
|
};
|
|
177
|
+
export type LeftPanelProps = SidePanelProps & {
|
|
178
|
+
/** Accessible name for the panel. Used to label the modal drawer it renders
|
|
179
|
+
* as on mobile (`role="dialog"`). Ignored by the docked desktop panel. */
|
|
180
|
+
"aria-label": string;
|
|
181
|
+
};
|
|
151
182
|
export type ContentProps = {
|
|
152
183
|
children: React.ReactNode;
|
|
153
184
|
/** Number = pixels, unitless string = percent (e.g. `"30%"`). */
|
|
@@ -155,7 +186,11 @@ export type ContentProps = {
|
|
|
155
186
|
maxSize?: Size;
|
|
156
187
|
};
|
|
157
188
|
export type SplitProps = {
|
|
189
|
+
/** Panel content in source order. `<Layout.SplitHeader />` /
|
|
190
|
+
* `<Layout.SplitFooter />` children stick to the edges; the rest scrolls. */
|
|
158
191
|
children: React.ReactNode;
|
|
192
|
+
/** Accessible name; when set, the panel renders as a `region` landmark. */
|
|
193
|
+
"aria-label"?: string;
|
|
159
194
|
/** Number = pixels, unitless string = percent (e.g. `"30%"`). */
|
|
160
195
|
defaultSize?: Size;
|
|
161
196
|
minSize?: Size;
|
|
@@ -178,44 +213,78 @@ export type LayoutProps = {
|
|
|
178
213
|
storage?: LayoutStorage;
|
|
179
214
|
};
|
|
180
215
|
/**
|
|
181
|
-
*
|
|
182
|
-
*
|
|
216
|
+
* Shared contract of the per-panel header components
|
|
217
|
+
* (`Layout.LeftPanelHeader` / `Layout.RightPanelHeader` / `Layout.SplitHeader`).
|
|
218
|
+
* Place among the panel's children; it sticks to the top.
|
|
183
219
|
*/
|
|
184
|
-
export type
|
|
185
|
-
/**
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
220
|
+
export type PanelSlotHeaderProps = {
|
|
221
|
+
/** Rendered at the header start. */
|
|
222
|
+
leftSlot?: React.ReactNode;
|
|
223
|
+
/** Rendered at the header end. */
|
|
224
|
+
rightSlot?: React.ReactNode;
|
|
225
|
+
"data-e2e-test-id"?: string;
|
|
226
|
+
};
|
|
227
|
+
/**
|
|
228
|
+
* Shared contract of the per-panel footer components
|
|
229
|
+
* (`Layout.LeftPanelFooter` / `Layout.RightPanelFooter` / `Layout.SplitFooter`).
|
|
230
|
+
* Place among the panel's children; it sticks to the bottom.
|
|
231
|
+
*/
|
|
232
|
+
export type PanelSlotFooterProps = {
|
|
233
|
+
children: React.ReactNode;
|
|
234
|
+
"data-e2e-test-id"?: string;
|
|
235
|
+
};
|
|
236
|
+
export type LeftPanelHeaderProps = PanelSlotHeaderProps;
|
|
237
|
+
export type LeftPanelFooterProps = PanelSlotFooterProps;
|
|
238
|
+
/**
|
|
239
|
+
* Title shown in the right panel header, after `leftSlot`. Visual only — the
|
|
240
|
+
* panel's accessible name comes from `Layout.RightPanel`'s `aria-label`.
|
|
241
|
+
*/
|
|
242
|
+
export type RightPanelHeaderTitle = PanelHeaderTitle;
|
|
243
|
+
export type RightPanelHeaderSlotProps = {
|
|
244
|
+
/** Props for the built-in close button, rendered at the header end after
|
|
245
|
+
* `rightSlot`. Clicking it hides the panel. */
|
|
204
246
|
closeButton: {
|
|
205
247
|
"aria-label": string;
|
|
206
248
|
};
|
|
249
|
+
/** Props for the built-in variant-toggle button, rendered before the close
|
|
250
|
+
* button. Docked it minimizes the panel into the floating window
|
|
251
|
+
* (`minimizeLabel`); floating it docks the panel back (`dockLabel`). */
|
|
252
|
+
variantButton: {
|
|
253
|
+
minimizeLabel: string;
|
|
254
|
+
dockLabel: string;
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
export type RightPanelHeaderProps = PanelSlotHeaderProps & {
|
|
258
|
+
/** Title block (icon + heading), rendered after `leftSlot`. */
|
|
259
|
+
title?: RightPanelHeaderTitle;
|
|
260
|
+
/** Props forwarded to internal sub-components. */
|
|
261
|
+
slotProps: RightPanelHeaderSlotProps;
|
|
207
262
|
};
|
|
208
|
-
export type
|
|
209
|
-
|
|
210
|
-
|
|
263
|
+
export type RightPanelFooterProps = PanelSlotFooterProps;
|
|
264
|
+
export type SplitHeaderProps = PanelSlotHeaderProps;
|
|
265
|
+
export type SplitFooterProps = PanelSlotFooterProps;
|
|
266
|
+
export type PanelContainerProps = {
|
|
267
|
+
/** Content in source order. Per-panel header/footer components stick to the
|
|
268
|
+
* edges; everything else scrolls. */
|
|
211
269
|
children: React.ReactNode;
|
|
212
|
-
/**
|
|
213
|
-
|
|
214
|
-
|
|
270
|
+
/** Accessible name; when set, the container renders as a `region` landmark. */
|
|
271
|
+
"aria-label"?: string;
|
|
272
|
+
/** Forwarded to the scroll container element (scroll restoration etc.). */
|
|
273
|
+
scrollContainerRef?: React.Ref<HTMLDivElement>;
|
|
274
|
+
/** Forwarded to the scroll container's scroll handler. */
|
|
275
|
+
onScroll?: React.UIEventHandler<HTMLDivElement>;
|
|
276
|
+
/** Draws a separator border on the panel's left edge. */
|
|
277
|
+
showBorderLeft?: boolean;
|
|
278
|
+
"data-e2e-test-id"?: string;
|
|
279
|
+
};
|
|
280
|
+
export type RightPanelProps = SidePanelProps<RightPanelVariant> & {
|
|
281
|
+
/** Accessible name for the panel's `region` landmark. */
|
|
282
|
+
"aria-label": string;
|
|
215
283
|
/** Forwarded to the scrollable body element (scroll restoration etc.). */
|
|
216
284
|
scrollContainerRef?: React.Ref<HTMLDivElement>;
|
|
217
285
|
/** Forwarded to the scrollable body's scroll handler. */
|
|
218
286
|
onScroll?: React.UIEventHandler<HTMLDivElement>;
|
|
219
|
-
|
|
287
|
+
/** Called whenever the panel's render variant changes (docked ↔ float),
|
|
288
|
+
* with the new value. Not called on initial mount. */
|
|
289
|
+
onVariantChange?: (variant: RightPanelVariant) => void;
|
|
220
290
|
};
|
|
221
|
-
export type RightPanelProps = SidePanelProps & Omit<RightPanelContainerProps, "data-e2e-test-id">;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type React from "react";
|
|
2
|
-
import type { ContentProps } from "
|
|
2
|
+
import type { ContentProps } from "../-types";
|
|
3
3
|
/**
|
|
4
4
|
* Primary content panel. Always shown (never collapsible) and flexes to fill the
|
|
5
5
|
* space the side panels leave. Declares the `content` slot and portals into it.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Slot}from"../-constants";import{useDeclarePanel,useLayoutPortal}from"../registry";export const Content=({children,minSize,maxSize})=>(useDeclarePanel(Slot.content,{minSize,maxSize,collapsible:!1}),useLayoutPortal(Slot.content,children));
|
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { LayoutProvider } from "./LayoutProvider";
|
|
3
|
-
import { Content } from "./Content";
|
|
4
|
-
import { RightPanel } from "./RightPanel";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { Content } from "./Content/Content";
|
|
4
|
+
import { RightPanel } from "./RightPanel/RightPanel";
|
|
5
|
+
import { RightPanelHeader } from "./RightPanel/RightPanelHeader";
|
|
6
|
+
import { RightPanelFooter } from "./RightPanel/RightPanelFooter";
|
|
7
|
+
import { LeftPanel } from "./LeftPanel/LeftPanel";
|
|
8
|
+
import { LeftPanelHeader } from "./LeftPanel/LeftPanelHeader";
|
|
9
|
+
import { LeftPanelFooter } from "./LeftPanel/LeftPanelFooter";
|
|
10
|
+
import { Split } from "./Split/Split";
|
|
11
|
+
import { SplitHeader } from "./Split/SplitHeader";
|
|
12
|
+
import { SplitFooter } from "./Split/SplitFooter";
|
|
7
13
|
import type { LayoutProps } from "./-types";
|
|
8
14
|
declare function LayoutBase({ children, persistenceKey, storage, }: LayoutProps): React.ReactElement;
|
|
9
15
|
type LayoutComponent = typeof LayoutBase & {
|
|
10
16
|
Provider: typeof LayoutProvider;
|
|
11
17
|
LeftPanel: typeof LeftPanel;
|
|
18
|
+
LeftPanelHeader: typeof LeftPanelHeader;
|
|
19
|
+
LeftPanelFooter: typeof LeftPanelFooter;
|
|
12
20
|
RightPanel: typeof RightPanel;
|
|
21
|
+
RightPanelHeader: typeof RightPanelHeader;
|
|
22
|
+
RightPanelFooter: typeof RightPanelFooter;
|
|
13
23
|
Content: typeof Content;
|
|
14
24
|
Split: typeof Split;
|
|
25
|
+
SplitHeader: typeof SplitHeader;
|
|
26
|
+
SplitFooter: typeof SplitFooter;
|
|
15
27
|
};
|
|
16
28
|
export declare const Layout: LayoutComponent;
|
|
17
29
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useEffect,useMemo,useState}from"react";import styled from"@emotion/styled";import{Panel}from"../Internal/Panel/Panel";import{PANEL_ORDER,PANEL_WIDTH_VAR,Slot}from"./-constants";import{useLayoutPersistence}from"./context";import{LayoutProvider}from"./LayoutProvider";import{Content}from"./Content";import{RightPanel}from"./RightPanel";import{LeftPanel}from"./LeftPanel";import{Split}from"./Split";import{LayoutPortalContext,PanelRegistryContext}from"./registry";import{usePortalContainerRefs}from"./usePortalContainerRefs";import{useLayoutVar}from"./LayoutCssVars";import{useLayout}from"./useLayout";let useGlobalCssVariables=nodes=>{let contentWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.content),rightPanelWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.rightPanel);useEffect(()=>{let targets=[[Slot.content,contentWidthCssVar],[Slot.rightPanel,rightPanelWidthCssVar]],observers=[];return targets.forEach(([slot,handle])=>{let node=nodes[slot]??null;if(!node)return void handle.set("0px");let publishNodeWidth=()=>handle.set(`${node.getBoundingClientRect().width}px`);if(publishNodeWidth(),"undefined"==typeof ResizeObserver)return;let observer=new ResizeObserver(publishNodeWidth);observer.observe(node),observers.push(observer)}),()=>observers.forEach(observer=>observer.disconnect())},[contentWidthCssVar,rightPanelWidthCssVar,nodes])},StyledLayout=styled("div",{target:"e1dnkj9b0",label:"StyledLayout"})({position:"relative",height:"100%",width:"100%"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9MYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCB7IFBhbmVsIH0gZnJvbSBcIi4uL0ludGVybmFsL1BhbmVsL1BhbmVsXCI7XG5pbXBvcnQgdHlwZSB7IFBhbmVsSXRlbSB9IGZyb20gXCIuLi9JbnRlcm5hbC9QYW5lbC9QYW5lbFwiO1xuaW1wb3J0IHsgUEFORUxfT1JERVIsIFBBTkVMX1dJRFRIX1ZBUiwgU2xvdCB9IGZyb20gXCIuLy1jb25zdGFudHNcIjtcbmltcG9ydCB7IHVzZUxheW91dFBlcnNpc3RlbmNlIH0gZnJvbSBcIi4vY29udGV4dFwiO1xuaW1wb3J0IHsgTGF5b3V0UHJvdmlkZXIgfSBmcm9tIFwiLi9MYXlvdXRQcm92aWRlclwiO1xuaW1wb3J0IHsgQ29udGVudCB9IGZyb20gXCIuL0NvbnRlbnRcIjtcbmltcG9ydCB7IFJpZ2h0UGFuZWwgfSBmcm9tIFwiLi9SaWdodFBhbmVsXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWwgfSBmcm9tIFwiLi9MZWZ0UGFuZWxcIjtcbmltcG9ydCB7IFNwbGl0IH0gZnJvbSBcIi4vU3BsaXRcIjtcbmltcG9ydCB7XG4gIExheW91dFBvcnRhbENvbnRleHQsXG4gIFBhbmVsUmVnaXN0cnlDb250ZXh0LFxuICB0eXBlIEhvc3ROb2RlcyxcbiAgdHlwZSBQYW5lbFJlZyxcbiAgdHlwZSBQYW5lbFJlZ2lzdHJ5LFxufSBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuaW1wb3J0IHsgdXNlUG9ydGFsQ29udGFpbmVyUmVmcyB9IGZyb20gXCIuL3VzZVBvcnRhbENvbnRhaW5lclJlZnNcIjtcbmltcG9ydCB7IHVzZUxheW91dFZhciwgdHlwZSBMYXlvdXRWYXJIYW5kbGUgfSBmcm9tIFwiLi9MYXlvdXRDc3NWYXJzXCI7XG5pbXBvcnQgeyB1c2VMYXlvdXQgfSBmcm9tIFwiLi91c2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0UHJvcHMsIFNpemUsIFNsb3RLZXkgfSBmcm9tIFwiLi8tdHlwZXNcIjtcblxuLyoqXG4gKiBQdWJsaXNoZXMgZWFjaCBwYW5lbCdzIGxpdmUgcGl4ZWwgd2lkdGggYXMgYSBsYXlvdXQgQ1NTIHZhciAoZS5nLlxuICogYC0tZHMtbGF5b3V0LXJpZ2h0UGFuZWwtd2lkdGhgKSwgdHJhY2tpbmcgZHJhZy0gYW5kIHdpbmRvdy1yZXNpemVzLiBBIGhpZGRlblxuICogcGFydCAobm8gaG9zdCBub2RlKSByZWFkcyBgMHB4YCwgc28gdGhlIHZhciBpcyBhbHdheXMgZGVmaW5lZC4gT25lXG4gKiBgdXNlTGF5b3V0VmFyYCBwZXIgc2xvdCBpbiBgUEFORUxfV0lEVEhfVkFSYC5cbiAqL1xuY29uc3QgdXNlR2xvYmFsQ3NzVmFyaWFibGVzID0gKG5vZGVzOiBIb3N0Tm9kZXMpOiB2b2lkID0+IHtcbiAgY29uc3QgY29udGVudFdpZHRoQ3NzVmFyID0gdXNlTGF5b3V0VmFyKFBBTkVMX1dJRFRIX1ZBUi5jb250ZW50KTtcbiAgY29uc3QgcmlnaHRQYW5lbFdpZHRoQ3NzVmFyID0gdXNlTGF5b3V0VmFyKFBBTkVMX1dJRFRIX1ZBUi5yaWdodFBhbmVsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldHM6IFtTbG90S2V5LCBMYXlvdXRWYXJIYW5kbGVdW10gPSBbXG4gICAgICBbU2xvdC5jb250ZW50LCBjb250ZW50V2lkdGhDc3NWYXJdLFxuICAgICAgW1Nsb3QucmlnaHRQYW5lbCwgcmlnaHRQYW5lbFdpZHRoQ3NzVmFyXSxcbiAgICBdO1xuICAgIGNvbnN0IG9ic2VydmVyczogUmVzaXplT2JzZXJ2ZXJbXSA9IFtdO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKChbc2xvdCwgaGFuZGxlXSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW3Nsb3RdID8/IG51bGw7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgaGFuZGxlLnNldChcIjBweFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcHVibGlzaE5vZGVXaWR0aCA9ICgpOiB2b2lkID0+XG4gICAgICAgIGhhbmRsZS5zZXQoYCR7bm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGApO1xuICAgICAgcHVibGlzaE5vZGVXaWR0aCgpO1xuICAgICAgLy8ganNkb20gKGFuZCBvbGQgYnJvd3NlcnMpIGxhY2sgUmVzaXplT2JzZXJ2ZXIg4oCUIHNraXAgbGl2ZSB0cmFja2luZyB0aGVyZS5cbiAgICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHB1Ymxpc2hOb2RlV2lkdGgpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlKTtcbiAgICAgIG9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlcnMuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKSk7XG4gIH0sIFtjb250ZW50V2lkdGhDc3NWYXIsIHJpZ2h0UGFuZWxXaWR0aENzc1Zhciwgbm9kZXNdKTtcbn07XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBMYXlvdXQgLSByZWdpc3RyeSArIGhvc3RzOyBtYXJrZXJzIGRlY2xhcmUvcG9ydGFsOyB0aGUgcmVzaXphYmxlIHBhbmVsIHJvdyAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBTdHlsZWRMYXlvdXQgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxufSk7XG5cbi8vIFNvbG8tbW9kZSBob3N0OiBhIGxvbmUgcGFuZWwgKG5vIHJlc2l6YWJsZSBzaWJsaW5nKSBpcyBob3N0ZWQgaGVyZSBpbnN0ZWFkIG9mXG4vLyBpbnNpZGUgcmVhY3QtcmVzaXphYmxlLXBhbmVscy4gTWF0Y2hlcyB0aGUgcGVyLXBhbmVsIGhvc3QgdGhlIEdyb3VwIHJlbmRlcnNcbi8vIChgcmVsYXRpdmVgICsgZnVsbC1ibGVlZCkgc28gY29udGVudCByZWZsb3dzL3Njcm9sbHMgaWRlbnRpY2FsbHkgZWl0aGVyIHdheS5cbmNvbnN0IFN0eWxlZFNvbG9Ib3N0ID0gc3R5bGVkLmRpdih7XG4gIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHdpZHRoOiBcIjEwMCVcIixcbn0pO1xuXG5mdW5jdGlvbiBMYXlvdXRCYXNlKHtcbiAgY2hpbGRyZW4sXG4gIHBlcnNpc3RlbmNlS2V5LFxuICBzdG9yYWdlLFxufTogTGF5b3V0UHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICBjb25zdCBbZGVjbGFyZWQsIHNldERlY2xhcmVkXSA9IHVzZVN0YXRlPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIFBhbmVsUmVnPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHsgc3RhdGU6IGxheW91dFN0YXRlLCAuLi5wYW5lbENhbGxiYWNrcyB9ID0gdXNlTGF5b3V0KCk7XG4gIGNvbnN0IHBlcnNpc3RlbmNlID0gdXNlTGF5b3V0UGVyc2lzdGVuY2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRLZXkgPSBwZXJzaXN0ZW5jZUtleSA/PyBwZXJzaXN0ZW5jZS5wZXJzaXN0ZW5jZUtleTtcbiAgY29uc3QgcmVzb2x2ZWRTdG9yYWdlID0gc3RvcmFnZSA/PyBwZXJzaXN0ZW5jZS5zdG9yYWdlO1xuXG4gIGNvbnN0IGlzU2hvd24gPSAoc2xvdDogU2xvdEtleSk6IGJvb2xlYW4gPT4gbGF5b3V0U3RhdGVbc2xvdF0udmlzaWJsZTtcblxuICBjb25zdCByZWdpc3RyeSA9IHVzZU1lbW88UGFuZWxSZWdpc3RyeT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHJlZ2lzdGVyOiAoc2xvdCwgcmVnKSA9PlxuICAgICAgICBzZXREZWNsYXJlZCgocHJldikgPT4gKHsgLi4ucHJldiwgW3Nsb3RdOiByZWcgfSkpLFxuICAgICAgdW5yZWdpc3RlcjogKHNsb3QpID0+XG4gICAgICAgIHNldERlY2xhcmVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgaWYgKCEoc2xvdCBpbiBwcmV2KSkgcmV0dXJuIHByZXY7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xuICAgICAgICAgIGRlbGV0ZSBuZXh0W3Nsb3RdO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9KSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IFtub2RlcywgaG9zdFJlZnNdID0gdXNlUG9ydGFsQ29udGFpbmVyUmVmcyhQQU5FTF9PUkRFUik7XG5cbiAgdXNlR2xvYmFsQ3NzVmFyaWFibGVzKG5vZGVzKTtcblxuICAvLyBQYW5lbHMgdGhhdCBleGlzdCBpbiB0aGUgbGF5b3V0LCByZWdhcmRsZXNzIG9mIHZpc2liaWxpdHkuIERyaXZlcyB0aGVcbiAgLy8gc29sby12cy1yZXNpemFibGUgZGVjaXNpb24gYmVsb3cgLSBrZXllZCBvbiBERUNMQVJFRCAobm90IHNob3duKSBzbyB0aGF0XG4gIC8vIHNob3dpbmcvaGlkaW5nIGEgcGFuZWwgbmV2ZXIgZmxpcHMgdGhlIG1vZGUuXG4gIGNvbnN0IGRlY2xhcmVkU2xvdHMgPSBQQU5FTF9PUkRFUi5maWx0ZXIoKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdKTtcblxuICAvLyBTb2xvIG1vZGU6IGEgc2luZ2xlIHBhbmVsIGlzIGRlY2xhcmVkIChlLmcuIGp1c3QgYENvbnRlbnRgLCB3aXRoIG5vXG4gIC8vIFJpZ2h0UGFuZWwvTGVmdFBhbmVsL1NwbGl0IGluIHRoZSB0cmVlKSAtIG5vdGhpbmcgdG8gcmVzaXplIGFnYWluc3QsIHNvIGhvc3RcbiAgLy8gaXQgaW4gYSBwbGFpbiBkaXYgYW5kIHNraXAgcmVhY3QtcmVzaXphYmxlLXBhbmVscyBlbnRpcmVseS4gQmVjYXVzZSB0aGVcbiAgLy8gY2hlY2sgaXMgb24gREVDTEFSRUQgcGFuZWxzLCB0b2dnbGluZyBhICpkZWNsYXJlZCogcGFuZWwncyB2aXNpYmlsaXR5IGtlZXBzXG4gIC8vIHRoZSBtb2RlIHN0YWJsZSwgc28gYENvbnRlbnRgIGlzIG5ldmVyIHJlbW91bnRlZCBieSBhIHNob3cvaGlkZS4gVGhlIG1vZGVcbiAgLy8gb25seSBmbGlwcyB3aGVuIGEgcGFuZWwgbWFya2VyIGlzIGFkZGVkIHRvIC8gcmVtb3ZlZCBmcm9tIHRoZSB0cmVlIChhXG4gIC8vIHN0cnVjdHVyYWwgY2hhbmdlKSwgd2hlcmUgYSBvbmUtdGltZSByZW1vdW50IGlzIGFjY2VwdGFibGUuXG4gIGNvbnN0IGlzU29sbyA9IGRlY2xhcmVkU2xvdHMubGVuZ3RoIDw9IDE7XG4gIGNvbnN0IHNvbG9TbG90ID0gZGVjbGFyZWRTbG90c1swXTtcblxuICAvLyBjb250ZW50IGZsZXhlcyAobm8gZml4ZWQgc2l6ZSk7IG90aGVycyB1c2UgdGhlIGRlY2xhcmVkIGRlZmF1bHQsIGZhbGxpbmdcbiAgLy8gYmFjayB0byB0aGUgcGVyc2lzdGVkL2NvbmZpZyBzaXplLlxuICBjb25zdCBkZWZhdWx0U2l6ZUZvciA9IChzbG90OiBTbG90S2V5KTogU2l6ZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHNsb3QgPT09IFNsb3QuY29udGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGVjbGFyZWRbc2xvdF0/LmRlZmF1bHRTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLnNpemU7XG4gIH07XG5cbiAgLy8gT25seSB0aGUgcGFuZWxzIHRoYXQgYXJlIGRlY2xhcmVkIEFORCBjdXJyZW50bHkgc2hvd24uIENsb3NlZC9oaWRkZW4gcGFuZWxzXG4gIC8vIGFyZSBub3QgcmVuZGVyZWQgYXQgYWxsIC0gbm8gcmVzZXJ2ZWQgc3BhY2UuXG4gIGNvbnN0IHBhbmVsSXRlbXM6IFBhbmVsSXRlbVtdID0gUEFORUxfT1JERVIuZmlsdGVyKFxuICAgIChzbG90KSA9PiBkZWNsYXJlZFtzbG90XSAmJiBpc1Nob3duKHNsb3QpXG4gICkubWFwKChzbG90KSA9PiAoe1xuICAgIGlkOiBzbG90LFxuICAgIGRlZmF1bHRTaXplOiBkZWZhdWx0U2l6ZUZvcihzbG90KSxcbiAgICBtaW5TaXplOiBkZWNsYXJlZFtzbG90XT8ubWluU2l6ZSA/PyBsYXlvdXRTdGF0ZVtzbG90XS5taW5TaXplLFxuICAgIG1heFNpemU6IGRlY2xhcmVkW3Nsb3RdPy5tYXhTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLm1heFNpemUsXG4gICAgY29sbGFwc2libGU6IHNsb3QgIT09IFNsb3QuY29udGVudCAmJiAoZGVjbGFyZWRbc2xvdF0/LmNvbGxhcHNpYmxlID8/IHRydWUpLFxuICB9KSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxSZWdpc3RyeUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3JlZ2lzdHJ5fT5cbiAgICAgIDxMYXlvdXRQb3J0YWxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtub2Rlc30+XG4gICAgICAgIDxTdHlsZWRMYXlvdXQgZGF0YS1kcy1pZD1cIkxheW91dFwiPlxuICAgICAgICAgIHtpc1NvbG9cbiAgICAgICAgICAgID8gLy8gTG9uZSBwYW5lbCAtIGhvc3QgaXQgaW4gYSBwbGFpbiBkaXYsIG5vIHJlc2l6YWJsZSBHcm91cC4gSGlkZGVuXG4gICAgICAgICAgICAgIC8vIGxvbmUgcGFuZWxzIHJlbmRlciBub3RoaW5nIChDb250ZW50IGlzIGFsd2F5cyBzaG93bikuXG4gICAgICAgICAgICAgIHNvbG9TbG90ICYmXG4gICAgICAgICAgICAgIGlzU2hvd24oc29sb1Nsb3QpICYmIDxTdHlsZWRTb2xvSG9zdCByZWY9e2hvc3RSZWZzW3NvbG9TbG90XX0gLz5cbiAgICAgICAgICAgIDogcGFuZWxJdGVtcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAvLyBga2V5YCA9IHRoZSBwZXJzaXN0ZW5jZSBuYW1lc3BhY2UuIHJlYWN0LXJlc2l6YWJsZS1wYW5lbHNcbiAgICAgICAgICAgICAgICAvLyByZWFkcyBzdG9yZWQgc2l6ZXMgb25seSBvbiBtb3VudCwgYW5kIHRoaXMgZ3JvdXAgc3RheXNcbiAgICAgICAgICAgICAgICAvLyBtb3VudGVkIGFjcm9zcyBuYXZpZ2F0aW9uIC0gc28gcmVtb3VudCBpdCB3aGVuIHRoZSBrZXlcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2VzIHRvIGxvYWQgVEhBVCBpbnN0YW5jZSdzIHNpemVzLiBVc2UgY2FzZTpcbiAgICAgICAgICAgICAgICAvLyBwZXItcm91dGUvcGVyLWluc3RhbmNlIHNpemUgbWVtb3J5IChlLmcuXG4gICAgICAgICAgICAgICAgLy8gYHBlcnNpc3RlbmNlS2V5PXtgbGF5b3V0OiR7cm91dGVJZH1gfWApIC0gZHJhZyB0aGUgY2hhdCB3aWRlXG4gICAgICAgICAgICAgICAgLy8gb24gcGFnZSBBLCBzd2l0Y2ggdG8gcGFnZSBCIChpdHMgb3duIHdpZHRocyksIGNvbWUgYmFjayB0byBBXG4gICAgICAgICAgICAgICAgLy8gYW5kIGZpbmQgQSdzIHdpZHRocyByZXN0b3JlZC4gVGhlIGtleSBvbmx5IGNoYW5nZXMgb25cbiAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZSBzd2l0Y2gsIG5ldmVyIG9uIHBhbmVsIG9wZW4vY2xvc2UsIHNvIG5vcm1hbFxuICAgICAgICAgICAgICAgIC8vIHRvZ2dsaW5nIHN0YXlzIHJlbW91bnQtZnJlZS5cbiAgICAgICAgICAgICAgICA8UGFuZWxcbiAgICAgICAgICAgICAgICAgIGtleT17cmVzb2x2ZWRLZXl9XG4gICAgICAgICAgICAgICAgICBwYW5lbHM9e3BhbmVsSXRlbXN9XG4gICAgICAgICAgICAgICAgICBwZXJzaXN0ZW5jZUtleT17cmVzb2x2ZWRLZXl9XG4gICAgICAgICAgICAgICAgICBzdG9yYWdlPXtyZXNvbHZlZFN0b3JhZ2V9XG4gICAgICAgICAgICAgICAgICBob3N0Rm9yPXsoaWQpID0+IGhvc3RSZWZzW2lkIGFzIFNsb3RLZXldfVxuICAgICAgICAgICAgICAgICAgb25SZXNpemU9eyhpZCwgc2l6ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgcGFuZWxDYWxsYmFja3NbaWQgYXMgU2xvdEtleV0ucmVzaXplKHNpemUpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvbkNvbGxhcHNlPXsoaWQpID0+IHBhbmVsQ2FsbGJhY2tzW2lkIGFzIFNsb3RLZXldLmhpZGUoKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9TdHlsZWRMYXlvdXQ+XG4gICAgICA8L0xheW91dFBvcnRhbENvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9QYW5lbFJlZ2lzdHJ5Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qIFB1YmxpYyBMYXlvdXQgLSB0aGUgcmVzaXphYmxlIHBhbmVsIHJvdyArIGNvbXBvdW5kIHBhcnRzIGFzIHN0YXRpY3MgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxudHlwZSBMYXlvdXRDb21wb25lbnQgPSB0eXBlb2YgTGF5b3V0QmFzZSAmIHtcbiAgUHJvdmlkZXI6IHR5cGVvZiBMYXlvdXRQcm92aWRlcjtcbiAgTGVmdFBhbmVsOiB0eXBlb2YgTGVmdFBhbmVsO1xuICBSaWdodFBhbmVsOiB0eXBlb2YgUmlnaHRQYW5lbDtcbiAgQ29udGVudDogdHlwZW9mIENvbnRlbnQ7XG4gIFNwbGl0OiB0eXBlb2YgU3BsaXQ7XG59O1xuXG5leHBvcnQgY29uc3QgTGF5b3V0ID0gTGF5b3V0QmFzZSBhcyBMYXlvdXRDb21wb25lbnQ7XG5cbkxheW91dC5Qcm92aWRlciA9IExheW91dFByb3ZpZGVyO1xuTGF5b3V0LkxlZnRQYW5lbCA9IExlZnRQYW5lbDtcbkxheW91dC5SaWdodFBhbmVsID0gUmlnaHRQYW5lbDtcbkxheW91dC5Db250ZW50ID0gQ29udGVudDtcbkxheW91dC5TcGxpdCA9IFNwbGl0O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdFcUIifQ== */"),StyledSoloHost=styled("div",{target:"e1dnkj9b1",label:"StyledSoloHost"})({position:"relative",height:"100%",width:"100%"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9MYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCB7IFBhbmVsIH0gZnJvbSBcIi4uL0ludGVybmFsL1BhbmVsL1BhbmVsXCI7XG5pbXBvcnQgdHlwZSB7IFBhbmVsSXRlbSB9IGZyb20gXCIuLi9JbnRlcm5hbC9QYW5lbC9QYW5lbFwiO1xuaW1wb3J0IHsgUEFORUxfT1JERVIsIFBBTkVMX1dJRFRIX1ZBUiwgU2xvdCB9IGZyb20gXCIuLy1jb25zdGFudHNcIjtcbmltcG9ydCB7IHVzZUxheW91dFBlcnNpc3RlbmNlIH0gZnJvbSBcIi4vY29udGV4dFwiO1xuaW1wb3J0IHsgTGF5b3V0UHJvdmlkZXIgfSBmcm9tIFwiLi9MYXlvdXRQcm92aWRlclwiO1xuaW1wb3J0IHsgQ29udGVudCB9IGZyb20gXCIuL0NvbnRlbnRcIjtcbmltcG9ydCB7IFJpZ2h0UGFuZWwgfSBmcm9tIFwiLi9SaWdodFBhbmVsXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWwgfSBmcm9tIFwiLi9MZWZ0UGFuZWxcIjtcbmltcG9ydCB7IFNwbGl0IH0gZnJvbSBcIi4vU3BsaXRcIjtcbmltcG9ydCB7XG4gIExheW91dFBvcnRhbENvbnRleHQsXG4gIFBhbmVsUmVnaXN0cnlDb250ZXh0LFxuICB0eXBlIEhvc3ROb2RlcyxcbiAgdHlwZSBQYW5lbFJlZyxcbiAgdHlwZSBQYW5lbFJlZ2lzdHJ5LFxufSBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuaW1wb3J0IHsgdXNlUG9ydGFsQ29udGFpbmVyUmVmcyB9IGZyb20gXCIuL3VzZVBvcnRhbENvbnRhaW5lclJlZnNcIjtcbmltcG9ydCB7IHVzZUxheW91dFZhciwgdHlwZSBMYXlvdXRWYXJIYW5kbGUgfSBmcm9tIFwiLi9MYXlvdXRDc3NWYXJzXCI7XG5pbXBvcnQgeyB1c2VMYXlvdXQgfSBmcm9tIFwiLi91c2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0UHJvcHMsIFNpemUsIFNsb3RLZXkgfSBmcm9tIFwiLi8tdHlwZXNcIjtcblxuLyoqXG4gKiBQdWJsaXNoZXMgZWFjaCBwYW5lbCdzIGxpdmUgcGl4ZWwgd2lkdGggYXMgYSBsYXlvdXQgQ1NTIHZhciAoZS5nLlxuICogYC0tZHMtbGF5b3V0LXJpZ2h0UGFuZWwtd2lkdGhgKSwgdHJhY2tpbmcgZHJhZy0gYW5kIHdpbmRvdy1yZXNpemVzLiBBIGhpZGRlblxuICogcGFydCAobm8gaG9zdCBub2RlKSByZWFkcyBgMHB4YCwgc28gdGhlIHZhciBpcyBhbHdheXMgZGVmaW5lZC4gT25lXG4gKiBgdXNlTGF5b3V0VmFyYCBwZXIgc2xvdCBpbiBgUEFORUxfV0lEVEhfVkFSYC5cbiAqL1xuY29uc3QgdXNlR2xvYmFsQ3NzVmFyaWFibGVzID0gKG5vZGVzOiBIb3N0Tm9kZXMpOiB2b2lkID0+IHtcbiAgY29uc3QgY29udGVudFdpZHRoQ3NzVmFyID0gdXNlTGF5b3V0VmFyKFBBTkVMX1dJRFRIX1ZBUi5jb250ZW50KTtcbiAgY29uc3QgcmlnaHRQYW5lbFdpZHRoQ3NzVmFyID0gdXNlTGF5b3V0VmFyKFBBTkVMX1dJRFRIX1ZBUi5yaWdodFBhbmVsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldHM6IFtTbG90S2V5LCBMYXlvdXRWYXJIYW5kbGVdW10gPSBbXG4gICAgICBbU2xvdC5jb250ZW50LCBjb250ZW50V2lkdGhDc3NWYXJdLFxuICAgICAgW1Nsb3QucmlnaHRQYW5lbCwgcmlnaHRQYW5lbFdpZHRoQ3NzVmFyXSxcbiAgICBdO1xuICAgIGNvbnN0IG9ic2VydmVyczogUmVzaXplT2JzZXJ2ZXJbXSA9IFtdO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKChbc2xvdCwgaGFuZGxlXSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW3Nsb3RdID8/IG51bGw7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgaGFuZGxlLnNldChcIjBweFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcHVibGlzaE5vZGVXaWR0aCA9ICgpOiB2b2lkID0+XG4gICAgICAgIGhhbmRsZS5zZXQoYCR7bm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGApO1xuICAgICAgcHVibGlzaE5vZGVXaWR0aCgpO1xuICAgICAgLy8ganNkb20gKGFuZCBvbGQgYnJvd3NlcnMpIGxhY2sgUmVzaXplT2JzZXJ2ZXIg4oCUIHNraXAgbGl2ZSB0cmFja2luZyB0aGVyZS5cbiAgICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHB1Ymxpc2hOb2RlV2lkdGgpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlKTtcbiAgICAgIG9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlcnMuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKSk7XG4gIH0sIFtjb250ZW50V2lkdGhDc3NWYXIsIHJpZ2h0UGFuZWxXaWR0aENzc1Zhciwgbm9kZXNdKTtcbn07XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBMYXlvdXQgLSByZWdpc3RyeSArIGhvc3RzOyBtYXJrZXJzIGRlY2xhcmUvcG9ydGFsOyB0aGUgcmVzaXphYmxlIHBhbmVsIHJvdyAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBTdHlsZWRMYXlvdXQgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxufSk7XG5cbi8vIFNvbG8tbW9kZSBob3N0OiBhIGxvbmUgcGFuZWwgKG5vIHJlc2l6YWJsZSBzaWJsaW5nKSBpcyBob3N0ZWQgaGVyZSBpbnN0ZWFkIG9mXG4vLyBpbnNpZGUgcmVhY3QtcmVzaXphYmxlLXBhbmVscy4gTWF0Y2hlcyB0aGUgcGVyLXBhbmVsIGhvc3QgdGhlIEdyb3VwIHJlbmRlcnNcbi8vIChgcmVsYXRpdmVgICsgZnVsbC1ibGVlZCkgc28gY29udGVudCByZWZsb3dzL3Njcm9sbHMgaWRlbnRpY2FsbHkgZWl0aGVyIHdheS5cbmNvbnN0IFN0eWxlZFNvbG9Ib3N0ID0gc3R5bGVkLmRpdih7XG4gIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHdpZHRoOiBcIjEwMCVcIixcbn0pO1xuXG5mdW5jdGlvbiBMYXlvdXRCYXNlKHtcbiAgY2hpbGRyZW4sXG4gIHBlcnNpc3RlbmNlS2V5LFxuICBzdG9yYWdlLFxufTogTGF5b3V0UHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICBjb25zdCBbZGVjbGFyZWQsIHNldERlY2xhcmVkXSA9IHVzZVN0YXRlPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIFBhbmVsUmVnPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHsgc3RhdGU6IGxheW91dFN0YXRlLCAuLi5wYW5lbENhbGxiYWNrcyB9ID0gdXNlTGF5b3V0KCk7XG4gIGNvbnN0IHBlcnNpc3RlbmNlID0gdXNlTGF5b3V0UGVyc2lzdGVuY2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRLZXkgPSBwZXJzaXN0ZW5jZUtleSA/PyBwZXJzaXN0ZW5jZS5wZXJzaXN0ZW5jZUtleTtcbiAgY29uc3QgcmVzb2x2ZWRTdG9yYWdlID0gc3RvcmFnZSA/PyBwZXJzaXN0ZW5jZS5zdG9yYWdlO1xuXG4gIGNvbnN0IGlzU2hvd24gPSAoc2xvdDogU2xvdEtleSk6IGJvb2xlYW4gPT4gbGF5b3V0U3RhdGVbc2xvdF0udmlzaWJsZTtcblxuICBjb25zdCByZWdpc3RyeSA9IHVzZU1lbW88UGFuZWxSZWdpc3RyeT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHJlZ2lzdGVyOiAoc2xvdCwgcmVnKSA9PlxuICAgICAgICBzZXREZWNsYXJlZCgocHJldikgPT4gKHsgLi4ucHJldiwgW3Nsb3RdOiByZWcgfSkpLFxuICAgICAgdW5yZWdpc3RlcjogKHNsb3QpID0+XG4gICAgICAgIHNldERlY2xhcmVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgaWYgKCEoc2xvdCBpbiBwcmV2KSkgcmV0dXJuIHByZXY7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xuICAgICAgICAgIGRlbGV0ZSBuZXh0W3Nsb3RdO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9KSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IFtub2RlcywgaG9zdFJlZnNdID0gdXNlUG9ydGFsQ29udGFpbmVyUmVmcyhQQU5FTF9PUkRFUik7XG5cbiAgdXNlR2xvYmFsQ3NzVmFyaWFibGVzKG5vZGVzKTtcblxuICAvLyBQYW5lbHMgdGhhdCBleGlzdCBpbiB0aGUgbGF5b3V0LCByZWdhcmRsZXNzIG9mIHZpc2liaWxpdHkuIERyaXZlcyB0aGVcbiAgLy8gc29sby12cy1yZXNpemFibGUgZGVjaXNpb24gYmVsb3cgLSBrZXllZCBvbiBERUNMQVJFRCAobm90IHNob3duKSBzbyB0aGF0XG4gIC8vIHNob3dpbmcvaGlkaW5nIGEgcGFuZWwgbmV2ZXIgZmxpcHMgdGhlIG1vZGUuXG4gIGNvbnN0IGRlY2xhcmVkU2xvdHMgPSBQQU5FTF9PUkRFUi5maWx0ZXIoKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdKTtcblxuICAvLyBTb2xvIG1vZGU6IGEgc2luZ2xlIHBhbmVsIGlzIGRlY2xhcmVkIChlLmcuIGp1c3QgYENvbnRlbnRgLCB3aXRoIG5vXG4gIC8vIFJpZ2h0UGFuZWwvTGVmdFBhbmVsL1NwbGl0IGluIHRoZSB0cmVlKSAtIG5vdGhpbmcgdG8gcmVzaXplIGFnYWluc3QsIHNvIGhvc3RcbiAgLy8gaXQgaW4gYSBwbGFpbiBkaXYgYW5kIHNraXAgcmVhY3QtcmVzaXphYmxlLXBhbmVscyBlbnRpcmVseS4gQmVjYXVzZSB0aGVcbiAgLy8gY2hlY2sgaXMgb24gREVDTEFSRUQgcGFuZWxzLCB0b2dnbGluZyBhICpkZWNsYXJlZCogcGFuZWwncyB2aXNpYmlsaXR5IGtlZXBzXG4gIC8vIHRoZSBtb2RlIHN0YWJsZSwgc28gYENvbnRlbnRgIGlzIG5ldmVyIHJlbW91bnRlZCBieSBhIHNob3cvaGlkZS4gVGhlIG1vZGVcbiAgLy8gb25seSBmbGlwcyB3aGVuIGEgcGFuZWwgbWFya2VyIGlzIGFkZGVkIHRvIC8gcmVtb3ZlZCBmcm9tIHRoZSB0cmVlIChhXG4gIC8vIHN0cnVjdHVyYWwgY2hhbmdlKSwgd2hlcmUgYSBvbmUtdGltZSByZW1vdW50IGlzIGFjY2VwdGFibGUuXG4gIGNvbnN0IGlzU29sbyA9IGRlY2xhcmVkU2xvdHMubGVuZ3RoIDw9IDE7XG4gIGNvbnN0IHNvbG9TbG90ID0gZGVjbGFyZWRTbG90c1swXTtcblxuICAvLyBjb250ZW50IGZsZXhlcyAobm8gZml4ZWQgc2l6ZSk7IG90aGVycyB1c2UgdGhlIGRlY2xhcmVkIGRlZmF1bHQsIGZhbGxpbmdcbiAgLy8gYmFjayB0byB0aGUgcGVyc2lzdGVkL2NvbmZpZyBzaXplLlxuICBjb25zdCBkZWZhdWx0U2l6ZUZvciA9IChzbG90OiBTbG90S2V5KTogU2l6ZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHNsb3QgPT09IFNsb3QuY29udGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGVjbGFyZWRbc2xvdF0/LmRlZmF1bHRTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLnNpemU7XG4gIH07XG5cbiAgLy8gT25seSB0aGUgcGFuZWxzIHRoYXQgYXJlIGRlY2xhcmVkIEFORCBjdXJyZW50bHkgc2hvd24uIENsb3NlZC9oaWRkZW4gcGFuZWxzXG4gIC8vIGFyZSBub3QgcmVuZGVyZWQgYXQgYWxsIC0gbm8gcmVzZXJ2ZWQgc3BhY2UuXG4gIGNvbnN0IHBhbmVsSXRlbXM6IFBhbmVsSXRlbVtdID0gUEFORUxfT1JERVIuZmlsdGVyKFxuICAgIChzbG90KSA9PiBkZWNsYXJlZFtzbG90XSAmJiBpc1Nob3duKHNsb3QpXG4gICkubWFwKChzbG90KSA9PiAoe1xuICAgIGlkOiBzbG90LFxuICAgIGRlZmF1bHRTaXplOiBkZWZhdWx0U2l6ZUZvcihzbG90KSxcbiAgICBtaW5TaXplOiBkZWNsYXJlZFtzbG90XT8ubWluU2l6ZSA/PyBsYXlvdXRTdGF0ZVtzbG90XS5taW5TaXplLFxuICAgIG1heFNpemU6IGRlY2xhcmVkW3Nsb3RdPy5tYXhTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLm1heFNpemUsXG4gICAgY29sbGFwc2libGU6IHNsb3QgIT09IFNsb3QuY29udGVudCAmJiAoZGVjbGFyZWRbc2xvdF0/LmNvbGxhcHNpYmxlID8/IHRydWUpLFxuICB9KSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxSZWdpc3RyeUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3JlZ2lzdHJ5fT5cbiAgICAgIDxMYXlvdXRQb3J0YWxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtub2Rlc30+XG4gICAgICAgIDxTdHlsZWRMYXlvdXQgZGF0YS1kcy1pZD1cIkxheW91dFwiPlxuICAgICAgICAgIHtpc1NvbG9cbiAgICAgICAgICAgID8gLy8gTG9uZSBwYW5lbCAtIGhvc3QgaXQgaW4gYSBwbGFpbiBkaXYsIG5vIHJlc2l6YWJsZSBHcm91cC4gSGlkZGVuXG4gICAgICAgICAgICAgIC8vIGxvbmUgcGFuZWxzIHJlbmRlciBub3RoaW5nIChDb250ZW50IGlzIGFsd2F5cyBzaG93bikuXG4gICAgICAgICAgICAgIHNvbG9TbG90ICYmXG4gICAgICAgICAgICAgIGlzU2hvd24oc29sb1Nsb3QpICYmIDxTdHlsZWRTb2xvSG9zdCByZWY9e2hvc3RSZWZzW3NvbG9TbG90XX0gLz5cbiAgICAgICAgICAgIDogcGFuZWxJdGVtcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAvLyBga2V5YCA9IHRoZSBwZXJzaXN0ZW5jZSBuYW1lc3BhY2UuIHJlYWN0LXJlc2l6YWJsZS1wYW5lbHNcbiAgICAgICAgICAgICAgICAvLyByZWFkcyBzdG9yZWQgc2l6ZXMgb25seSBvbiBtb3VudCwgYW5kIHRoaXMgZ3JvdXAgc3RheXNcbiAgICAgICAgICAgICAgICAvLyBtb3VudGVkIGFjcm9zcyBuYXZpZ2F0aW9uIC0gc28gcmVtb3VudCBpdCB3aGVuIHRoZSBrZXlcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2VzIHRvIGxvYWQgVEhBVCBpbnN0YW5jZSdzIHNpemVzLiBVc2UgY2FzZTpcbiAgICAgICAgICAgICAgICAvLyBwZXItcm91dGUvcGVyLWluc3RhbmNlIHNpemUgbWVtb3J5IChlLmcuXG4gICAgICAgICAgICAgICAgLy8gYHBlcnNpc3RlbmNlS2V5PXtgbGF5b3V0OiR7cm91dGVJZH1gfWApIC0gZHJhZyB0aGUgY2hhdCB3aWRlXG4gICAgICAgICAgICAgICAgLy8gb24gcGFnZSBBLCBzd2l0Y2ggdG8gcGFnZSBCIChpdHMgb3duIHdpZHRocyksIGNvbWUgYmFjayB0byBBXG4gICAgICAgICAgICAgICAgLy8gYW5kIGZpbmQgQSdzIHdpZHRocyByZXN0b3JlZC4gVGhlIGtleSBvbmx5IGNoYW5nZXMgb25cbiAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZSBzd2l0Y2gsIG5ldmVyIG9uIHBhbmVsIG9wZW4vY2xvc2UsIHNvIG5vcm1hbFxuICAgICAgICAgICAgICAgIC8vIHRvZ2dsaW5nIHN0YXlzIHJlbW91bnQtZnJlZS5cbiAgICAgICAgICAgICAgICA8UGFuZWxcbiAgICAgICAgICAgICAgICAgIGtleT17cmVzb2x2ZWRLZXl9XG4gICAgICAgICAgICAgICAgICBwYW5lbHM9e3BhbmVsSXRlbXN9XG4gICAgICAgICAgICAgICAgICBwZXJzaXN0ZW5jZUtleT17cmVzb2x2ZWRLZXl9XG4gICAgICAgICAgICAgICAgICBzdG9yYWdlPXtyZXNvbHZlZFN0b3JhZ2V9XG4gICAgICAgICAgICAgICAgICBob3N0Rm9yPXsoaWQpID0+IGhvc3RSZWZzW2lkIGFzIFNsb3RLZXldfVxuICAgICAgICAgICAgICAgICAgb25SZXNpemU9eyhpZCwgc2l6ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgcGFuZWxDYWxsYmFja3NbaWQgYXMgU2xvdEtleV0ucmVzaXplKHNpemUpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvbkNvbGxhcHNlPXsoaWQpID0+IHBhbmVsQ2FsbGJhY2tzW2lkIGFzIFNsb3RLZXldLmhpZGUoKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9TdHlsZWRMYXlvdXQ+XG4gICAgICA8L0xheW91dFBvcnRhbENvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9QYW5lbFJlZ2lzdHJ5Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qIFB1YmxpYyBMYXlvdXQgLSB0aGUgcmVzaXphYmxlIHBhbmVsIHJvdyArIGNvbXBvdW5kIHBhcnRzIGFzIHN0YXRpY3MgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxudHlwZSBMYXlvdXRDb21wb25lbnQgPSB0eXBlb2YgTGF5b3V0QmFzZSAmIHtcbiAgUHJvdmlkZXI6IHR5cGVvZiBMYXlvdXRQcm92aWRlcjtcbiAgTGVmdFBhbmVsOiB0eXBlb2YgTGVmdFBhbmVsO1xuICBSaWdodFBhbmVsOiB0eXBlb2YgUmlnaHRQYW5lbDtcbiAgQ29udGVudDogdHlwZW9mIENvbnRlbnQ7XG4gIFNwbGl0OiB0eXBlb2YgU3BsaXQ7XG59O1xuXG5leHBvcnQgY29uc3QgTGF5b3V0ID0gTGF5b3V0QmFzZSBhcyBMYXlvdXRDb21wb25lbnQ7XG5cbkxheW91dC5Qcm92aWRlciA9IExheW91dFByb3ZpZGVyO1xuTGF5b3V0LkxlZnRQYW5lbCA9IExlZnRQYW5lbDtcbkxheW91dC5SaWdodFBhbmVsID0gUmlnaHRQYW5lbDtcbkxheW91dC5Db250ZW50ID0gQ29udGVudDtcbkxheW91dC5TcGxpdCA9IFNwbGl0O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlFdUIifQ== */");export const Layout=function({children,persistenceKey,storage}){let[declared,setDeclared]=useState({}),{state:layoutState,...panelCallbacks}=useLayout(),persistence=useLayoutPersistence(),resolvedKey=persistenceKey??persistence.persistenceKey,resolvedStorage=storage??persistence.storage,isShown=slot=>layoutState[slot].visible,registry=useMemo(()=>({register:(slot,reg)=>setDeclared(prev=>({...prev,[slot]:reg})),unregister:slot=>setDeclared(prev=>{if(!(slot in prev))return prev;let next={...prev};return delete next[slot],next})}),[]),[nodes,hostRefs]=usePortalContainerRefs(PANEL_ORDER);useGlobalCssVariables(nodes);let declaredSlots=PANEL_ORDER.filter(slot=>declared[slot]),isSolo=declaredSlots.length<=1,soloSlot=declaredSlots[0],defaultSizeFor=slot=>{if(slot!==Slot.content)return declared[slot]?.defaultSize??layoutState[slot].size},panelItems=PANEL_ORDER.filter(slot=>declared[slot]&&isShown(slot)).map(slot=>({id:slot,defaultSize:defaultSizeFor(slot),minSize:declared[slot]?.minSize??layoutState[slot].minSize,maxSize:declared[slot]?.maxSize??layoutState[slot].maxSize,collapsible:slot!==Slot.content&&(declared[slot]?.collapsible??!0)}));return React.createElement(PanelRegistryContext.Provider,{value:registry},React.createElement(LayoutPortalContext.Provider,{value:nodes},React.createElement(StyledLayout,{"data-ds-id":"Layout"},isSolo?soloSlot&&isShown(soloSlot)&&React.createElement(StyledSoloHost,{ref:hostRefs[soloSlot]}):panelItems.length>0&&React.createElement(Panel,{key:resolvedKey,panels:panelItems,persistenceKey:resolvedKey,storage:resolvedStorage,hostFor:id=>hostRefs[id],onResize:(id,size)=>panelCallbacks[id].resize(size),onCollapse:id=>panelCallbacks[id].hide()}),children)))};Layout.Provider=LayoutProvider,Layout.LeftPanel=LeftPanel,Layout.RightPanel=RightPanel,Layout.Content=Content,Layout.Split=Split;
|
|
1
|
+
import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import styled from"@emotion/styled";import{Panel}from"../Internal/Panel/Panel";import{LayoutFloat}from"../Internal/LayoutFloat/LayoutFloat";import{useBreakpoints}from"../../shared/useBreakpoints";import{PANEL_ORDER,PANEL_WIDTH_VAR,Slot}from"./-constants";import{useLayoutPanelsEnabled,useLayoutPersistence}from"./context";import{LayoutProvider}from"./LayoutProvider";import{Content}from"./Content/Content";import{RightPanel}from"./RightPanel/RightPanel";import{RightPanelHeader}from"./RightPanel/RightPanelHeader";import{RightPanelFooter}from"./RightPanel/RightPanelFooter";import{LeftPanel}from"./LeftPanel/LeftPanel";import{LeftPanelHeader}from"./LeftPanel/LeftPanelHeader";import{LeftPanelFooter}from"./LeftPanel/LeftPanelFooter";import{Split}from"./Split/Split";import{SplitHeader}from"./Split/SplitHeader";import{SplitFooter}from"./Split/SplitFooter";import{LayoutPortalContext,PanelRegistryContext,PanelPresenceContext,PanelAnimationContext}from"./registry";import{useFloatablePortalTargets}from"./useFloatablePortalTargets";import{useLayoutVar}from"./LayoutCssVars";import{useLayout}from"./useLayout";let useGlobalCssVariables=slotHosts=>{let contentWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.content),rightPanelWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.rightPanel);useEffect(()=>{let targets=[[Slot.content,contentWidthCssVar],[Slot.rightPanel,rightPanelWidthCssVar]],observers=[];return targets.forEach(([slot,handle])=>{let node=slotHosts[slot]??null;if(!node)return void handle.set("0px");let publishNodeWidth=()=>handle.set(`${node.getBoundingClientRect().width}px`);if(publishNodeWidth(),"undefined"==typeof ResizeObserver)return;let observer=new ResizeObserver(publishNodeWidth);observer.observe(node),observers.push(observer)}),()=>observers.forEach(observer=>observer.disconnect())},[contentWidthCssVar,rightPanelWidthCssVar,slotHosts])},StyledLayout=styled("div",{target:"e1exnax50",label:"StyledLayout"})({position:"relative",height:"100%",width:"100%"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9MYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHR5cGUgeyBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfSBmcm9tIFwicmVhY3QtcmVzaXphYmxlLXBhbmVsc1wiO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi4vSW50ZXJuYWwvUGFuZWwvUGFuZWxcIjtcbmltcG9ydCB0eXBlIHsgUGFuZWxJdGVtIH0gZnJvbSBcIi4uL0ludGVybmFsL1BhbmVsL1BhbmVsXCI7XG5pbXBvcnQgeyBMYXlvdXRGbG9hdCB9IGZyb20gXCIuLi9JbnRlcm5hbC9MYXlvdXRGbG9hdC9MYXlvdXRGbG9hdFwiO1xuaW1wb3J0IHsgdXNlQnJlYWtwb2ludHMgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZUJyZWFrcG9pbnRzXCI7XG5pbXBvcnQgeyBQQU5FTF9PUkRFUiwgUEFORUxfV0lEVEhfVkFSLCBTbG90IH0gZnJvbSBcIi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0UGFuZWxzRW5hYmxlZCwgdXNlTGF5b3V0UGVyc2lzdGVuY2UgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBMYXlvdXRQcm92aWRlciB9IGZyb20gXCIuL0xheW91dFByb3ZpZGVyXCI7XG5pbXBvcnQgeyBDb250ZW50IH0gZnJvbSBcIi4vQ29udGVudC9Db250ZW50XCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsXCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsSGVhZGVyIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsSGVhZGVyXCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsRm9vdGVyIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsRm9vdGVyXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWwgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWxIZWFkZXIgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsSGVhZGVyXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWxGb290ZXIgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsRm9vdGVyXCI7XG5pbXBvcnQgeyBTcGxpdCB9IGZyb20gXCIuL1NwbGl0L1NwbGl0XCI7XG5pbXBvcnQgeyBTcGxpdEhlYWRlciB9IGZyb20gXCIuL1NwbGl0L1NwbGl0SGVhZGVyXCI7XG5pbXBvcnQgeyBTcGxpdEZvb3RlciB9IGZyb20gXCIuL1NwbGl0L1NwbGl0Rm9vdGVyXCI7XG5pbXBvcnQge1xuICBMYXlvdXRQb3J0YWxDb250ZXh0LFxuICBQYW5lbFJlZ2lzdHJ5Q29udGV4dCxcbiAgUGFuZWxQcmVzZW5jZUNvbnRleHQsXG4gIFBhbmVsQW5pbWF0aW9uQ29udGV4dCxcbiAgdHlwZSBQb3J0YWxUYXJnZXRzLFxuICB0eXBlIFBhbmVsUmVnLFxuICB0eXBlIFBhbmVsUmVnaXN0cnksXG4gIHR5cGUgUGFuZWxQcmVzZW5jZSxcbiAgdHlwZSBQYW5lbEFuaW1hdGlvbkNvbnRyb2wsXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyB1c2VGbG9hdGFibGVQb3J0YWxUYXJnZXRzIH0gZnJvbSBcIi4vdXNlRmxvYXRhYmxlUG9ydGFsVGFyZ2V0c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0VmFyLCB0eXBlIExheW91dFZhckhhbmRsZSB9IGZyb20gXCIuL0xheW91dENzc1ZhcnNcIjtcbmltcG9ydCB7IHVzZUxheW91dCB9IGZyb20gXCIuL3VzZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRQcm9wcywgU2l6ZSwgU2xvdEtleSB9IGZyb20gXCIuLy10eXBlc1wiO1xuXG4vKipcbiAqIFB1Ymxpc2hlcyBlYWNoIHBhbmVsJ3MgbGl2ZSBwaXhlbCB3aWR0aCBhcyBhIGxheW91dCBDU1MgdmFyIChlLmcuXG4gKiBgLS1kcy1sYXlvdXQtcmlnaHRQYW5lbC13aWR0aGApLCB0cmFja2luZyBkcmFnLSBhbmQgd2luZG93LXJlc2l6ZXMuIEEgaGlkZGVuXG4gKiBwYXJ0IChubyBob3N0IG5vZGUpIHJlYWRzIGAwcHhgLCBzbyB0aGUgdmFyIGlzIGFsd2F5cyBkZWZpbmVkLiBPbmVcbiAqIGB1c2VMYXlvdXRWYXJgIHBlciBzbG90IGluIGBQQU5FTF9XSURUSF9WQVJgLlxuICovXG5jb25zdCB1c2VHbG9iYWxDc3NWYXJpYWJsZXMgPSAoc2xvdEhvc3RzOiBQb3J0YWxUYXJnZXRzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGNvbnRlbnRXaWR0aENzc1ZhciA9IHVzZUxheW91dFZhcihQQU5FTF9XSURUSF9WQVIuY29udGVudCk7XG4gIGNvbnN0IHJpZ2h0UGFuZWxXaWR0aENzc1ZhciA9IHVzZUxheW91dFZhcihQQU5FTF9XSURUSF9WQVIucmlnaHRQYW5lbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXRzOiBbU2xvdEtleSwgTGF5b3V0VmFySGFuZGxlXVtdID0gW1xuICAgICAgW1Nsb3QuY29udGVudCwgY29udGVudFdpZHRoQ3NzVmFyXSxcbiAgICAgIFtTbG90LnJpZ2h0UGFuZWwsIHJpZ2h0UGFuZWxXaWR0aENzc1Zhcl0sXG4gICAgXTtcbiAgICBjb25zdCBvYnNlcnZlcnM6IFJlc2l6ZU9ic2VydmVyW10gPSBbXTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgoW3Nsb3QsIGhhbmRsZV0pID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBzbG90SG9zdHNbc2xvdF0gPz8gbnVsbDtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBoYW5kbGUuc2V0KFwiMHB4XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBwdWJsaXNoTm9kZVdpZHRoID0gKCk6IHZvaWQgPT5cbiAgICAgICAgaGFuZGxlLnNldChgJHtub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofXB4YCk7XG4gICAgICBwdWJsaXNoTm9kZVdpZHRoKCk7XG4gICAgICAvLyBqc2RvbSAoYW5kIG9sZCBicm93c2VycykgbGFjayBSZXNpemVPYnNlcnZlciDigJQgc2tpcCBsaXZlIHRyYWNraW5nIHRoZXJlLlxuICAgICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocHVibGlzaE5vZGVXaWR0aCk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUpO1xuICAgICAgb2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVycy5mb3JFYWNoKChvYnNlcnZlcikgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcbiAgfSwgW2NvbnRlbnRXaWR0aENzc1ZhciwgcmlnaHRQYW5lbFdpZHRoQ3NzVmFyLCBzbG90SG9zdHNdKTtcbn07XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBMYXlvdXQgLSByZWdpc3RyeSArIGhvc3RzOyBtYXJrZXJzIGRlY2xhcmUvcG9ydGFsOyB0aGUgcmVzaXphYmxlIHBhbmVsIHJvdyAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBTdHlsZWRMYXlvdXQgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxufSk7XG5cbi8vIFNvbG8tbW9kZSBob3N0OiBhIGxvbmUgcGFuZWwgKG5vIHJlc2l6YWJsZSBzaWJsaW5nKSBpcyBob3N0ZWQgaGVyZSBpbnN0ZWFkIG9mXG4vLyBpbnNpZGUgcmVhY3QtcmVzaXphYmxlLXBhbmVscy4gTWF0Y2hlcyB0aGUgcGVyLXBhbmVsIGhvc3QgdGhlIEdyb3VwIHJlbmRlcnNcbi8vIChgcmVsYXRpdmVgICsgZnVsbC1ibGVlZCkgc28gY29udGVudCByZWZsb3dzL3Njcm9sbHMgaWRlbnRpY2FsbHkgZWl0aGVyIHdheS5cbmNvbnN0IFN0eWxlZFNvbG9Ib3N0ID0gc3R5bGVkLmRpdih7XG4gIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHdpZHRoOiBcIjEwMCVcIixcbn0pO1xuXG5mdW5jdGlvbiBMYXlvdXRCYXNlKHtcbiAgY2hpbGRyZW4sXG4gIHBlcnNpc3RlbmNlS2V5LFxuICBzdG9yYWdlLFxufTogTGF5b3V0UHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICBjb25zdCBbZGVjbGFyZWQsIHNldERlY2xhcmVkXSA9IHVzZVN0YXRlPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIFBhbmVsUmVnPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHsgc3RhdGU6IGxheW91dFN0YXRlLCAuLi5wYW5lbENhbGxiYWNrcyB9ID0gdXNlTGF5b3V0KCk7XG4gIGNvbnN0IHBlcnNpc3RlbmNlID0gdXNlTGF5b3V0UGVyc2lzdGVuY2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRLZXkgPSBwZXJzaXN0ZW5jZUtleSA/PyBwZXJzaXN0ZW5jZS5wZXJzaXN0ZW5jZUtleTtcbiAgY29uc3QgcmVzb2x2ZWRTdG9yYWdlID0gc3RvcmFnZSA/PyBwZXJzaXN0ZW5jZS5zdG9yYWdlO1xuXG4gIC8vIEJlbG93IHRoZSBtb2JpbGUgYnJlYWtwb2ludCB0aGUgcmlnaHRQYW5lbCByZW5kZXJzIGFzIGEgYm90dG9tIHNoZWV0IChpdHNcbiAgLy8gbWFya2VyIHJlbmRlcnMgdGhlIFNoZWV0IGl0c2VsZikgLSBhbiBhdXRvbWF0aWMsIHJlbmRlci1sZXZlbCBhZGFwdGF0aW9uLlxuICAvLyBUaGUgc3RvcmVkIHZhcmlhbnQgaXMgdW50b3VjaGVkLCBzbyByZXNpemluZyBiYWNrIHRvIGRlc2t0b3AgcmVzdG9yZXMgdGhlXG4gIC8vIGV4YWN0IHByZXNlbnRhdGlvbiAoZG9ja2VkIG9yIGZsb2F0aW5nKSB0aGUgdXNlciBsZWZ0LlxuICBjb25zdCB7IGlzTW9iaWxlIH0gPSB1c2VCcmVha3BvaW50cygpO1xuICBjb25zdCBpc1JpZ2h0UGFuZWxTaGVldCA9IGlzTW9iaWxlO1xuXG4gIC8vIEEgZmxvYXRpbmcgcmlnaHRQYW5lbCBzdGF5cyB2aXNpYmxlIChpdHMgbWFya2VyIGtlZXBzIHJlbmRlcmluZyBjb250ZW50KVxuICAvLyBidXQgbGVhdmVzIHRoZSByZXNpemFibGUgcm93IC0gZXhhY3RseSBsaWtlIGEgaGlkZGVuIHBhbmVsIGRvZXMuIFRoZVxuICAvLyBtb2JpbGUgc2hlZXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBmbG9hdGluZyB3aW5kb3cuIEZsb2F0IGlzIGFcbiAgLy8gZGVza3RvcCBwcmVzZW50YXRpb24sIHNvIG9ubHkgbW9kZSBgdHJ1ZWAgZW5hYmxlcyBpdC5cbiAgY29uc3QgcGFuZWxzRW5hYmxlZCA9IHVzZUxheW91dFBhbmVsc0VuYWJsZWQoKTtcbiAgY29uc3QgaXNSaWdodFBhbmVsRmxvYXRpbmcgPVxuICAgIHBhbmVsc0VuYWJsZWQgPT09IHRydWUgJiZcbiAgICAhaXNSaWdodFBhbmVsU2hlZXQgJiZcbiAgICBsYXlvdXRTdGF0ZVtTbG90LnJpZ2h0UGFuZWxdLnZhcmlhbnQgPT09IFwiZmxvYXRcIjtcblxuICBjb25zdCBpc1Nob3duID0gKHNsb3Q6IFNsb3RLZXkpOiBib29sZWFuID0+XG4gICAgbGF5b3V0U3RhdGVbc2xvdF0udmlzaWJsZSAmJlxuICAgICEoc2xvdCA9PT0gU2xvdC5yaWdodFBhbmVsICYmIChpc1JpZ2h0UGFuZWxGbG9hdGluZyB8fCBpc1JpZ2h0UGFuZWxTaGVldCkpO1xuXG4gIC8vIFNsb3RzIGtlcHQgbW91bnRlZCB0aHJvdWdoIHRoZWlyIGV4aXQgYW5pbWF0aW9uIChyZXBvcnRlZCB2aWFcbiAgLy8gYHVzZVBhbmVsUHJlc2VuY2VgKS4gQSBwcmVzZW50LWJ1dC1oaWRkZW4gc2xvdCBzdGF5cyBpbiB0aGUgcm93IHNvIGl0c1xuICAvLyBjbG9zZSBhbmltYXRpb24gY2FuIHBsYXk7IGl0J3MgcmVtb3ZlZCBvbmNlIHByZXNlbmNlIGZsaXBzIGZhbHNlLlxuICBjb25zdCBbcHJlc2VudCwgc2V0UHJlc2VudF0gPSB1c2VTdGF0ZTxQYXJ0aWFsPFJlY29yZDxTbG90S2V5LCBib29sZWFuPj4+KHt9KTtcbiAgY29uc3QgcHJlc2VuY2UgPSB1c2VNZW1vPFBhbmVsUHJlc2VuY2U+KFxuICAgICgpID0+ICh7XG4gICAgICBzZXRQcmVzZW50OiAoc2xvdCwgaXNQcmVzZW50KSA9PlxuICAgICAgICBzZXRQcmVzZW50KChwcmV2KSA9PlxuICAgICAgICAgIHByZXZbc2xvdF0gPT09IGlzUHJlc2VudCA/IHByZXYgOiB7IC4uLnByZXYsIFtzbG90XTogaXNQcmVzZW50IH1cbiAgICAgICAgKSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIC8vIEFuaW1hdGlvbiBjb250cm9sIGZvciB0aGUgZG9ja2VkIHNpZGUgcGFuZWxzJyBvcGVuL2Nsb3NlIHdpZHRoIHNsaWRlLiBBbGxcbiAgLy8gcmVmLWJhc2VkIG9uIHB1cnBvc2U6IHJlZ2lzdGVyaW5nIGhhbmRsZXMvZWxlbWVudHMgYW5kIHRvZ2dsaW5nIHN1cHByZXNzaW9uXG4gIC8vIGhhcHBlbiBkdXJpbmcgY29tbWl0cyBhbmQgcGVyLWZyYW1lIC0gbm9uZSBvZiBpdCBtYXkgcmUtcmVuZGVyIHRoZSBMYXlvdXQuXG4gIGNvbnN0IHBhbmVsSGFuZGxlcyA9IHVzZVJlZjxcbiAgICBQYXJ0aWFsPFJlY29yZDxTbG90S2V5LCBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfCBudWxsPj5cbiAgPih7fSk7XG4gIGNvbnN0IHBhbmVsRWxlbWVudHMgPSB1c2VSZWY8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgSFRNTEVsZW1lbnQgfCBudWxsPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHJlc2l6ZVN1cHByZXNzZWQgPSB1c2VSZWY8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgYm9vbGVhbj4+Pih7fSk7XG4gIGNvbnN0IGFuaW1hdGlvbkNvbnRyb2wgPSB1c2VNZW1vPFBhbmVsQW5pbWF0aW9uQ29udHJvbD4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHNldEhhbmRsZTogKHNsb3QsIGhhbmRsZSkgPT4ge1xuICAgICAgICBwYW5lbEhhbmRsZXMuY3VycmVudFtzbG90XSA9IGhhbmRsZTtcbiAgICAgIH0sXG4gICAgICBnZXRIYW5kbGU6IChzbG90KSA9PiBwYW5lbEhhbmRsZXMuY3VycmVudFtzbG90XSA/PyBudWxsLFxuICAgICAgc2V0RWxlbWVudDogKHNsb3QsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgcGFuZWxFbGVtZW50cy5jdXJyZW50W3Nsb3RdID0gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgICBnZXRFbGVtZW50OiAoc2xvdCkgPT4gcGFuZWxFbGVtZW50cy5jdXJyZW50W3Nsb3RdID8/IG51bGwsXG4gICAgICBzZXRSZXNpemVTdXBwcmVzc2VkOiAoc2xvdCwgc3VwcHJlc3NlZCkgPT4ge1xuICAgICAgICByZXNpemVTdXBwcmVzc2VkLmN1cnJlbnRbc2xvdF0gPSBzdXBwcmVzc2VkO1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuICAvLyBTdGFibGUgcGVyLXNsb3QgcmVmIGNhbGxiYWNrcyAtIGEgZnJlc2ggY2FsbGJhY2sgaWRlbnRpdHkgcGVyIHJlbmRlciB3b3VsZFxuICAvLyBtYWtlIFJlYWN0IGRldGFjaC9yZWF0dGFjaCB0aGUgcmVmcyBvbiBldmVyeSBMYXlvdXQgcmUtcmVuZGVyLlxuICBjb25zdCBwYW5lbFJlZkNhbGxiYWNrcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNhbGxiYWNrcyA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICAoaGFuZGxlOiBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfCBudWxsKSA9PiB2b2lkXG4gICAgPigpO1xuICAgIGNvbnN0IGVsZW1lbnRDYWxsYmFja3MgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgKGVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4gdm9pZFxuICAgID4oKTtcbiAgICByZXR1cm4ge1xuICAgICAgaGFuZGxlRm9yOiAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgY2FsbGJhY2sgPSBoYW5kbGVDYWxsYmFja3MuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrID0gKGhhbmRsZSkgPT5cbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2wuc2V0SGFuZGxlKGlkIGFzIFNsb3RLZXksIGhhbmRsZSk7XG4gICAgICAgICAgaGFuZGxlQ2FsbGJhY2tzLnNldChpZCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICAgIH0sXG4gICAgICBlbGVtZW50Rm9yOiAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgY2FsbGJhY2sgPSBlbGVtZW50Q2FsbGJhY2tzLmdldChpZCk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayA9IChlbGVtZW50KSA9PlxuICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbC5zZXRFbGVtZW50KGlkIGFzIFNsb3RLZXksIGVsZW1lbnQpO1xuICAgICAgICAgIGVsZW1lbnRDYWxsYmFja3Muc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgICAgfSxcbiAgICB9O1xuICB9LCBbYW5pbWF0aW9uQ29udHJvbF0pO1xuICBjb25zdCBzaG91bGRTdXBwcmVzc0xheW91dENhbGxiYWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKCkgPT4gT2JqZWN0LnZhbHVlcyhyZXNpemVTdXBwcmVzc2VkLmN1cnJlbnQpLnNvbWUoQm9vbGVhbiksXG4gICAgW11cbiAgKTtcblxuICBjb25zdCByZWdpc3RyeSA9IHVzZU1lbW88UGFuZWxSZWdpc3RyeT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHJlZ2lzdGVyOiAoc2xvdCwgcmVnKSA9PlxuICAgICAgICBzZXREZWNsYXJlZCgocHJldikgPT4gKHsgLi4ucHJldiwgW3Nsb3RdOiByZWcgfSkpLFxuICAgICAgdW5yZWdpc3RlcjogKHNsb3QpID0+XG4gICAgICAgIHNldERlY2xhcmVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgaWYgKCEoc2xvdCBpbiBwcmV2KSkgcmV0dXJuIHByZXY7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xuICAgICAgICAgIGRlbGV0ZSBuZXh0W3Nsb3RdO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9KSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IHsgcG9ydGFsVGFyZ2V0cywgc2xvdEhvc3RzLCBzbG90SG9zdFJlZnMsIGZsb2F0SG9zdFJlZiB9ID1cbiAgICB1c2VGbG9hdGFibGVQb3J0YWxUYXJnZXRzKHtcbiAgICAgIHNsb3RzOiBQQU5FTF9PUkRFUixcbiAgICAgIGZsb2F0YWJsZVNsb3Q6IFNsb3QucmlnaHRQYW5lbCxcbiAgICAgIGlzRmxvYXRpbmc6IGlzUmlnaHRQYW5lbEZsb2F0aW5nLFxuICAgIH0pO1xuXG4gIHVzZUdsb2JhbENzc1ZhcmlhYmxlcyhzbG90SG9zdHMpO1xuXG4gIC8vIFBhbmVscyB0aGF0IGV4aXN0IGluIHRoZSBsYXlvdXQsIHJlZ2FyZGxlc3Mgb2YgdmlzaWJpbGl0eS4gRHJpdmVzIHRoZVxuICAvLyBzb2xvLXZzLXJlc2l6YWJsZSBkZWNpc2lvbiBiZWxvdyAtIGtleWVkIG9uIERFQ0xBUkVEIChub3Qgc2hvd24pIHNvIHRoYXRcbiAgLy8gc2hvd2luZy9oaWRpbmcgYSBwYW5lbCBuZXZlciBmbGlwcyB0aGUgbW9kZS5cbiAgY29uc3QgZGVjbGFyZWRTbG90cyA9IFBBTkVMX09SREVSLmZpbHRlcigoc2xvdCkgPT4gZGVjbGFyZWRbc2xvdF0pO1xuXG4gIC8vIFNvbG8gbW9kZTogYSBzaW5nbGUgcGFuZWwgaXMgZGVjbGFyZWQgKGUuZy4ganVzdCBgQ29udGVudGAsIHdpdGggbm9cbiAgLy8gUmlnaHRQYW5lbC9MZWZ0UGFuZWwvU3BsaXQgaW4gdGhlIHRyZWUpIC0gbm90aGluZyB0byByZXNpemUgYWdhaW5zdCwgc28gaG9zdFxuICAvLyBpdCBpbiBhIHBsYWluIGRpdiBhbmQgc2tpcCByZWFjdC1yZXNpemFibGUtcGFuZWxzIGVudGlyZWx5LiBCZWNhdXNlIHRoZVxuICAvLyBjaGVjayBpcyBvbiBERUNMQVJFRCBwYW5lbHMsIHRvZ2dsaW5nIGEgKmRlY2xhcmVkKiBwYW5lbCdzIHZpc2liaWxpdHkga2VlcHNcbiAgLy8gdGhlIG1vZGUgc3RhYmxlLCBzbyBgQ29udGVudGAgaXMgbmV2ZXIgcmVtb3VudGVkIGJ5IGEgc2hvdy9oaWRlLiBUaGUgbW9kZVxuICAvLyBvbmx5IGZsaXBzIHdoZW4gYSBwYW5lbCBtYXJrZXIgaXMgYWRkZWQgdG8gLyByZW1vdmVkIGZyb20gdGhlIHRyZWUgKGFcbiAgLy8gc3RydWN0dXJhbCBjaGFuZ2UpLCB3aGVyZSBhIG9uZS10aW1lIHJlbW91bnQgaXMgYWNjZXB0YWJsZS5cbiAgY29uc3QgaXNTb2xvID0gZGVjbGFyZWRTbG90cy5sZW5ndGggPD0gMTtcbiAgY29uc3Qgc29sb1Nsb3QgPSBkZWNsYXJlZFNsb3RzWzBdO1xuXG4gIC8vIGNvbnRlbnQgZmxleGVzIChubyBmaXhlZCBzaXplKTsgb3RoZXJzIHVzZSB0aGUgZGVjbGFyZWQgZGVmYXVsdCwgZmFsbGluZ1xuICAvLyBiYWNrIHRvIHRoZSBwZXJzaXN0ZWQvY29uZmlnIHNpemUuXG4gIGNvbnN0IGRlZmF1bHRTaXplRm9yID0gKHNsb3Q6IFNsb3RLZXkpOiBTaXplIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAoc2xvdCA9PT0gU2xvdC5jb250ZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBkZWNsYXJlZFtzbG90XT8uZGVmYXVsdFNpemUgPz8gbGF5b3V0U3RhdGVbc2xvdF0uc2l6ZTtcbiAgfTtcblxuICAvLyBPbmx5IHRoZSBwYW5lbHMgdGhhdCBhcmUgZGVjbGFyZWQgQU5EIChjdXJyZW50bHkgc2hvd24gT1IgbWlkLWV4aXQpLiBBXG4gIC8vIGhpZGRlbi1idXQtcHJlc2VudCBzbG90IGxpbmdlcnMgc28gaXRzIGNsb3NlIGFuaW1hdGlvbiBjYW4gcGxheTsgb3RoZXJ3aXNlXG4gIC8vIGNsb3NlZCBwYW5lbHMgcmVzZXJ2ZSBubyBzcGFjZS5cbiAgY29uc3QgcGFuZWxJdGVtczogUGFuZWxJdGVtW10gPSBQQU5FTF9PUkRFUi5maWx0ZXIoXG4gICAgKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdICYmIChpc1Nob3duKHNsb3QpIHx8IHByZXNlbnRbc2xvdF0pXG4gICkubWFwKChzbG90KSA9PiAoe1xuICAgIGlkOiBzbG90LFxuICAgIGRlZmF1bHRTaXplOiBkZWZhdWx0U2l6ZUZvcihzbG90KSxcbiAgICBtaW5TaXplOiBkZWNsYXJlZFtzbG90XT8ubWluU2l6ZSA/PyBsYXlvdXRTdGF0ZVtzbG90XS5taW5TaXplLFxuICAgIG1heFNpemU6IGRlY2xhcmVkW3Nsb3RdPy5tYXhTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLm1heFNpemUsXG4gICAgY29sbGFwc2libGU6IHNsb3QgIT09IFNsb3QuY29udGVudCAmJiAoZGVjbGFyZWRbc2xvdF0/LmNvbGxhcHNpYmxlID8/IHRydWUpLFxuICB9KSk7XG5cbiAgLy8gU29sbyBtb2RlIGhvc3RzIHRoZSBsb25lIHBhbmVsIGluIGEgcGxhaW4gZGl2LCBubyByZXNpemFibGUgR3JvdXAuIEEgaGlkZGVuXG4gIC8vIGxvbmUgcGFuZWwgcmVuZGVycyBub3RoaW5nIChDb250ZW50IGlzIGFsd2F5cyBzaG93bikuXG4gIGNvbnN0IHNvbG9Ib3N0ID1cbiAgICBzb2xvU2xvdCAmJiBpc1Nob3duKHNvbG9TbG90KSA/IChcbiAgICAgIDxTdHlsZWRTb2xvSG9zdCByZWY9e3Nsb3RIb3N0UmVmc1tzb2xvU2xvdF19IC8+XG4gICAgKSA6IG51bGw7XG5cbiAgLy8gVGhlIHJlc2l6YWJsZSBHcm91cC4gYGtleWAgPSB0aGUgcGVyc2lzdGVuY2UgbmFtZXNwYWNlOiByZWFjdC1yZXNpemFibGUtcGFuZWxzXG4gIC8vIHJlYWRzIHN0b3JlZCBzaXplcyBvbmx5IG9uIG1vdW50LCBzbyByZW1vdW50IHdoZW4gdGhlIGtleSBjaGFuZ2VzIHRvIGxvYWRcbiAgLy8gdGhhdCBpbnN0YW5jZSdzIHNpemVzIChwZXItcm91dGUgc2l6ZSBtZW1vcnkpLiBUaGUga2V5IG5ldmVyIGNoYW5nZXMgb25cbiAgLy8gcGFuZWwgb3Blbi9jbG9zZSwgc28gbm9ybWFsIHRvZ2dsaW5nIHN0YXlzIHJlbW91bnQtZnJlZS5cbiAgY29uc3QgcGFuZWxHcm91cCA9XG4gICAgcGFuZWxJdGVtcy5sZW5ndGggPiAwID8gKFxuICAgICAgPFBhbmVsXG4gICAgICAgIGtleT17cmVzb2x2ZWRLZXl9XG4gICAgICAgIHBhbmVscz17cGFuZWxJdGVtc31cbiAgICAgICAgcGVyc2lzdGVuY2VLZXk9e3Jlc29sdmVkS2V5fVxuICAgICAgICBzdG9yYWdlPXtyZXNvbHZlZFN0b3JhZ2V9XG4gICAgICAgIGhvc3RGb3I9eyhpZCkgPT4gc2xvdEhvc3RSZWZzW2lkIGFzIFNsb3RLZXldfVxuICAgICAgICBvblJlc2l6ZT17KGlkLCBzaXplKSA9PiBwYW5lbENhbGxiYWNrc1tpZCBhcyBTbG90S2V5XS5yZXNpemUoc2l6ZSl9XG4gICAgICAgIG9uQ29sbGFwc2U9eyhpZCkgPT4gcGFuZWxDYWxsYmFja3NbaWQgYXMgU2xvdEtleV0uaGlkZSgpfVxuICAgICAgICBwYW5lbEhhbmRsZUZvcj17cGFuZWxSZWZDYWxsYmFja3MuaGFuZGxlRm9yfVxuICAgICAgICBwYW5lbEVsZW1lbnRGb3I9e3BhbmVsUmVmQ2FsbGJhY2tzLmVsZW1lbnRGb3J9XG4gICAgICAgIHNob3VsZFN1cHByZXNzTGF5b3V0Q2FsbGJhY2s9e3Nob3VsZFN1cHByZXNzTGF5b3V0Q2FsbGJhY2t9XG4gICAgICAvPlxuICAgICkgOiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsUmVnaXN0cnlDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtyZWdpc3RyeX0+XG4gICAgICA8UGFuZWxQcmVzZW5jZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ByZXNlbmNlfT5cbiAgICAgICAgPFBhbmVsQW5pbWF0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YW5pbWF0aW9uQ29udHJvbH0+XG4gICAgICAgICAgPExheW91dFBvcnRhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3BvcnRhbFRhcmdldHN9PlxuICAgICAgICAgICAgPFN0eWxlZExheW91dCBkYXRhLWRzLWlkPVwiTGF5b3V0XCI+XG4gICAgICAgICAgICAgIHtpc1NvbG8gPyBzb2xvSG9zdCA6IHBhbmVsR3JvdXB9XG4gICAgICAgICAgICAgIHtpc1JpZ2h0UGFuZWxGbG9hdGluZyAmJiBsYXlvdXRTdGF0ZVtTbG90LnJpZ2h0UGFuZWxdLnZpc2libGUgJiYgKFxuICAgICAgICAgICAgICAgIDxMYXlvdXRGbG9hdCBob3N0UmVmPXtmbG9hdEhvc3RSZWZ9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDwvU3R5bGVkTGF5b3V0PlxuICAgICAgICAgIDwvTGF5b3V0UG9ydGFsQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9QYW5lbEFuaW1hdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L1BhbmVsUHJlc2VuY2VDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvUGFuZWxSZWdpc3RyeUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBQdWJsaWMgTGF5b3V0IC0gdGhlIHJlc2l6YWJsZSBwYW5lbCByb3cgKyBjb21wb3VuZCBwYXJ0cyBhcyBzdGF0aWNzICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbnR5cGUgTGF5b3V0Q29tcG9uZW50ID0gdHlwZW9mIExheW91dEJhc2UgJiB7XG4gIFByb3ZpZGVyOiB0eXBlb2YgTGF5b3V0UHJvdmlkZXI7XG4gIExlZnRQYW5lbDogdHlwZW9mIExlZnRQYW5lbDtcbiAgTGVmdFBhbmVsSGVhZGVyOiB0eXBlb2YgTGVmdFBhbmVsSGVhZGVyO1xuICBMZWZ0UGFuZWxGb290ZXI6IHR5cGVvZiBMZWZ0UGFuZWxGb290ZXI7XG4gIFJpZ2h0UGFuZWw6IHR5cGVvZiBSaWdodFBhbmVsO1xuICBSaWdodFBhbmVsSGVhZGVyOiB0eXBlb2YgUmlnaHRQYW5lbEhlYWRlcjtcbiAgUmlnaHRQYW5lbEZvb3RlcjogdHlwZW9mIFJpZ2h0UGFuZWxGb290ZXI7XG4gIENvbnRlbnQ6IHR5cGVvZiBDb250ZW50O1xuICBTcGxpdDogdHlwZW9mIFNwbGl0O1xuICBTcGxpdEhlYWRlcjogdHlwZW9mIFNwbGl0SGVhZGVyO1xuICBTcGxpdEZvb3RlcjogdHlwZW9mIFNwbGl0Rm9vdGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IExheW91dCA9IExheW91dEJhc2UgYXMgTGF5b3V0Q29tcG9uZW50O1xuXG5MYXlvdXQuUHJvdmlkZXIgPSBMYXlvdXRQcm92aWRlcjtcbkxheW91dC5MZWZ0UGFuZWwgPSBMZWZ0UGFuZWw7XG5MYXlvdXQuTGVmdFBhbmVsSGVhZGVyID0gTGVmdFBhbmVsSGVhZGVyO1xuTGF5b3V0LkxlZnRQYW5lbEZvb3RlciA9IExlZnRQYW5lbEZvb3RlcjtcbkxheW91dC5SaWdodFBhbmVsID0gUmlnaHRQYW5lbDtcbkxheW91dC5SaWdodFBhbmVsSGVhZGVyID0gUmlnaHRQYW5lbEhlYWRlcjtcbkxheW91dC5SaWdodFBhbmVsRm9vdGVyID0gUmlnaHRQYW5lbEZvb3RlcjtcbkxheW91dC5Db250ZW50ID0gQ29udGVudDtcbkxheW91dC5TcGxpdCA9IFNwbGl0O1xuTGF5b3V0LlNwbGl0SGVhZGVyID0gU3BsaXRIZWFkZXI7XG5MYXlvdXQuU3BsaXRGb290ZXIgPSBTcGxpdEZvb3RlcjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtRnFCIn0= */"),StyledSoloHost=styled("div",{target:"e1exnax51",label:"StyledSoloHost"})({position:"relative",height:"100%",width:"100%"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9MYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHR5cGUgeyBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfSBmcm9tIFwicmVhY3QtcmVzaXphYmxlLXBhbmVsc1wiO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi4vSW50ZXJuYWwvUGFuZWwvUGFuZWxcIjtcbmltcG9ydCB0eXBlIHsgUGFuZWxJdGVtIH0gZnJvbSBcIi4uL0ludGVybmFsL1BhbmVsL1BhbmVsXCI7XG5pbXBvcnQgeyBMYXlvdXRGbG9hdCB9IGZyb20gXCIuLi9JbnRlcm5hbC9MYXlvdXRGbG9hdC9MYXlvdXRGbG9hdFwiO1xuaW1wb3J0IHsgdXNlQnJlYWtwb2ludHMgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3VzZUJyZWFrcG9pbnRzXCI7XG5pbXBvcnQgeyBQQU5FTF9PUkRFUiwgUEFORUxfV0lEVEhfVkFSLCBTbG90IH0gZnJvbSBcIi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0UGFuZWxzRW5hYmxlZCwgdXNlTGF5b3V0UGVyc2lzdGVuY2UgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBMYXlvdXRQcm92aWRlciB9IGZyb20gXCIuL0xheW91dFByb3ZpZGVyXCI7XG5pbXBvcnQgeyBDb250ZW50IH0gZnJvbSBcIi4vQ29udGVudC9Db250ZW50XCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsXCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsSGVhZGVyIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsSGVhZGVyXCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsRm9vdGVyIH0gZnJvbSBcIi4vUmlnaHRQYW5lbC9SaWdodFBhbmVsRm9vdGVyXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWwgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWxIZWFkZXIgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsSGVhZGVyXCI7XG5pbXBvcnQgeyBMZWZ0UGFuZWxGb290ZXIgfSBmcm9tIFwiLi9MZWZ0UGFuZWwvTGVmdFBhbmVsRm9vdGVyXCI7XG5pbXBvcnQgeyBTcGxpdCB9IGZyb20gXCIuL1NwbGl0L1NwbGl0XCI7XG5pbXBvcnQgeyBTcGxpdEhlYWRlciB9IGZyb20gXCIuL1NwbGl0L1NwbGl0SGVhZGVyXCI7XG5pbXBvcnQgeyBTcGxpdEZvb3RlciB9IGZyb20gXCIuL1NwbGl0L1NwbGl0Rm9vdGVyXCI7XG5pbXBvcnQge1xuICBMYXlvdXRQb3J0YWxDb250ZXh0LFxuICBQYW5lbFJlZ2lzdHJ5Q29udGV4dCxcbiAgUGFuZWxQcmVzZW5jZUNvbnRleHQsXG4gIFBhbmVsQW5pbWF0aW9uQ29udGV4dCxcbiAgdHlwZSBQb3J0YWxUYXJnZXRzLFxuICB0eXBlIFBhbmVsUmVnLFxuICB0eXBlIFBhbmVsUmVnaXN0cnksXG4gIHR5cGUgUGFuZWxQcmVzZW5jZSxcbiAgdHlwZSBQYW5lbEFuaW1hdGlvbkNvbnRyb2wsXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyB1c2VGbG9hdGFibGVQb3J0YWxUYXJnZXRzIH0gZnJvbSBcIi4vdXNlRmxvYXRhYmxlUG9ydGFsVGFyZ2V0c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0VmFyLCB0eXBlIExheW91dFZhckhhbmRsZSB9IGZyb20gXCIuL0xheW91dENzc1ZhcnNcIjtcbmltcG9ydCB7IHVzZUxheW91dCB9IGZyb20gXCIuL3VzZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRQcm9wcywgU2l6ZSwgU2xvdEtleSB9IGZyb20gXCIuLy10eXBlc1wiO1xuXG4vKipcbiAqIFB1Ymxpc2hlcyBlYWNoIHBhbmVsJ3MgbGl2ZSBwaXhlbCB3aWR0aCBhcyBhIGxheW91dCBDU1MgdmFyIChlLmcuXG4gKiBgLS1kcy1sYXlvdXQtcmlnaHRQYW5lbC13aWR0aGApLCB0cmFja2luZyBkcmFnLSBhbmQgd2luZG93LXJlc2l6ZXMuIEEgaGlkZGVuXG4gKiBwYXJ0IChubyBob3N0IG5vZGUpIHJlYWRzIGAwcHhgLCBzbyB0aGUgdmFyIGlzIGFsd2F5cyBkZWZpbmVkLiBPbmVcbiAqIGB1c2VMYXlvdXRWYXJgIHBlciBzbG90IGluIGBQQU5FTF9XSURUSF9WQVJgLlxuICovXG5jb25zdCB1c2VHbG9iYWxDc3NWYXJpYWJsZXMgPSAoc2xvdEhvc3RzOiBQb3J0YWxUYXJnZXRzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGNvbnRlbnRXaWR0aENzc1ZhciA9IHVzZUxheW91dFZhcihQQU5FTF9XSURUSF9WQVIuY29udGVudCk7XG4gIGNvbnN0IHJpZ2h0UGFuZWxXaWR0aENzc1ZhciA9IHVzZUxheW91dFZhcihQQU5FTF9XSURUSF9WQVIucmlnaHRQYW5lbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXRzOiBbU2xvdEtleSwgTGF5b3V0VmFySGFuZGxlXVtdID0gW1xuICAgICAgW1Nsb3QuY29udGVudCwgY29udGVudFdpZHRoQ3NzVmFyXSxcbiAgICAgIFtTbG90LnJpZ2h0UGFuZWwsIHJpZ2h0UGFuZWxXaWR0aENzc1Zhcl0sXG4gICAgXTtcbiAgICBjb25zdCBvYnNlcnZlcnM6IFJlc2l6ZU9ic2VydmVyW10gPSBbXTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgoW3Nsb3QsIGhhbmRsZV0pID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBzbG90SG9zdHNbc2xvdF0gPz8gbnVsbDtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBoYW5kbGUuc2V0KFwiMHB4XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBwdWJsaXNoTm9kZVdpZHRoID0gKCk6IHZvaWQgPT5cbiAgICAgICAgaGFuZGxlLnNldChgJHtub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofXB4YCk7XG4gICAgICBwdWJsaXNoTm9kZVdpZHRoKCk7XG4gICAgICAvLyBqc2RvbSAoYW5kIG9sZCBicm93c2VycykgbGFjayBSZXNpemVPYnNlcnZlciDigJQgc2tpcCBsaXZlIHRyYWNraW5nIHRoZXJlLlxuICAgICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocHVibGlzaE5vZGVXaWR0aCk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUpO1xuICAgICAgb2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVycy5mb3JFYWNoKChvYnNlcnZlcikgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcbiAgfSwgW2NvbnRlbnRXaWR0aENzc1ZhciwgcmlnaHRQYW5lbFdpZHRoQ3NzVmFyLCBzbG90SG9zdHNdKTtcbn07XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBMYXlvdXQgLSByZWdpc3RyeSArIGhvc3RzOyBtYXJrZXJzIGRlY2xhcmUvcG9ydGFsOyB0aGUgcmVzaXphYmxlIHBhbmVsIHJvdyAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBTdHlsZWRMYXlvdXQgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxufSk7XG5cbi8vIFNvbG8tbW9kZSBob3N0OiBhIGxvbmUgcGFuZWwgKG5vIHJlc2l6YWJsZSBzaWJsaW5nKSBpcyBob3N0ZWQgaGVyZSBpbnN0ZWFkIG9mXG4vLyBpbnNpZGUgcmVhY3QtcmVzaXphYmxlLXBhbmVscy4gTWF0Y2hlcyB0aGUgcGVyLXBhbmVsIGhvc3QgdGhlIEdyb3VwIHJlbmRlcnNcbi8vIChgcmVsYXRpdmVgICsgZnVsbC1ibGVlZCkgc28gY29udGVudCByZWZsb3dzL3Njcm9sbHMgaWRlbnRpY2FsbHkgZWl0aGVyIHdheS5cbmNvbnN0IFN0eWxlZFNvbG9Ib3N0ID0gc3R5bGVkLmRpdih7XG4gIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHdpZHRoOiBcIjEwMCVcIixcbn0pO1xuXG5mdW5jdGlvbiBMYXlvdXRCYXNlKHtcbiAgY2hpbGRyZW4sXG4gIHBlcnNpc3RlbmNlS2V5LFxuICBzdG9yYWdlLFxufTogTGF5b3V0UHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICBjb25zdCBbZGVjbGFyZWQsIHNldERlY2xhcmVkXSA9IHVzZVN0YXRlPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIFBhbmVsUmVnPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHsgc3RhdGU6IGxheW91dFN0YXRlLCAuLi5wYW5lbENhbGxiYWNrcyB9ID0gdXNlTGF5b3V0KCk7XG4gIGNvbnN0IHBlcnNpc3RlbmNlID0gdXNlTGF5b3V0UGVyc2lzdGVuY2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRLZXkgPSBwZXJzaXN0ZW5jZUtleSA/PyBwZXJzaXN0ZW5jZS5wZXJzaXN0ZW5jZUtleTtcbiAgY29uc3QgcmVzb2x2ZWRTdG9yYWdlID0gc3RvcmFnZSA/PyBwZXJzaXN0ZW5jZS5zdG9yYWdlO1xuXG4gIC8vIEJlbG93IHRoZSBtb2JpbGUgYnJlYWtwb2ludCB0aGUgcmlnaHRQYW5lbCByZW5kZXJzIGFzIGEgYm90dG9tIHNoZWV0IChpdHNcbiAgLy8gbWFya2VyIHJlbmRlcnMgdGhlIFNoZWV0IGl0c2VsZikgLSBhbiBhdXRvbWF0aWMsIHJlbmRlci1sZXZlbCBhZGFwdGF0aW9uLlxuICAvLyBUaGUgc3RvcmVkIHZhcmlhbnQgaXMgdW50b3VjaGVkLCBzbyByZXNpemluZyBiYWNrIHRvIGRlc2t0b3AgcmVzdG9yZXMgdGhlXG4gIC8vIGV4YWN0IHByZXNlbnRhdGlvbiAoZG9ja2VkIG9yIGZsb2F0aW5nKSB0aGUgdXNlciBsZWZ0LlxuICBjb25zdCB7IGlzTW9iaWxlIH0gPSB1c2VCcmVha3BvaW50cygpO1xuICBjb25zdCBpc1JpZ2h0UGFuZWxTaGVldCA9IGlzTW9iaWxlO1xuXG4gIC8vIEEgZmxvYXRpbmcgcmlnaHRQYW5lbCBzdGF5cyB2aXNpYmxlIChpdHMgbWFya2VyIGtlZXBzIHJlbmRlcmluZyBjb250ZW50KVxuICAvLyBidXQgbGVhdmVzIHRoZSByZXNpemFibGUgcm93IC0gZXhhY3RseSBsaWtlIGEgaGlkZGVuIHBhbmVsIGRvZXMuIFRoZVxuICAvLyBtb2JpbGUgc2hlZXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBmbG9hdGluZyB3aW5kb3cuIEZsb2F0IGlzIGFcbiAgLy8gZGVza3RvcCBwcmVzZW50YXRpb24sIHNvIG9ubHkgbW9kZSBgdHJ1ZWAgZW5hYmxlcyBpdC5cbiAgY29uc3QgcGFuZWxzRW5hYmxlZCA9IHVzZUxheW91dFBhbmVsc0VuYWJsZWQoKTtcbiAgY29uc3QgaXNSaWdodFBhbmVsRmxvYXRpbmcgPVxuICAgIHBhbmVsc0VuYWJsZWQgPT09IHRydWUgJiZcbiAgICAhaXNSaWdodFBhbmVsU2hlZXQgJiZcbiAgICBsYXlvdXRTdGF0ZVtTbG90LnJpZ2h0UGFuZWxdLnZhcmlhbnQgPT09IFwiZmxvYXRcIjtcblxuICBjb25zdCBpc1Nob3duID0gKHNsb3Q6IFNsb3RLZXkpOiBib29sZWFuID0+XG4gICAgbGF5b3V0U3RhdGVbc2xvdF0udmlzaWJsZSAmJlxuICAgICEoc2xvdCA9PT0gU2xvdC5yaWdodFBhbmVsICYmIChpc1JpZ2h0UGFuZWxGbG9hdGluZyB8fCBpc1JpZ2h0UGFuZWxTaGVldCkpO1xuXG4gIC8vIFNsb3RzIGtlcHQgbW91bnRlZCB0aHJvdWdoIHRoZWlyIGV4aXQgYW5pbWF0aW9uIChyZXBvcnRlZCB2aWFcbiAgLy8gYHVzZVBhbmVsUHJlc2VuY2VgKS4gQSBwcmVzZW50LWJ1dC1oaWRkZW4gc2xvdCBzdGF5cyBpbiB0aGUgcm93IHNvIGl0c1xuICAvLyBjbG9zZSBhbmltYXRpb24gY2FuIHBsYXk7IGl0J3MgcmVtb3ZlZCBvbmNlIHByZXNlbmNlIGZsaXBzIGZhbHNlLlxuICBjb25zdCBbcHJlc2VudCwgc2V0UHJlc2VudF0gPSB1c2VTdGF0ZTxQYXJ0aWFsPFJlY29yZDxTbG90S2V5LCBib29sZWFuPj4+KHt9KTtcbiAgY29uc3QgcHJlc2VuY2UgPSB1c2VNZW1vPFBhbmVsUHJlc2VuY2U+KFxuICAgICgpID0+ICh7XG4gICAgICBzZXRQcmVzZW50OiAoc2xvdCwgaXNQcmVzZW50KSA9PlxuICAgICAgICBzZXRQcmVzZW50KChwcmV2KSA9PlxuICAgICAgICAgIHByZXZbc2xvdF0gPT09IGlzUHJlc2VudCA/IHByZXYgOiB7IC4uLnByZXYsIFtzbG90XTogaXNQcmVzZW50IH1cbiAgICAgICAgKSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIC8vIEFuaW1hdGlvbiBjb250cm9sIGZvciB0aGUgZG9ja2VkIHNpZGUgcGFuZWxzJyBvcGVuL2Nsb3NlIHdpZHRoIHNsaWRlLiBBbGxcbiAgLy8gcmVmLWJhc2VkIG9uIHB1cnBvc2U6IHJlZ2lzdGVyaW5nIGhhbmRsZXMvZWxlbWVudHMgYW5kIHRvZ2dsaW5nIHN1cHByZXNzaW9uXG4gIC8vIGhhcHBlbiBkdXJpbmcgY29tbWl0cyBhbmQgcGVyLWZyYW1lIC0gbm9uZSBvZiBpdCBtYXkgcmUtcmVuZGVyIHRoZSBMYXlvdXQuXG4gIGNvbnN0IHBhbmVsSGFuZGxlcyA9IHVzZVJlZjxcbiAgICBQYXJ0aWFsPFJlY29yZDxTbG90S2V5LCBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfCBudWxsPj5cbiAgPih7fSk7XG4gIGNvbnN0IHBhbmVsRWxlbWVudHMgPSB1c2VSZWY8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgSFRNTEVsZW1lbnQgfCBudWxsPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHJlc2l6ZVN1cHByZXNzZWQgPSB1c2VSZWY8UGFydGlhbDxSZWNvcmQ8U2xvdEtleSwgYm9vbGVhbj4+Pih7fSk7XG4gIGNvbnN0IGFuaW1hdGlvbkNvbnRyb2wgPSB1c2VNZW1vPFBhbmVsQW5pbWF0aW9uQ29udHJvbD4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHNldEhhbmRsZTogKHNsb3QsIGhhbmRsZSkgPT4ge1xuICAgICAgICBwYW5lbEhhbmRsZXMuY3VycmVudFtzbG90XSA9IGhhbmRsZTtcbiAgICAgIH0sXG4gICAgICBnZXRIYW5kbGU6IChzbG90KSA9PiBwYW5lbEhhbmRsZXMuY3VycmVudFtzbG90XSA/PyBudWxsLFxuICAgICAgc2V0RWxlbWVudDogKHNsb3QsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgcGFuZWxFbGVtZW50cy5jdXJyZW50W3Nsb3RdID0gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgICBnZXRFbGVtZW50OiAoc2xvdCkgPT4gcGFuZWxFbGVtZW50cy5jdXJyZW50W3Nsb3RdID8/IG51bGwsXG4gICAgICBzZXRSZXNpemVTdXBwcmVzc2VkOiAoc2xvdCwgc3VwcHJlc3NlZCkgPT4ge1xuICAgICAgICByZXNpemVTdXBwcmVzc2VkLmN1cnJlbnRbc2xvdF0gPSBzdXBwcmVzc2VkO1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuICAvLyBTdGFibGUgcGVyLXNsb3QgcmVmIGNhbGxiYWNrcyAtIGEgZnJlc2ggY2FsbGJhY2sgaWRlbnRpdHkgcGVyIHJlbmRlciB3b3VsZFxuICAvLyBtYWtlIFJlYWN0IGRldGFjaC9yZWF0dGFjaCB0aGUgcmVmcyBvbiBldmVyeSBMYXlvdXQgcmUtcmVuZGVyLlxuICBjb25zdCBwYW5lbFJlZkNhbGxiYWNrcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNhbGxiYWNrcyA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICAoaGFuZGxlOiBQYW5lbEltcGVyYXRpdmVIYW5kbGUgfCBudWxsKSA9PiB2b2lkXG4gICAgPigpO1xuICAgIGNvbnN0IGVsZW1lbnRDYWxsYmFja3MgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgKGVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4gdm9pZFxuICAgID4oKTtcbiAgICByZXR1cm4ge1xuICAgICAgaGFuZGxlRm9yOiAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgY2FsbGJhY2sgPSBoYW5kbGVDYWxsYmFja3MuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrID0gKGhhbmRsZSkgPT5cbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2wuc2V0SGFuZGxlKGlkIGFzIFNsb3RLZXksIGhhbmRsZSk7XG4gICAgICAgICAgaGFuZGxlQ2FsbGJhY2tzLnNldChpZCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICAgIH0sXG4gICAgICBlbGVtZW50Rm9yOiAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgY2FsbGJhY2sgPSBlbGVtZW50Q2FsbGJhY2tzLmdldChpZCk7XG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayA9IChlbGVtZW50KSA9PlxuICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbC5zZXRFbGVtZW50KGlkIGFzIFNsb3RLZXksIGVsZW1lbnQpO1xuICAgICAgICAgIGVsZW1lbnRDYWxsYmFja3Muc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgICAgfSxcbiAgICB9O1xuICB9LCBbYW5pbWF0aW9uQ29udHJvbF0pO1xuICBjb25zdCBzaG91bGRTdXBwcmVzc0xheW91dENhbGxiYWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKCkgPT4gT2JqZWN0LnZhbHVlcyhyZXNpemVTdXBwcmVzc2VkLmN1cnJlbnQpLnNvbWUoQm9vbGVhbiksXG4gICAgW11cbiAgKTtcblxuICBjb25zdCByZWdpc3RyeSA9IHVzZU1lbW88UGFuZWxSZWdpc3RyeT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHJlZ2lzdGVyOiAoc2xvdCwgcmVnKSA9PlxuICAgICAgICBzZXREZWNsYXJlZCgocHJldikgPT4gKHsgLi4ucHJldiwgW3Nsb3RdOiByZWcgfSkpLFxuICAgICAgdW5yZWdpc3RlcjogKHNsb3QpID0+XG4gICAgICAgIHNldERlY2xhcmVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgaWYgKCEoc2xvdCBpbiBwcmV2KSkgcmV0dXJuIHByZXY7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xuICAgICAgICAgIGRlbGV0ZSBuZXh0W3Nsb3RdO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9KSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IHsgcG9ydGFsVGFyZ2V0cywgc2xvdEhvc3RzLCBzbG90SG9zdFJlZnMsIGZsb2F0SG9zdFJlZiB9ID1cbiAgICB1c2VGbG9hdGFibGVQb3J0YWxUYXJnZXRzKHtcbiAgICAgIHNsb3RzOiBQQU5FTF9PUkRFUixcbiAgICAgIGZsb2F0YWJsZVNsb3Q6IFNsb3QucmlnaHRQYW5lbCxcbiAgICAgIGlzRmxvYXRpbmc6IGlzUmlnaHRQYW5lbEZsb2F0aW5nLFxuICAgIH0pO1xuXG4gIHVzZUdsb2JhbENzc1ZhcmlhYmxlcyhzbG90SG9zdHMpO1xuXG4gIC8vIFBhbmVscyB0aGF0IGV4aXN0IGluIHRoZSBsYXlvdXQsIHJlZ2FyZGxlc3Mgb2YgdmlzaWJpbGl0eS4gRHJpdmVzIHRoZVxuICAvLyBzb2xvLXZzLXJlc2l6YWJsZSBkZWNpc2lvbiBiZWxvdyAtIGtleWVkIG9uIERFQ0xBUkVEIChub3Qgc2hvd24pIHNvIHRoYXRcbiAgLy8gc2hvd2luZy9oaWRpbmcgYSBwYW5lbCBuZXZlciBmbGlwcyB0aGUgbW9kZS5cbiAgY29uc3QgZGVjbGFyZWRTbG90cyA9IFBBTkVMX09SREVSLmZpbHRlcigoc2xvdCkgPT4gZGVjbGFyZWRbc2xvdF0pO1xuXG4gIC8vIFNvbG8gbW9kZTogYSBzaW5nbGUgcGFuZWwgaXMgZGVjbGFyZWQgKGUuZy4ganVzdCBgQ29udGVudGAsIHdpdGggbm9cbiAgLy8gUmlnaHRQYW5lbC9MZWZ0UGFuZWwvU3BsaXQgaW4gdGhlIHRyZWUpIC0gbm90aGluZyB0byByZXNpemUgYWdhaW5zdCwgc28gaG9zdFxuICAvLyBpdCBpbiBhIHBsYWluIGRpdiBhbmQgc2tpcCByZWFjdC1yZXNpemFibGUtcGFuZWxzIGVudGlyZWx5LiBCZWNhdXNlIHRoZVxuICAvLyBjaGVjayBpcyBvbiBERUNMQVJFRCBwYW5lbHMsIHRvZ2dsaW5nIGEgKmRlY2xhcmVkKiBwYW5lbCdzIHZpc2liaWxpdHkga2VlcHNcbiAgLy8gdGhlIG1vZGUgc3RhYmxlLCBzbyBgQ29udGVudGAgaXMgbmV2ZXIgcmVtb3VudGVkIGJ5IGEgc2hvdy9oaWRlLiBUaGUgbW9kZVxuICAvLyBvbmx5IGZsaXBzIHdoZW4gYSBwYW5lbCBtYXJrZXIgaXMgYWRkZWQgdG8gLyByZW1vdmVkIGZyb20gdGhlIHRyZWUgKGFcbiAgLy8gc3RydWN0dXJhbCBjaGFuZ2UpLCB3aGVyZSBhIG9uZS10aW1lIHJlbW91bnQgaXMgYWNjZXB0YWJsZS5cbiAgY29uc3QgaXNTb2xvID0gZGVjbGFyZWRTbG90cy5sZW5ndGggPD0gMTtcbiAgY29uc3Qgc29sb1Nsb3QgPSBkZWNsYXJlZFNsb3RzWzBdO1xuXG4gIC8vIGNvbnRlbnQgZmxleGVzIChubyBmaXhlZCBzaXplKTsgb3RoZXJzIHVzZSB0aGUgZGVjbGFyZWQgZGVmYXVsdCwgZmFsbGluZ1xuICAvLyBiYWNrIHRvIHRoZSBwZXJzaXN0ZWQvY29uZmlnIHNpemUuXG4gIGNvbnN0IGRlZmF1bHRTaXplRm9yID0gKHNsb3Q6IFNsb3RLZXkpOiBTaXplIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAoc2xvdCA9PT0gU2xvdC5jb250ZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBkZWNsYXJlZFtzbG90XT8uZGVmYXVsdFNpemUgPz8gbGF5b3V0U3RhdGVbc2xvdF0uc2l6ZTtcbiAgfTtcblxuICAvLyBPbmx5IHRoZSBwYW5lbHMgdGhhdCBhcmUgZGVjbGFyZWQgQU5EIChjdXJyZW50bHkgc2hvd24gT1IgbWlkLWV4aXQpLiBBXG4gIC8vIGhpZGRlbi1idXQtcHJlc2VudCBzbG90IGxpbmdlcnMgc28gaXRzIGNsb3NlIGFuaW1hdGlvbiBjYW4gcGxheTsgb3RoZXJ3aXNlXG4gIC8vIGNsb3NlZCBwYW5lbHMgcmVzZXJ2ZSBubyBzcGFjZS5cbiAgY29uc3QgcGFuZWxJdGVtczogUGFuZWxJdGVtW10gPSBQQU5FTF9PUkRFUi5maWx0ZXIoXG4gICAgKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdICYmIChpc1Nob3duKHNsb3QpIHx8IHByZXNlbnRbc2xvdF0pXG4gICkubWFwKChzbG90KSA9PiAoe1xuICAgIGlkOiBzbG90LFxuICAgIGRlZmF1bHRTaXplOiBkZWZhdWx0U2l6ZUZvcihzbG90KSxcbiAgICBtaW5TaXplOiBkZWNsYXJlZFtzbG90XT8ubWluU2l6ZSA/PyBsYXlvdXRTdGF0ZVtzbG90XS5taW5TaXplLFxuICAgIG1heFNpemU6IGRlY2xhcmVkW3Nsb3RdPy5tYXhTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLm1heFNpemUsXG4gICAgY29sbGFwc2libGU6IHNsb3QgIT09IFNsb3QuY29udGVudCAmJiAoZGVjbGFyZWRbc2xvdF0/LmNvbGxhcHNpYmxlID8/IHRydWUpLFxuICB9KSk7XG5cbiAgLy8gU29sbyBtb2RlIGhvc3RzIHRoZSBsb25lIHBhbmVsIGluIGEgcGxhaW4gZGl2LCBubyByZXNpemFibGUgR3JvdXAuIEEgaGlkZGVuXG4gIC8vIGxvbmUgcGFuZWwgcmVuZGVycyBub3RoaW5nIChDb250ZW50IGlzIGFsd2F5cyBzaG93bikuXG4gIGNvbnN0IHNvbG9Ib3N0ID1cbiAgICBzb2xvU2xvdCAmJiBpc1Nob3duKHNvbG9TbG90KSA/IChcbiAgICAgIDxTdHlsZWRTb2xvSG9zdCByZWY9e3Nsb3RIb3N0UmVmc1tzb2xvU2xvdF19IC8+XG4gICAgKSA6IG51bGw7XG5cbiAgLy8gVGhlIHJlc2l6YWJsZSBHcm91cC4gYGtleWAgPSB0aGUgcGVyc2lzdGVuY2UgbmFtZXNwYWNlOiByZWFjdC1yZXNpemFibGUtcGFuZWxzXG4gIC8vIHJlYWRzIHN0b3JlZCBzaXplcyBvbmx5IG9uIG1vdW50LCBzbyByZW1vdW50IHdoZW4gdGhlIGtleSBjaGFuZ2VzIHRvIGxvYWRcbiAgLy8gdGhhdCBpbnN0YW5jZSdzIHNpemVzIChwZXItcm91dGUgc2l6ZSBtZW1vcnkpLiBUaGUga2V5IG5ldmVyIGNoYW5nZXMgb25cbiAgLy8gcGFuZWwgb3Blbi9jbG9zZSwgc28gbm9ybWFsIHRvZ2dsaW5nIHN0YXlzIHJlbW91bnQtZnJlZS5cbiAgY29uc3QgcGFuZWxHcm91cCA9XG4gICAgcGFuZWxJdGVtcy5sZW5ndGggPiAwID8gKFxuICAgICAgPFBhbmVsXG4gICAgICAgIGtleT17cmVzb2x2ZWRLZXl9XG4gICAgICAgIHBhbmVscz17cGFuZWxJdGVtc31cbiAgICAgICAgcGVyc2lzdGVuY2VLZXk9e3Jlc29sdmVkS2V5fVxuICAgICAgICBzdG9yYWdlPXtyZXNvbHZlZFN0b3JhZ2V9XG4gICAgICAgIGhvc3RGb3I9eyhpZCkgPT4gc2xvdEhvc3RSZWZzW2lkIGFzIFNsb3RLZXldfVxuICAgICAgICBvblJlc2l6ZT17KGlkLCBzaXplKSA9PiBwYW5lbENhbGxiYWNrc1tpZCBhcyBTbG90S2V5XS5yZXNpemUoc2l6ZSl9XG4gICAgICAgIG9uQ29sbGFwc2U9eyhpZCkgPT4gcGFuZWxDYWxsYmFja3NbaWQgYXMgU2xvdEtleV0uaGlkZSgpfVxuICAgICAgICBwYW5lbEhhbmRsZUZvcj17cGFuZWxSZWZDYWxsYmFja3MuaGFuZGxlRm9yfVxuICAgICAgICBwYW5lbEVsZW1lbnRGb3I9e3BhbmVsUmVmQ2FsbGJhY2tzLmVsZW1lbnRGb3J9XG4gICAgICAgIHNob3VsZFN1cHByZXNzTGF5b3V0Q2FsbGJhY2s9e3Nob3VsZFN1cHByZXNzTGF5b3V0Q2FsbGJhY2t9XG4gICAgICAvPlxuICAgICkgOiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsUmVnaXN0cnlDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtyZWdpc3RyeX0+XG4gICAgICA8UGFuZWxQcmVzZW5jZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ByZXNlbmNlfT5cbiAgICAgICAgPFBhbmVsQW5pbWF0aW9uQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YW5pbWF0aW9uQ29udHJvbH0+XG4gICAgICAgICAgPExheW91dFBvcnRhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3BvcnRhbFRhcmdldHN9PlxuICAgICAgICAgICAgPFN0eWxlZExheW91dCBkYXRhLWRzLWlkPVwiTGF5b3V0XCI+XG4gICAgICAgICAgICAgIHtpc1NvbG8gPyBzb2xvSG9zdCA6IHBhbmVsR3JvdXB9XG4gICAgICAgICAgICAgIHtpc1JpZ2h0UGFuZWxGbG9hdGluZyAmJiBsYXlvdXRTdGF0ZVtTbG90LnJpZ2h0UGFuZWxdLnZpc2libGUgJiYgKFxuICAgICAgICAgICAgICAgIDxMYXlvdXRGbG9hdCBob3N0UmVmPXtmbG9hdEhvc3RSZWZ9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDwvU3R5bGVkTGF5b3V0PlxuICAgICAgICAgIDwvTGF5b3V0UG9ydGFsQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9QYW5lbEFuaW1hdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L1BhbmVsUHJlc2VuY2VDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvUGFuZWxSZWdpc3RyeUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBQdWJsaWMgTGF5b3V0IC0gdGhlIHJlc2l6YWJsZSBwYW5lbCByb3cgKyBjb21wb3VuZCBwYXJ0cyBhcyBzdGF0aWNzICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbnR5cGUgTGF5b3V0Q29tcG9uZW50ID0gdHlwZW9mIExheW91dEJhc2UgJiB7XG4gIFByb3ZpZGVyOiB0eXBlb2YgTGF5b3V0UHJvdmlkZXI7XG4gIExlZnRQYW5lbDogdHlwZW9mIExlZnRQYW5lbDtcbiAgTGVmdFBhbmVsSGVhZGVyOiB0eXBlb2YgTGVmdFBhbmVsSGVhZGVyO1xuICBMZWZ0UGFuZWxGb290ZXI6IHR5cGVvZiBMZWZ0UGFuZWxGb290ZXI7XG4gIFJpZ2h0UGFuZWw6IHR5cGVvZiBSaWdodFBhbmVsO1xuICBSaWdodFBhbmVsSGVhZGVyOiB0eXBlb2YgUmlnaHRQYW5lbEhlYWRlcjtcbiAgUmlnaHRQYW5lbEZvb3RlcjogdHlwZW9mIFJpZ2h0UGFuZWxGb290ZXI7XG4gIENvbnRlbnQ6IHR5cGVvZiBDb250ZW50O1xuICBTcGxpdDogdHlwZW9mIFNwbGl0O1xuICBTcGxpdEhlYWRlcjogdHlwZW9mIFNwbGl0SGVhZGVyO1xuICBTcGxpdEZvb3RlcjogdHlwZW9mIFNwbGl0Rm9vdGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IExheW91dCA9IExheW91dEJhc2UgYXMgTGF5b3V0Q29tcG9uZW50O1xuXG5MYXlvdXQuUHJvdmlkZXIgPSBMYXlvdXRQcm92aWRlcjtcbkxheW91dC5MZWZ0UGFuZWwgPSBMZWZ0UGFuZWw7XG5MYXlvdXQuTGVmdFBhbmVsSGVhZGVyID0gTGVmdFBhbmVsSGVhZGVyO1xuTGF5b3V0LkxlZnRQYW5lbEZvb3RlciA9IExlZnRQYW5lbEZvb3RlcjtcbkxheW91dC5SaWdodFBhbmVsID0gUmlnaHRQYW5lbDtcbkxheW91dC5SaWdodFBhbmVsSGVhZGVyID0gUmlnaHRQYW5lbEhlYWRlcjtcbkxheW91dC5SaWdodFBhbmVsRm9vdGVyID0gUmlnaHRQYW5lbEZvb3RlcjtcbkxheW91dC5Db250ZW50ID0gQ29udGVudDtcbkxheW91dC5TcGxpdCA9IFNwbGl0O1xuTGF5b3V0LlNwbGl0SGVhZGVyID0gU3BsaXRIZWFkZXI7XG5MYXlvdXQuU3BsaXRGb290ZXIgPSBTcGxpdEZvb3RlcjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0RnVCIn0= */");export const Layout=function({children,persistenceKey,storage}){let[declared,setDeclared]=useState({}),{state:layoutState,...panelCallbacks}=useLayout(),persistence=useLayoutPersistence(),resolvedKey=persistenceKey??persistence.persistenceKey,resolvedStorage=storage??persistence.storage,{isMobile}=useBreakpoints(),isRightPanelFloating=!0===useLayoutPanelsEnabled()&&!isMobile&&"float"===layoutState[Slot.rightPanel].variant,isShown=slot=>layoutState[slot].visible&&!(slot===Slot.rightPanel&&(isRightPanelFloating||isMobile)),[present,setPresent]=useState({}),presence=useMemo(()=>({setPresent:(slot,isPresent)=>setPresent(prev=>prev[slot]===isPresent?prev:{...prev,[slot]:isPresent})}),[]),panelHandles=useRef({}),panelElements=useRef({}),resizeSuppressed=useRef({}),animationControl=useMemo(()=>({setHandle:(slot,handle)=>{panelHandles.current[slot]=handle},getHandle:slot=>panelHandles.current[slot]??null,setElement:(slot,element)=>{panelElements.current[slot]=element},getElement:slot=>panelElements.current[slot]??null,setResizeSuppressed:(slot,suppressed)=>{resizeSuppressed.current[slot]=suppressed}}),[]),panelRefCallbacks=useMemo(()=>{let handleCallbacks=new Map,elementCallbacks=new Map;return{handleFor:id=>{let callback=handleCallbacks.get(id);return callback||(callback=handle=>animationControl.setHandle(id,handle),handleCallbacks.set(id,callback)),callback},elementFor:id=>{let callback=elementCallbacks.get(id);return callback||(callback=element=>animationControl.setElement(id,element),elementCallbacks.set(id,callback)),callback}}},[animationControl]),shouldSuppressLayoutCallback=useCallback(()=>Object.values(resizeSuppressed.current).some(Boolean),[]),registry=useMemo(()=>({register:(slot,reg)=>setDeclared(prev=>({...prev,[slot]:reg})),unregister:slot=>setDeclared(prev=>{if(!(slot in prev))return prev;let next={...prev};return delete next[slot],next})}),[]),{portalTargets,slotHosts,slotHostRefs,floatHostRef}=useFloatablePortalTargets({slots:PANEL_ORDER,floatableSlot:Slot.rightPanel,isFloating:isRightPanelFloating});useGlobalCssVariables(slotHosts);let declaredSlots=PANEL_ORDER.filter(slot=>declared[slot]),isSolo=declaredSlots.length<=1,soloSlot=declaredSlots[0],defaultSizeFor=slot=>{if(slot!==Slot.content)return declared[slot]?.defaultSize??layoutState[slot].size},panelItems=PANEL_ORDER.filter(slot=>declared[slot]&&(isShown(slot)||present[slot])).map(slot=>({id:slot,defaultSize:defaultSizeFor(slot),minSize:declared[slot]?.minSize??layoutState[slot].minSize,maxSize:declared[slot]?.maxSize??layoutState[slot].maxSize,collapsible:slot!==Slot.content&&(declared[slot]?.collapsible??!0)})),soloHost=soloSlot&&isShown(soloSlot)?React.createElement(StyledSoloHost,{ref:slotHostRefs[soloSlot]}):null,panelGroup=panelItems.length>0?React.createElement(Panel,{key:resolvedKey,panels:panelItems,persistenceKey:resolvedKey,storage:resolvedStorage,hostFor:id=>slotHostRefs[id],onResize:(id,size)=>panelCallbacks[id].resize(size),onCollapse:id=>panelCallbacks[id].hide(),panelHandleFor:panelRefCallbacks.handleFor,panelElementFor:panelRefCallbacks.elementFor,shouldSuppressLayoutCallback:shouldSuppressLayoutCallback}):null;return React.createElement(PanelRegistryContext.Provider,{value:registry},React.createElement(PanelPresenceContext.Provider,{value:presence},React.createElement(PanelAnimationContext.Provider,{value:animationControl},React.createElement(LayoutPortalContext.Provider,{value:portalTargets},React.createElement(StyledLayout,{"data-ds-id":"Layout"},isSolo?soloHost:panelGroup,isRightPanelFloating&&layoutState[Slot.rightPanel].visible&&React.createElement(LayoutFloat,{hostRef:floatHostRef}),children)))))};Layout.Provider=LayoutProvider,Layout.LeftPanel=LeftPanel,Layout.LeftPanelHeader=LeftPanelHeader,Layout.LeftPanelFooter=LeftPanelFooter,Layout.RightPanel=RightPanel,Layout.RightPanelHeader=RightPanelHeader,Layout.RightPanelFooter=RightPanelFooter,Layout.Content=Content,Layout.Split=Split,Layout.SplitHeader=SplitHeader,Layout.SplitFooter=SplitFooter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useMemo,useRef}from"react";import{LayoutPersistenceProvider,LayoutStoreProvider}from"./context";import{LayoutCssVars,LayoutCssVarStoreProvider}from"./LayoutCssVars";import{createLayoutCssVarStore}from"./cssVarStore";import{createInitialState}from"./reducer";import{createLayoutStore}from"./store";export function LayoutProvider({children,config,store,persistenceKey,storage}){let storeRef=useRef(null);null===storeRef.current&&(storeRef.current=store??createLayoutStore(createInitialState(config)));let cssVarStoreRef=useRef(null);null===cssVarStoreRef.current&&(cssVarStoreRef.current=createLayoutCssVarStore());let persistence=useMemo(()=>({persistenceKey,storage}),[persistenceKey,storage]);return React.createElement(LayoutStoreProvider,{value:storeRef.current},React.createElement(LayoutPersistenceProvider,{value:persistence},React.createElement(LayoutCssVarStoreProvider,{value:cssVarStoreRef.current},React.createElement(LayoutCssVars,null),children)))}
|
|
1
|
+
import React,{useMemo,useRef}from"react";import{LayoutPanelsEnabledProvider,LayoutPersistenceProvider,LayoutStoreProvider}from"./context";import{LayoutCssVars,LayoutCssVarStoreProvider}from"./LayoutCssVars";import{createLayoutCssVarStore}from"./cssVarStore";import{createInitialState}from"./reducer";import{createLayoutStore}from"./store";export function LayoutProvider({children,config,store,persistenceKey,storage}){let storeRef=useRef(null);null===storeRef.current&&(storeRef.current=store??createLayoutStore(createInitialState(config)));let cssVarStoreRef=useRef(null);null===cssVarStoreRef.current&&(cssVarStoreRef.current=createLayoutCssVarStore());let persistence=useMemo(()=>({persistenceKey,storage}),[persistenceKey,storage]);return React.createElement(LayoutStoreProvider,{value:storeRef.current},React.createElement(LayoutPanelsEnabledProvider,{value:config?.enablePanels??!1},React.createElement(LayoutPersistenceProvider,{value:persistence},React.createElement(LayoutCssVarStoreProvider,{value:cssVarStoreRef.current},React.createElement(LayoutCssVars,null),children))))}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { LeftPanelProps } from "../-types";
|
|
3
|
+
/**
|
|
4
|
+
* Left side panel. Picks its presentation by breakpoint: an in-flow resizable
|
|
5
|
+
* column on desktop ({@link LeftPanelDocked}) and a modal left-edge drawer on
|
|
6
|
+
* mobile ({@link LeftPanelDrawer}). Both are driven by the same `leftPanel`
|
|
7
|
+
* layout state, so `useLayout()` controls it the same way at any width.
|
|
8
|
+
*/
|
|
9
|
+
export declare const LeftPanel: React.FC<LeftPanelProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import{useBreakpoints}from"../../../shared/useBreakpoints";import{Slot}from"../-constants";import{useVisibleChange}from"../registry";import{useLayout}from"../useLayout";import{useCanRenderPanel}from"../context";import{LeftPanelDocked}from"./LeftPanelDocked";import{LeftPanelDrawer}from"./LeftPanelDrawer";export const LeftPanel=({children,defaultSize,minSize,maxSize,collapsible=!0,onVisibleChange,"aria-label":ariaLabel})=>{let{isMobile}=useBreakpoints(),{isVisible,hide}=useLayout()[Slot.leftPanel],canRender=useCanRenderPanel();return(useVisibleChange(isVisible,onVisibleChange),canRender)?isMobile?React.createElement(LeftPanelDrawer,{isVisible:isVisible,hide:hide,"aria-label":ariaLabel},children):React.createElement(LeftPanelDocked,{"aria-label":ariaLabel,defaultSize:defaultSize,minSize:minSize,maxSize:maxSize,collapsible:collapsible},children):null};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { Size } from "../-types";
|
|
3
|
+
export type LeftPanelDockedProps = {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
"aria-label"?: string;
|
|
6
|
+
defaultSize?: Size;
|
|
7
|
+
minSize?: Size;
|
|
8
|
+
maxSize?: Size;
|
|
9
|
+
collapsible?: boolean;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Docked (desktop) left panel. Declares the `leftPanel` slot and portals its
|
|
13
|
+
* content into the Group's host - an in-flow, resizable column whose width
|
|
14
|
+
* slides open/closed via {@link usePanelDockedSlide} (when collapsible). Content
|
|
15
|
+
* lives in a {@link PanelContainer} so `Layout.LeftPanelHeader` /
|
|
16
|
+
* `Layout.LeftPanelFooter` children stick to the edges. The mobile presentation
|
|
17
|
+
* lives in {@link LeftPanelDrawer}; `LeftPanel` picks between the two by
|
|
18
|
+
* breakpoint.
|
|
19
|
+
*/
|
|
20
|
+
export declare const LeftPanelDocked: React.FC<LeftPanelDockedProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import{Slot}from"../-constants";import{useLayoutPortal}from"../registry";import{usePanelDockedSlide}from"../usePanelDockedSlide";import{PanelSlideBody}from"../PanelSlideBody";import{PanelContainer}from"../PanelContainer";export const LeftPanelDocked=({children,"aria-label":ariaLabel,defaultSize,minSize,maxSize,collapsible=!0})=>{let{isMounted,pinnedWidth}=usePanelDockedSlide({slot:Slot.leftPanel,defaultSize,minSize,maxSize,collapsible});return useLayoutPortal(Slot.leftPanel,isMounted?React.createElement(PanelSlideBody,{anchor:"right",pinnedWidth:pinnedWidth},React.createElement(PanelContainer,{"aria-label":ariaLabel},children)):null)};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export type LeftPanelDrawerProps = {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
isVisible: boolean;
|
|
5
|
+
hide: () => void;
|
|
6
|
+
"aria-label": string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Mobile left panel. Renders its content as a modal {@link Drawer} pinned to the
|
|
10
|
+
* left edge instead of an in-flow column - so it does NOT declare a resizable
|
|
11
|
+
* slot. Visibility is the shared `leftPanel` layout state, so `useLayout()`
|
|
12
|
+
* drives it identically to the docked desktop panel; outside-click / Escape
|
|
13
|
+
* routes back through `hide`.
|
|
14
|
+
*/
|
|
15
|
+
export declare const LeftPanelDrawer: React.FC<LeftPanelDrawerProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";import{Drawer}from"../../Internal/Drawer/Drawer";import{PanelContainer}from"../PanelContainer";let StyledLeftPanelBody=styled("div",{target:"e14wbnl40",label:"StyledLeftPanelBody"})({width:"80vw",height:"100dvh"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xlZnRQYW5lbC9MZWZ0UGFuZWxEcmF3ZXIudHN4Iiwic291cmNlcyI6WyJzcmMvY29tcG9uZW50cy9MYXlvdXQvTGVmdFBhbmVsL0xlZnRQYW5lbERyYXdlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHN0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkXCI7XG5pbXBvcnQgeyBEcmF3ZXIgfSBmcm9tIFwiLi4vLi4vSW50ZXJuYWwvRHJhd2VyL0RyYXdlclwiO1xuaW1wb3J0IHsgUGFuZWxDb250YWluZXIgfSBmcm9tIFwiLi4vUGFuZWxDb250YWluZXJcIjtcblxuLy8gRml4ZWQgbW9iaWxlIHdpZHRoIC0gdGhlIG1vYmlsZSBkcmF3ZXIgaXMgaW50ZW50aW9uYWxseSBub3QgcmVzaXphYmxlLCBzbyB0aGlzXG4vLyBpcyBhIGNvbnN0YW50IHJhdGhlciB0aGFuIGRyaXZlbiBieSB0aGUgcGFuZWwncyBgZGVmYXVsdFNpemVgL2BtaW5TaXplYCBwcm9wcy5cbi8vIFNpemVkIGluIGB2d2AsIG5vdCBgJWA6IHRoZSBEcmF3ZXIgcGlucyB0aGUgYm9keSB3aXRoIGBwb3NpdGlvbjogZml4ZWRgIGFuZFxuLy8gbm8gd2lkdGggb2YgaXRzIG93biwgc28gYSBwZXJjZW50YWdlIHdvdWxkIHJlc29sdmUgYWdhaW5zdCBhIHNocmluay10by1maXRcbi8vIGJveCBhbmQgY29sbGFwc2UgLSB2aWV3cG9ydCB1bml0cyBnaXZlIGEgdHJ1ZSA4MCUgb2YgdGhlIHNjcmVlbiB3aWR0aC5cbmNvbnN0IERSQVdFUl9XSURUSCA9IFwiODB2d1wiO1xuXG4vLyBTaXppbmcgd3JhcHBlciBvbmx5OyB0aGUgaW5uZXIgUGFuZWxDb250YWluZXIgb3ducyB0aGUgYmFja2dyb3VuZCBhbmQgdGhlXG4vLyBzY3JvbGwgcmVnaW9uIChzbyBgTGF5b3V0LkxlZnRQYW5lbEhlYWRlcmAgLyBgRm9vdGVyYCBjYW4gc3RpY2sgdG8gdGhlIGVkZ2VzKS5cbmNvbnN0IFN0eWxlZExlZnRQYW5lbEJvZHkgPSBzdHlsZWQuZGl2KHtcbiAgd2lkdGg6IERSQVdFUl9XSURUSCxcbiAgaGVpZ2h0OiBcIjEwMGR2aFwiLFxufSk7XG5cbmV4cG9ydCB0eXBlIExlZnRQYW5lbERyYXdlclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBpc1Zpc2libGU6IGJvb2xlYW47XG4gIGhpZGU6ICgpID0+IHZvaWQ7XG4gIFwiYXJpYS1sYWJlbFwiOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIE1vYmlsZSBsZWZ0IHBhbmVsLiBSZW5kZXJzIGl0cyBjb250ZW50IGFzIGEgbW9kYWwge0BsaW5rIERyYXdlcn0gcGlubmVkIHRvIHRoZVxuICogbGVmdCBlZGdlIGluc3RlYWQgb2YgYW4gaW4tZmxvdyBjb2x1bW4gLSBzbyBpdCBkb2VzIE5PVCBkZWNsYXJlIGEgcmVzaXphYmxlXG4gKiBzbG90LiBWaXNpYmlsaXR5IGlzIHRoZSBzaGFyZWQgYGxlZnRQYW5lbGAgbGF5b3V0IHN0YXRlLCBzbyBgdXNlTGF5b3V0KClgXG4gKiBkcml2ZXMgaXQgaWRlbnRpY2FsbHkgdG8gdGhlIGRvY2tlZCBkZXNrdG9wIHBhbmVsOyBvdXRzaWRlLWNsaWNrIC8gRXNjYXBlXG4gKiByb3V0ZXMgYmFjayB0aHJvdWdoIGBoaWRlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IExlZnRQYW5lbERyYXdlcjogUmVhY3QuRkM8TGVmdFBhbmVsRHJhd2VyUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGlzVmlzaWJsZSxcbiAgaGlkZSxcbiAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbn0pID0+IChcbiAgPERyYXdlclxuICAgIGlzVmlzaWJsZT17aXNWaXNpYmxlfVxuICAgIHBvc2l0aW9uWD1cImxlZnRcIlxuICAgIGhhbmRsZUNsb3NlPXtoaWRlfVxuICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgPlxuICAgIDxTdHlsZWRMZWZ0UGFuZWxCb2R5PlxuICAgICAgPFBhbmVsQ29udGFpbmVyPntjaGlsZHJlbn08L1BhbmVsQ29udGFpbmVyPlxuICAgIDwvU3R5bGVkTGVmdFBhbmVsQm9keT5cbiAgPC9EcmF3ZXI+XG4pO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWM0QiJ9 */");export const LeftPanelDrawer=({children,isVisible,hide,"aria-label":ariaLabel})=>React.createElement(Drawer,{isVisible:isVisible,positionX:"left",handleClose:hide,"aria-label":ariaLabel},React.createElement(StyledLeftPanelBody,null,React.createElement(PanelContainer,null,children)));
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { LeftPanelFooterProps } from "../-types";
|
|
3
|
+
/**
|
|
4
|
+
* Optional sticky footer for `Layout.LeftPanel` - place it among the panel's
|
|
5
|
+
* children; it sticks to the bottom while the rest of the content scrolls.
|
|
6
|
+
*/
|
|
7
|
+
export declare function LeftPanelFooter({ children, "data-e2e-test-id": dataE2eTestId, }: LeftPanelFooterProps): React.ReactElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import{Sandwich}from"../../Internal/Sandwich/Sandwich";export function LeftPanelFooter({children,"data-e2e-test-id":dataE2eTestId}){return React.createElement(Sandwich.Footer,{"data-e2e-test-id":dataE2eTestId},children)}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { LeftPanelHeaderProps } from "../-types";
|
|
3
|
+
/**
|
|
4
|
+
* Optional sticky header for `Layout.LeftPanel` - place it among the panel's
|
|
5
|
+
* children; it sticks to the top while the rest of the content scrolls.
|
|
6
|
+
*/
|
|
7
|
+
export declare function LeftPanelHeader({ leftSlot, rightSlot, "data-e2e-test-id": dataE2eTestId, }: LeftPanelHeaderProps): React.ReactElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import{Sandwich}from"../../Internal/Sandwich/Sandwich";import{PanelHeader}from"../../Internal/PanelHeader/PanelHeader";export function LeftPanelHeader({leftSlot,rightSlot,"data-e2e-test-id":dataE2eTestId}){return React.createElement(Sandwich.Header,{"data-e2e-test-id":dataE2eTestId},React.createElement(PanelHeader,{leftSlot:leftSlot,rightSlot:rightSlot}))}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { PanelContainerProps } from "./-types";
|
|
3
|
+
/**
|
|
4
|
+
* Shared shell of every layout panel: a flat, square-cornered Container
|
|
5
|
+
* hosting one scrollable region. Panel header/footer components
|
|
6
|
+
* (`Layout.LeftPanelHeader` etc.) render anywhere among `children` and stick
|
|
7
|
+
* to the edges; everything else scrolls.
|
|
8
|
+
*/
|
|
9
|
+
export declare function PanelContainer({ children, "aria-label": ariaLabel, scrollContainerRef, onScroll, showBorderLeft, "data-e2e-test-id": dataE2eTestId, }: PanelContainerProps): React.ReactElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";import{Sandwich}from"../Internal/Sandwich/Sandwich";import{Container}from"../Container/Container";let CustomContainer=styled(Container,{shouldForwardProp:prop=>"showBorderLeft"!==prop,target:"e1wvnxfu0",label:"CustomContainer"})(({theme,showBorderLeft})=>({height:"100%",borderLeft:showBorderLeft?`1px solid ${theme.values.color.border.secondary.default}`:void 0}),"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L1BhbmVsQ29udGFpbmVyLnRzeCIsInNvdXJjZXMiOlsic3JjL2NvbXBvbmVudHMvTGF5b3V0L1BhbmVsQ29udGFpbmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCB7IFNhbmR3aWNoIH0gZnJvbSBcIi4uL0ludGVybmFsL1NhbmR3aWNoL1NhbmR3aWNoXCI7XG5pbXBvcnQgeyBDb250YWluZXIgfSBmcm9tIFwiLi4vQ29udGFpbmVyL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgeyBQYW5lbENvbnRhaW5lclByb3BzIH0gZnJvbSBcIi4vLXR5cGVzXCI7XG5cbmNvbnN0IEJPUkRFUl9XSURUSCA9IDE7XG5cbmNvbnN0IEN1c3RvbUNvbnRhaW5lciA9IHN0eWxlZChDb250YWluZXIsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IChwcm9wKSA9PiBwcm9wICE9PSBcInNob3dCb3JkZXJMZWZ0XCIsXG59KTx7XG4gIHJvbGU/OiBSZWFjdC5BcmlhUm9sZTtcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG4gIHNob3dCb3JkZXJMZWZ0OiBib29sZWFuO1xufT4oKHsgdGhlbWUsIHNob3dCb3JkZXJMZWZ0IH0pID0+ICh7XG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIGJvcmRlckxlZnQ6IHNob3dCb3JkZXJMZWZ0XG4gICAgPyBgJHtCT1JERVJfV0lEVEh9cHggc29saWQgJHt0aGVtZS52YWx1ZXMuY29sb3IuYm9yZGVyLnNlY29uZGFyeS5kZWZhdWx0fWBcbiAgICA6IHVuZGVmaW5lZCxcbn0pKTtcblxuLyoqXG4gKiBTaGFyZWQgc2hlbGwgb2YgZXZlcnkgbGF5b3V0IHBhbmVsOiBhIGZsYXQsIHNxdWFyZS1jb3JuZXJlZCBDb250YWluZXJcbiAqIGhvc3Rpbmcgb25lIHNjcm9sbGFibGUgcmVnaW9uLiBQYW5lbCBoZWFkZXIvZm9vdGVyIGNvbXBvbmVudHNcbiAqIChgTGF5b3V0LkxlZnRQYW5lbEhlYWRlcmAgZXRjLikgcmVuZGVyIGFueXdoZXJlIGFtb25nIGBjaGlsZHJlbmAgYW5kIHN0aWNrXG4gKiB0byB0aGUgZWRnZXM7IGV2ZXJ5dGhpbmcgZWxzZSBzY3JvbGxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gUGFuZWxDb250YWluZXIoe1xuICBjaGlsZHJlbixcbiAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgc2Nyb2xsQ29udGFpbmVyUmVmLFxuICBvblNjcm9sbCxcbiAgc2hvd0JvcmRlckxlZnQgPSBmYWxzZSxcbiAgXCJkYXRhLWUyZS10ZXN0LWlkXCI6IGRhdGFFMmVUZXN0SWQsXG59OiBQYW5lbENvbnRhaW5lclByb3BzKTogUmVhY3QuUmVhY3RFbGVtZW50IHtcbiAgcmV0dXJuIChcbiAgICA8Q3VzdG9tQ29udGFpbmVyXG4gICAgICBlbGV2YXRpb249ezB9XG4gICAgICBzcXVhcmVDb3JuZXJzXG4gICAgICByb2xlPXthcmlhTGFiZWwgPyBcInJlZ2lvblwiIDogdW5kZWZpbmVkfVxuICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgc2hvd0JvcmRlckxlZnQ9e3Nob3dCb3JkZXJMZWZ0fVxuICAgICAgZGF0YS1kcy1pZD1cIlBhbmVsQ29udGFpbmVyXCJcbiAgICAgIGRhdGEtZTJlLXRlc3QtaWQ9e2RhdGFFMmVUZXN0SWR9XG4gICAgPlxuICAgICAgPFNhbmR3aWNoIHNjcm9sbFJlZj17c2Nyb2xsQ29udGFpbmVyUmVmfSBvblNjcm9sbD17b25TY3JvbGx9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L1NhbmR3aWNoPlxuICAgIDwvQ3VzdG9tQ29udGFpbmVyPlxuICApO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVF3QiJ9 */");export function PanelContainer({children,"aria-label":ariaLabel,scrollContainerRef,onScroll,showBorderLeft=!1,"data-e2e-test-id":dataE2eTestId}){return React.createElement(CustomContainer,{elevation:0,squareCorners:!0,role:ariaLabel?"region":void 0,"aria-label":ariaLabel,showBorderLeft:showBorderLeft,"data-ds-id":"PanelContainer","data-e2e-test-id":dataE2eTestId},React.createElement(Sandwich,{scrollRef:scrollContainerRef,onScroll:onScroll},children))}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/** Edge the body is pinned to while the column slides - the panel's docked
|
|
3
|
+
* edge (`right` for the left panel, `left` for the right panel). */
|
|
4
|
+
export type PanelSlideAnchor = "left" | "right";
|
|
5
|
+
export type PanelSlideBodyProps = {
|
|
6
|
+
/** Body width (px) while sliding; `null` at rest (fills the column). Comes
|
|
7
|
+
* from {@link usePanelDockedSlide}. */
|
|
8
|
+
pinnedWidth: number | null;
|
|
9
|
+
/** The edge the panel docks against. */
|
|
10
|
+
anchor: PanelSlideAnchor;
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* The clipped, edge-anchored body a docked side panel's content lives in so
|
|
15
|
+
* its open/close width animation reads as a drawer slide. Pair with
|
|
16
|
+
* {@link usePanelDockedSlide}, which supplies `pinnedWidth`.
|
|
17
|
+
*/
|
|
18
|
+
export declare const PanelSlideBody: React.FC<PanelSlideBodyProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";let StyledPanelSlideClip=styled("div",{target:"eak7i850",label:"StyledPanelSlideClip"})({position:"relative",width:"100%",height:"100%",overflow:"hidden"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L1BhbmVsU2xpZGVCb2R5LnRzeCIsInNvdXJjZXMiOlsic3JjL2NvbXBvbmVudHMvTGF5b3V0L1BhbmVsU2xpZGVCb2R5LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcblxuLyoqIEVkZ2UgdGhlIGJvZHkgaXMgcGlubmVkIHRvIHdoaWxlIHRoZSBjb2x1bW4gc2xpZGVzIC0gdGhlIHBhbmVsJ3MgZG9ja2VkXG4gKiAgZWRnZSAoYHJpZ2h0YCBmb3IgdGhlIGxlZnQgcGFuZWwsIGBsZWZ0YCBmb3IgdGhlIHJpZ2h0IHBhbmVsKS4gKi9cbmV4cG9ydCB0eXBlIFBhbmVsU2xpZGVBbmNob3IgPSBcImxlZnRcIiB8IFwicmlnaHRcIjtcblxuLy8gQ2xpcHMgdGhlIGJvZHkgdG8gdGhlIGNvbHVtbiB3aGlsZSBpdHMgd2lkdGggYW5pbWF0ZXMuXG5jb25zdCBTdHlsZWRQYW5lbFNsaWRlQ2xpcCA9IHN0eWxlZC5kaXYoe1xuICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICB3aWR0aDogXCIxMDAlXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIG92ZXJmbG93OiBcImhpZGRlblwiLFxufSk7XG5cbi8vIFdoaWxlIHRoZSBjb2x1bW4ncyB3aWR0aCBhbmltYXRlcywgdGhlIGJvZHkgaXMgcGlubmVkIHRvIGl0cyByZXN0aW5nIHdpZHRoIGFuZFxuLy8gYW5jaG9yZWQgdG8gdGhlIGRvY2tlZCBlZGdlOiB0aGUgZ3Jvd2luZyBjbGlwIHRoZW4gcmV2ZWFscyBpdCBmcm9tIHRoZVxuLy8gb3Bwb3NpdGUgZWRnZSAtIHJlYWRpbmcgYXMgdGhlIHBhbmVsIHNsaWRpbmcgaW4gd2hpbGUgdGhlIGNvbnRlbnQgaXMgcHVzaGVkIC1cbi8vIGFuZCBpdHMgY29udGVudCBuZXZlciByZWZsb3dzIG1pZC1hbmltYXRpb24uIEF0IHJlc3QgKHBpbm5lZFdpZHRoID09IG51bGwpIGl0XG4vLyBmaWxscyB0aGUgY29sdW1uIHNvIHRoZSBwYW5lbCBzdGF5cyByZXNpemFibGUuXG5jb25zdCBTdHlsZWRQYW5lbFNsaWRlQm9keSA9IHN0eWxlZChcImRpdlwiLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiAocHJvcCkgPT4gcHJvcCAhPT0gXCJwaW5uZWRXaWR0aFwiICYmIHByb3AgIT09IFwiYW5jaG9yXCIsXG59KTx7IHBpbm5lZFdpZHRoOiBudW1iZXIgfCBudWxsOyBhbmNob3I6IFBhbmVsU2xpZGVBbmNob3IgfT4oXG4gICh7IHBpbm5lZFdpZHRoLCBhbmNob3IgfSkgPT4gKHtcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAuLi4ocGlubmVkV2lkdGggIT0gbnVsbCAmJiB7XG4gICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgdG9wOiAwLFxuICAgICAgW2FuY2hvcl06IDAsXG4gICAgICB3aWR0aDogYCR7cGlubmVkV2lkdGh9cHhgLFxuICAgIH0pLFxuICB9KVxuKTtcblxuZXhwb3J0IHR5cGUgUGFuZWxTbGlkZUJvZHlQcm9wcyA9IHtcbiAgLyoqIEJvZHkgd2lkdGggKHB4KSB3aGlsZSBzbGlkaW5nOyBgbnVsbGAgYXQgcmVzdCAoZmlsbHMgdGhlIGNvbHVtbikuIENvbWVzXG4gICAqICBmcm9tIHtAbGluayB1c2VQYW5lbERvY2tlZFNsaWRlfS4gKi9cbiAgcGlubmVkV2lkdGg6IG51bWJlciB8IG51bGw7XG4gIC8qKiBUaGUgZWRnZSB0aGUgcGFuZWwgZG9ja3MgYWdhaW5zdC4gKi9cbiAgYW5jaG9yOiBQYW5lbFNsaWRlQW5jaG9yO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufTtcblxuLyoqXG4gKiBUaGUgY2xpcHBlZCwgZWRnZS1hbmNob3JlZCBib2R5IGEgZG9ja2VkIHNpZGUgcGFuZWwncyBjb250ZW50IGxpdmVzIGluIHNvXG4gKiBpdHMgb3Blbi9jbG9zZSB3aWR0aCBhbmltYXRpb24gcmVhZHMgYXMgYSBkcmF3ZXIgc2xpZGUuIFBhaXIgd2l0aFxuICoge0BsaW5rIHVzZVBhbmVsRG9ja2VkU2xpZGV9LCB3aGljaCBzdXBwbGllcyBgcGlubmVkV2lkdGhgLlxuICovXG5leHBvcnQgY29uc3QgUGFuZWxTbGlkZUJvZHk6IFJlYWN0LkZDPFBhbmVsU2xpZGVCb2R5UHJvcHM+ID0gKHtcbiAgcGlubmVkV2lkdGgsXG4gIGFuY2hvcixcbiAgY2hpbGRyZW4sXG59KSA9PiAoXG4gIDxTdHlsZWRQYW5lbFNsaWRlQ2xpcD5cbiAgICA8U3R5bGVkUGFuZWxTbGlkZUJvZHkgcGlubmVkV2lkdGg9e3Bpbm5lZFdpZHRofSBhbmNob3I9e2FuY2hvcn0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TdHlsZWRQYW5lbFNsaWRlQm9keT5cbiAgPC9TdHlsZWRQYW5lbFNsaWRlQ2xpcD5cbik7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUTZCIn0= */"),StyledPanelSlideBody=styled("div",{shouldForwardProp:prop=>"pinnedWidth"!==prop&&"anchor"!==prop,target:"eak7i851",label:"StyledPanelSlideBody"})(({pinnedWidth,anchor})=>({width:"100%",height:"100%",...null!=pinnedWidth&&{position:"absolute",top:0,[anchor]:0,width:`${pinnedWidth}px`}}),"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L1BhbmVsU2xpZGVCb2R5LnRzeCIsInNvdXJjZXMiOlsic3JjL2NvbXBvbmVudHMvTGF5b3V0L1BhbmVsU2xpZGVCb2R5LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcblxuLyoqIEVkZ2UgdGhlIGJvZHkgaXMgcGlubmVkIHRvIHdoaWxlIHRoZSBjb2x1bW4gc2xpZGVzIC0gdGhlIHBhbmVsJ3MgZG9ja2VkXG4gKiAgZWRnZSAoYHJpZ2h0YCBmb3IgdGhlIGxlZnQgcGFuZWwsIGBsZWZ0YCBmb3IgdGhlIHJpZ2h0IHBhbmVsKS4gKi9cbmV4cG9ydCB0eXBlIFBhbmVsU2xpZGVBbmNob3IgPSBcImxlZnRcIiB8IFwicmlnaHRcIjtcblxuLy8gQ2xpcHMgdGhlIGJvZHkgdG8gdGhlIGNvbHVtbiB3aGlsZSBpdHMgd2lkdGggYW5pbWF0ZXMuXG5jb25zdCBTdHlsZWRQYW5lbFNsaWRlQ2xpcCA9IHN0eWxlZC5kaXYoe1xuICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICB3aWR0aDogXCIxMDAlXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIG92ZXJmbG93OiBcImhpZGRlblwiLFxufSk7XG5cbi8vIFdoaWxlIHRoZSBjb2x1bW4ncyB3aWR0aCBhbmltYXRlcywgdGhlIGJvZHkgaXMgcGlubmVkIHRvIGl0cyByZXN0aW5nIHdpZHRoIGFuZFxuLy8gYW5jaG9yZWQgdG8gdGhlIGRvY2tlZCBlZGdlOiB0aGUgZ3Jvd2luZyBjbGlwIHRoZW4gcmV2ZWFscyBpdCBmcm9tIHRoZVxuLy8gb3Bwb3NpdGUgZWRnZSAtIHJlYWRpbmcgYXMgdGhlIHBhbmVsIHNsaWRpbmcgaW4gd2hpbGUgdGhlIGNvbnRlbnQgaXMgcHVzaGVkIC1cbi8vIGFuZCBpdHMgY29udGVudCBuZXZlciByZWZsb3dzIG1pZC1hbmltYXRpb24uIEF0IHJlc3QgKHBpbm5lZFdpZHRoID09IG51bGwpIGl0XG4vLyBmaWxscyB0aGUgY29sdW1uIHNvIHRoZSBwYW5lbCBzdGF5cyByZXNpemFibGUuXG5jb25zdCBTdHlsZWRQYW5lbFNsaWRlQm9keSA9IHN0eWxlZChcImRpdlwiLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiAocHJvcCkgPT4gcHJvcCAhPT0gXCJwaW5uZWRXaWR0aFwiICYmIHByb3AgIT09IFwiYW5jaG9yXCIsXG59KTx7IHBpbm5lZFdpZHRoOiBudW1iZXIgfCBudWxsOyBhbmNob3I6IFBhbmVsU2xpZGVBbmNob3IgfT4oXG4gICh7IHBpbm5lZFdpZHRoLCBhbmNob3IgfSkgPT4gKHtcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAuLi4ocGlubmVkV2lkdGggIT0gbnVsbCAmJiB7XG4gICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgdG9wOiAwLFxuICAgICAgW2FuY2hvcl06IDAsXG4gICAgICB3aWR0aDogYCR7cGlubmVkV2lkdGh9cHhgLFxuICAgIH0pLFxuICB9KVxuKTtcblxuZXhwb3J0IHR5cGUgUGFuZWxTbGlkZUJvZHlQcm9wcyA9IHtcbiAgLyoqIEJvZHkgd2lkdGggKHB4KSB3aGlsZSBzbGlkaW5nOyBgbnVsbGAgYXQgcmVzdCAoZmlsbHMgdGhlIGNvbHVtbikuIENvbWVzXG4gICAqICBmcm9tIHtAbGluayB1c2VQYW5lbERvY2tlZFNsaWRlfS4gKi9cbiAgcGlubmVkV2lkdGg6IG51bWJlciB8IG51bGw7XG4gIC8qKiBUaGUgZWRnZSB0aGUgcGFuZWwgZG9ja3MgYWdhaW5zdC4gKi9cbiAgYW5jaG9yOiBQYW5lbFNsaWRlQW5jaG9yO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufTtcblxuLyoqXG4gKiBUaGUgY2xpcHBlZCwgZWRnZS1hbmNob3JlZCBib2R5IGEgZG9ja2VkIHNpZGUgcGFuZWwncyBjb250ZW50IGxpdmVzIGluIHNvXG4gKiBpdHMgb3Blbi9jbG9zZSB3aWR0aCBhbmltYXRpb24gcmVhZHMgYXMgYSBkcmF3ZXIgc2xpZGUuIFBhaXIgd2l0aFxuICoge0BsaW5rIHVzZVBhbmVsRG9ja2VkU2xpZGV9LCB3aGljaCBzdXBwbGllcyBgcGlubmVkV2lkdGhgLlxuICovXG5leHBvcnQgY29uc3QgUGFuZWxTbGlkZUJvZHk6IFJlYWN0LkZDPFBhbmVsU2xpZGVCb2R5UHJvcHM+ID0gKHtcbiAgcGlubmVkV2lkdGgsXG4gIGFuY2hvcixcbiAgY2hpbGRyZW4sXG59KSA9PiAoXG4gIDxTdHlsZWRQYW5lbFNsaWRlQ2xpcD5cbiAgICA8U3R5bGVkUGFuZWxTbGlkZUJvZHkgcGlubmVkV2lkdGg9e3Bpbm5lZFdpZHRofSBhbmNob3I9e2FuY2hvcn0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TdHlsZWRQYW5lbFNsaWRlQm9keT5cbiAgPC9TdHlsZWRQYW5lbFNsaWRlQ2xpcD5cbik7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0I2QiJ9 */");export const PanelSlideBody=({pinnedWidth,anchor,children})=>React.createElement(StyledPanelSlideClip,null,React.createElement(StyledPanelSlideBody,{pinnedWidth:pinnedWidth,anchor:anchor},children));
|