@amboss/design-system 4.0.0-next.3 → 4.0.0-next.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/AIButton/AIButton.js +1 -4
- package/build/cjs/components/AIFloatingButton/AIFloatingButton.d.ts +10 -0
- package/build/cjs/components/AIFloatingButton/AIFloatingButton.js +1 -0
- package/build/cjs/components/AvatarGroup/AvatarGroup.d.ts +3 -3
- package/build/cjs/components/AvatarGroup/AvatarGroup.js +1 -1
- package/build/cjs/components/BinaryFeedback/-types.d.ts +1 -1
- package/build/cjs/components/BulkActionsToolbar/BulkActionsToolbar.d.ts +1 -1
- package/build/cjs/components/CatalogCard/CatalogCard.js +1 -1
- package/build/cjs/components/ChatMessage/ChatMessage.d.ts +46 -0
- package/build/cjs/components/ChatMessage/ChatMessage.js +1 -0
- package/build/cjs/components/ChatMessage/index.d.ts +2 -0
- package/build/cjs/components/ChatMessage/index.js +1 -0
- package/build/cjs/components/ChatResponse/ChatResponse.d.ts +50 -0
- package/build/cjs/components/ChatResponse/ChatResponse.js +1 -0
- package/build/cjs/components/ChatResponse/constants.d.ts +7 -0
- package/build/cjs/components/ChatResponse/constants.js +1 -0
- package/build/cjs/components/ChatResponse/index.d.ts +2 -0
- package/build/cjs/components/ChatResponse/index.js +1 -0
- package/build/cjs/components/ColorPicker/ColorPicker.d.ts +1 -1
- package/build/cjs/components/ColorPicker/ColorPickerDropdown.d.ts +1 -1
- package/build/cjs/components/Content/ContentPictogramButton/ContentPictogramButton.d.ts +1 -1
- package/build/cjs/components/Content/ContentTableModal/ContentTableModal.d.ts +1 -1
- package/build/cjs/components/EntityList/BaseEntityList.js +1 -1
- package/build/cjs/components/EntityList/VirtualizedEntityList.d.ts +3 -2
- package/build/cjs/components/EntityList/roles.d.ts +9 -0
- package/build/cjs/components/EntityList/roles.js +1 -0
- package/build/cjs/components/EntityList/types.d.ts +24 -7
- package/build/cjs/components/Form/SegmentedControl/-types.d.ts +3 -3
- package/build/cjs/components/Form/ToolbarToggle/-types.d.ts +1 -1
- package/build/cjs/components/Icon/Icon.d.ts +2 -2
- package/build/cjs/components/Icon/Icon.js +1 -1
- package/build/cjs/components/IconTile/IconTile.d.ts +1 -1
- package/build/cjs/components/Image/Image.d.ts +13 -21
- package/build/cjs/components/Image/Image.js +1 -1
- package/build/cjs/components/Internal/BaseTag/BaseTag.d.ts +1 -1
- package/build/cjs/components/Internal/Float/Float.d.ts +7 -0
- package/build/cjs/components/Internal/Float/Float.js +1 -0
- package/build/cjs/components/Internal/Panel/Panel.d.ts +36 -0
- package/build/cjs/components/Internal/Panel/Panel.js +1 -0
- package/build/cjs/components/Internal/Panel/index.d.ts +2 -0
- package/build/cjs/components/Internal/Panel/index.js +1 -0
- package/build/cjs/components/Internal/Sandwich/-types.d.ts +36 -0
- package/build/cjs/components/Internal/Sandwich/-types.js +1 -0
- package/build/cjs/components/Internal/Sandwich/Sandwich.d.ts +23 -0
- package/build/cjs/components/Internal/Sandwich/Sandwich.js +1 -0
- package/build/cjs/components/Internal/Sandwich/SandwichBody.d.ts +3 -0
- package/build/cjs/components/Internal/Sandwich/SandwichBody.js +1 -0
- package/build/cjs/components/Internal/Sandwich/SandwichFooter.d.ts +3 -0
- package/build/cjs/components/Internal/Sandwich/SandwichFooter.js +1 -0
- package/build/cjs/components/Internal/Sandwich/SandwichHeader.d.ts +3 -0
- package/build/cjs/components/Internal/Sandwich/SandwichHeader.js +1 -0
- package/build/cjs/components/Internal/Sandwich/useSandwichContext.d.ts +12 -0
- package/build/cjs/components/Internal/Sandwich/useSandwichContext.js +1 -0
- package/build/cjs/components/Layout/-constants.d.ts +30 -0
- package/build/cjs/components/Layout/-constants.js +1 -0
- package/build/cjs/components/Layout/-types.d.ts +214 -0
- package/build/cjs/components/Layout/-types.js +1 -0
- package/build/cjs/components/Layout/Content.d.ts +7 -0
- package/build/cjs/components/Layout/Content.js +1 -0
- package/build/cjs/components/Layout/Layout.d.ts +17 -0
- package/build/cjs/components/Layout/Layout.js +1 -0
- package/build/cjs/components/Layout/LayoutProvider.d.ts +15 -0
- package/build/cjs/components/Layout/LayoutProvider.js +1 -0
- package/build/cjs/components/Layout/LayoutVars.d.ts +18 -0
- package/build/cjs/components/Layout/LayoutVars.js +1 -0
- package/build/cjs/components/Layout/RightPanel.d.ts +9 -0
- package/build/cjs/components/Layout/RightPanel.js +1 -0
- package/build/cjs/components/Layout/RightPanelContainer.d.ts +3 -0
- package/build/cjs/components/Layout/RightPanelContainer.js +1 -0
- package/build/cjs/components/Layout/Sidebar.d.ts +8 -0
- package/build/cjs/components/Layout/Sidebar.js +1 -0
- package/build/cjs/components/Layout/Split.d.ts +7 -0
- package/build/cjs/components/Layout/Split.js +1 -0
- package/build/cjs/components/Layout/context.d.ts +22 -0
- package/build/cjs/components/Layout/context.js +1 -0
- package/build/cjs/components/Layout/index.d.ts +9 -0
- package/build/cjs/components/Layout/index.js +1 -0
- package/build/cjs/components/Layout/reducer.d.ts +5 -0
- package/build/cjs/components/Layout/reducer.js +1 -0
- package/build/cjs/components/Layout/registry.d.ts +31 -0
- package/build/cjs/components/Layout/registry.js +1 -0
- package/build/cjs/components/Layout/store.d.ts +10 -0
- package/build/cjs/components/Layout/store.js +1 -0
- package/build/cjs/components/Layout/useLayout.d.ts +7 -0
- package/build/cjs/components/Layout/useLayout.js +1 -0
- package/build/cjs/components/Layout/usePanelRefs.d.ts +19 -0
- package/build/cjs/components/Layout/usePanelRefs.js +1 -0
- package/build/cjs/components/Layout/usePortalContainerRefs.d.ts +20 -0
- package/build/cjs/components/Layout/usePortalContainerRefs.js +1 -0
- package/build/cjs/components/Layout/varStore.d.ts +17 -0
- package/build/cjs/components/Layout/varStore.js +1 -0
- package/build/cjs/components/Lightbox/Lightbox.d.ts +1 -1
- package/build/cjs/components/NavBar/NavBarPrimaryNav.d.ts +4 -2
- package/build/cjs/components/NavBar/NavBarPrimaryNav.js +1 -1
- package/build/cjs/components/NavBar/NavBarSearchInput.d.ts +3 -2
- package/build/cjs/components/NavBar/NavBarSearchInput.js +1 -1
- package/build/cjs/components/NavBar/NavBarSecondaryNav.d.ts +5 -2
- package/build/cjs/components/NavBar/NavBarSecondaryNav.js +1 -1
- package/build/cjs/components/NavBar/NavBarSubMenuContainer.js +1 -1
- package/build/cjs/components/NavBar/constants.d.ts +1 -0
- package/build/cjs/components/NavBar/constants.js +1 -1
- package/build/cjs/components/Pagination/-types.d.ts +1 -1
- package/build/cjs/components/Patterns/EmptyState/EmptyState.d.ts +2 -2
- package/build/cjs/components/Patterns/EmptyState/EmptyState.js +1 -1
- package/build/cjs/components/PictogramButton/PictogramButton.d.ts +14 -5
- package/build/cjs/components/PictogramButton/PictogramButton.js +1 -1
- package/build/cjs/components/Portal/Portal.d.ts +1 -0
- package/build/cjs/components/Portal/Portal.js +1 -1
- package/build/cjs/components/ProgressBar/ProgressBar.d.ts +1 -1
- package/build/cjs/components/PromptInput/CategoryList.js +1 -1
- package/build/cjs/components/PromptInput/PromptTextArea.d.ts +1 -1
- package/build/cjs/components/SplashCardMedia/SplashCardMedia.d.ts +2 -2
- package/build/cjs/components/SplashCardMedia/SplashCardMedia.js +1 -1
- package/build/cjs/components/Typography/Header/Header.d.ts +1 -1
- package/build/cjs/components/Utilities/FloatingPosition/useFloatingPosition.d.ts +18 -4
- package/build/cjs/components/Utilities/FloatingPosition/useFloatingPosition.js +1 -1
- package/build/cjs/components/Utilities/FloatingPosition/utils.d.ts +6 -0
- package/build/cjs/components/Utilities/FloatingPosition/utils.js +1 -1
- package/build/cjs/index.d.ts +4 -0
- package/build/cjs/index.js +1 -1
- package/build/cjs/shared/mixins/Button/getAIButtonStyles.d.ts +7 -0
- package/build/cjs/shared/mixins/Button/getAIButtonStyles.js +4 -0
- package/build/cjs/types/a11y.d.ts +10 -8
- package/build/cjs/types/index.d.ts +15 -1
- package/build/cjs/types/index.js +1 -1
- package/build/cjs/types/type-helpers.d.ts +39 -0
- package/build/cjs/types/type-helpers.js +1 -0
- package/build/cjs/web-tokens/_colors.json +10 -0
- package/build/cjs/web-tokens/assets/icons.json +2 -1
- package/build/cjs/web-tokens/assets/icons16.json +1 -0
- package/build/cjs/web-tokens/visualConfig.d.ts +7 -0
- package/build/cjs/web-tokens/visualConfig.js +1 -1
- package/build/esm/components/AIButton/AIButton.js +1 -4
- package/build/esm/components/AIFloatingButton/AIFloatingButton.d.ts +10 -0
- package/build/esm/components/AIFloatingButton/AIFloatingButton.js +1 -0
- package/build/esm/components/AvatarGroup/AvatarGroup.d.ts +3 -3
- package/build/esm/components/AvatarGroup/AvatarGroup.js +1 -1
- package/build/esm/components/BinaryFeedback/-types.d.ts +1 -1
- package/build/esm/components/BulkActionsToolbar/BulkActionsToolbar.d.ts +1 -1
- package/build/esm/components/CatalogCard/CatalogCard.js +1 -1
- package/build/esm/components/ChatMessage/ChatMessage.d.ts +46 -0
- package/build/esm/components/ChatMessage/ChatMessage.js +1 -0
- package/build/esm/components/ChatMessage/index.d.ts +2 -0
- package/build/esm/components/ChatMessage/index.js +1 -0
- package/build/esm/components/ChatResponse/ChatResponse.d.ts +50 -0
- package/build/esm/components/ChatResponse/ChatResponse.js +1 -0
- package/build/esm/components/ChatResponse/constants.d.ts +7 -0
- package/build/esm/components/ChatResponse/constants.js +1 -0
- package/build/esm/components/ChatResponse/index.d.ts +2 -0
- package/build/esm/components/ChatResponse/index.js +1 -0
- package/build/esm/components/ColorPicker/ColorPicker.d.ts +1 -1
- package/build/esm/components/ColorPicker/ColorPickerDropdown.d.ts +1 -1
- package/build/esm/components/Content/ContentPictogramButton/ContentPictogramButton.d.ts +1 -1
- package/build/esm/components/Content/ContentTableModal/ContentTableModal.d.ts +1 -1
- package/build/esm/components/EntityList/BaseEntityList.js +1 -1
- package/build/esm/components/EntityList/VirtualizedEntityList.d.ts +3 -2
- package/build/esm/components/EntityList/roles.d.ts +9 -0
- package/build/esm/components/EntityList/roles.js +1 -0
- package/build/esm/components/EntityList/types.d.ts +24 -7
- package/build/esm/components/Form/SegmentedControl/-types.d.ts +3 -3
- package/build/esm/components/Form/ToolbarToggle/-types.d.ts +1 -1
- package/build/esm/components/Icon/Icon.d.ts +2 -2
- package/build/esm/components/Icon/Icon.js +1 -1
- package/build/esm/components/IconTile/IconTile.d.ts +1 -1
- package/build/esm/components/Image/Image.d.ts +13 -21
- package/build/esm/components/Image/Image.js +1 -1
- package/build/esm/components/Internal/BaseTag/BaseTag.d.ts +1 -1
- package/build/esm/components/Internal/Float/Float.d.ts +7 -0
- package/build/esm/components/Internal/Float/Float.js +1 -0
- package/build/esm/components/Internal/Panel/Panel.d.ts +36 -0
- package/build/esm/components/Internal/Panel/Panel.js +1 -0
- package/build/esm/components/Internal/Panel/index.d.ts +2 -0
- package/build/esm/components/Internal/Panel/index.js +1 -0
- package/build/esm/components/Internal/Sandwich/-types.d.ts +36 -0
- package/build/esm/components/Internal/Sandwich/-types.js +1 -0
- package/build/esm/components/Internal/Sandwich/Sandwich.d.ts +23 -0
- package/build/esm/components/Internal/Sandwich/Sandwich.js +1 -0
- package/build/esm/components/Internal/Sandwich/SandwichBody.d.ts +3 -0
- package/build/esm/components/Internal/Sandwich/SandwichBody.js +1 -0
- package/build/esm/components/Internal/Sandwich/SandwichFooter.d.ts +3 -0
- package/build/esm/components/Internal/Sandwich/SandwichFooter.js +1 -0
- package/build/esm/components/Internal/Sandwich/SandwichHeader.d.ts +3 -0
- package/build/esm/components/Internal/Sandwich/SandwichHeader.js +1 -0
- package/build/esm/components/Internal/Sandwich/useSandwichContext.d.ts +12 -0
- package/build/esm/components/Internal/Sandwich/useSandwichContext.js +1 -0
- package/build/esm/components/Layout/-constants.d.ts +30 -0
- package/build/esm/components/Layout/-constants.js +1 -0
- package/build/esm/components/Layout/-types.d.ts +214 -0
- package/build/esm/components/Layout/-types.js +1 -0
- package/build/esm/components/Layout/Content.d.ts +7 -0
- package/build/esm/components/Layout/Content.js +1 -0
- package/build/esm/components/Layout/Layout.d.ts +17 -0
- package/build/esm/components/Layout/Layout.js +1 -0
- package/build/esm/components/Layout/LayoutProvider.d.ts +15 -0
- package/build/esm/components/Layout/LayoutProvider.js +1 -0
- package/build/esm/components/Layout/LayoutVars.d.ts +18 -0
- package/build/esm/components/Layout/LayoutVars.js +1 -0
- package/build/esm/components/Layout/RightPanel.d.ts +9 -0
- package/build/esm/components/Layout/RightPanel.js +1 -0
- package/build/esm/components/Layout/RightPanelContainer.d.ts +3 -0
- package/build/esm/components/Layout/RightPanelContainer.js +1 -0
- package/build/esm/components/Layout/Sidebar.d.ts +8 -0
- package/build/esm/components/Layout/Sidebar.js +1 -0
- package/build/esm/components/Layout/Split.d.ts +7 -0
- package/build/esm/components/Layout/Split.js +1 -0
- package/build/esm/components/Layout/context.d.ts +22 -0
- package/build/esm/components/Layout/context.js +1 -0
- package/build/esm/components/Layout/index.d.ts +9 -0
- package/build/esm/components/Layout/index.js +1 -0
- package/build/esm/components/Layout/reducer.d.ts +5 -0
- package/build/esm/components/Layout/reducer.js +1 -0
- package/build/esm/components/Layout/registry.d.ts +31 -0
- package/build/esm/components/Layout/registry.js +1 -0
- package/build/esm/components/Layout/store.d.ts +10 -0
- package/build/esm/components/Layout/store.js +1 -0
- package/build/esm/components/Layout/useLayout.d.ts +7 -0
- package/build/esm/components/Layout/useLayout.js +1 -0
- package/build/esm/components/Layout/usePanelRefs.d.ts +19 -0
- package/build/esm/components/Layout/usePanelRefs.js +1 -0
- package/build/esm/components/Layout/usePortalContainerRefs.d.ts +20 -0
- package/build/esm/components/Layout/usePortalContainerRefs.js +1 -0
- package/build/esm/components/Layout/varStore.d.ts +17 -0
- package/build/esm/components/Layout/varStore.js +1 -0
- package/build/esm/components/Lightbox/Lightbox.d.ts +1 -1
- package/build/esm/components/NavBar/NavBarPrimaryNav.d.ts +4 -2
- package/build/esm/components/NavBar/NavBarPrimaryNav.js +1 -1
- package/build/esm/components/NavBar/NavBarSearchInput.d.ts +3 -2
- package/build/esm/components/NavBar/NavBarSearchInput.js +1 -1
- package/build/esm/components/NavBar/NavBarSecondaryNav.d.ts +5 -2
- package/build/esm/components/NavBar/NavBarSecondaryNav.js +1 -1
- package/build/esm/components/NavBar/NavBarSubMenuContainer.js +1 -1
- package/build/esm/components/NavBar/constants.d.ts +1 -0
- package/build/esm/components/NavBar/constants.js +1 -1
- package/build/esm/components/Pagination/-types.d.ts +1 -1
- package/build/esm/components/Patterns/EmptyState/EmptyState.d.ts +2 -2
- package/build/esm/components/Patterns/EmptyState/EmptyState.js +1 -1
- package/build/esm/components/PictogramButton/PictogramButton.d.ts +14 -5
- package/build/esm/components/PictogramButton/PictogramButton.js +1 -1
- package/build/esm/components/Portal/Portal.d.ts +1 -0
- package/build/esm/components/Portal/Portal.js +1 -1
- package/build/esm/components/ProgressBar/ProgressBar.d.ts +1 -1
- package/build/esm/components/PromptInput/CategoryList.js +1 -1
- package/build/esm/components/PromptInput/PromptTextArea.d.ts +1 -1
- package/build/esm/components/SplashCardMedia/SplashCardMedia.d.ts +2 -2
- package/build/esm/components/SplashCardMedia/SplashCardMedia.js +1 -1
- package/build/esm/components/Typography/Header/Header.d.ts +1 -1
- package/build/esm/components/Utilities/FloatingPosition/useFloatingPosition.d.ts +18 -4
- package/build/esm/components/Utilities/FloatingPosition/useFloatingPosition.js +1 -1
- package/build/esm/components/Utilities/FloatingPosition/utils.d.ts +6 -0
- package/build/esm/components/Utilities/FloatingPosition/utils.js +1 -1
- package/build/esm/index.d.ts +4 -0
- package/build/esm/index.js +1 -1
- package/build/esm/shared/mixins/Button/getAIButtonStyles.d.ts +7 -0
- package/build/esm/shared/mixins/Button/getAIButtonStyles.js +4 -0
- package/build/esm/types/a11y.d.ts +10 -8
- package/build/esm/types/index.d.ts +15 -1
- package/build/esm/types/index.js +1 -1
- package/build/esm/types/type-helpers.d.ts +39 -0
- package/build/esm/types/type-helpers.js +1 -0
- package/build/esm/web-tokens/_colors.json +10 -0
- package/build/esm/web-tokens/assets/icons.json +2 -1
- package/build/esm/web-tokens/assets/icons16.json +1 -0
- package/build/esm/web-tokens/visualConfig.d.ts +7 -0
- package/build/esm/web-tokens/visualConfig.js +1 -1
- package/build/scss/_dark.scss +1 -0
- package/build/scss/_light.scss +1 -0
- package/build/scss/_variables.scss +1 -0
- package/package.json +6 -4
- package/build/cjs/components/Content/ContentTableModal/ContentTableModal.mocks.d.ts +0 -3
- package/build/cjs/components/Content/ContentTableModal/ContentTableModal.mocks.js +0 -1
- package/build/cjs/components/EntityTree/treeListData.mock.d.ts +0 -3
- package/build/cjs/components/EntityTree/treeListData.mock.js +0 -1
- package/build/cjs/components/MediaViewerCarousel/MediaViewerCarousel.mocks.d.ts +0 -2
- package/build/cjs/components/MediaViewerCarousel/MediaViewerCarousel.mocks.js +0 -1
- package/build/esm/components/Content/ContentTableModal/ContentTableModal.mocks.d.ts +0 -3
- package/build/esm/components/Content/ContentTableModal/ContentTableModal.mocks.js +0 -1
- package/build/esm/components/EntityTree/treeListData.mock.d.ts +0 -3
- package/build/esm/components/EntityTree/treeListData.mock.js +0 -1
- package/build/esm/components/MediaViewerCarousel/MediaViewerCarousel.mocks.d.ts +0 -2
- package/build/esm/components/MediaViewerCarousel/MediaViewerCarousel.mocks.js +0 -1
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { PanelKey, SidePanelKey, SlotKey } from "./-constants";
|
|
3
|
+
import type { IconProps } from "../Icon/Icon";
|
|
4
|
+
/**
|
|
5
|
+
* Surface = compound components (`Layout.Sidebar` / `Layout.RightPanel` /
|
|
6
|
+
* `Layout.Content` / `Layout.Split`) + one control hook
|
|
7
|
+
* (`useLayout()`). The manager owns the open/collapsed/size state; components
|
|
8
|
+
* render per that state. State engine is replaceable (see `LayoutStore`).
|
|
9
|
+
*
|
|
10
|
+
* Slots (max 4 panels, max 3 visible at once — budget enforcement deferred):
|
|
11
|
+
* sidebar | content | splitview | rightPanel
|
|
12
|
+
*/
|
|
13
|
+
/** A size: plain number = pixels; unitless string = percentage ("10%"). */
|
|
14
|
+
export type Size = number | string;
|
|
15
|
+
/**
|
|
16
|
+
* - `sidebar` — in-flow resizable panel.
|
|
17
|
+
* - `offcanvas` — detached desktop overlay. ⚠️ **RESERVED — not implemented yet.**
|
|
18
|
+
* Currently treated like `sidebar` (renders in-flow); the overlay
|
|
19
|
+
* implementation lands in a later commit.
|
|
20
|
+
*/
|
|
21
|
+
export type Variant = "sidebar" | "offcanvas";
|
|
22
|
+
export type { PanelKey, SidePanelKey, SlotKey };
|
|
23
|
+
export type SidePanelState = {
|
|
24
|
+
kind: "sidePanel";
|
|
25
|
+
/** Shown vs hidden. */
|
|
26
|
+
visible: boolean;
|
|
27
|
+
/** Whether it can collapse at all. */
|
|
28
|
+
collapsible: boolean;
|
|
29
|
+
/** Render style. */
|
|
30
|
+
variant: Variant;
|
|
31
|
+
/** Current size (px number or "%" string). */
|
|
32
|
+
size?: Size;
|
|
33
|
+
/** Constraint from config (component prop overrides). */
|
|
34
|
+
minSize?: Size;
|
|
35
|
+
maxSize?: Size;
|
|
36
|
+
};
|
|
37
|
+
export type PanelState = {
|
|
38
|
+
kind: "panel";
|
|
39
|
+
/** content is always visible; splitview is toggleable. */
|
|
40
|
+
visible: boolean;
|
|
41
|
+
size?: Size;
|
|
42
|
+
/** Constraint from config (component prop overrides). */
|
|
43
|
+
minSize?: Size;
|
|
44
|
+
maxSize?: Size;
|
|
45
|
+
};
|
|
46
|
+
export type LayoutState = {
|
|
47
|
+
sidebar: SidePanelState;
|
|
48
|
+
rightPanel: SidePanelState;
|
|
49
|
+
content: PanelState;
|
|
50
|
+
splitview: PanelState;
|
|
51
|
+
};
|
|
52
|
+
export type SidePanelConfig = {
|
|
53
|
+
defaultVisible?: boolean;
|
|
54
|
+
collapsible?: boolean;
|
|
55
|
+
variant?: Variant;
|
|
56
|
+
defaultSize?: Size;
|
|
57
|
+
minSize?: Size;
|
|
58
|
+
maxSize?: Size;
|
|
59
|
+
};
|
|
60
|
+
export type PanelConfig = {
|
|
61
|
+
defaultVisible?: boolean;
|
|
62
|
+
defaultSize?: Size;
|
|
63
|
+
minSize?: Size;
|
|
64
|
+
maxSize?: Size;
|
|
65
|
+
};
|
|
66
|
+
export type LayoutConfig = {
|
|
67
|
+
sidebar?: SidePanelConfig;
|
|
68
|
+
rightPanel?: SidePanelConfig;
|
|
69
|
+
content?: PanelConfig;
|
|
70
|
+
splitview?: PanelConfig;
|
|
71
|
+
};
|
|
72
|
+
export type LayoutAction = {
|
|
73
|
+
type: "setVisible";
|
|
74
|
+
slot: SlotKey;
|
|
75
|
+
visible: boolean;
|
|
76
|
+
} | {
|
|
77
|
+
type: "setVariant";
|
|
78
|
+
panel: SidePanelKey;
|
|
79
|
+
variant: Variant;
|
|
80
|
+
} | {
|
|
81
|
+
type: "resize";
|
|
82
|
+
slot: SlotKey;
|
|
83
|
+
size: Size;
|
|
84
|
+
}
|
|
85
|
+
/** Restore one slot (or all, if omitted) to its config-default state.
|
|
86
|
+
* Page panels default hidden, so this also hides them — handy on unmount. */
|
|
87
|
+
| {
|
|
88
|
+
type: "reset";
|
|
89
|
+
slot?: SlotKey;
|
|
90
|
+
};
|
|
91
|
+
export type LayoutReducer = (state: LayoutState, action: LayoutAction,
|
|
92
|
+
/** Config-default state, used by the `reset` action. */
|
|
93
|
+
initial?: LayoutState) => LayoutState;
|
|
94
|
+
/**
|
|
95
|
+
* Replaceable state engine. Matches `useSyncExternalStore` + zustand/redux
|
|
96
|
+
* conventions. The manager depends only on this interface, so a zustand-backed
|
|
97
|
+
* store can be injected via `<LayoutProvider store={…}>`.
|
|
98
|
+
*/
|
|
99
|
+
export type LayoutStore = {
|
|
100
|
+
getState: () => LayoutState;
|
|
101
|
+
dispatch: (action: LayoutAction) => void;
|
|
102
|
+
subscribe: (listener: () => void) => () => void;
|
|
103
|
+
};
|
|
104
|
+
export type LayoutStorage = {
|
|
105
|
+
getItem: (key: string) => string | null;
|
|
106
|
+
setItem: (key: string, value: string) => void;
|
|
107
|
+
};
|
|
108
|
+
export type SidePanelHandle = {
|
|
109
|
+
state: SidePanelState;
|
|
110
|
+
isVisible: boolean;
|
|
111
|
+
show: () => void;
|
|
112
|
+
hide: () => void;
|
|
113
|
+
resize: (size: Size) => void;
|
|
114
|
+
setVariant: (variant: Variant) => void;
|
|
115
|
+
/** Restore this slot to its config default (hides it for page panels). */
|
|
116
|
+
reset: () => void;
|
|
117
|
+
};
|
|
118
|
+
export type PanelHandle = {
|
|
119
|
+
state: PanelState;
|
|
120
|
+
isVisible: boolean;
|
|
121
|
+
show: () => void;
|
|
122
|
+
hide: () => void;
|
|
123
|
+
resize: (size: Size) => void;
|
|
124
|
+
/** Restore this slot to its config default (hides it for page panels). */
|
|
125
|
+
reset: () => void;
|
|
126
|
+
};
|
|
127
|
+
export type LayoutValue = {
|
|
128
|
+
state: LayoutState;
|
|
129
|
+
sidebar: SidePanelHandle;
|
|
130
|
+
rightPanel: SidePanelHandle;
|
|
131
|
+
content: PanelHandle;
|
|
132
|
+
splitview: PanelHandle;
|
|
133
|
+
};
|
|
134
|
+
export type SidePanelProps = {
|
|
135
|
+
children: React.ReactNode;
|
|
136
|
+
variant?: Variant;
|
|
137
|
+
collapsible?: boolean;
|
|
138
|
+
defaultSize?: Size;
|
|
139
|
+
minSize?: Size;
|
|
140
|
+
maxSize?: Size;
|
|
141
|
+
/** Called whenever the panel's visibility changes, with the new value. */
|
|
142
|
+
onVisibleChange?: (visible: boolean) => void;
|
|
143
|
+
};
|
|
144
|
+
export type ContentProps = {
|
|
145
|
+
children: React.ReactNode;
|
|
146
|
+
minSize?: Size;
|
|
147
|
+
maxSize?: Size;
|
|
148
|
+
};
|
|
149
|
+
export type SplitProps = {
|
|
150
|
+
children: React.ReactNode;
|
|
151
|
+
defaultSize?: Size;
|
|
152
|
+
minSize?: Size;
|
|
153
|
+
maxSize?: Size;
|
|
154
|
+
};
|
|
155
|
+
export type LayoutProviderProps = {
|
|
156
|
+
children: React.ReactNode;
|
|
157
|
+
config?: LayoutConfig;
|
|
158
|
+
store?: LayoutStore;
|
|
159
|
+
/** Persistence config for the whole layout namespace. The Provider does NOT
|
|
160
|
+
* read these — it publishes them to the nested `<Layout>` (which owns
|
|
161
|
+
* persistence). Kept here so consumers configure everything in one place. */
|
|
162
|
+
persistenceKey?: string;
|
|
163
|
+
storage?: LayoutStorage;
|
|
164
|
+
};
|
|
165
|
+
export type LayoutProps = {
|
|
166
|
+
children: React.ReactNode;
|
|
167
|
+
/** Persist panel SIZES (via react-resizable-panels), keyed by this. Open/
|
|
168
|
+
* visible/variant ("intent") persistence is separate and deferred. Falls
|
|
169
|
+
* back to the values on `Layout.Provider` when omitted. */
|
|
170
|
+
persistenceKey?: string;
|
|
171
|
+
storage?: LayoutStorage;
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* Title shown in the panel header. `label` always provides the panel's
|
|
175
|
+
* accessible name (even when the title block is visually hidden).
|
|
176
|
+
*/
|
|
177
|
+
export type RightPanelContainerTitle = {
|
|
178
|
+
/** Visible label and the panel's accessible name. */
|
|
179
|
+
label: string;
|
|
180
|
+
/** Optional leading icon. */
|
|
181
|
+
icon?: IconProps;
|
|
182
|
+
/** Show the visible label+icon block. Default `true`. When `false` the block
|
|
183
|
+
* is hidden but `label` is still exposed as the accessible name. */
|
|
184
|
+
isVisible?: boolean;
|
|
185
|
+
};
|
|
186
|
+
export type RightPanelContainerSlotProps = {
|
|
187
|
+
/** Header slots around the title. */
|
|
188
|
+
header?: {
|
|
189
|
+
/** Rendered at the header start, before the title. */
|
|
190
|
+
leftSlot?: React.ReactNode;
|
|
191
|
+
/** Rendered at the header end, after the title and before the close button. */
|
|
192
|
+
rightSlot?: React.ReactNode;
|
|
193
|
+
};
|
|
194
|
+
/** Sticky footer content. Footer is omitted entirely when not provided. */
|
|
195
|
+
footer?: React.ReactNode;
|
|
196
|
+
/** Props for the always-rendered close button. */
|
|
197
|
+
closeButton: {
|
|
198
|
+
"aria-label": string;
|
|
199
|
+
};
|
|
200
|
+
};
|
|
201
|
+
export type RightPanelContainerProps = {
|
|
202
|
+
title: RightPanelContainerTitle;
|
|
203
|
+
/** Scrollable body content. */
|
|
204
|
+
children: React.ReactNode;
|
|
205
|
+
/** Called when the (always rendered) close button is clicked. */
|
|
206
|
+
onClose?: () => void;
|
|
207
|
+
slotProps: RightPanelContainerSlotProps;
|
|
208
|
+
/** Forwarded to the scrollable body element (scroll restoration etc.). */
|
|
209
|
+
scrollContainerRef?: React.Ref<HTMLDivElement>;
|
|
210
|
+
/** Forwarded to the scrollable body's scroll handler. */
|
|
211
|
+
onScroll?: React.UIEventHandler<HTMLDivElement>;
|
|
212
|
+
"data-e2e-test-id"?: string;
|
|
213
|
+
};
|
|
214
|
+
export type RightPanelProps = SidePanelProps & Omit<RightPanelContainerProps, "data-e2e-test-id">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { ContentProps } from "./-types";
|
|
3
|
+
/**
|
|
4
|
+
* Primary content panel. Always shown (never collapsible) and flexes to fill the
|
|
5
|
+
* space the side panels leave. Declares the `content` slot and portals into it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const Content: React.FC<ContentProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Content",{enumerable:!0,get:function(){return Content}});const _constants=require("./-constants"),_registry=require("./registry"),Content=({children,minSize,maxSize})=>((0,_registry.useDeclarePanel)(_constants.Slot.content,{minSize,maxSize,collapsible:!1}),(0,_registry.useLayoutPortal)(_constants.Slot.content,children));
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { LayoutProvider } from "./LayoutProvider";
|
|
3
|
+
import { Content } from "./Content";
|
|
4
|
+
import { RightPanel } from "./RightPanel";
|
|
5
|
+
import { Sidebar } from "./Sidebar";
|
|
6
|
+
import { Split } from "./Split";
|
|
7
|
+
import type { LayoutProps } from "./-types";
|
|
8
|
+
declare function LayoutBase({ children, persistenceKey, storage, }: LayoutProps): React.ReactElement;
|
|
9
|
+
type LayoutComponent = typeof LayoutBase & {
|
|
10
|
+
Provider: typeof LayoutProvider;
|
|
11
|
+
Sidebar: typeof Sidebar;
|
|
12
|
+
RightPanel: typeof RightPanel;
|
|
13
|
+
Content: typeof Content;
|
|
14
|
+
Split: typeof Split;
|
|
15
|
+
};
|
|
16
|
+
export declare const Layout: LayoutComponent;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Layout",{enumerable:!0,get:function(){return Layout}});const _interop_require_default=require("@swc/helpers/_/_interop_require_default"),_react=/*#__PURE__*/require("@swc/helpers/_/_interop_require_wildcard")._(require("react")),_styled=/*#__PURE__*/_interop_require_default._(require("@emotion/styled")),_Panel=require("../Internal/Panel/Panel"),_constants=require("./-constants"),_context=require("./context"),_LayoutProvider=require("./LayoutProvider"),_Content=require("./Content"),_RightPanel=require("./RightPanel"),_Sidebar=require("./Sidebar"),_Split=require("./Split"),_registry=require("./registry"),_usePortalContainerRefs=require("./usePortalContainerRefs"),_useLayout=require("./useLayout"),StyledLayout=(0,_styled.default)("div",{target:"eu1s17s0",label:"StyledLayout"})({position:"relative",height:"100%",width:"100%"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9MYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHN0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkXCI7XG5pbXBvcnQgeyBQYW5lbCB9IGZyb20gXCIuLi9JbnRlcm5hbC9QYW5lbC9QYW5lbFwiO1xuaW1wb3J0IHR5cGUgeyBQYW5lbEl0ZW0gfSBmcm9tIFwiLi4vSW50ZXJuYWwvUGFuZWwvUGFuZWxcIjtcbmltcG9ydCB7IFBBTkVMX09SREVSLCBTbG90IH0gZnJvbSBcIi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0UGVyc2lzdGVuY2UgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBMYXlvdXRQcm92aWRlciB9IGZyb20gXCIuL0xheW91dFByb3ZpZGVyXCI7XG5pbXBvcnQgeyBDb250ZW50IH0gZnJvbSBcIi4vQ29udGVudFwiO1xuaW1wb3J0IHsgUmlnaHRQYW5lbCB9IGZyb20gXCIuL1JpZ2h0UGFuZWxcIjtcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tIFwiLi9TaWRlYmFyXCI7XG5pbXBvcnQgeyBTcGxpdCB9IGZyb20gXCIuL1NwbGl0XCI7XG5pbXBvcnQge1xuICBMYXlvdXRQb3J0YWxDb250ZXh0LFxuICBQYW5lbFJlZ2lzdHJ5Q29udGV4dCxcbiAgdHlwZSBQYW5lbFJlZyxcbiAgdHlwZSBQYW5lbFJlZ2lzdHJ5LFxufSBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuaW1wb3J0IHsgdXNlUG9ydGFsQ29udGFpbmVyUmVmcyB9IGZyb20gXCIuL3VzZVBvcnRhbENvbnRhaW5lclJlZnNcIjtcbmltcG9ydCB7IHVzZUxheW91dCB9IGZyb20gXCIuL3VzZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRQcm9wcywgU2l6ZSwgU2xvdEtleSB9IGZyb20gXCIuLy10eXBlc1wiO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogTGF5b3V0IOKAlCByZWdpc3RyeSArIGhvc3RzOyBtYXJrZXJzIGRlY2xhcmUvcG9ydGFsOyB0aGUgcmVzaXphYmxlIHBhbmVsIHJvdyAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBTdHlsZWRMYXlvdXQgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxufSk7XG5cbi8vIFNvbG8tbW9kZSBob3N0OiBhIGxvbmUgcGFuZWwgKG5vIHJlc2l6YWJsZSBzaWJsaW5nKSBpcyBob3N0ZWQgaGVyZSBpbnN0ZWFkIG9mXG4vLyBpbnNpZGUgcmVhY3QtcmVzaXphYmxlLXBhbmVscy4gTWF0Y2hlcyB0aGUgcGVyLXBhbmVsIGhvc3QgdGhlIEdyb3VwIHJlbmRlcnNcbi8vIChgcmVsYXRpdmVgICsgZnVsbC1ibGVlZCkgc28gY29udGVudCByZWZsb3dzL3Njcm9sbHMgaWRlbnRpY2FsbHkgZWl0aGVyIHdheS5cbmNvbnN0IFN0eWxlZFNvbG9Ib3N0ID0gc3R5bGVkLmRpdih7XG4gIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHdpZHRoOiBcIjEwMCVcIixcbn0pO1xuXG5mdW5jdGlvbiBMYXlvdXRCYXNlKHtcbiAgY2hpbGRyZW4sXG4gIHBlcnNpc3RlbmNlS2V5LFxuICBzdG9yYWdlLFxufTogTGF5b3V0UHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICBjb25zdCBbZGVjbGFyZWQsIHNldERlY2xhcmVkXSA9IHVzZVN0YXRlPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIFBhbmVsUmVnPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHsgc3RhdGU6IGxheW91dFN0YXRlLCAuLi5wYW5lbENhbGxiYWNrcyB9ID0gdXNlTGF5b3V0KCk7XG4gIGNvbnN0IHBlcnNpc3RlbmNlID0gdXNlTGF5b3V0UGVyc2lzdGVuY2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRLZXkgPSBwZXJzaXN0ZW5jZUtleSA/PyBwZXJzaXN0ZW5jZS5wZXJzaXN0ZW5jZUtleTtcbiAgY29uc3QgcmVzb2x2ZWRTdG9yYWdlID0gc3RvcmFnZSA/PyBwZXJzaXN0ZW5jZS5zdG9yYWdlO1xuXG4gIGNvbnN0IGlzU2hvd24gPSAoc2xvdDogU2xvdEtleSk6IGJvb2xlYW4gPT4gbGF5b3V0U3RhdGVbc2xvdF0udmlzaWJsZTtcblxuICBjb25zdCByZWdpc3RyeSA9IHVzZU1lbW88UGFuZWxSZWdpc3RyeT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHJlZ2lzdGVyOiAoc2xvdCwgcmVnKSA9PlxuICAgICAgICBzZXREZWNsYXJlZCgocHJldikgPT4gKHsgLi4ucHJldiwgW3Nsb3RdOiByZWcgfSkpLFxuICAgICAgdW5yZWdpc3RlcjogKHNsb3QpID0+XG4gICAgICAgIHNldERlY2xhcmVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgaWYgKCEoc2xvdCBpbiBwcmV2KSkgcmV0dXJuIHByZXY7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xuICAgICAgICAgIGRlbGV0ZSBuZXh0W3Nsb3RdO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9KSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IFtub2RlcywgaG9zdFJlZnNdID0gdXNlUG9ydGFsQ29udGFpbmVyUmVmcyhQQU5FTF9PUkRFUik7XG5cbiAgLy8gUGFuZWxzIHRoYXQgZXhpc3QgaW4gdGhlIGxheW91dCwgcmVnYXJkbGVzcyBvZiB2aXNpYmlsaXR5LiBEcml2ZXMgdGhlXG4gIC8vIHNvbG8tdnMtcmVzaXphYmxlIGRlY2lzaW9uIGJlbG93IOKAlCBrZXllZCBvbiBERUNMQVJFRCAobm90IHNob3duKSBzbyB0aGF0XG4gIC8vIHNob3dpbmcvaGlkaW5nIGEgcGFuZWwgbmV2ZXIgZmxpcHMgdGhlIG1vZGUuXG4gIGNvbnN0IGRlY2xhcmVkU2xvdHMgPSBQQU5FTF9PUkRFUi5maWx0ZXIoKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdKTtcblxuICAvLyBTb2xvIG1vZGU6IGEgc2luZ2xlIHBhbmVsIGlzIGRlY2xhcmVkIChlLmcuIGp1c3QgYENvbnRlbnRgLCB3aXRoIG5vXG4gIC8vIFJpZ2h0UGFuZWwvU2lkZWJhci9TcGxpdCBpbiB0aGUgdHJlZSkg4oCUIG5vdGhpbmcgdG8gcmVzaXplIGFnYWluc3QsIHNvIGhvc3RcbiAgLy8gaXQgaW4gYSBwbGFpbiBkaXYgYW5kIHNraXAgcmVhY3QtcmVzaXphYmxlLXBhbmVscyBlbnRpcmVseS4gQmVjYXVzZSB0aGVcbiAgLy8gY2hlY2sgaXMgb24gREVDTEFSRUQgcGFuZWxzLCB0b2dnbGluZyBhICpkZWNsYXJlZCogcGFuZWwncyB2aXNpYmlsaXR5IGtlZXBzXG4gIC8vIHRoZSBtb2RlIHN0YWJsZSwgc28gYENvbnRlbnRgIGlzIG5ldmVyIHJlbW91bnRlZCBieSBhIHNob3cvaGlkZS4gVGhlIG1vZGVcbiAgLy8gb25seSBmbGlwcyB3aGVuIGEgcGFuZWwgbWFya2VyIGlzIGFkZGVkIHRvIC8gcmVtb3ZlZCBmcm9tIHRoZSB0cmVlIChhXG4gIC8vIHN0cnVjdHVyYWwgY2hhbmdlKSwgd2hlcmUgYSBvbmUtdGltZSByZW1vdW50IGlzIGFjY2VwdGFibGUuXG4gIGNvbnN0IGlzU29sbyA9IGRlY2xhcmVkU2xvdHMubGVuZ3RoIDw9IDE7XG4gIGNvbnN0IHNvbG9TbG90ID0gZGVjbGFyZWRTbG90c1swXTtcblxuICAvLyBjb250ZW50IGZsZXhlcyAobm8gZml4ZWQgc2l6ZSk7IG90aGVycyB1c2UgdGhlIGRlY2xhcmVkIGRlZmF1bHQsIGZhbGxpbmdcbiAgLy8gYmFjayB0byB0aGUgcGVyc2lzdGVkL2NvbmZpZyBzaXplLlxuICBjb25zdCBkZWZhdWx0U2l6ZUZvciA9IChzbG90OiBTbG90S2V5KTogU2l6ZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHNsb3QgPT09IFNsb3QuY29udGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGVjbGFyZWRbc2xvdF0/LmRlZmF1bHRTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLnNpemU7XG4gIH07XG5cbiAgLy8gT25seSB0aGUgcGFuZWxzIHRoYXQgYXJlIGRlY2xhcmVkIEFORCBjdXJyZW50bHkgc2hvd24uIENsb3NlZC9oaWRkZW4gcGFuZWxzXG4gIC8vIGFyZSBub3QgcmVuZGVyZWQgYXQgYWxsIOKAlCBubyByZXNlcnZlZCBzcGFjZS5cbiAgY29uc3QgcGFuZWxJdGVtczogUGFuZWxJdGVtW10gPSBQQU5FTF9PUkRFUi5maWx0ZXIoXG4gICAgKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdICYmIGlzU2hvd24oc2xvdClcbiAgKS5tYXAoKHNsb3QpID0+ICh7XG4gICAgaWQ6IHNsb3QsXG4gICAgZGVmYXVsdFNpemU6IGRlZmF1bHRTaXplRm9yKHNsb3QpLFxuICAgIG1pblNpemU6IGRlY2xhcmVkW3Nsb3RdPy5taW5TaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLm1pblNpemUsXG4gICAgbWF4U2l6ZTogZGVjbGFyZWRbc2xvdF0/Lm1heFNpemUgPz8gbGF5b3V0U3RhdGVbc2xvdF0ubWF4U2l6ZSxcbiAgICBjb2xsYXBzaWJsZTogc2xvdCAhPT0gU2xvdC5jb250ZW50ICYmIChkZWNsYXJlZFtzbG90XT8uY29sbGFwc2libGUgPz8gdHJ1ZSksXG4gIH0pKTtcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbFJlZ2lzdHJ5Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17cmVnaXN0cnl9PlxuICAgICAgPExheW91dFBvcnRhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e25vZGVzfT5cbiAgICAgICAgPFN0eWxlZExheW91dCBkYXRhLWRzLWlkPVwiTGF5b3V0XCI+XG4gICAgICAgICAge2lzU29sb1xuICAgICAgICAgICAgPyAvLyBMb25lIHBhbmVsIOKAlCBob3N0IGl0IGluIGEgcGxhaW4gZGl2LCBubyByZXNpemFibGUgR3JvdXAuIEhpZGRlblxuICAgICAgICAgICAgICAvLyBsb25lIHBhbmVscyByZW5kZXIgbm90aGluZyAoQ29udGVudCBpcyBhbHdheXMgc2hvd24pLlxuICAgICAgICAgICAgICBzb2xvU2xvdCAmJlxuICAgICAgICAgICAgICBpc1Nob3duKHNvbG9TbG90KSAmJiA8U3R5bGVkU29sb0hvc3QgcmVmPXtob3N0UmVmc1tzb2xvU2xvdF19IC8+XG4gICAgICAgICAgICA6IHBhbmVsSXRlbXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgLy8gYGtleWAgPSB0aGUgcGVyc2lzdGVuY2UgbmFtZXNwYWNlLiByZWFjdC1yZXNpemFibGUtcGFuZWxzXG4gICAgICAgICAgICAgICAgLy8gcmVhZHMgc3RvcmVkIHNpemVzIG9ubHkgb24gbW91bnQsIGFuZCB0aGlzIGdyb3VwIHN0YXlzXG4gICAgICAgICAgICAgICAgLy8gbW91bnRlZCBhY3Jvc3MgbmF2aWdhdGlvbiDigJQgc28gcmVtb3VudCBpdCB3aGVuIHRoZSBrZXlcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2VzIHRvIGxvYWQgVEhBVCBpbnN0YW5jZSdzIHNpemVzLiBVc2UgY2FzZTpcbiAgICAgICAgICAgICAgICAvLyBwZXItcm91dGUvcGVyLWluc3RhbmNlIHNpemUgbWVtb3J5IChlLmcuXG4gICAgICAgICAgICAgICAgLy8gYHBlcnNpc3RlbmNlS2V5PXtgbGF5b3V0OiR7cm91dGVJZH1gfWApIOKAlCBkcmFnIHRoZSBjaGF0IHdpZGVcbiAgICAgICAgICAgICAgICAvLyBvbiBwYWdlIEEsIHN3aXRjaCB0byBwYWdlIEIgKGl0cyBvd24gd2lkdGhzKSwgY29tZSBiYWNrIHRvIEFcbiAgICAgICAgICAgICAgICAvLyBhbmQgZmluZCBBJ3Mgd2lkdGhzIHJlc3RvcmVkLiBUaGUga2V5IG9ubHkgY2hhbmdlcyBvblxuICAgICAgICAgICAgICAgIC8vIGluc3RhbmNlIHN3aXRjaCwgbmV2ZXIgb24gcGFuZWwgb3Blbi9jbG9zZSwgc28gbm9ybWFsXG4gICAgICAgICAgICAgICAgLy8gdG9nZ2xpbmcgc3RheXMgcmVtb3VudC1mcmVlLlxuICAgICAgICAgICAgICAgIDxQYW5lbFxuICAgICAgICAgICAgICAgICAga2V5PXtyZXNvbHZlZEtleX1cbiAgICAgICAgICAgICAgICAgIHBhbmVscz17cGFuZWxJdGVtc31cbiAgICAgICAgICAgICAgICAgIHBlcnNpc3RlbmNlS2V5PXtyZXNvbHZlZEtleX1cbiAgICAgICAgICAgICAgICAgIHN0b3JhZ2U9e3Jlc29sdmVkU3RvcmFnZX1cbiAgICAgICAgICAgICAgICAgIGhvc3RGb3I9eyhpZCkgPT4gaG9zdFJlZnNbaWQgYXMgU2xvdEtleV19XG4gICAgICAgICAgICAgICAgICBvblJlc2l6ZT17KGlkLCBzaXplKSA9PlxuICAgICAgICAgICAgICAgICAgICBwYW5lbENhbGxiYWNrc1tpZCBhcyBTbG90S2V5XS5yZXNpemUoc2l6ZSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG9uQ29sbGFwc2U9eyhpZCkgPT4gcGFuZWxDYWxsYmFja3NbaWQgYXMgU2xvdEtleV0uaGlkZSgpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L1N0eWxlZExheW91dD5cbiAgICAgIDwvTGF5b3V0UG9ydGFsQ29udGV4dC5Qcm92aWRlcj5cbiAgICA8L1BhbmVsUmVnaXN0cnlDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogUHVibGljIExheW91dCDigJQgdGhlIHJlc2l6YWJsZSBwYW5lbCByb3cgKyBjb21wb3VuZCBwYXJ0cyBhcyBzdGF0aWNzICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbnR5cGUgTGF5b3V0Q29tcG9uZW50ID0gdHlwZW9mIExheW91dEJhc2UgJiB7XG4gIFByb3ZpZGVyOiB0eXBlb2YgTGF5b3V0UHJvdmlkZXI7XG4gIFNpZGViYXI6IHR5cGVvZiBTaWRlYmFyO1xuICBSaWdodFBhbmVsOiB0eXBlb2YgUmlnaHRQYW5lbDtcbiAgQ29udGVudDogdHlwZW9mIENvbnRlbnQ7XG4gIFNwbGl0OiB0eXBlb2YgU3BsaXQ7XG59O1xuXG5leHBvcnQgY29uc3QgTGF5b3V0ID0gTGF5b3V0QmFzZSBhcyBMYXlvdXRDb21wb25lbnQ7XG5cbkxheW91dC5Qcm92aWRlciA9IExheW91dFByb3ZpZGVyO1xuTGF5b3V0LlNpZGViYXIgPSBTaWRlYmFyO1xuTGF5b3V0LlJpZ2h0UGFuZWwgPSBSaWdodFBhbmVsO1xuTGF5b3V0LkNvbnRlbnQgPSBDb250ZW50O1xuTGF5b3V0LlNwbGl0ID0gU3BsaXQ7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeUJxQiJ9 */"),StyledSoloHost=(0,_styled.default)("div",{target:"eu1s17s1",label:"StyledSoloHost"})({position:"relative",height:"100%",width:"100%"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50c3giLCJzb3VyY2VzIjpbInNyYy9jb21wb25lbnRzL0xheW91dC9MYXlvdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHN0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkXCI7XG5pbXBvcnQgeyBQYW5lbCB9IGZyb20gXCIuLi9JbnRlcm5hbC9QYW5lbC9QYW5lbFwiO1xuaW1wb3J0IHR5cGUgeyBQYW5lbEl0ZW0gfSBmcm9tIFwiLi4vSW50ZXJuYWwvUGFuZWwvUGFuZWxcIjtcbmltcG9ydCB7IFBBTkVMX09SREVSLCBTbG90IH0gZnJvbSBcIi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0UGVyc2lzdGVuY2UgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBMYXlvdXRQcm92aWRlciB9IGZyb20gXCIuL0xheW91dFByb3ZpZGVyXCI7XG5pbXBvcnQgeyBDb250ZW50IH0gZnJvbSBcIi4vQ29udGVudFwiO1xuaW1wb3J0IHsgUmlnaHRQYW5lbCB9IGZyb20gXCIuL1JpZ2h0UGFuZWxcIjtcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tIFwiLi9TaWRlYmFyXCI7XG5pbXBvcnQgeyBTcGxpdCB9IGZyb20gXCIuL1NwbGl0XCI7XG5pbXBvcnQge1xuICBMYXlvdXRQb3J0YWxDb250ZXh0LFxuICBQYW5lbFJlZ2lzdHJ5Q29udGV4dCxcbiAgdHlwZSBQYW5lbFJlZyxcbiAgdHlwZSBQYW5lbFJlZ2lzdHJ5LFxufSBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuaW1wb3J0IHsgdXNlUG9ydGFsQ29udGFpbmVyUmVmcyB9IGZyb20gXCIuL3VzZVBvcnRhbENvbnRhaW5lclJlZnNcIjtcbmltcG9ydCB7IHVzZUxheW91dCB9IGZyb20gXCIuL3VzZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRQcm9wcywgU2l6ZSwgU2xvdEtleSB9IGZyb20gXCIuLy10eXBlc1wiO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogTGF5b3V0IOKAlCByZWdpc3RyeSArIGhvc3RzOyBtYXJrZXJzIGRlY2xhcmUvcG9ydGFsOyB0aGUgcmVzaXphYmxlIHBhbmVsIHJvdyAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBTdHlsZWRMYXlvdXQgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxufSk7XG5cbi8vIFNvbG8tbW9kZSBob3N0OiBhIGxvbmUgcGFuZWwgKG5vIHJlc2l6YWJsZSBzaWJsaW5nKSBpcyBob3N0ZWQgaGVyZSBpbnN0ZWFkIG9mXG4vLyBpbnNpZGUgcmVhY3QtcmVzaXphYmxlLXBhbmVscy4gTWF0Y2hlcyB0aGUgcGVyLXBhbmVsIGhvc3QgdGhlIEdyb3VwIHJlbmRlcnNcbi8vIChgcmVsYXRpdmVgICsgZnVsbC1ibGVlZCkgc28gY29udGVudCByZWZsb3dzL3Njcm9sbHMgaWRlbnRpY2FsbHkgZWl0aGVyIHdheS5cbmNvbnN0IFN0eWxlZFNvbG9Ib3N0ID0gc3R5bGVkLmRpdih7XG4gIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHdpZHRoOiBcIjEwMCVcIixcbn0pO1xuXG5mdW5jdGlvbiBMYXlvdXRCYXNlKHtcbiAgY2hpbGRyZW4sXG4gIHBlcnNpc3RlbmNlS2V5LFxuICBzdG9yYWdlLFxufTogTGF5b3V0UHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICBjb25zdCBbZGVjbGFyZWQsIHNldERlY2xhcmVkXSA9IHVzZVN0YXRlPFBhcnRpYWw8UmVjb3JkPFNsb3RLZXksIFBhbmVsUmVnPj4+KFxuICAgIHt9XG4gICk7XG4gIGNvbnN0IHsgc3RhdGU6IGxheW91dFN0YXRlLCAuLi5wYW5lbENhbGxiYWNrcyB9ID0gdXNlTGF5b3V0KCk7XG4gIGNvbnN0IHBlcnNpc3RlbmNlID0gdXNlTGF5b3V0UGVyc2lzdGVuY2UoKTtcbiAgY29uc3QgcmVzb2x2ZWRLZXkgPSBwZXJzaXN0ZW5jZUtleSA/PyBwZXJzaXN0ZW5jZS5wZXJzaXN0ZW5jZUtleTtcbiAgY29uc3QgcmVzb2x2ZWRTdG9yYWdlID0gc3RvcmFnZSA/PyBwZXJzaXN0ZW5jZS5zdG9yYWdlO1xuXG4gIGNvbnN0IGlzU2hvd24gPSAoc2xvdDogU2xvdEtleSk6IGJvb2xlYW4gPT4gbGF5b3V0U3RhdGVbc2xvdF0udmlzaWJsZTtcblxuICBjb25zdCByZWdpc3RyeSA9IHVzZU1lbW88UGFuZWxSZWdpc3RyeT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIHJlZ2lzdGVyOiAoc2xvdCwgcmVnKSA9PlxuICAgICAgICBzZXREZWNsYXJlZCgocHJldikgPT4gKHsgLi4ucHJldiwgW3Nsb3RdOiByZWcgfSkpLFxuICAgICAgdW5yZWdpc3RlcjogKHNsb3QpID0+XG4gICAgICAgIHNldERlY2xhcmVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgaWYgKCEoc2xvdCBpbiBwcmV2KSkgcmV0dXJuIHByZXY7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xuICAgICAgICAgIGRlbGV0ZSBuZXh0W3Nsb3RdO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9KSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IFtub2RlcywgaG9zdFJlZnNdID0gdXNlUG9ydGFsQ29udGFpbmVyUmVmcyhQQU5FTF9PUkRFUik7XG5cbiAgLy8gUGFuZWxzIHRoYXQgZXhpc3QgaW4gdGhlIGxheW91dCwgcmVnYXJkbGVzcyBvZiB2aXNpYmlsaXR5LiBEcml2ZXMgdGhlXG4gIC8vIHNvbG8tdnMtcmVzaXphYmxlIGRlY2lzaW9uIGJlbG93IOKAlCBrZXllZCBvbiBERUNMQVJFRCAobm90IHNob3duKSBzbyB0aGF0XG4gIC8vIHNob3dpbmcvaGlkaW5nIGEgcGFuZWwgbmV2ZXIgZmxpcHMgdGhlIG1vZGUuXG4gIGNvbnN0IGRlY2xhcmVkU2xvdHMgPSBQQU5FTF9PUkRFUi5maWx0ZXIoKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdKTtcblxuICAvLyBTb2xvIG1vZGU6IGEgc2luZ2xlIHBhbmVsIGlzIGRlY2xhcmVkIChlLmcuIGp1c3QgYENvbnRlbnRgLCB3aXRoIG5vXG4gIC8vIFJpZ2h0UGFuZWwvU2lkZWJhci9TcGxpdCBpbiB0aGUgdHJlZSkg4oCUIG5vdGhpbmcgdG8gcmVzaXplIGFnYWluc3QsIHNvIGhvc3RcbiAgLy8gaXQgaW4gYSBwbGFpbiBkaXYgYW5kIHNraXAgcmVhY3QtcmVzaXphYmxlLXBhbmVscyBlbnRpcmVseS4gQmVjYXVzZSB0aGVcbiAgLy8gY2hlY2sgaXMgb24gREVDTEFSRUQgcGFuZWxzLCB0b2dnbGluZyBhICpkZWNsYXJlZCogcGFuZWwncyB2aXNpYmlsaXR5IGtlZXBzXG4gIC8vIHRoZSBtb2RlIHN0YWJsZSwgc28gYENvbnRlbnRgIGlzIG5ldmVyIHJlbW91bnRlZCBieSBhIHNob3cvaGlkZS4gVGhlIG1vZGVcbiAgLy8gb25seSBmbGlwcyB3aGVuIGEgcGFuZWwgbWFya2VyIGlzIGFkZGVkIHRvIC8gcmVtb3ZlZCBmcm9tIHRoZSB0cmVlIChhXG4gIC8vIHN0cnVjdHVyYWwgY2hhbmdlKSwgd2hlcmUgYSBvbmUtdGltZSByZW1vdW50IGlzIGFjY2VwdGFibGUuXG4gIGNvbnN0IGlzU29sbyA9IGRlY2xhcmVkU2xvdHMubGVuZ3RoIDw9IDE7XG4gIGNvbnN0IHNvbG9TbG90ID0gZGVjbGFyZWRTbG90c1swXTtcblxuICAvLyBjb250ZW50IGZsZXhlcyAobm8gZml4ZWQgc2l6ZSk7IG90aGVycyB1c2UgdGhlIGRlY2xhcmVkIGRlZmF1bHQsIGZhbGxpbmdcbiAgLy8gYmFjayB0byB0aGUgcGVyc2lzdGVkL2NvbmZpZyBzaXplLlxuICBjb25zdCBkZWZhdWx0U2l6ZUZvciA9IChzbG90OiBTbG90S2V5KTogU2l6ZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHNsb3QgPT09IFNsb3QuY29udGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGVjbGFyZWRbc2xvdF0/LmRlZmF1bHRTaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLnNpemU7XG4gIH07XG5cbiAgLy8gT25seSB0aGUgcGFuZWxzIHRoYXQgYXJlIGRlY2xhcmVkIEFORCBjdXJyZW50bHkgc2hvd24uIENsb3NlZC9oaWRkZW4gcGFuZWxzXG4gIC8vIGFyZSBub3QgcmVuZGVyZWQgYXQgYWxsIOKAlCBubyByZXNlcnZlZCBzcGFjZS5cbiAgY29uc3QgcGFuZWxJdGVtczogUGFuZWxJdGVtW10gPSBQQU5FTF9PUkRFUi5maWx0ZXIoXG4gICAgKHNsb3QpID0+IGRlY2xhcmVkW3Nsb3RdICYmIGlzU2hvd24oc2xvdClcbiAgKS5tYXAoKHNsb3QpID0+ICh7XG4gICAgaWQ6IHNsb3QsXG4gICAgZGVmYXVsdFNpemU6IGRlZmF1bHRTaXplRm9yKHNsb3QpLFxuICAgIG1pblNpemU6IGRlY2xhcmVkW3Nsb3RdPy5taW5TaXplID8/IGxheW91dFN0YXRlW3Nsb3RdLm1pblNpemUsXG4gICAgbWF4U2l6ZTogZGVjbGFyZWRbc2xvdF0/Lm1heFNpemUgPz8gbGF5b3V0U3RhdGVbc2xvdF0ubWF4U2l6ZSxcbiAgICBjb2xsYXBzaWJsZTogc2xvdCAhPT0gU2xvdC5jb250ZW50ICYmIChkZWNsYXJlZFtzbG90XT8uY29sbGFwc2libGUgPz8gdHJ1ZSksXG4gIH0pKTtcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbFJlZ2lzdHJ5Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17cmVnaXN0cnl9PlxuICAgICAgPExheW91dFBvcnRhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e25vZGVzfT5cbiAgICAgICAgPFN0eWxlZExheW91dCBkYXRhLWRzLWlkPVwiTGF5b3V0XCI+XG4gICAgICAgICAge2lzU29sb1xuICAgICAgICAgICAgPyAvLyBMb25lIHBhbmVsIOKAlCBob3N0IGl0IGluIGEgcGxhaW4gZGl2LCBubyByZXNpemFibGUgR3JvdXAuIEhpZGRlblxuICAgICAgICAgICAgICAvLyBsb25lIHBhbmVscyByZW5kZXIgbm90aGluZyAoQ29udGVudCBpcyBhbHdheXMgc2hvd24pLlxuICAgICAgICAgICAgICBzb2xvU2xvdCAmJlxuICAgICAgICAgICAgICBpc1Nob3duKHNvbG9TbG90KSAmJiA8U3R5bGVkU29sb0hvc3QgcmVmPXtob3N0UmVmc1tzb2xvU2xvdF19IC8+XG4gICAgICAgICAgICA6IHBhbmVsSXRlbXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgLy8gYGtleWAgPSB0aGUgcGVyc2lzdGVuY2UgbmFtZXNwYWNlLiByZWFjdC1yZXNpemFibGUtcGFuZWxzXG4gICAgICAgICAgICAgICAgLy8gcmVhZHMgc3RvcmVkIHNpemVzIG9ubHkgb24gbW91bnQsIGFuZCB0aGlzIGdyb3VwIHN0YXlzXG4gICAgICAgICAgICAgICAgLy8gbW91bnRlZCBhY3Jvc3MgbmF2aWdhdGlvbiDigJQgc28gcmVtb3VudCBpdCB3aGVuIHRoZSBrZXlcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2VzIHRvIGxvYWQgVEhBVCBpbnN0YW5jZSdzIHNpemVzLiBVc2UgY2FzZTpcbiAgICAgICAgICAgICAgICAvLyBwZXItcm91dGUvcGVyLWluc3RhbmNlIHNpemUgbWVtb3J5IChlLmcuXG4gICAgICAgICAgICAgICAgLy8gYHBlcnNpc3RlbmNlS2V5PXtgbGF5b3V0OiR7cm91dGVJZH1gfWApIOKAlCBkcmFnIHRoZSBjaGF0IHdpZGVcbiAgICAgICAgICAgICAgICAvLyBvbiBwYWdlIEEsIHN3aXRjaCB0byBwYWdlIEIgKGl0cyBvd24gd2lkdGhzKSwgY29tZSBiYWNrIHRvIEFcbiAgICAgICAgICAgICAgICAvLyBhbmQgZmluZCBBJ3Mgd2lkdGhzIHJlc3RvcmVkLiBUaGUga2V5IG9ubHkgY2hhbmdlcyBvblxuICAgICAgICAgICAgICAgIC8vIGluc3RhbmNlIHN3aXRjaCwgbmV2ZXIgb24gcGFuZWwgb3Blbi9jbG9zZSwgc28gbm9ybWFsXG4gICAgICAgICAgICAgICAgLy8gdG9nZ2xpbmcgc3RheXMgcmVtb3VudC1mcmVlLlxuICAgICAgICAgICAgICAgIDxQYW5lbFxuICAgICAgICAgICAgICAgICAga2V5PXtyZXNvbHZlZEtleX1cbiAgICAgICAgICAgICAgICAgIHBhbmVscz17cGFuZWxJdGVtc31cbiAgICAgICAgICAgICAgICAgIHBlcnNpc3RlbmNlS2V5PXtyZXNvbHZlZEtleX1cbiAgICAgICAgICAgICAgICAgIHN0b3JhZ2U9e3Jlc29sdmVkU3RvcmFnZX1cbiAgICAgICAgICAgICAgICAgIGhvc3RGb3I9eyhpZCkgPT4gaG9zdFJlZnNbaWQgYXMgU2xvdEtleV19XG4gICAgICAgICAgICAgICAgICBvblJlc2l6ZT17KGlkLCBzaXplKSA9PlxuICAgICAgICAgICAgICAgICAgICBwYW5lbENhbGxiYWNrc1tpZCBhcyBTbG90S2V5XS5yZXNpemUoc2l6ZSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG9uQ29sbGFwc2U9eyhpZCkgPT4gcGFuZWxDYWxsYmFja3NbaWQgYXMgU2xvdEtleV0uaGlkZSgpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L1N0eWxlZExheW91dD5cbiAgICAgIDwvTGF5b3V0UG9ydGFsQ29udGV4dC5Qcm92aWRlcj5cbiAgICA8L1BhbmVsUmVnaXN0cnlDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogUHVibGljIExheW91dCDigJQgdGhlIHJlc2l6YWJsZSBwYW5lbCByb3cgKyBjb21wb3VuZCBwYXJ0cyBhcyBzdGF0aWNzICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbnR5cGUgTGF5b3V0Q29tcG9uZW50ID0gdHlwZW9mIExheW91dEJhc2UgJiB7XG4gIFByb3ZpZGVyOiB0eXBlb2YgTGF5b3V0UHJvdmlkZXI7XG4gIFNpZGViYXI6IHR5cGVvZiBTaWRlYmFyO1xuICBSaWdodFBhbmVsOiB0eXBlb2YgUmlnaHRQYW5lbDtcbiAgQ29udGVudDogdHlwZW9mIENvbnRlbnQ7XG4gIFNwbGl0OiB0eXBlb2YgU3BsaXQ7XG59O1xuXG5leHBvcnQgY29uc3QgTGF5b3V0ID0gTGF5b3V0QmFzZSBhcyBMYXlvdXRDb21wb25lbnQ7XG5cbkxheW91dC5Qcm92aWRlciA9IExheW91dFByb3ZpZGVyO1xuTGF5b3V0LlNpZGViYXIgPSBTaWRlYmFyO1xuTGF5b3V0LlJpZ2h0UGFuZWwgPSBSaWdodFBhbmVsO1xuTGF5b3V0LkNvbnRlbnQgPSBDb250ZW50O1xuTGF5b3V0LlNwbGl0ID0gU3BsaXQ7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0N1QiJ9 */"),Layout=function({children,persistenceKey,storage}){let[declared,setDeclared]=(0,_react.useState)({}),{state:layoutState,...panelCallbacks}=(0,_useLayout.useLayout)(),persistence=(0,_context.useLayoutPersistence)(),resolvedKey=persistenceKey??persistence.persistenceKey,resolvedStorage=storage??persistence.storage,isShown=slot=>layoutState[slot].visible,registry=(0,_react.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]=(0,_usePortalContainerRefs.usePortalContainerRefs)(_constants.PANEL_ORDER),declaredSlots=_constants.PANEL_ORDER.filter(slot=>declared[slot]),isSolo=declaredSlots.length<=1,soloSlot=declaredSlots[0],defaultSizeFor=slot=>{if(slot!==_constants.Slot.content)return declared[slot]?.defaultSize??layoutState[slot].size},panelItems=_constants.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!==_constants.Slot.content&&(declared[slot]?.collapsible??!0)}));return _react.default.createElement(_registry.PanelRegistryContext.Provider,{value:registry},_react.default.createElement(_registry.LayoutPortalContext.Provider,{value:nodes},_react.default.createElement(StyledLayout,{"data-ds-id":"Layout"},isSolo?soloSlot&&isShown(soloSlot)&&_react.default.createElement(StyledSoloHost,{ref:hostRefs[soloSlot]}):panelItems.length>0&&_react.default.createElement(_Panel.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.LayoutProvider,Layout.Sidebar=_Sidebar.Sidebar,Layout.RightPanel=_RightPanel.RightPanel,Layout.Content=_Content.Content,Layout.Split=_Split.Split;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { LayoutProviderProps } from "./-types";
|
|
3
|
+
/**
|
|
4
|
+
* Owns the state engine + the public persistence-config surface. Mount once,
|
|
5
|
+
* above the router. Pass `store` to replace the default vanilla engine with a
|
|
6
|
+
* zustand/redux-backed one; otherwise a default store is built from `config`.
|
|
7
|
+
*
|
|
8
|
+
* `storage`/`persistenceKey` are accepted here so consumers configure the whole
|
|
9
|
+
* layout in one provider — but the Provider **never reads storage itself**.
|
|
10
|
+
* It publishes them to the nested, which owns persistence.
|
|
11
|
+
* Two tracks: panel sizes (via react-resizable-panels, working today) and the panels'
|
|
12
|
+
* "intent" — open/visible/variant (restore on mount + save on store.subscribe, still deferred).
|
|
13
|
+
* That deferral is the default store's; a bring-your-own store can persist intent itself.
|
|
14
|
+
*/
|
|
15
|
+
export declare function LayoutProvider({ children, config, store, persistenceKey, storage, }: LayoutProviderProps): React.ReactElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"LayoutProvider",{enumerable:!0,get:function(){return LayoutProvider}});const _react=/*#__PURE__*/require("@swc/helpers/_/_interop_require_wildcard")._(require("react")),_react1=require("@emotion/react"),_constants=require("./-constants"),_context=require("./context"),_LayoutVars=require("./LayoutVars"),_varStore=require("./varStore"),_reducer=require("./reducer"),_store=require("./store");function SlideVars(){let theme=(0,_react1.useTheme)(),open=theme.variables?.animation?.navSlide?.open;return(0,_LayoutVars.useLayoutVar)(_constants.SLIDE_VAR.duration,open?.duration??""),(0,_LayoutVars.useLayoutVar)(_constants.SLIDE_VAR.easing,open?.timingFunction??""),null}function LayoutProvider({children,config,store,persistenceKey,storage}){let storeRef=(0,_react.useRef)(null);null===storeRef.current&&(storeRef.current=store??(0,_store.createLayoutStore)((0,_reducer.createInitialState)(config)));let varStoreRef=(0,_react.useRef)(null);null===varStoreRef.current&&(varStoreRef.current=(0,_varStore.createLayoutVarStore)());let persistence=(0,_react.useMemo)(()=>({persistenceKey,storage}),[persistenceKey,storage]);return _react.default.createElement(_context.LayoutStoreProvider,{value:storeRef.current},_react.default.createElement(_context.LayoutPersistenceProvider,{value:persistence},_react.default.createElement(_LayoutVars.LayoutVarStoreProvider,{value:varStoreRef.current},_react.default.createElement(_LayoutVars.LayoutVars,null),_react.default.createElement(SlideVars,null),children)))}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { LayoutVarStore } from "./varStore";
|
|
3
|
+
export declare const LayoutVarStoreProvider: React.Provider<LayoutVarStore>;
|
|
4
|
+
/**
|
|
5
|
+
* Publish one layout CSS var. Call it from the component that owns the logic of
|
|
6
|
+
* *why* the value changes (e.g. the subnav: `compact ? 0 : height`). The value
|
|
7
|
+
* is registered on mount/update and removed on unmount, so the var only exists
|
|
8
|
+
* while its producer is mounted. An empty-string value is treated as unset (the
|
|
9
|
+
* var is removed) — lets a producer opt out without breaking hook order. No-op
|
|
10
|
+
* outside a `Layout.Provider`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useLayoutVar(name: string, value: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* The single sink: renders every registered layout var in ONE place. Today it
|
|
15
|
+
* targets `:root`; to scope the vars to a host element later, change only this
|
|
16
|
+
* component — producers are untouched.
|
|
17
|
+
*/
|
|
18
|
+
export declare function LayoutVars(): React.ReactElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get LayoutVarStoreProvider(){return LayoutVarStoreProvider},get LayoutVars(){return LayoutVars},get useLayoutVar(){return useLayoutVar}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});const _react=/*#__PURE__*/require("@swc/helpers/_/_interop_require_wildcard")._(require("react")),_react1=require("@emotion/react"),LayoutVarStoreContext=(0,_react.createContext)(null),LayoutVarStoreProvider=LayoutVarStoreContext.Provider,EMPTY_VARS={},NOOP_SUBSCRIBE=()=>()=>{};function useLayoutVar(name,value){let store=(0,_react.useContext)(LayoutVarStoreContext);(0,_react.useEffect)(()=>{if(store)return""===value?void store.remove(name):(store.set(name,value),()=>store.remove(name))},[store,name,value])}function LayoutVars(){let vars=function(){let store=(0,_react.useContext)(LayoutVarStoreContext);return(0,_react.useSyncExternalStore)(store?.subscribe??NOOP_SUBSCRIBE,store?store.getSnapshot:()=>EMPTY_VARS,()=>EMPTY_VARS)}();return _react.default.createElement(_react1.Global,{styles:[{":root":vars},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dFZhcnMudHN4Iiwic291cmNlcyI6WyJzcmMvY29tcG9uZW50cy9MYXlvdXQvTGF5b3V0VmFycy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUVmZmVjdCxcbiAgdXNlU3luY0V4dGVybmFsU3RvcmUsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IExheW91dFZhclN0b3JlIH0gZnJvbSBcIi4vdmFyU3RvcmVcIjtcblxuLyoqXG4gKiBDb250ZXh0IGNhcnJpZXMgdGhlIFZBUi1TVE9SRSBSRUZFUkVOQ0UgKHN0YWJsZSBmb3IgdGhlIHByb3ZpZGVyJ3MgbGlmZXRpbWUpLFxuICogbm90IHRoZSB2YWx1ZXMg4oCUIHNhbWUgYXBwcm9hY2ggYXMgdGhlIGxheW91dCBzdG9yZS4gUHJvZHVjZXJzIHB1Ymxpc2ggdGhyb3VnaFxuICogYHVzZUxheW91dFZhcmA7IHRoZSBgPExheW91dFZhcnM+YCBzaW5rIHJlYWRzIHRoZSB3aG9sZSBtYXAuXG4gKi9cbmNvbnN0IExheW91dFZhclN0b3JlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8TGF5b3V0VmFyU3RvcmUgfCBudWxsPihudWxsKTtcblxuZXhwb3J0IGNvbnN0IExheW91dFZhclN0b3JlUHJvdmlkZXIgPSBMYXlvdXRWYXJTdG9yZUNvbnRleHQuUHJvdmlkZXI7XG5cbi8vIFN0YWJsZSBmYWxsYmFja3Mgc28gdGhlIGhvb2tzIGJlbG93IGFyZSBzYWZlIHRvIGNhbGwgb3V0c2lkZSBhIHByb3ZpZGVyLlxuY29uc3QgRU1QVFlfVkFSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuY29uc3QgTk9PUF9TVUJTQ1JJQkUgPSAoKTogKCgpID0+IHZvaWQpID0+ICgpID0+IHt9O1xuXG4vKipcbiAqIFB1Ymxpc2ggb25lIGxheW91dCBDU1MgdmFyLiBDYWxsIGl0IGZyb20gdGhlIGNvbXBvbmVudCB0aGF0IG93bnMgdGhlIGxvZ2ljIG9mXG4gKiAqd2h5KiB0aGUgdmFsdWUgY2hhbmdlcyAoZS5nLiB0aGUgc3VibmF2OiBgY29tcGFjdCA/IDAgOiBoZWlnaHRgKS4gVGhlIHZhbHVlXG4gKiBpcyByZWdpc3RlcmVkIG9uIG1vdW50L3VwZGF0ZSBhbmQgcmVtb3ZlZCBvbiB1bm1vdW50LCBzbyB0aGUgdmFyIG9ubHkgZXhpc3RzXG4gKiB3aGlsZSBpdHMgcHJvZHVjZXIgaXMgbW91bnRlZC4gQW4gZW1wdHktc3RyaW5nIHZhbHVlIGlzIHRyZWF0ZWQgYXMgdW5zZXQgKHRoZVxuICogdmFyIGlzIHJlbW92ZWQpIOKAlCBsZXRzIGEgcHJvZHVjZXIgb3B0IG91dCB3aXRob3V0IGJyZWFraW5nIGhvb2sgb3JkZXIuIE5vLW9wXG4gKiBvdXRzaWRlIGEgYExheW91dC5Qcm92aWRlcmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMYXlvdXRWYXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHN0b3JlID0gdXNlQ29udGV4dChMYXlvdXRWYXJTdG9yZUNvbnRleHQpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc3RvcmUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHZhbHVlID09PSBcIlwiKSB7XG4gICAgICBzdG9yZS5yZW1vdmUobmFtZSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdG9yZS5zZXQobmFtZSwgdmFsdWUpO1xuICAgIHJldHVybiAoKSA9PiBzdG9yZS5yZW1vdmUobmFtZSk7XG4gIH0sIFtzdG9yZSwgbmFtZSwgdmFsdWVdKTtcbn1cblxuZnVuY3Rpb24gdXNlTGF5b3V0VmFycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3Qgc3RvcmUgPSB1c2VDb250ZXh0KExheW91dFZhclN0b3JlQ29udGV4dCk7XG4gIHJldHVybiB1c2VTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICBzdG9yZT8uc3Vic2NyaWJlID8/IE5PT1BfU1VCU0NSSUJFLFxuICAgIHN0b3JlID8gc3RvcmUuZ2V0U25hcHNob3QgOiAoKSA9PiBFTVBUWV9WQVJTLFxuICAgICgpID0+IEVNUFRZX1ZBUlNcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgc2luZ2xlIHNpbms6IHJlbmRlcnMgZXZlcnkgcmVnaXN0ZXJlZCBsYXlvdXQgdmFyIGluIE9ORSBwbGFjZS4gVG9kYXkgaXRcbiAqIHRhcmdldHMgYDpyb290YDsgdG8gc2NvcGUgdGhlIHZhcnMgdG8gYSBob3N0IGVsZW1lbnQgbGF0ZXIsIGNoYW5nZSBvbmx5IHRoaXNcbiAqIGNvbXBvbmVudCDigJQgcHJvZHVjZXJzIGFyZSB1bnRvdWNoZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMYXlvdXRWYXJzKCk6IFJlYWN0LlJlYWN0RWxlbWVudCB7XG4gIGNvbnN0IHZhcnMgPSB1c2VMYXlvdXRWYXJzKCk7XG4gIHJldHVybiA8R2xvYmFsIHN0eWxlcz17eyBcIjpyb290XCI6IHZhcnMgfX0gLz47XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkRVIn0= */"]})}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { RightPanelProps } from "./-types";
|
|
3
|
+
/**
|
|
4
|
+
* Right side panel. Declares the `rightPanel` slot and portals its content into
|
|
5
|
+
* the Group's host while visible. Renders in-flow (a resizable column) — the
|
|
6
|
+
* offcanvas overlay / mobile sheet is deferred. Content is wrapped in a slot
|
|
7
|
+
* that tracks the `--ds-layout-subnav-offset` var.
|
|
8
|
+
*/
|
|
9
|
+
export declare const RightPanel: React.FC<RightPanelProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"RightPanel",{enumerable:!0,get:function(){return RightPanel}});const _interop_require_default=require("@swc/helpers/_/_interop_require_default"),_react=/*#__PURE__*/_interop_require_default._(require("react")),_styled=/*#__PURE__*/_interop_require_default._(require("@emotion/styled")),_constants=require("./-constants"),_registry=require("./registry"),_useLayout=require("./useLayout"),_RightPanelContainer=require("./RightPanelContainer"),StyledRightPanelSlot=(0,_styled.default)("div",{target:"e1jmp3pg0",label:"StyledRightPanelSlot"})({position:"absolute",left:0,right:0,bottom:0,top:`var(${_constants.SUBNAV_OFFSET_VAR}, 0px)`,overflow:"hidden",transition:`top var(${_constants.SLIDE_VAR.duration}) var(${_constants.SLIDE_VAR.easing})`},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L1JpZ2h0UGFuZWwudHN4Iiwic291cmNlcyI6WyJzcmMvY29tcG9uZW50cy9MYXlvdXQvUmlnaHRQYW5lbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHN0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkXCI7XG5pbXBvcnQgeyBTTElERV9WQVIsIFNsb3QsIFNVQk5BVl9PRkZTRVRfVkFSIH0gZnJvbSBcIi4vLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlRGVjbGFyZVBhbmVsLCB1c2VMYXlvdXRQb3J0YWwsIHVzZVZpc2libGVDaGFuZ2UgfSBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuaW1wb3J0IHsgdXNlTGF5b3V0IH0gZnJvbSBcIi4vdXNlTGF5b3V0XCI7XG5pbXBvcnQgeyBSaWdodFBhbmVsQ29udGFpbmVyIH0gZnJvbSBcIi4vUmlnaHRQYW5lbENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgeyBSaWdodFBhbmVsUHJvcHMgfSBmcm9tIFwiLi8tdHlwZXNcIjtcblxuLy8gQnVpbHQtaW4gc2xvdDogb2Zmc2V0cyB0aGUgcGFuZWwgY29udGVudCBieSB0aGUgc3VibmF2LW9mZnNldCB2YXIgKDAgd2hlblxuLy8gdW5zZXQpLCB0cmFuc2l0aW9uZWQgd2l0aCB0aGUgc2hhcmVkIHNsaWRlIHZhcnMg4oCUIHNvIHRoZSByaWdodCBwYW5lbCB0cmFja3MgYVxuLy8gc3RpY2t5IHN1Ym5hdiB3aXRoIG5vIHdpcmluZyBvbiB0aGUgY29uc3VtZXIncyBzaWRlLlxuY29uc3QgU3R5bGVkUmlnaHRQYW5lbFNsb3QgPSBzdHlsZWQuZGl2KHtcbiAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgbGVmdDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiBgdmFyKCR7U1VCTkFWX09GRlNFVF9WQVJ9LCAwcHgpYCxcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gIHRyYW5zaXRpb246IGB0b3AgdmFyKCR7U0xJREVfVkFSLmR1cmF0aW9ufSkgdmFyKCR7U0xJREVfVkFSLmVhc2luZ30pYCxcbn0pO1xuXG4vKipcbiAqIFJpZ2h0IHNpZGUgcGFuZWwuIERlY2xhcmVzIHRoZSBgcmlnaHRQYW5lbGAgc2xvdCBhbmQgcG9ydGFscyBpdHMgY29udGVudCBpbnRvXG4gKiB0aGUgR3JvdXAncyBob3N0IHdoaWxlIHZpc2libGUuIFJlbmRlcnMgaW4tZmxvdyAoYSByZXNpemFibGUgY29sdW1uKSDigJQgdGhlXG4gKiBvZmZjYW52YXMgb3ZlcmxheSAvIG1vYmlsZSBzaGVldCBpcyBkZWZlcnJlZC4gQ29udGVudCBpcyB3cmFwcGVkIGluIGEgc2xvdFxuICogdGhhdCB0cmFja3MgdGhlIGAtLWRzLWxheW91dC1zdWJuYXYtb2Zmc2V0YCB2YXIuXG4gKi9cbmV4cG9ydCBjb25zdCBSaWdodFBhbmVsOiBSZWFjdC5GQzxSaWdodFBhbmVsUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGRlZmF1bHRTaXplID0gMzc4LFxuICBtaW5TaXplID0gMzI4LFxuICBtYXhTaXplID0gXCIzMCVcIixcbiAgY29sbGFwc2libGUgPSBmYWxzZSxcbiAgb25WaXNpYmxlQ2hhbmdlLFxuICB0aXRsZSxcbiAgb25DbG9zZSxcbiAgc2xvdFByb3BzLFxuICBzY3JvbGxDb250YWluZXJSZWYsXG4gIG9uU2Nyb2xsLFxufSkgPT4ge1xuICBjb25zdCB7IGlzVmlzaWJsZSwgaGlkZSB9ID0gdXNlTGF5b3V0KClbU2xvdC5yaWdodFBhbmVsXTtcbiAgdXNlRGVjbGFyZVBhbmVsKFNsb3QucmlnaHRQYW5lbCwge1xuICAgIGRlZmF1bHRTaXplLFxuICAgIG1pblNpemUsXG4gICAgbWF4U2l6ZSxcbiAgICBjb2xsYXBzaWJsZSxcbiAgfSk7XG4gIHVzZVZpc2libGVDaGFuZ2UoaXNWaXNpYmxlLCBvblZpc2libGVDaGFuZ2UpO1xuICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpOiB2b2lkID0+IHtcbiAgICBoaWRlKCk7XG4gICAgb25DbG9zZT8uKCk7XG4gIH07XG4gIHJldHVybiB1c2VMYXlvdXRQb3J0YWwoXG4gICAgU2xvdC5yaWdodFBhbmVsLFxuICAgIGlzVmlzaWJsZSA/IChcbiAgICAgIDxTdHlsZWRSaWdodFBhbmVsU2xvdD5cbiAgICAgICAgPFJpZ2h0UGFuZWxDb250YWluZXJcbiAgICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgICAgICAgc2xvdFByb3BzPXtzbG90UHJvcHN9XG4gICAgICAgICAgc2Nyb2xsQ29udGFpbmVyUmVmPXtzY3JvbGxDb250YWluZXJSZWZ9XG4gICAgICAgICAgb25TY3JvbGw9e29uU2Nyb2xsfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L1JpZ2h0UGFuZWxDb250YWluZXI+XG4gICAgICA8L1N0eWxlZFJpZ2h0UGFuZWxTbG90PlxuICAgICkgOiBudWxsXG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVc2QiJ9 */"),RightPanel=({children,defaultSize=378,minSize=328,maxSize="30%",collapsible=!1,onVisibleChange,title,onClose,slotProps,scrollContainerRef,onScroll})=>{let{isVisible,hide}=(0,_useLayout.useLayout)()[_constants.Slot.rightPanel];return(0,_registry.useDeclarePanel)(_constants.Slot.rightPanel,{defaultSize,minSize,maxSize,collapsible}),(0,_registry.useVisibleChange)(isVisible,onVisibleChange),(0,_registry.useLayoutPortal)(_constants.Slot.rightPanel,isVisible?_react.default.createElement(StyledRightPanelSlot,null,_react.default.createElement(_RightPanelContainer.RightPanelContainer,{title:title,onClose:()=>{hide(),onClose?.()},slotProps:slotProps,scrollContainerRef:scrollContainerRef,onScroll:onScroll},children)):null)};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { RightPanelContainerProps } from "./-types";
|
|
3
|
+
export declare function RightPanelContainer({ title, children, onClose, slotProps, scrollContainerRef, onScroll, "data-e2e-test-id": dataE2eTestId, }: RightPanelContainerProps): React.ReactElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"RightPanelContainer",{enumerable:!0,get:function(){return RightPanelContainer}});const _interop_require_default=require("@swc/helpers/_/_interop_require_default"),_react=/*#__PURE__*/_interop_require_default._(require("react")),_styled=/*#__PURE__*/_interop_require_default._(require("@emotion/styled")),_Sandwich=require("../Internal/Sandwich/Sandwich"),_Icon=require("../Icon/Icon"),_Header=require("../Typography/Header/Header"),_Box=require("../Box/Box"),_Inline=require("../Inline/Inline"),_PictogramButton=require("../PictogramButton/PictogramButton"),_Divider=require("../Divider/Divider"),_Container=require("../Container/Container"),CustomContainer=(0,_styled.default)(_Container.Container,{target:"e5j03vd0",label:"CustomContainer"})({height:"100%"},"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjL2NvbXBvbmVudHMvTGF5b3V0L1JpZ2h0UGFuZWxDb250YWluZXIudHN4Iiwic291cmNlcyI6WyJzcmMvY29tcG9uZW50cy9MYXlvdXQvUmlnaHRQYW5lbENvbnRhaW5lci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHN0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkXCI7XG5pbXBvcnQgeyBTYW5kd2ljaCB9IGZyb20gXCIuLi9JbnRlcm5hbC9TYW5kd2ljaC9TYW5kd2ljaFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uL0ljb25cIjtcbmltcG9ydCB7IEg1IH0gZnJvbSBcIi4uL1R5cG9ncmFwaHkvSGVhZGVyL0hlYWRlclwiO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIi4uL0JveC9Cb3hcIjtcbmltcG9ydCB7IElubGluZSB9IGZyb20gXCIuLi9JbmxpbmUvSW5saW5lXCI7XG5pbXBvcnQgeyBQaWN0b2dyYW1CdXR0b24gfSBmcm9tIFwiLi4vUGljdG9ncmFtQnV0dG9uL1BpY3RvZ3JhbUJ1dHRvblwiO1xuaW1wb3J0IHsgRGl2aWRlciB9IGZyb20gXCIuLi9EaXZpZGVyL0RpdmlkZXJcIjtcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gXCIuLi9Db250YWluZXIvQ29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSB7IFJpZ2h0UGFuZWxDb250YWluZXJQcm9wcyB9IGZyb20gXCIuLy10eXBlc1wiO1xuXG5jb25zdCBDdXN0b21Db250YWluZXIgPSBzdHlsZWQoQ29udGFpbmVyKSh7XG4gIGhlaWdodDogXCIxMDAlXCIsXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIFJpZ2h0UGFuZWxDb250YWluZXIoe1xuICB0aXRsZSxcbiAgY2hpbGRyZW4sXG4gIG9uQ2xvc2UsXG4gIHNsb3RQcm9wcyxcbiAgc2Nyb2xsQ29udGFpbmVyUmVmLFxuICBvblNjcm9sbCxcbiAgXCJkYXRhLWUyZS10ZXN0LWlkXCI6IGRhdGFFMmVUZXN0SWQsXG59OiBSaWdodFBhbmVsQ29udGFpbmVyUHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICBjb25zdCB7IGlzVmlzaWJsZTogaXNUaXRsZVZpc2libGUgPSB0cnVlIH0gPSB0aXRsZTtcbiAgcmV0dXJuIChcbiAgICA8Q3VzdG9tQ29udGFpbmVyXG4gICAgICBlbGV2YXRpb249ezB9XG4gICAgICBzcXVhcmVDb3JuZXJzXG4gICAgICBkYXRhLWRzLWlkPVwiUmlnaHRQYW5lbENvbnRhaW5lclwiXG4gICAgICBkYXRhLWUyZS10ZXN0LWlkPXtkYXRhRTJlVGVzdElkfVxuICAgID5cbiAgICAgIDxTYW5kd2ljaCByb2xlPVwicmVnaW9uXCIgYXJpYS1sYWJlbD17dGl0bGUubGFiZWx9PlxuICAgICAgICA8U2FuZHdpY2guSGVhZGVyIHNob3dTZXBhcmF0b3I9XCJhbHdheXNcIj5cbiAgICAgICAgICA8Qm94IHNwYWNlPVwic1wiIHZTcGFjZT1cInhzXCI+XG4gICAgICAgICAgICA8SW5saW5lXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM9XCJzcGFjZUJldHdlZW5cIlxuICAgICAgICAgICAgICB2QWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICAgICAgICAgIG5vV3JhcFxuICAgICAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPElubGluZSBzcGFjZT1cInhzXCIgdkFsaWduSXRlbXM9XCJjZW50ZXJcIiBub1dyYXA+XG4gICAgICAgICAgICAgICAge3Nsb3RQcm9wcy5oZWFkZXI/LmxlZnRTbG90fVxuICAgICAgICAgICAgICAgIHtpc1RpdGxlVmlzaWJsZSAmJiAoXG4gICAgICAgICAgICAgICAgICA8SW5saW5lIHNwYWNlPVwieHNcIiB2QWxpZ25JdGVtcz1cImNlbnRlclwiIG5vV3JhcD5cbiAgICAgICAgICAgICAgICAgICAge3RpdGxlLmljb24gJiYgPEljb24gey4uLnRpdGxlLmljb259IC8+fVxuICAgICAgICAgICAgICAgICAgICA8SDU+e3RpdGxlLmxhYmVsfTwvSDU+XG4gICAgICAgICAgICAgICAgICA8L0lubGluZT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L0lubGluZT5cbiAgICAgICAgICAgICAgPElubGluZSBzcGFjZT1cInh4c1wiIHZBbGlnbkl0ZW1zPVwiY2VudGVyXCIgbm9XcmFwPlxuICAgICAgICAgICAgICAgIHtzbG90UHJvcHMuaGVhZGVyPy5yaWdodFNsb3R9XG4gICAgICAgICAgICAgICAgey8qIGRpdmlkZXIgc2VwYXJhdGluZyBjb25zdW1lciBoZWFkZXIgYWN0aW9ucyBmcm9tIHRoZSBjbG9zZSBidXR0b24gKi99XG4gICAgICAgICAgICAgICAge3Nsb3RQcm9wcy5oZWFkZXI/LnJpZ2h0U2xvdCAmJiAoXG4gICAgICAgICAgICAgICAgICA8RGl2aWRlciBvcmllbnRhdGlvbj1cInZlcnRpY2FsXCIgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxQaWN0b2dyYW1CdXR0b25cbiAgICAgICAgICAgICAgICAgIGljb249XCJ4XCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtzbG90UHJvcHMuY2xvc2VCdXR0b25bXCJhcmlhLWxhYmVsXCJdfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25DbG9zZT8uKCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9JbmxpbmU+XG4gICAgICAgICAgICA8L0lubGluZT5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9TYW5kd2ljaC5IZWFkZXI+XG4gICAgICAgIDxTYW5kd2ljaC5Cb2R5IHNjcm9sbFJlZj17c2Nyb2xsQ29udGFpbmVyUmVmfSBvblNjcm9sbD17b25TY3JvbGx9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9TYW5kd2ljaC5Cb2R5PlxuICAgICAgICB7c2xvdFByb3BzLmZvb3RlciAmJiAoXG4gICAgICAgICAgPFNhbmR3aWNoLkZvb3RlciBzaG93U2VwYXJhdG9yPVwibmV2ZXJcIj5cbiAgICAgICAgICAgIHtzbG90UHJvcHMuZm9vdGVyfVxuICAgICAgICAgIDwvU2FuZHdpY2guRm9vdGVyPlxuICAgICAgICApfVxuICAgICAgPC9TYW5kd2ljaD5cbiAgICA8L0N1c3RvbUNvbnRhaW5lcj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZd0IifQ== */");function RightPanelContainer({title,children,onClose,slotProps,scrollContainerRef,onScroll,"data-e2e-test-id":dataE2eTestId}){let{isVisible:isTitleVisible=!0}=title;return _react.default.createElement(CustomContainer,{elevation:0,squareCorners:!0,"data-ds-id":"RightPanelContainer","data-e2e-test-id":dataE2eTestId},_react.default.createElement(_Sandwich.Sandwich,{role:"region","aria-label":title.label},_react.default.createElement(_Sandwich.Sandwich.Header,{showSeparator:"always"},_react.default.createElement(_Box.Box,{space:"s",vSpace:"xs"},_react.default.createElement(_Inline.Inline,{alignItems:"spaceBetween",vAlignItems:"center",noWrap:!0,fullWidth:!0},_react.default.createElement(_Inline.Inline,{space:"xs",vAlignItems:"center",noWrap:!0},slotProps.header?.leftSlot,isTitleVisible&&_react.default.createElement(_Inline.Inline,{space:"xs",vAlignItems:"center",noWrap:!0},title.icon&&_react.default.createElement(_Icon.Icon,title.icon),_react.default.createElement(_Header.H5,null,title.label))),_react.default.createElement(_Inline.Inline,{space:"xxs",vAlignItems:"center",noWrap:!0},slotProps.header?.rightSlot,slotProps.header?.rightSlot&&_react.default.createElement(_Divider.Divider,{orientation:"vertical"}),_react.default.createElement(_PictogramButton.PictogramButton,{icon:"x",size:"s",variant:"tertiary","aria-label":slotProps.closeButton["aria-label"],onClick:()=>onClose?.()}))))),_react.default.createElement(_Sandwich.Sandwich.Body,{scrollRef:scrollContainerRef,onScroll:onScroll},children),slotProps.footer&&_react.default.createElement(_Sandwich.Sandwich.Footer,{showSeparator:"never"},slotProps.footer)))}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { SidePanelProps } from "./-types";
|
|
3
|
+
/**
|
|
4
|
+
* Left side panel. Declares the `sidebar` slot and portals its content into the
|
|
5
|
+
* Group's host while visible. Renders in-flow (a resizable column) — the
|
|
6
|
+
* offcanvas overlay / mobile sheet is deferred.
|
|
7
|
+
*/
|
|
8
|
+
export declare const Sidebar: React.FC<SidePanelProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Sidebar",{enumerable:!0,get:function(){return Sidebar}});const _constants=require("./-constants"),_registry=require("./registry"),_useLayout=require("./useLayout"),Sidebar=({children,defaultSize,minSize,maxSize,collapsible=!0,onVisibleChange})=>{let{isVisible}=(0,_useLayout.useLayout)()[_constants.Slot.sidebar];return(0,_registry.useDeclarePanel)(_constants.Slot.sidebar,{defaultSize,minSize,maxSize,collapsible}),(0,_registry.useVisibleChange)(isVisible,onVisibleChange),(0,_registry.useLayoutPortal)(_constants.Slot.sidebar,isVisible?children:null)};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { SplitProps } from "./-types";
|
|
3
|
+
/**
|
|
4
|
+
* Split view panel. Declares the `splitview` slot and portals its content while
|
|
5
|
+
* visible — a toggleable in-flow column beside `content`.
|
|
6
|
+
*/
|
|
7
|
+
export declare const Split: React.FC<SplitProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Split",{enumerable:!0,get:function(){return Split}});const _constants=require("./-constants"),_registry=require("./registry"),_useLayout=require("./useLayout"),Split=({children,defaultSize,minSize,maxSize})=>{let{isVisible}=(0,_useLayout.useLayout)()[_constants.Slot.splitview];return(0,_registry.useDeclarePanel)(_constants.Slot.splitview,{defaultSize,minSize,maxSize,collapsible:!0}),(0,_registry.useLayoutPortal)(_constants.Slot.splitview,isVisible?children:null)};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { LayoutState, LayoutStorage, LayoutStore } from "./-types";
|
|
2
|
+
export declare const LayoutStoreProvider: React.Provider<LayoutStore>;
|
|
3
|
+
/** Get the store from context, or throw if used outside the provider. */
|
|
4
|
+
export declare function useLayoutStore(): LayoutStore;
|
|
5
|
+
/**
|
|
6
|
+
* Persistence config for the layout namespace. Set on `Layout.Provider` (single
|
|
7
|
+
* external surface) and read by the nested `<Layout>`. The Provider only
|
|
8
|
+
* forwards it — it never touches storage itself.
|
|
9
|
+
*/
|
|
10
|
+
export type LayoutPersistence = {
|
|
11
|
+
persistenceKey?: string;
|
|
12
|
+
storage?: LayoutStorage;
|
|
13
|
+
};
|
|
14
|
+
export declare const LayoutPersistenceProvider: React.Provider<LayoutPersistence>;
|
|
15
|
+
/** Persistence config from the nearest `Layout.Provider` (empty if none). */
|
|
16
|
+
export declare function useLayoutPersistence(): LayoutPersistence;
|
|
17
|
+
/**
|
|
18
|
+
* Subscribe to a slice of layout state via `useSyncExternalStore`. The selector
|
|
19
|
+
* should return a stable reference when nothing relevant changed — the reducer
|
|
20
|
+
* preserves references for untouched positions, so slice selectors are safe.
|
|
21
|
+
*/
|
|
22
|
+
export declare function useLayoutSelector<T>(selector: (state: LayoutState) => T): T;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get LayoutPersistenceProvider(){return LayoutPersistenceProvider},get LayoutStoreProvider(){return LayoutStoreProvider},get useLayoutPersistence(){return useLayoutPersistence},get useLayoutSelector(){return useLayoutSelector},get useLayoutStore(){return useLayoutStore}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});const _react=require("react"),LayoutStoreContext=(0,_react.createContext)(null),LayoutStoreProvider=LayoutStoreContext.Provider;function useLayoutStore(){let store=(0,_react.useContext)(LayoutStoreContext);if(!store)throw Error("useLayout must be used within a <LayoutProvider>.");return store}const LayoutPersistenceContext=(0,_react.createContext)({}),LayoutPersistenceProvider=LayoutPersistenceContext.Provider;function useLayoutPersistence(){return(0,_react.useContext)(LayoutPersistenceContext)}function useLayoutSelector(selector){let store=useLayoutStore(),getSnapshot=()=>selector(store.getState());return(0,_react.useSyncExternalStore)(store.subscribe,getSnapshot,getSnapshot)}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { SLIDE_VAR, SUBNAV_OFFSET_VAR } from "./-constants";
|
|
2
|
+
export { Layout } from "./Layout";
|
|
3
|
+
export { LayoutProvider } from "./LayoutProvider";
|
|
4
|
+
export { useLayoutVar } from "./LayoutVars";
|
|
5
|
+
export { useLayout } from "./useLayout";
|
|
6
|
+
export { RightPanelContainer } from "./RightPanelContainer";
|
|
7
|
+
export { createLayoutStore } from "./store";
|
|
8
|
+
export { createInitialState, layoutReducer } from "./reducer";
|
|
9
|
+
export * from "./-types";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get Layout(){return _Layout.Layout},get LayoutProvider(){return _LayoutProvider.LayoutProvider},get RightPanelContainer(){return _RightPanelContainer.RightPanelContainer},get SLIDE_VAR(){return _constants.SLIDE_VAR},get SUBNAV_OFFSET_VAR(){return _constants.SUBNAV_OFFSET_VAR},get createInitialState(){return _reducer.createInitialState},get createLayoutStore(){return _store.createLayoutStore},get layoutReducer(){return _reducer.layoutReducer},get useLayout(){return _useLayout.useLayout},get useLayoutVar(){return _LayoutVars.useLayoutVar}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});const _export_star=require("@swc/helpers/_/_export_star"),_constants=require("./-constants"),_Layout=require("./Layout"),_LayoutProvider=require("./LayoutProvider"),_LayoutVars=require("./LayoutVars"),_useLayout=require("./useLayout"),_RightPanelContainer=require("./RightPanelContainer"),_store=require("./store"),_reducer=require("./reducer");_export_star._(require("./-types"),exports);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LayoutConfig, LayoutReducer, LayoutState } from "./-types";
|
|
2
|
+
/** Build the initial state from optional config. */
|
|
3
|
+
export declare function createInitialState(config?: LayoutConfig): LayoutState;
|
|
4
|
+
/** Pure reducer. Returns the same reference when nothing changes. */
|
|
5
|
+
export declare const layoutReducer: LayoutReducer;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get createInitialState(){return createInitialState},get layoutReducer(){return layoutReducer}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});function sidePanel(config={}){return{kind:"sidePanel",visible:config.defaultVisible??!0,collapsible:config.collapsible??!0,variant:config.variant??"sidebar",size:config.defaultSize,minSize:config.minSize,maxSize:config.maxSize}}function panelState(config={}){return{kind:"panel",visible:config.defaultVisible??!0,size:config.defaultSize,minSize:config.minSize,maxSize:config.maxSize}}function createInitialState(config={}){return{sidebar:sidePanel(config.sidebar),rightPanel:sidePanel({defaultVisible:!1,...config.rightPanel}),content:panelState(config.content),splitview:panelState({defaultVisible:!1,...config.splitview})}}const layoutReducer=(state,action,initial)=>{switch(action.type){case"setVisible":{let slot=state[action.slot];if(slot.visible===action.visible)return state;return{...state,[action.slot]:{...slot,visible:action.visible}}}case"setVariant":{let panel=state[action.panel];if(panel.variant===action.variant)return state;return{...state,[action.panel]:{...panel,variant:action.variant}}}case"resize":{let slot=state[action.slot];if(slot.size===action.size)return state;return{...state,[action.slot]:{...slot,size:action.size}}}case"reset":if(!initial)return state;if(!action.slot)return initial;if(state[action.slot]===initial[action.slot])return state;return{...state,[action.slot]:initial[action.slot]};default:return state}};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { Size, SlotKey } from "./-types";
|
|
3
|
+
export type HostNodes = Partial<Record<SlotKey, HTMLElement | null>>;
|
|
4
|
+
export declare const LayoutPortalContext: React.Context<Partial<Record<"content" | "sidebar" | "splitview" | "rightPanel", HTMLElement>>>;
|
|
5
|
+
/**
|
|
6
|
+
* Portal `children` into the host DOM node registered for `slot`. Returns the
|
|
7
|
+
* portal (or `null` if the host isn't mounted yet). Call unconditionally —
|
|
8
|
+
* gate content by passing `null` as `children`, not by skipping the call.
|
|
9
|
+
*/
|
|
10
|
+
export declare function useLayoutPortal(slot: SlotKey, children: ReactNode): ReactNode;
|
|
11
|
+
/**
|
|
12
|
+
* Panel descriptor a marker contributes. The Group renders one resizable Panel
|
|
13
|
+
* per *declared* panel that is currently shown — regardless of nesting depth.
|
|
14
|
+
* So a page can drop `<Layout.Split>` deep in its tree and it joins the app's
|
|
15
|
+
* single Layout as a panel; toggling a panel never remounts the others.
|
|
16
|
+
*/
|
|
17
|
+
export type PanelReg = {
|
|
18
|
+
defaultSize?: Size;
|
|
19
|
+
minSize?: Size;
|
|
20
|
+
maxSize?: Size;
|
|
21
|
+
collapsible?: boolean;
|
|
22
|
+
};
|
|
23
|
+
export type PanelRegistry = {
|
|
24
|
+
register: (slot: SlotKey, reg: PanelReg) => void;
|
|
25
|
+
unregister: (slot: SlotKey) => void;
|
|
26
|
+
};
|
|
27
|
+
export declare const PanelRegistryContext: React.Context<PanelRegistry>;
|
|
28
|
+
/** Register this slot as a panel for the marker's lifetime. */
|
|
29
|
+
export declare function useDeclarePanel(slot: SlotKey, reg: PanelReg): void;
|
|
30
|
+
/** Fire `onChange(visible)` when `visible` transitions (not on initial mount). */
|
|
31
|
+
export declare function useVisibleChange(visible: boolean, onChange?: (visible: boolean) => void): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get LayoutPortalContext(){return LayoutPortalContext},get PanelRegistryContext(){return PanelRegistryContext},get useDeclarePanel(){return useDeclarePanel},get useLayoutPortal(){return useLayoutPortal},get useVisibleChange(){return useVisibleChange}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});const _react=require("react"),_reactdom=require("react-dom"),LayoutPortalContext=(0,_react.createContext)({});function useLayoutPortal(slot,children){let slotNode=(0,_react.useContext)(LayoutPortalContext)[slot]??null;return slotNode?(0,_reactdom.createPortal)(children,slotNode):null}const PanelRegistryContext=(0,_react.createContext)(null);function useDeclarePanel(slot,reg){let registry=(0,_react.useContext)(PanelRegistryContext),{defaultSize,minSize,maxSize,collapsible}=reg;(0,_react.useLayoutEffect)(()=>{if(registry)return registry.register(slot,{defaultSize,minSize,maxSize,collapsible}),()=>registry.unregister(slot)},[registry,slot,defaultSize,minSize,maxSize,collapsible])}function useVisibleChange(visible,onChange){let prev=(0,_react.useRef)(visible);(0,_react.useEffect)(()=>{prev.current!==visible&&(prev.current=visible,onChange?.(visible))},[visible,onChange])}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LayoutState, LayoutStore } from "./-types";
|
|
2
|
+
/**
|
|
3
|
+
* Default, dependency-free `LayoutStore` implementation: a tiny pub/sub wrapper
|
|
4
|
+
* around the pure `layoutReducer`. Skips notifying subscribers when an action is
|
|
5
|
+
* a no-op (reducer returns the same reference).
|
|
6
|
+
*
|
|
7
|
+
* Swap this for a zustand/redux-backed store by implementing the same
|
|
8
|
+
* `LayoutStore` interface — bindings and primitives are unaffected.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createLayoutStore(initial: LayoutState): LayoutStore;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"createLayoutStore",{enumerable:!0,get:function(){return createLayoutStore}});const _reducer=require("./reducer");function createLayoutStore(initial){let state=initial,listeners=new Set;return{getState:()=>state,dispatch:action=>{let next=(0,_reducer.layoutReducer)(state,action,initial);next!==state&&(state=next,listeners.forEach(listener=>listener()))},subscribe:listener=>(listeners.add(listener),()=>{listeners.delete(listener)})}}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LayoutValue } from "./-types";
|
|
2
|
+
/**
|
|
3
|
+
* The single control hook. Returns `state` plus a typed handle per slot. Works
|
|
4
|
+
* from any descendant of `<LayoutProvider>` — remote control without prop
|
|
5
|
+
* drilling.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useLayout(): LayoutValue;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"useLayout",{enumerable:!0,get:function(){return useLayout}});const _context=require("./context"),selectAll=state=>state;function sidePanelHandle(panel,state,dispatch){let slot=state[panel];return{state:slot,isVisible:slot.visible,show:()=>dispatch({type:"setVisible",slot:panel,visible:!0}),hide:()=>dispatch({type:"setVisible",slot:panel,visible:!1}),resize:size=>dispatch({type:"resize",slot:panel,size}),setVariant:variant=>dispatch({type:"setVariant",panel,variant}),reset:()=>dispatch({type:"reset",slot:panel})}}function panelHandle(panel,state,dispatch){let slot=state[panel];return{state:slot,isVisible:slot.visible,show:()=>dispatch({type:"setVisible",slot:panel,visible:!0}),hide:()=>dispatch({type:"setVisible",slot:panel,visible:!1}),resize:size=>dispatch({type:"resize",slot:panel,size}),reset:()=>dispatch({type:"reset",slot:panel})}}function useLayout(){let store=(0,_context.useLayoutStore)(),state=(0,_context.useLayoutSelector)(selectAll),{dispatch}=store;return{state,sidebar:sidePanelHandle("sidebar",state,dispatch),rightPanel:sidePanelHandle("rightPanel",state,dispatch),content:panelHandle("content",state,dispatch),splitview:panelHandle("splitview",state,dispatch)}}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Track a set of DOM elements by key, with stable per-key ref callbacks.
|
|
3
|
+
*
|
|
4
|
+
* Given a fixed list of keys, returns `[elements, refs]`:
|
|
5
|
+
* - `refs[key]` — a ref callback to attach to an element; captures it into
|
|
6
|
+
* `elements[key]` (and clears it to `null` on unmount).
|
|
7
|
+
* - `elements[key]` — the currently-attached element (undefined until set).
|
|
8
|
+
*
|
|
9
|
+
* The callbacks are **stable** across renders, so React invokes them only on
|
|
10
|
+
* mount/unmount — not detach/attach every render. (An inline `ref={el => …}`
|
|
11
|
+
* that calls setState would get a new identity each render and loop.)
|
|
12
|
+
*
|
|
13
|
+
* Agnostic utility — useful whenever something needs the live DOM node of a
|
|
14
|
+
* child: portal targets, measurement, focus management, etc.
|
|
15
|
+
*/
|
|
16
|
+
export declare function usePanelRefs<K extends string>(keys: readonly K[]): [
|
|
17
|
+
Partial<Record<K, HTMLElement | null>>,
|
|
18
|
+
Record<K, (el: HTMLElement | null) => void>
|
|
19
|
+
];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"usePanelRefs",{enumerable:!0,get:function(){return usePanelRefs}});const _react=require("react");function usePanelRefs(keys){let[elements,setElements]=(0,_react.useState)({});return[elements,(0,_react.useMemo)(()=>{let map={};return keys.forEach(key=>{map[key]=el=>setElements(prev=>prev[key]===el?prev:{...prev,[key]:el})}),map},[keys])]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Track portal-container DOM elements by key, with stable per-key ref callbacks.
|
|
3
|
+
* Used by `Layout` to capture each panel's host `<div>` (the `createPortal`
|
|
4
|
+
* container) so markers can portal their content into it.
|
|
5
|
+
*
|
|
6
|
+
* Given a fixed list of keys, returns `[elements, refs]`:
|
|
7
|
+
* - `refs[key]` — a ref callback to attach to an element; captures it into
|
|
8
|
+
* `elements[key]` (and clears it to `null` on unmount).
|
|
9
|
+
* - `elements[key]` — the currently-attached element (undefined until set).
|
|
10
|
+
*
|
|
11
|
+
* The callbacks are **stable** across renders, so React invokes them only on
|
|
12
|
+
* mount/unmount — not detach/attach every render. (An inline `ref={el => …}`
|
|
13
|
+
* that calls setState would get a new identity each render and loop.)
|
|
14
|
+
*
|
|
15
|
+
* Generic over the key type, so it works for any fixed key set.
|
|
16
|
+
*/
|
|
17
|
+
export declare function usePortalContainerRefs<K extends string>(keys: readonly K[]): [
|
|
18
|
+
Partial<Record<K, HTMLElement | null>>,
|
|
19
|
+
Record<K, (el: HTMLElement | null) => void>
|
|
20
|
+
];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"usePortalContainerRefs",{enumerable:!0,get:function(){return usePortalContainerRefs}});const _react=require("react");function usePortalContainerRefs(keys){let[elements,setElements]=(0,_react.useState)({});return[elements,(0,_react.useMemo)(()=>{let map={};return keys.forEach(key=>{map[key]=el=>setElements(prev=>prev[key]===el?prev:{...prev,[key]:el})}),map},[keys])]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny pub/sub registry for the layout's CSS custom properties. Producers
|
|
3
|
+
* publish a value by name (the component that owns the *why* — e.g. the NavBar
|
|
4
|
+
* subnav publishing its offset); a single sink (`<LayoutVars>`) subscribes and
|
|
5
|
+
* renders them all in ONE place. Mirrors the `LayoutStore` shape so it reads
|
|
6
|
+
* via the same `useSyncExternalStore` pattern.
|
|
7
|
+
*
|
|
8
|
+
* One name = one producer. The registry is keyed by name, so a second writer to
|
|
9
|
+
* the same name last-wins; don't share a name across unrelated producers.
|
|
10
|
+
*/
|
|
11
|
+
export type LayoutVarStore = {
|
|
12
|
+
getSnapshot: () => Record<string, string>;
|
|
13
|
+
set: (name: string, value: string) => void;
|
|
14
|
+
remove: (name: string) => void;
|
|
15
|
+
subscribe: (listener: () => void) => () => void;
|
|
16
|
+
};
|
|
17
|
+
export declare function createLayoutVarStore(): LayoutVarStore;
|