@amboss/design-system 4.5.0 → 4.6.0
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/BulkActionsToolbar/BulkActionsToolbar.js +1 -1
- package/build/cjs/components/DataTable/DataTable.d.ts +18 -8
- package/build/cjs/components/DataTable/DataTable.js +1 -1
- package/build/cjs/components/DataTable/DataTableToolbar/DataTableToolbar.d.ts +97 -0
- package/build/cjs/components/DataTable/DataTableToolbar/DataTableToolbar.js +1 -0
- package/build/cjs/components/DataTable/TableCell.js +1 -1
- package/build/cjs/components/DataTable/TableColumnGroups.d.ts +15 -0
- package/build/cjs/components/DataTable/TableColumnGroups.js +1 -0
- package/build/cjs/components/DataTable/header/DataTableHeaderLabel.d.ts +28 -0
- package/build/cjs/components/DataTable/header/DataTableHeaderLabel.js +1 -0
- package/build/cjs/components/DataTable/header/TableHeader.js +1 -1
- package/build/cjs/components/DataTable/index.d.ts +1 -1
- package/build/cjs/components/DataTable/internal/buildColumnSegments.d.ts +18 -0
- package/build/cjs/components/DataTable/internal/buildColumnSegments.js +1 -0
- package/build/cjs/components/DataTable/internal/buildInternalColumns.d.ts +2 -2
- package/build/cjs/components/DataTable/internal/buildInternalColumns.js +1 -1
- package/build/cjs/components/DataTable/internal/getColumnSticky.js +1 -1
- package/build/cjs/components/DataTable/internal/types.d.ts +7 -2
- package/build/cjs/components/DataTable/isDataTableColumnGroup.d.ts +2 -0
- package/build/cjs/components/DataTable/isDataTableColumnGroup.js +1 -0
- package/build/cjs/components/DataTable/types.d.ts +52 -8
- package/build/cjs/components/DataTable/useDataTableSort.d.ts +4 -4
- package/build/cjs/components/DataTable/useDataTableSort.js +1 -1
- package/build/cjs/components/FilterToolbar/FilterToolbar.d.ts +103 -0
- package/build/cjs/components/FilterToolbar/FilterToolbar.js +1 -0
- package/build/cjs/components/Internal/Panel/Panel.d.ts +22 -1
- package/build/cjs/components/Internal/Panel/Panel.js +1 -1
- package/build/cjs/components/Internal/ToolbarItemCount/ToolbarItemCount.d.ts +16 -0
- package/build/cjs/components/Internal/ToolbarItemCount/ToolbarItemCount.js +1 -0
- package/build/cjs/components/Kbd/Kbd.d.ts +118 -0
- package/build/cjs/components/Kbd/Kbd.js +1 -0
- package/build/cjs/components/KbdGroup/KbdGroup.d.ts +7 -0
- package/build/cjs/components/KbdGroup/KbdGroup.js +1 -0
- package/build/cjs/components/Layout/-types.d.ts +6 -1
- package/build/cjs/components/Layout/Layout.js +1 -1
- package/build/cjs/components/Layout/LeftPanel/LeftPanelDocked.js +1 -1
- package/build/cjs/components/Layout/RightPanel/RightPanel.js +1 -1
- package/build/cjs/components/Layout/registry.d.ts +4 -0
- package/build/cjs/components/Layout/registry.js +1 -1
- package/build/cjs/components/Layout/usePanelDockedSlide.d.ts +4 -1
- package/build/cjs/components/Layout/usePanelDockedSlide.js +1 -1
- package/build/cjs/components/RangePopover/RangePopover.d.ts +7 -1
- package/build/cjs/components/RangePopover/RangePopover.js +1 -1
- package/build/cjs/components/Tooltip/BaseTooltip.js +1 -1
- package/build/cjs/components/Tooltip/Tooltip.d.ts +3 -1
- package/build/cjs/components/Tooltip/Tooltip.js +1 -1
- package/build/cjs/index.d.ts +1 -0
- package/build/cjs/index.js +1 -1
- package/build/cjs/shared/useIsMacOs.d.ts +1 -0
- package/build/cjs/shared/useIsMacOs.js +1 -0
- package/build/cjs/web-tokens/_colors.json +26 -0
- package/build/cjs/web-tokens/_sizes.json +10 -0
- package/build/cjs/web-tokens/visualConfig.d.ts +25 -0
- package/build/cjs/web-tokens/visualConfig.js +1 -1
- package/build/esm/components/BulkActionsToolbar/BulkActionsToolbar.js +1 -1
- package/build/esm/components/DataTable/DataTable.d.ts +18 -8
- package/build/esm/components/DataTable/DataTable.js +1 -1
- package/build/esm/components/DataTable/DataTableToolbar/DataTableToolbar.d.ts +97 -0
- package/build/esm/components/DataTable/DataTableToolbar/DataTableToolbar.js +1 -0
- package/build/esm/components/DataTable/TableCell.js +1 -1
- package/build/esm/components/DataTable/TableColumnGroups.d.ts +15 -0
- package/build/esm/components/DataTable/TableColumnGroups.js +1 -0
- package/build/esm/components/DataTable/header/DataTableHeaderLabel.d.ts +28 -0
- package/build/esm/components/DataTable/header/DataTableHeaderLabel.js +1 -0
- package/build/esm/components/DataTable/header/TableHeader.js +1 -1
- package/build/esm/components/DataTable/index.d.ts +1 -1
- package/build/esm/components/DataTable/internal/buildColumnSegments.d.ts +18 -0
- package/build/esm/components/DataTable/internal/buildColumnSegments.js +1 -0
- package/build/esm/components/DataTable/internal/buildInternalColumns.d.ts +2 -2
- package/build/esm/components/DataTable/internal/buildInternalColumns.js +1 -1
- package/build/esm/components/DataTable/internal/getColumnSticky.js +1 -1
- package/build/esm/components/DataTable/internal/types.d.ts +7 -2
- package/build/esm/components/DataTable/isDataTableColumnGroup.d.ts +2 -0
- package/build/esm/components/DataTable/isDataTableColumnGroup.js +1 -0
- package/build/esm/components/DataTable/types.d.ts +52 -8
- package/build/esm/components/DataTable/useDataTableSort.d.ts +4 -4
- package/build/esm/components/DataTable/useDataTableSort.js +1 -1
- package/build/esm/components/FilterToolbar/FilterToolbar.d.ts +103 -0
- package/build/esm/components/FilterToolbar/FilterToolbar.js +1 -0
- package/build/esm/components/Internal/Panel/Panel.d.ts +22 -1
- package/build/esm/components/Internal/Panel/Panel.js +1 -1
- package/build/esm/components/Internal/ToolbarItemCount/ToolbarItemCount.d.ts +16 -0
- package/build/esm/components/Internal/ToolbarItemCount/ToolbarItemCount.js +1 -0
- package/build/esm/components/Kbd/Kbd.d.ts +118 -0
- package/build/esm/components/Kbd/Kbd.js +1 -0
- package/build/esm/components/KbdGroup/KbdGroup.d.ts +7 -0
- package/build/esm/components/KbdGroup/KbdGroup.js +1 -0
- package/build/esm/components/Layout/-types.d.ts +6 -1
- package/build/esm/components/Layout/Layout.js +1 -1
- package/build/esm/components/Layout/LeftPanel/LeftPanelDocked.js +1 -1
- package/build/esm/components/Layout/RightPanel/RightPanel.js +1 -1
- package/build/esm/components/Layout/registry.d.ts +4 -0
- package/build/esm/components/Layout/registry.js +1 -1
- package/build/esm/components/Layout/usePanelDockedSlide.d.ts +4 -1
- package/build/esm/components/Layout/usePanelDockedSlide.js +1 -1
- package/build/esm/components/RangePopover/RangePopover.d.ts +7 -1
- package/build/esm/components/RangePopover/RangePopover.js +1 -1
- package/build/esm/components/Tooltip/BaseTooltip.js +1 -1
- package/build/esm/components/Tooltip/Tooltip.d.ts +3 -1
- package/build/esm/components/Tooltip/Tooltip.js +1 -1
- package/build/esm/index.d.ts +1 -0
- package/build/esm/index.js +1 -1
- package/build/esm/shared/useIsMacOs.d.ts +1 -0
- package/build/esm/shared/useIsMacOs.js +1 -0
- package/build/esm/web-tokens/_colors.json +26 -0
- package/build/esm/web-tokens/_sizes.json +10 -0
- package/build/esm/web-tokens/visualConfig.d.ts +25 -0
- package/build/esm/web-tokens/visualConfig.js +1 -1
- package/build/scss/_dark.scss +3 -0
- package/build/scss/_light.scss +3 -0
- package/build/scss/_variables.scss +4 -0
- package/build/scss/subthemes/_inverted.scss +6 -0
- package/package.json +1 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/** Every name both key maps must define, so neither can drift from the other. */
|
|
3
|
+
export type KeyName = "cmd" | "meta" | "ctrl" | "alt" | "shift" | "enter" | "esc" | "backspace" | "tab" | "up" | "down" | "left" | "right" | "updown";
|
|
4
|
+
export declare const MAC_OS_KEYS: {
|
|
5
|
+
cmd: {
|
|
6
|
+
label: string;
|
|
7
|
+
spokenLabel: string;
|
|
8
|
+
};
|
|
9
|
+
meta: {
|
|
10
|
+
label: string;
|
|
11
|
+
spokenLabel: string;
|
|
12
|
+
};
|
|
13
|
+
ctrl: {
|
|
14
|
+
label: string;
|
|
15
|
+
spokenLabel: string;
|
|
16
|
+
};
|
|
17
|
+
alt: {
|
|
18
|
+
label: string;
|
|
19
|
+
spokenLabel: string;
|
|
20
|
+
};
|
|
21
|
+
shift: {
|
|
22
|
+
label: string;
|
|
23
|
+
spokenLabel: string;
|
|
24
|
+
};
|
|
25
|
+
enter: {
|
|
26
|
+
label: string;
|
|
27
|
+
spokenLabel: string;
|
|
28
|
+
};
|
|
29
|
+
esc: {
|
|
30
|
+
label: string;
|
|
31
|
+
};
|
|
32
|
+
backspace: {
|
|
33
|
+
label: string;
|
|
34
|
+
spokenLabel: string;
|
|
35
|
+
};
|
|
36
|
+
tab: {
|
|
37
|
+
label: string;
|
|
38
|
+
spokenLabel: string;
|
|
39
|
+
};
|
|
40
|
+
up: {
|
|
41
|
+
label: string;
|
|
42
|
+
spokenLabel: string;
|
|
43
|
+
};
|
|
44
|
+
down: {
|
|
45
|
+
label: string;
|
|
46
|
+
spokenLabel: string;
|
|
47
|
+
};
|
|
48
|
+
left: {
|
|
49
|
+
label: string;
|
|
50
|
+
spokenLabel: string;
|
|
51
|
+
};
|
|
52
|
+
right: {
|
|
53
|
+
label: string;
|
|
54
|
+
spokenLabel: string;
|
|
55
|
+
};
|
|
56
|
+
updown: {
|
|
57
|
+
label: string;
|
|
58
|
+
spokenLabel: string;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
export declare const WINDOWS_KEYS: {
|
|
62
|
+
cmd: {
|
|
63
|
+
label: string;
|
|
64
|
+
};
|
|
65
|
+
meta: {
|
|
66
|
+
label: string;
|
|
67
|
+
};
|
|
68
|
+
ctrl: {
|
|
69
|
+
label: string;
|
|
70
|
+
};
|
|
71
|
+
alt: {
|
|
72
|
+
label: string;
|
|
73
|
+
};
|
|
74
|
+
shift: {
|
|
75
|
+
label: string;
|
|
76
|
+
};
|
|
77
|
+
enter: {
|
|
78
|
+
label: string;
|
|
79
|
+
};
|
|
80
|
+
esc: {
|
|
81
|
+
label: string;
|
|
82
|
+
};
|
|
83
|
+
backspace: {
|
|
84
|
+
label: string;
|
|
85
|
+
};
|
|
86
|
+
tab: {
|
|
87
|
+
label: string;
|
|
88
|
+
};
|
|
89
|
+
up: {
|
|
90
|
+
label: string;
|
|
91
|
+
spokenLabel: string;
|
|
92
|
+
};
|
|
93
|
+
down: {
|
|
94
|
+
label: string;
|
|
95
|
+
spokenLabel: string;
|
|
96
|
+
};
|
|
97
|
+
left: {
|
|
98
|
+
label: string;
|
|
99
|
+
spokenLabel: string;
|
|
100
|
+
};
|
|
101
|
+
right: {
|
|
102
|
+
label: string;
|
|
103
|
+
spokenLabel: string;
|
|
104
|
+
};
|
|
105
|
+
updown: {
|
|
106
|
+
label: string;
|
|
107
|
+
spokenLabel: string;
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
export type KbdPlatform = "macOs" | "windows";
|
|
111
|
+
export type KbdProps = {
|
|
112
|
+
/** Semantic key name(s) to display, e.g. `"A"` or `["shift", "cmd"]`. Recognised names (`cmd`, `ctrl`, `alt`, `shift`, `enter`, `esc`, `backspace`, `tab`, `up`, `down`, `left`, `right`, `updown`) render the symbol for the detected platform; any other value is rendered as written, with a single character uppercased. */
|
|
113
|
+
keys: string | string[];
|
|
114
|
+
/** Pins the rendered symbols to one platform instead of detecting the user's. Use for tests, stories, and shortcuts that only exist on one platform. */
|
|
115
|
+
platform?: KbdPlatform;
|
|
116
|
+
"data-e2e-test-id"?: string;
|
|
117
|
+
};
|
|
118
|
+
export declare function Kbd({ keys, platform, "data-e2e-test-id": dataE2eTestId, }: KbdProps): React.ReactElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";import{useIsMacOs}from"../../shared/useIsMacOs";import{ScreenReaderText}from"../Utilities/ScreenReaderText/ScreenReaderText";export const MAC_OS_KEYS={cmd:{label:"⌘",spokenLabel:"Command"},meta:{label:"⌘",spokenLabel:"Command"},ctrl:{label:"⌃",spokenLabel:"Control"},alt:{label:"⌥",spokenLabel:"Option"},shift:{label:"⇧",spokenLabel:"Shift"},enter:{label:"↩",spokenLabel:"Enter"},esc:{label:"Esc"},backspace:{label:"⌫",spokenLabel:"Backspace"},tab:{label:"⇥",spokenLabel:"Tab"},up:{label:"↑",spokenLabel:"Up arrow"},down:{label:"↓",spokenLabel:"Down arrow"},left:{label:"←",spokenLabel:"Left arrow"},right:{label:"→",spokenLabel:"Right arrow"},updown:{label:"⇅",spokenLabel:"Up and down arrows"}};export const WINDOWS_KEYS={cmd:{label:"Ctrl"},meta:{label:"Ctrl"},ctrl:{label:"Ctrl"},alt:{label:"Alt"},shift:{label:"Shift"},enter:{label:"Enter"},esc:{label:"Esc"},backspace:{label:"Backspace"},tab:{label:"Tab"},up:{label:"↑",spokenLabel:"Up arrow"},down:{label:"↓",spokenLabel:"Down arrow"},left:{label:"←",spokenLabel:"Left arrow"},right:{label:"→",spokenLabel:"Right arrow"},updown:{label:"⇅",spokenLabel:"Up and down arrows"}};let StyledKbd=styled("kbd",{target:"e1v9oi190",label:"StyledKbd"})(({theme})=>({display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",minWidth:theme.variables.size.dimension.kbd.minWidth,padding:theme.variables.size.spacing.xxxs,border:`1px solid ${theme.values.color.kbd.border.default}`,borderRadius:theme.variables.size.borderRadius.xs,backgroundColor:theme.values.color.kbd.background.default,color:theme.values.color.kbd.foreground.default,fontFamily:theme.variables.fontFamily.lato,fontSize:theme.variables.size.font.xxs,fontWeight:theme.variables.weight.normal,lineHeight:1,whiteSpace:"nowrap",cursor:"default",userSelect:"none"})),StyledKbdKeys=styled("span",{target:"e1v9oi191",label:"StyledKbdKeys"})(({theme,hasSeparators})=>({display:"inline-flex",gap:hasSeparators?theme.variables.size.spacing.xxs:theme.variables.size.spacing.zero})),toDisplayLabel=key=>1===key.length?key.toUpperCase():key,toKeyDisplay=(key,isMacOs)=>{let trimmedKey=key.trim();return(isMacOs?MAC_OS_KEYS:WINDOWS_KEYS)[trimmedKey.toLowerCase()]??{label:toDisplayLabel(trimmedKey)}};export function Kbd({keys,platform,"data-e2e-test-id":dataE2eTestId}){let detectedIsMacOs=useIsMacOs(),isMacOs=platform?"macOs"===platform:detectedIsMacOs,keyDisplays=(Array.isArray(keys)?keys:[keys]).map(key=>toKeyDisplay(key,isMacOs)),spokenKeys=keyDisplays.map(({label,spokenLabel})=>spokenLabel??label).join(" ");return React.createElement(StyledKbd,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Kbd"},React.createElement(StyledKbdKeys,{"aria-hidden":"true",hasSeparators:!isMacOs&&keyDisplays.length>1},keyDisplays.map(({label},index)=>React.createElement(React.Fragment,{key:`${label}-${index}`},index>0&&!isMacOs&&React.createElement("span",null,"+"),React.createElement("span",null,label)))),React.createElement(ScreenReaderText,{as:"span"},spokenKeys))}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export type KbdGroupProps = {
|
|
3
|
+
/** The `Kbd` elements making up the sequence, in the order they are pressed. */
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
"data-e2e-test-id"?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function KbdGroup({ children, "data-e2e-test-id": dataE2eTestId, }: KbdGroupProps): React.ReactElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";let StyledKbdGroup=styled("span",{target:"e1mlf86z0",label:"StyledKbdGroup"})(({theme})=>({display:"inline-flex",alignItems:"flex-start",gap:theme.variables.size.spacing.xxs}));export function KbdGroup({children,"data-e2e-test-id":dataE2eTestId}){return React.createElement(StyledKbdGroup,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"KbdGroup"},children)}
|
|
@@ -289,7 +289,12 @@ export type SidePanelProps = ForwardedScrollProps & {
|
|
|
289
289
|
/** Accessible name; when set, the panel renders as a `region` landmark. */
|
|
290
290
|
"aria-label"?: string;
|
|
291
291
|
collapsible?: boolean;
|
|
292
|
-
/** Number = pixels, unitless string = percent (e.g. `"30%"`).
|
|
292
|
+
/** Number = pixels, unitless string = percent (e.g. `"30%"`).
|
|
293
|
+
*
|
|
294
|
+
* Either unit sets the column's starting width only: a docked side panel
|
|
295
|
+
* then keeps that width when the window resizes, and `Layout.Content` grows
|
|
296
|
+
* and shrinks around it. Drag-resizing is a separate story - see
|
|
297
|
+
* `resizable`. */
|
|
293
298
|
defaultSize?: Size;
|
|
294
299
|
minSize?: Size;
|
|
295
300
|
maxSize?: Size;
|
|
@@ -1 +1 @@
|
|
|
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{PAGE_BOTTOM_BAR_INSET,PANEL_ORDER,PANEL_WIDTH_VAR,Slot}from"./-constants";import{useLayoutPanelsEnabled,useLayoutPersistence,useLayoutReservedSlots,useLayoutStore}from"./context";import{MobileSplitStackContext}from"./Split/MobileSplitView/useMobileSplitStack";import{useMobileSplitViewEnabled}from"./Split/MobileSplitView/useMobileSplitView";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,PanelDeclarationsContext,PanelPresenceContext,PanelAnimationContext}from"./registry";import{useFloatablePortalTargets}from"./useFloatablePortalTargets";import{LayoutFloatDragProvider}from"../Internal/LayoutFloat/LayoutFloatDragProvider";import{useLayoutVar}from"./LayoutCssVars";import{useLayout}from"./useLayout";import{useLayoutRules}from"./useLayoutRules";import{DEFAULT_LAYOUT_RULES}from"./rules";let resizableFromState=slotState=>"sidePanel"===slotState.kind?slotState.resizable:void 0,useGlobalCssVariables=slotHosts=>{let leftPanelWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.leftPanel),contentWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.content),rightPanelWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.rightPanel);useEffect(()=>{let targets=[[Slot.leftPanel,leftPanelWidthCssVar],[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())},[leftPanelWidthCssVar,contentWidthCssVar,rightPanelWidthCssVar,slotHosts])},StyledLayout=styled("div",{target:"
|
|
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{PAGE_BOTTOM_BAR_INSET,PANEL_ORDER,PANEL_WIDTH_VAR,Slot}from"./-constants";import{useLayoutPanelsEnabled,useLayoutPersistence,useLayoutReservedSlots,useLayoutStore}from"./context";import{MobileSplitStackContext}from"./Split/MobileSplitView/useMobileSplitStack";import{useMobileSplitViewEnabled}from"./Split/MobileSplitView/useMobileSplitView";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,PanelDeclarationsContext,PanelPresenceContext,PanelAnimationContext}from"./registry";import{useFloatablePortalTargets}from"./useFloatablePortalTargets";import{LayoutFloatDragProvider}from"../Internal/LayoutFloat/LayoutFloatDragProvider";import{useLayoutVar}from"./LayoutCssVars";import{useLayout}from"./useLayout";import{useLayoutRules}from"./useLayoutRules";import{DEFAULT_LAYOUT_RULES}from"./rules";let resizableFromState=slotState=>"sidePanel"===slotState.kind?slotState.resizable:void 0,useGlobalCssVariables=slotHosts=>{let leftPanelWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.leftPanel),contentWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.content),rightPanelWidthCssVar=useLayoutVar(PANEL_WIDTH_VAR.rightPanel);useEffect(()=>{let targets=[[Slot.leftPanel,leftPanelWidthCssVar],[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())},[leftPanelWidthCssVar,contentWidthCssVar,rightPanelWidthCssVar,slotHosts])},StyledLayout=styled("div",{target:"ec2opau0",label:"StyledLayout"})({position:"relative",height:"100%",width:"100%"}),StyledPanelHost=styled("div",{target:"ec2opau1",label:"StyledPanelHost"})({position:"relative",height:"100%",width:"100%"});export const PANEL_HOST_DS_ID="PanelHost";let StyledContentColumn=styled("div",{shouldForwardProp:prop=>"isSplitOpen"!==prop,target:"ec2opau2",label:"StyledContentColumn"})(({isSplitOpen,theme})=>({display:"flex",height:`calc(100% - ${PAGE_BOTTOM_BAR_INSET})`,width:"100%",...isSplitOpen&&{maxWidth:theme.variables.layout.split.maxWidth.default,marginInline:"auto",gap:theme.variables.size.spacing.xxs}})),StyledContentColumnHalf=styled("div",{target:"ec2opau3",label:"StyledContentColumnHalf"})({position:"relative",height:"100%",flex:"1 1 0",minWidth:0}),StyledMobileSplitStackHost=styled("div",{target:"ec2opau4",label:"StyledMobileSplitStackHost"})({position:"absolute",top:0,left:0,right:0,bottom:PAGE_BOTTOM_BAR_INSET,overflow:"hidden",pointerEvents:"none"}),isPanelPresent=({slot,declared,present,isShown})=>!!declared[slot]&&(isShown(slot)||present[slot]),defaultSizeFor=({slot,panel,panelState})=>slot===Slot.content?void 0:panel?.defaultSize!==void 0?panel.defaultSize:panel?.resizable!==!1?panelState.size:void 0,childFor=(slot,contentColumn,slotHostRefs)=>slot===Slot.content?contentColumn:React.createElement(StyledPanelHost,{"data-ds-id":"PanelHost",ref:slotHostRefs[slot]});export const Layout=function({children,persistenceKey,storage,rules=DEFAULT_LAYOUT_RULES,additionalRulesData}){let[declared,setDeclared]=useState({}),layout=useLayout(),{state:layoutState,...panelCallbacks}=layout;useLayoutRules({layout,declared,rules,additionalData:additionalRulesData});let{dispatch}=useLayoutStore(),persistence=useLayoutPersistence(),resolvedKey=persistenceKey??persistence.persistenceKey,resolvedStorage=storage??persistence.storage,{isMobile}=useBreakpoints(),showMobileSplitStack=useMobileSplitViewEnabled(),[mobileSplitStackHost,setMobileSplitStackHost]=useState(null),[splitCount,setSplitCount]=useState(0),registerSplit=useCallback(()=>(setSplitCount(count=>count+1),()=>setSplitCount(count=>count-1)),[]),mobileSplitStack=useMemo(()=>({host:mobileSplitStackHost,isSplitPresent:splitCount>0,registerSplit}),[mobileSplitStackHost,splitCount,registerSplit]),panelsEnabled=useLayoutPanelsEnabled(),rightPanelVariant=layoutState[Slot.rightPanel].variant??declared[Slot.rightPanel]?.variant??"sidebar",isRightPanelFloating=!0===panelsEnabled&&!isMobile&&"float"===rightPanelVariant,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 rowSlots=PANEL_ORDER.filter(slot=>slot!==Slot.splitview),declaredSlots=rowSlots.filter(slot=>declared[slot]),reservedSlots=useLayoutReservedSlots(),hostedSlotCount=rowSlots.filter(slot=>declared[slot]||reservedSlots.includes(slot)).length,soloSlot=declaredSlots[0],isSplitOpen=isPanelPresent({slot:Slot.splitview,declared,present,isShown})&&isPanelPresent({slot:Slot.content,declared,present,isShown}),contentColumn=React.createElement(StyledContentColumn,{isSplitOpen:isSplitOpen},React.createElement(StyledContentColumnHalf,{ref:slotHostRefs[Slot.content]}),isSplitOpen&&React.createElement(StyledContentColumnHalf,{ref:slotHostRefs[Slot.splitview]})),panelItems=rowSlots.filter(slot=>isPanelPresent({slot,declared,present,isShown})).map(slot=>{let panel=declared[slot],panelState=layoutState[slot];return{id:slot,child:childFor(slot,contentColumn,slotHostRefs),defaultSize:defaultSizeFor({slot,panel,panelState}),minSize:panel?.minSize??panelState.minSize,maxSize:panel?.maxSize??panelState.maxSize,collapsible:slot!==Slot.content&&(panel?.collapsible??!0),lockWidthOnWindowResize:panel?.lockWidthOnWindowResize,resizable:panel?.resizable??resizableFromState(panelState)}}),soloHost=soloSlot&&isShown(soloSlot)?childFor(soloSlot,contentColumn,slotHostRefs):null,panelGroup=panelItems.length>0?React.createElement(Panel,{key:resolvedKey,panels:panelItems,persistenceKey:resolvedKey,storage:resolvedStorage,onResize:(id,size)=>dispatch({type:"resize",slot:id,size}),onCollapse:id=>panelCallbacks[id].hide(),panelHandleFor:panelRefCallbacks.handleFor,panelElementFor:panelRefCallbacks.elementFor,shouldSuppressLayoutCallback:shouldSuppressLayoutCallback}):null;return React.createElement(PanelRegistryContext.Provider,{value:registry},React.createElement(PanelDeclarationsContext.Provider,{value:declared},React.createElement(PanelPresenceContext.Provider,{value:presence},React.createElement(PanelAnimationContext.Provider,{value:animationControl},React.createElement(LayoutPortalContext.Provider,{value:portalTargets},React.createElement(LayoutFloatDragProvider,null,React.createElement(MobileSplitStackContext.Provider,{value:mobileSplitStack},React.createElement(StyledLayout,{"data-ds-id":"Layout"},hostedSlotCount<=1?soloHost:panelGroup,isRightPanelFloating&&layoutState[Slot.rightPanel].visible&&React.createElement(LayoutFloat,{hostRef:floatHostRef}),children,showMobileSplitStack&&React.createElement(StyledMobileSplitStackHost,{ref:setMobileSplitStackHost})))))))))};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 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,resizable,scrollContainerRef,onScroll})=>{let{isMounted,pinnedWidth}=usePanelDockedSlide({slot:Slot.leftPanel,defaultSize,minSize,maxSize,collapsible,resizable});return useLayoutPortal(Slot.leftPanel,isMounted?React.createElement(PanelSlideBody,{anchor:"right",pinnedWidth:pinnedWidth},React.createElement(PanelContainer,{showBorderRight:!0,"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll},children)):null)};
|
|
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,resizable,scrollContainerRef,onScroll})=>{let{isMounted,pinnedWidth}=usePanelDockedSlide({slot:Slot.leftPanel,defaultSize,minSize,maxSize,collapsible,resizable,lockWidthOnWindowResize:!0});return useLayoutPortal(Slot.leftPanel,isMounted?React.createElement(PanelSlideBody,{anchor:"right",pinnedWidth:pinnedWidth},React.createElement(PanelContainer,{showBorderRight:!0,"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll},children)):null)};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React from"react";import{Slot}from"../-constants";import{useDeclarePanel,useRunCallbackOnValueChange}from"../registry";import{useLayout}from"../useLayout";import{useCanRenderPanel}from"../context";import{useBreakpoints}from"../../../shared/useBreakpoints";import{RightPanelDocked}from"./RightPanelDocked";import{RightPanelSheet}from"./RightPanelSheet";export const RightPanel=({children,defaultSize=378,minSize=328,maxSize="30%",collapsible=!1,resizable,variant="sidebar",onVisibleChange,onVariantChange,"aria-label":ariaLabel,scrollContainerRef,onScroll})=>{let{state:layoutState,[Slot.rightPanel]:panel}=useLayout(),{isVisible,hide}=panel,{isMobile}=useBreakpoints(),canRender=useCanRenderPanel();useDeclarePanel(Slot.rightPanel,{defaultSize,minSize,maxSize,collapsible,resizable,variant});let resolvedVariant=layoutState[Slot.rightPanel].variant??variant;return(useRunCallbackOnValueChange(isVisible,onVisibleChange),useRunCallbackOnValueChange(resolvedVariant,onVariantChange),canRender)?isMobile?React.createElement(RightPanelSheet,{isVisible:isVisible,hide:hide,"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll},children):React.createElement(RightPanelDocked,{isVisible:isVisible,variant:resolvedVariant,"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll},children):null};
|
|
1
|
+
import React from"react";import{Slot}from"../-constants";import{useDeclarePanel,useRunCallbackOnValueChange}from"../registry";import{useLayout}from"../useLayout";import{useCanRenderPanel}from"../context";import{useBreakpoints}from"../../../shared/useBreakpoints";import{RightPanelDocked}from"./RightPanelDocked";import{RightPanelSheet}from"./RightPanelSheet";export const RightPanel=({children,defaultSize=378,minSize=328,maxSize="30%",collapsible=!1,resizable,variant="sidebar",onVisibleChange,onVariantChange,"aria-label":ariaLabel,scrollContainerRef,onScroll})=>{let{state:layoutState,[Slot.rightPanel]:panel}=useLayout(),{isVisible,hide}=panel,{isMobile}=useBreakpoints(),canRender=useCanRenderPanel();useDeclarePanel(Slot.rightPanel,{defaultSize,minSize,maxSize,collapsible,resizable,lockWidthOnWindowResize:!0,variant});let resolvedVariant=layoutState[Slot.rightPanel].variant??variant;return(useRunCallbackOnValueChange(isVisible,onVisibleChange),useRunCallbackOnValueChange(resolvedVariant,onVariantChange),canRender)?isMobile?React.createElement(RightPanelSheet,{isVisible:isVisible,hide:hide,"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll},children):React.createElement(RightPanelDocked,{isVisible:isVisible,variant:resolvedVariant,"aria-label":ariaLabel,scrollContainerRef:scrollContainerRef,onScroll:onScroll},children):null};
|
|
@@ -23,6 +23,10 @@ export type PanelReg = {
|
|
|
23
23
|
/** When `false`, the panel is fixed at `defaultSize` and can't be drag-resized
|
|
24
24
|
* (directly or via a neighbour). Defaults to resizable. */
|
|
25
25
|
resizable?: boolean;
|
|
26
|
+
/** Lock this column's width when the window resizes, leaving the change to
|
|
27
|
+
* the columns without it. Declared by the docked side panels, which are
|
|
28
|
+
* sized for their own contents; `content` omits it and absorbs. */
|
|
29
|
+
lockWidthOnWindowResize?: boolean;
|
|
26
30
|
/** Initial presentation from `RightPanel`'s `variant` prop. Read as the
|
|
27
31
|
* fallback wherever the store's variant is still unset. */
|
|
28
32
|
variant?: RightPanelVariant;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createContext,useContext,useEffect,useLayoutEffect,useRef}from"react";import{createPortal}from"react-dom";import{Slot}from"./-constants";import{useLayoutPanelsEnabled}from"./context";export const LayoutPortalContext=createContext({});export function useLayoutPortal(slot,children){let slotNode=useContext(LayoutPortalContext)[slot]??null;return slotNode?createPortal(children,slotNode):null}export const PanelRegistryContext=createContext(null);export function useDeclarePanel(slot,reg){let registry=useContext(PanelRegistryContext),declarationEnabled=!0===useLayoutPanelsEnabled()||slot===Slot.content,{defaultSize,minSize,maxSize,collapsible,resizable,variant}=reg;useLayoutEffect(()=>{if(registry&&declarationEnabled)return registry.register(slot,{defaultSize,minSize,maxSize,collapsible,resizable,variant}),()=>registry.unregister(slot)},[registry,declarationEnabled,slot,defaultSize,minSize,maxSize,collapsible,resizable,variant])}export const PanelDeclarationsContext=createContext({});export const PanelPresenceContext=createContext(null);export function usePanelPresence(slot,isPresent){let presence=useContext(PanelPresenceContext);useLayoutEffect(()=>{if(presence)return presence.setPresent(slot,isPresent),()=>presence.setPresent(slot,!1)},[presence,slot,isPresent])}export const PanelAnimationContext=createContext(null);export function usePanelAnimationControl(){return useContext(PanelAnimationContext)}export function useRunCallbackOnValueChange(value,onChange){let prev=useRef(value);useEffect(()=>{prev.current!==value&&(prev.current=value,onChange?.(value))},[value,onChange])}export function useVisibleChange(visible,onChange){useRunCallbackOnValueChange(visible,onChange)}
|
|
1
|
+
import{createContext,useContext,useEffect,useLayoutEffect,useRef}from"react";import{createPortal}from"react-dom";import{Slot}from"./-constants";import{useLayoutPanelsEnabled}from"./context";export const LayoutPortalContext=createContext({});export function useLayoutPortal(slot,children){let slotNode=useContext(LayoutPortalContext)[slot]??null;return slotNode?createPortal(children,slotNode):null}export const PanelRegistryContext=createContext(null);export function useDeclarePanel(slot,reg){let registry=useContext(PanelRegistryContext),declarationEnabled=!0===useLayoutPanelsEnabled()||slot===Slot.content,{defaultSize,minSize,maxSize,collapsible,resizable,lockWidthOnWindowResize,variant}=reg;useLayoutEffect(()=>{if(registry&&declarationEnabled)return registry.register(slot,{defaultSize,minSize,maxSize,collapsible,resizable,lockWidthOnWindowResize,variant}),()=>registry.unregister(slot)},[registry,declarationEnabled,slot,defaultSize,minSize,maxSize,collapsible,resizable,lockWidthOnWindowResize,variant])}export const PanelDeclarationsContext=createContext({});export const PanelPresenceContext=createContext(null);export function usePanelPresence(slot,isPresent){let presence=useContext(PanelPresenceContext);useLayoutEffect(()=>{if(presence)return presence.setPresent(slot,isPresent),()=>presence.setPresent(slot,!1)},[presence,slot,isPresent])}export const PanelAnimationContext=createContext(null);export function usePanelAnimationControl(){return useContext(PanelAnimationContext)}export function useRunCallbackOnValueChange(value,onChange){let prev=useRef(value);useEffect(()=>{prev.current!==value&&(prev.current=value,onChange?.(value))},[value,onChange])}export function useVisibleChange(visible,onChange){useRunCallbackOnValueChange(visible,onChange)}
|
|
@@ -11,6 +11,9 @@ export type PanelDockedSlideOptions = {
|
|
|
11
11
|
* charge. Doesn't affect the slide - the open/close resize goes through the
|
|
12
12
|
* imperative handle, which a fixed column still honours. */
|
|
13
13
|
resizable?: boolean;
|
|
14
|
+
/** Forwarded to the declaration: lock the column's width when the window
|
|
15
|
+
* resizes. Doesn't affect the slide, which resizes the column outright. */
|
|
16
|
+
lockWidthOnWindowResize?: boolean;
|
|
14
17
|
};
|
|
15
18
|
export type PanelDockedSlide = {
|
|
16
19
|
/** Whether the panel's content should render at all (entering, open, or
|
|
@@ -29,4 +32,4 @@ export type PanelDockedSlide = {
|
|
|
29
32
|
* reduced motion is requested. The mobile modal-drawer lifecycle lives in
|
|
30
33
|
* {@link useExitAnimation} and the Drawer's styled components.
|
|
31
34
|
*/
|
|
32
|
-
export declare function usePanelDockedSlide({ slot, defaultSize, minSize, maxSize, collapsible, resizable, }: PanelDockedSlideOptions): PanelDockedSlide;
|
|
35
|
+
export declare function usePanelDockedSlide({ slot, defaultSize, minSize, maxSize, collapsible, resizable, lockWidthOnWindowResize, }: PanelDockedSlideOptions): PanelDockedSlide;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useLayoutEffect,useState}from"react";import{useTheme}from"@emotion/react";import{useWindow}from"../../shared/useWindow";import{prefersReducedMotion}from"../../shared/prefersReducedMotion";import{useDeclarePanel,usePanelAnimationControl,usePanelPresence}from"./registry";import{useLayout}from"./useLayout";let parseDurationMs=duration=>{let trimmed=duration.trim();return trimmed.endsWith("ms")?parseFloat(trimmed):trimmed.endsWith("s")?1e3*parseFloat(trimmed):parseFloat(trimmed)||0},resolveSizePx=(size,groupWidthPx)=>{if("number"==typeof size)return size;if("string"!=typeof size)return null;let parsed=parseFloat(size);return Number.isFinite(parsed)?size.trim().endsWith("px")?parsed:null!=groupWidthPx?parsed/100*groupWidthPx:null:null},groupColumnsOf=element=>{let columns=element.closest("[data-group]")?.querySelectorAll("[data-panel]");return columns?Array.from(columns):[element]},isHandleReady=handle=>{try{return handle.isCollapsed(),!0}catch{return!1}};export function usePanelDockedSlide({slot,defaultSize,minSize,maxSize,collapsible,resizable}){let{isVisible,state}=useLayout()[slot],theme=useTheme(),window=useWindow(),animation=usePanelAnimationControl(),reducedMotion=prefersReducedMotion(window),[isMounted,setIsMounted]=useState(isVisible),[phase,setPhase]=useState("idle"),[pinnedWidth,setPinnedWidth]=useState(null),[prevVisible,setPrevVisible]=useState(isVisible);return isVisible!==prevVisible&&(setPrevVisible(isVisible),setPhase(isVisible?"entering":"exiting"),isVisible&&setIsMounted(!0)),useDeclarePanel(slot,{defaultSize:"entering"===phase&&collapsible&&!reducedMotion?0:defaultSize,minSize,maxSize,collapsible,resizable}),usePanelPresence(slot,isMounted),useLayoutEffect(()=>{if("idle"===phase)return;let cancelled=!1,frame=0,settleTimer=0,animatedColumns=[];animation?.setResizeSuppressed(slot,!0);let{duration,timingFunction}=theme.variables.animation.navSlide.open,durationMs=parseDurationMs(duration),setColumnTransitions=enabled=>{animatedColumns.forEach(column=>{enabled?column.style.setProperty("transition",`flex-grow ${duration} ${timingFunction}`):column.style.removeProperty("transition")})},targetSize=state.size??defaultSize??minSize,openColumn=(handle,targetPx)=>{handle.isCollapsed()&&handle.expand(),handle.resize(targetPx??targetSize??minSize??"20%")},settle=handle=>{if(setColumnTransitions(!1),animation?.setResizeSuppressed(slot,!1),"entering"===phase&&handle)try{handle.getSize().inPixels<1&&openColumn(handle,null)}catch{}setPinnedWidth(null),"exiting"===phase&&setIsMounted(!1),setPhase("idle")},runSlide=(handle,element)=>{animatedColumns=groupColumnsOf(element);let targetPx=resolveSizePx(targetSize,element.closest("[data-group]")?.getBoundingClientRect().width??null);setPinnedWidth("entering"===phase?targetPx:handle.getSize().inPixels),setColumnTransitions(!0),element.getBoundingClientRect();try{"entering"===phase?openColumn(handle,targetPx):handle.collapse()}catch{settle(handle);return}settleTimer=window.setTimeout(()=>settle(handle),durationMs+80)},waitForColumn=attempt=>{if(cancelled)return;let handle=animation?.getHandle(slot)??null,element=animation?.getElement(slot)??null;return handle&&element&&isHandleReady(handle)?void runSlide(handle,element):"exiting"===phase||!animation||attempt>=30?void settle(handle):void(frame=window.requestAnimationFrame(()=>waitForColumn(attempt+1)))};return!collapsible||reducedMotion?settle(animation?.getHandle(slot)??null):waitForColumn(0),()=>{cancelled=!0,window.cancelAnimationFrame(frame),window.clearTimeout(settleTimer),setColumnTransitions(!1),animation?.setResizeSuppressed(slot,!1)}},[phase,slot,collapsible,animation,window,theme]),{isMounted,pinnedWidth}}
|
|
1
|
+
import{useLayoutEffect,useState}from"react";import{useTheme}from"@emotion/react";import{useWindow}from"../../shared/useWindow";import{prefersReducedMotion}from"../../shared/prefersReducedMotion";import{useDeclarePanel,usePanelAnimationControl,usePanelPresence}from"./registry";import{useLayout}from"./useLayout";let parseDurationMs=duration=>{let trimmed=duration.trim();return trimmed.endsWith("ms")?parseFloat(trimmed):trimmed.endsWith("s")?1e3*parseFloat(trimmed):parseFloat(trimmed)||0},resolveSizePx=(size,groupWidthPx)=>{if("number"==typeof size)return size;if("string"!=typeof size)return null;let parsed=parseFloat(size);return Number.isFinite(parsed)?size.trim().endsWith("px")?parsed:null!=groupWidthPx?parsed/100*groupWidthPx:null:null},groupColumnsOf=element=>{let columns=element.closest("[data-group]")?.querySelectorAll("[data-panel]");return columns?Array.from(columns):[element]},isHandleReady=handle=>{try{return handle.isCollapsed(),!0}catch{return!1}};export function usePanelDockedSlide({slot,defaultSize,minSize,maxSize,collapsible,resizable,lockWidthOnWindowResize}){let{isVisible,state}=useLayout()[slot],theme=useTheme(),window=useWindow(),animation=usePanelAnimationControl(),reducedMotion=prefersReducedMotion(window),[isMounted,setIsMounted]=useState(isVisible),[phase,setPhase]=useState("idle"),[pinnedWidth,setPinnedWidth]=useState(null),[prevVisible,setPrevVisible]=useState(isVisible);return isVisible!==prevVisible&&(setPrevVisible(isVisible),setPhase(isVisible?"entering":"exiting"),isVisible&&setIsMounted(!0)),useDeclarePanel(slot,{defaultSize:"entering"===phase&&collapsible&&!reducedMotion?0:defaultSize,minSize,maxSize,collapsible,resizable,lockWidthOnWindowResize}),usePanelPresence(slot,isMounted),useLayoutEffect(()=>{if("idle"===phase)return;let cancelled=!1,frame=0,settleTimer=0,animatedColumns=[];animation?.setResizeSuppressed(slot,!0);let{duration,timingFunction}=theme.variables.animation.navSlide.open,durationMs=parseDurationMs(duration),setColumnTransitions=enabled=>{animatedColumns.forEach(column=>{enabled?column.style.setProperty("transition",`flex-grow ${duration} ${timingFunction}`):column.style.removeProperty("transition")})},targetSize=state.size??defaultSize??minSize,openColumn=(handle,targetPx)=>{handle.isCollapsed()&&handle.expand(),handle.resize(targetPx??targetSize??minSize??"20%")},settle=handle=>{if(setColumnTransitions(!1),animation?.setResizeSuppressed(slot,!1),"entering"===phase&&handle)try{handle.getSize().inPixels<1&&openColumn(handle,null)}catch{}setPinnedWidth(null),"exiting"===phase&&setIsMounted(!1),setPhase("idle")},runSlide=(handle,element)=>{animatedColumns=groupColumnsOf(element);let targetPx=resolveSizePx(targetSize,element.closest("[data-group]")?.getBoundingClientRect().width??null);setPinnedWidth("entering"===phase?targetPx:handle.getSize().inPixels),setColumnTransitions(!0),element.getBoundingClientRect();try{"entering"===phase?openColumn(handle,targetPx):handle.collapse()}catch{settle(handle);return}settleTimer=window.setTimeout(()=>settle(handle),durationMs+80)},waitForColumn=attempt=>{if(cancelled)return;let handle=animation?.getHandle(slot)??null,element=animation?.getElement(slot)??null;return handle&&element&&isHandleReady(handle)?void runSlide(handle,element):"exiting"===phase||!animation||attempt>=30?void settle(handle):void(frame=window.requestAnimationFrame(()=>waitForColumn(attempt+1)))};return!collapsible||reducedMotion?settle(animation?.getHandle(slot)??null):waitForColumn(0),()=>{cancelled=!0,window.cancelAnimationFrame(frame),window.clearTimeout(settleTimer),setColumnTransitions(!1),animation?.setResizeSuppressed(slot,!1)}},[phase,slot,collapsible,animation,window,theme]),{isMounted,pinnedWidth}}
|
|
@@ -10,6 +10,11 @@ export type RangePopoverProps = {
|
|
|
10
10
|
isVisible: boolean;
|
|
11
11
|
/** Called when the popover is dismissed by an outside click or the Escape key. */
|
|
12
12
|
onClose: () => void;
|
|
13
|
+
/**
|
|
14
|
+
* Controls whether the popover closes on an outside click. When false, only
|
|
15
|
+
* the Escape key dismisses it.
|
|
16
|
+
*/
|
|
17
|
+
dismissOnOutsideClick?: boolean;
|
|
13
18
|
/** Preferred placement relative to the range. */
|
|
14
19
|
placement?: RangePopoverPlacement;
|
|
15
20
|
/** Portal target; falls back to the document body when omitted. */
|
|
@@ -51,6 +56,7 @@ export type RangePopoverProps = {
|
|
|
51
56
|
* @param range - The range to anchor on.
|
|
52
57
|
* @param isVisible - Whether the popover is shown.
|
|
53
58
|
* @param onClose - Called when dismissed by an outside click or the Escape key.
|
|
59
|
+
* @param dismissOnOutsideClick - Whether an outside click dismisses the popover.
|
|
54
60
|
* @param placement - Preferred placement relative to the range.
|
|
55
61
|
* @param portalContainer - Portal target; falls back to the document body.
|
|
56
62
|
* @param contentPadding - Inner padding of the popover surface.
|
|
@@ -60,5 +66,5 @@ export type RangePopoverProps = {
|
|
|
60
66
|
* @param aria-label - Accessible name for the popover surface.
|
|
61
67
|
* @param disableInitialFocus - When true, does not move focus into the popover.
|
|
62
68
|
*/
|
|
63
|
-
export declare function RangePopover({ content, range, isVisible, onClose, placement, portalContainer, contentPadding, maxWidth, hideArrow, role, "aria-label": ariaLabel, disableInitialFocus, "data-e2e-test-id": dataE2eTestId, }: RangePopoverProps): React.ReactElement;
|
|
69
|
+
export declare function RangePopover({ content, range, isVisible, onClose, dismissOnOutsideClick, placement, portalContainer, contentPadding, maxWidth, hideArrow, role, "aria-label": ariaLabel, disableInitialFocus, "data-e2e-test-id": dataE2eTestId, }: RangePopoverProps): React.ReactElement;
|
|
64
70
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useId,useRef}from"react";import styled from"@emotion/styled";import{TooltipContent}from"../Tooltip/TooltipContent";import{FocusTrapWrapper}from"../../shared/FocusTrapWrapper";let StyledContent=styled("div",{target:"
|
|
1
|
+
import React,{useId,useRef}from"react";import styled from"@emotion/styled";import{TooltipContent}from"../Tooltip/TooltipContent";import{FocusTrapWrapper}from"../../shared/FocusTrapWrapper";let StyledContent=styled("div",{target:"e1cdfvza0",label:"StyledContent"})(({theme,contentPadding})=>({padding:"m"===contentPadding?theme.variables.size.spacing.s:theme.variables.size.spacing.xxs}));export function RangePopover({content,range,isVisible,onClose,dismissOnOutsideClick=!0,placement="top",portalContainer,contentPadding="s",maxWidth,hideArrow=!1,role="dialog","aria-label":ariaLabel,disableInitialFocus=!1,"data-e2e-test-id":dataE2eTestId}){let tooltipId=useId(),rangeRef=useRef(null);rangeRef.current=range;let contentRef=useRef(null),trappedContent=React.createElement(FocusTrapWrapper,{active:isVisible,focusTrapOptions:{allowOutsideClick:!0,clickOutsideDeactivates:dismissOnOutsideClick,escapeDeactivates:!0,fallbackFocus:()=>contentRef.current,initialFocus:!disableInitialFocus&&void 0,onPostDeactivate:onClose,preventScroll:!0,returnFocusOnDeactivate:!disableInitialFocus}},React.createElement(StyledContent,{ref:contentRef,tabIndex:-1,contentPadding:contentPadding},content));return React.createElement(TooltipContent,{"aria-label":ariaLabel,content:trappedContent,dataDSId:"RangePopover",dataE2eTestId:dataE2eTestId,hideArrow:hideArrow,isVisible:isVisible,maxWidth:maxWidth,placement:placement,portalContainer:portalContainer,role:role,tooltipId:tooltipId,triggerRef:rangeRef})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useFocusVisible}from"@react-aria/interactions";import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{TooltipContent}from"./TooltipContent";export function BaseTooltip({placement="auto",content,children,externalTriggerRef,portalContainer,contentPadding,maxWidth,subTheme,"data-e2e-test-id":dataE2eTestId,onVisibilityChange,privateProps,...ariaAttributes}){let tooltipId=useMemo(()=>`DSTooltip_${Math.floor(Date.now()*Math.random())}`,[]),{isFocusVisible}=useFocusVisible(),[isVisible,setVisible]=useState(!1),triggeredByEvent=useRef(null),isTooltipHovered=useRef(!1),isTriggerHovered=useRef(!1),hideTooltipTimeoutId=useRef(null),showTooltipTimeoutId=useRef(null),internalTriggerRef=useRef(null),triggerRef=externalTriggerRef||internalTriggerRef,toggleVisibility=useCallback(status=>{setVisible(status),onVisibilityChange&&onVisibilityChange(status)},[onVisibilityChange]),handleTriggerPointerEnter=useCallback(()=>{isTriggerHovered.current=!0,isTooltipHovered.current||(clearTimeout(showTooltipTimeoutId.current),showTooltipTimeoutId.current=setTimeout(()=>{isTriggerHovered.current&&(triggeredByEvent.current="hover",toggleVisibility(!0))},200))},[toggleVisibility]),handleTriggerPointerLeave=useCallback(()=>{isTriggerHovered.current=!1,clearTimeout(hideTooltipTimeoutId.current),hideTooltipTimeoutId.current=setTimeout(()=>{isTooltipHovered.current||"hover"!==triggeredByEvent.current||isTriggerHovered.current||toggleVisibility(!1)},200)},[toggleVisibility]),handleTriggerFocus=useCallback(()=>{isFocusVisible&&(triggeredByEvent.current="focus",toggleVisibility(!0))},[isFocusVisible,toggleVisibility]),handleTriggerBlur=useCallback(()=>{"focus"===triggeredByEvent.current&&toggleVisibility(!1)},[toggleVisibility]),handleTriggerClick=useCallback(()=>{toggleVisibility(!1)},[toggleVisibility]),handleTriggerKeyDown=useCallback(evt=>{"Escape"===evt.key&&toggleVisibility(!1)},[toggleVisibility]);useEffect(()=>()=>{clearTimeout(showTooltipTimeoutId.current),clearTimeout(hideTooltipTimeoutId.current)},[]),useEffect(()=>{let trigger;if(externalTriggerRef?.current&&!children){let triggerTabIndex=(trigger=externalTriggerRef.current).getAttribute("tabindex");trigger.setAttribute("tabindex",triggerTabIndex??"0"),trigger.addEventListener("pointerenter",handleTriggerPointerEnter),trigger.addEventListener("pointerleave",handleTriggerPointerLeave),trigger.addEventListener("focus",handleTriggerFocus),trigger.addEventListener("blur",handleTriggerBlur),trigger.addEventListener("click",handleTriggerClick),trigger.addEventListener("keydown",handleTriggerKeyDown)}return()=>{trigger&&(trigger.removeEventListener("pointerenter",handleTriggerPointerEnter),trigger.removeEventListener("pointerleave",handleTriggerPointerLeave),trigger.removeEventListener("focus",handleTriggerFocus),trigger.removeEventListener("blur",handleTriggerBlur),trigger.removeEventListener("click",handleTriggerClick),trigger.removeEventListener("keydown",handleTriggerKeyDown))}},[externalTriggerRef,children,handleTriggerPointerEnter,handleTriggerPointerLeave,handleTriggerFocus,handleTriggerBlur,handleTriggerClick,handleTriggerKeyDown]),useEffect(()=>{if(externalTriggerRef?.current&&!children){let trigger=externalTriggerRef.current;isVisible?trigger.setAttribute("aria-describedby",tooltipId):trigger.removeAttribute("aria-describedby")}},[externalTriggerRef,children,tooltipId,isVisible]);let triggerElm=children?React.cloneElement(children,{ref:triggerRef,...ariaAttributes,...isVisible&&{"aria-describedby":tooltipId},tabIndex:children.props.tabIndex??0,onPointerEnter:handleTriggerPointerEnter,onPointerLeave:handleTriggerPointerLeave,onFocus:evt=>{handleTriggerFocus(),children.props.onFocus&&children.props.onFocus(evt)},onBlur:evt=>{handleTriggerBlur(),children.props.onBlur&&children.props.onBlur(evt)},onClick:evt=>{handleTriggerClick(),children.props.onClick&&children.props.onClick(evt)},onKeyDown:handleTriggerKeyDown}):null,tooltipElm=React.createElement(TooltipContent,{dataDSId:"Tooltip",content:content,placement:placement,portalContainer:portalContainer,dataE2eTestId:dataE2eTestId,isVisible:isVisible,tooltipId:tooltipId,triggerRef:triggerRef,
|
|
1
|
+
import{useFocusVisible}from"@react-aria/interactions";import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{TooltipContent}from"./TooltipContent";export function BaseTooltip({placement="auto",content,children,externalTriggerRef,portalContainer,contentPadding,maxWidth,subTheme,"data-e2e-test-id":dataE2eTestId,onVisibilityChange,privateProps,...ariaAttributes}){let tooltipId=useMemo(()=>`DSTooltip_${Math.floor(Date.now()*Math.random())}`,[]),{isFocusVisible}=useFocusVisible(),[isVisible,setVisible]=useState(!1),triggeredByEvent=useRef(null),isTooltipHovered=useRef(!1),isTriggerHovered=useRef(!1),hideTooltipTimeoutId=useRef(null),showTooltipTimeoutId=useRef(null),internalTriggerRef=useRef(null),triggerRef=externalTriggerRef||internalTriggerRef,toggleVisibility=useCallback(status=>{setVisible(status),onVisibilityChange&&onVisibilityChange(status)},[onVisibilityChange]),handleTriggerPointerEnter=useCallback(()=>{isTriggerHovered.current=!0,isTooltipHovered.current||(clearTimeout(showTooltipTimeoutId.current),showTooltipTimeoutId.current=setTimeout(()=>{isTriggerHovered.current&&(triggeredByEvent.current="hover",toggleVisibility(!0))},200))},[toggleVisibility]),handleTriggerPointerLeave=useCallback(()=>{isTriggerHovered.current=!1,clearTimeout(hideTooltipTimeoutId.current),hideTooltipTimeoutId.current=setTimeout(()=>{isTooltipHovered.current||"hover"!==triggeredByEvent.current||isTriggerHovered.current||toggleVisibility(!1)},200)},[toggleVisibility]),handleTriggerFocus=useCallback(()=>{isFocusVisible&&(triggeredByEvent.current="focus",toggleVisibility(!0))},[isFocusVisible,toggleVisibility]),handleTriggerBlur=useCallback(()=>{"focus"===triggeredByEvent.current&&toggleVisibility(!1)},[toggleVisibility]),handleTriggerClick=useCallback(()=>{toggleVisibility(!1)},[toggleVisibility]),handleTriggerKeyDown=useCallback(evt=>{"Escape"===evt.key&&toggleVisibility(!1)},[toggleVisibility]);useEffect(()=>()=>{clearTimeout(showTooltipTimeoutId.current),clearTimeout(hideTooltipTimeoutId.current)},[]),useEffect(()=>{let trigger;if(externalTriggerRef?.current&&!children){let triggerTabIndex=(trigger=externalTriggerRef.current).getAttribute("tabindex");trigger.setAttribute("tabindex",triggerTabIndex??"0"),trigger.addEventListener("pointerenter",handleTriggerPointerEnter),trigger.addEventListener("pointerleave",handleTriggerPointerLeave),trigger.addEventListener("focus",handleTriggerFocus),trigger.addEventListener("blur",handleTriggerBlur),trigger.addEventListener("click",handleTriggerClick),trigger.addEventListener("keydown",handleTriggerKeyDown)}return()=>{trigger&&(trigger.removeEventListener("pointerenter",handleTriggerPointerEnter),trigger.removeEventListener("pointerleave",handleTriggerPointerLeave),trigger.removeEventListener("focus",handleTriggerFocus),trigger.removeEventListener("blur",handleTriggerBlur),trigger.removeEventListener("click",handleTriggerClick),trigger.removeEventListener("keydown",handleTriggerKeyDown))}},[externalTriggerRef,children,handleTriggerPointerEnter,handleTriggerPointerLeave,handleTriggerFocus,handleTriggerBlur,handleTriggerClick,handleTriggerKeyDown]),useEffect(()=>{if(externalTriggerRef?.current&&!children){let trigger=externalTriggerRef.current;isVisible?trigger.setAttribute("aria-describedby",tooltipId):trigger.removeAttribute("aria-describedby")}},[externalTriggerRef,children,tooltipId,isVisible]);let triggerElm=children?React.cloneElement(children,{ref:triggerRef,...ariaAttributes,...isVisible&&{"aria-describedby":tooltipId},tabIndex:children.props.tabIndex??0,onPointerEnter:handleTriggerPointerEnter,onPointerLeave:handleTriggerPointerLeave,onFocus:evt=>{handleTriggerFocus(),children.props.onFocus&&children.props.onFocus(evt)},onBlur:evt=>{handleTriggerBlur(),children.props.onBlur&&children.props.onBlur(evt)},onClick:evt=>{handleTriggerClick(),children.props.onClick&&children.props.onClick(evt)},onKeyDown:handleTriggerKeyDown}):null,tooltipElm=React.createElement(TooltipContent,{dataDSId:"Tooltip",content:content,placement:placement,portalContainer:portalContainer,dataE2eTestId:dataE2eTestId,isVisible:isVisible,tooltipId:tooltipId,triggerRef:triggerRef,role:"tooltip",contentPadding:contentPadding,maxWidth:maxWidth,subTheme:subTheme,onTooltipPointerEnter:()=>{isTooltipHovered.current=!0},onTooltipPointerLeave:()=>{isTooltipHovered.current=!1,"hover"===triggeredByEvent.current&&toggleVisibility(!1)},privateProps:privateProps});return React.createElement(React.Fragment,null,triggerElm,tooltipElm)}
|
|
@@ -3,5 +3,7 @@ import type { BaseTooltipProps } from "./BaseTooltip";
|
|
|
3
3
|
import type { TooltipConditionalProps } from "./types";
|
|
4
4
|
export type TooltipProps = Omit<BaseTooltipProps, "content" | "contentPadding" | "maxWidth" | "subTheme"> & {
|
|
5
5
|
content: string;
|
|
6
|
+
/** The keyboard shortcut that triggers the same action, shown in a second column beside the content. Pass a `Kbd` for keys pressed together or a `KbdGroup` for a sequence. Hidden below the `m` breakpoint, which has no keyboard. */
|
|
7
|
+
shortcut?: React.ReactElement;
|
|
6
8
|
} & TooltipConditionalProps;
|
|
7
|
-
export declare function Tooltip({ content, ...rest }: TooltipProps): React.ReactElement;
|
|
9
|
+
export declare function Tooltip({ content, shortcut, ...rest }: TooltipProps): React.ReactElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React from"react";import{Text}from"../Typography/Text/Text";import{BaseTooltip}from"./BaseTooltip";export function Tooltip({content,...rest}){let contentElm=React.createElement(Text,{size:"s"},content);return React.createElement(BaseTooltip,{content:contentElm,subTheme:"inverted",...rest})}
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";import{Text}from"../Typography/Text/Text";import{mqValue}from"../../shared/mediaQueries";import{BaseTooltip}from"./BaseTooltip";let StyledTooltipRow=styled("div",{target:"erivg040",label:"StyledTooltipRow"})(({theme})=>({display:"flex",alignItems:"flex-start",gap:theme.variables.size.spacing.xxs})),StyledKbdColumn=styled("div",{target:"erivg041",label:"StyledKbdColumn"})(({theme})=>({flexShrink:0,paddingTop:theme.variables.size.spacing.xxxs,...mqValue({display:["none","flex"]})})),CustomText=styled(Text,{target:"erivg042",label:"CustomText"})({flex:"1 0 0",minWidth:0});export function Tooltip({content,shortcut,...rest}){let contentElm=shortcut?React.createElement(StyledTooltipRow,null,React.createElement(CustomText,{size:"s"},content),React.createElement(StyledKbdColumn,null,shortcut)):React.createElement(Text,{size:"s"},content);return React.createElement(BaseTooltip,{content:contentElm,subTheme:"inverted",...rest})}
|
package/build/esm/index.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export * from "./components/Content/DosageButton";
|
|
|
42
42
|
export * from "./components/Content/ReferenceButton";
|
|
43
43
|
export * from "./components/CountButton/CountButton";
|
|
44
44
|
export * from "./components/DataTable";
|
|
45
|
+
export * from "./components/DataTable/DataTableToolbar/DataTableToolbar";
|
|
45
46
|
export * from "./components/Divider/Divider";
|
|
46
47
|
export * from "./components/DropdownMenu/DropdownMenu";
|
|
47
48
|
export * from "./components/EntityList";
|
package/build/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ambossVisualConfiguration}from"./web-tokens/visualConfig";export const{dark,light}=ambossVisualConfiguration;export{default as createCache}from"@emotion/cache";export{CacheProvider,ThemeProvider}from"@emotion/react";export*from"./components/AccessCardItem/AccessCardItem";export*from"./components/AIButton/AIButton";export*from"./components/AIFloatingButton/AIFloatingButton";export*from"./components/Avatar/Avatar";export*from"./components/AvatarGroup/AvatarGroup";export*from"./components/Badge/Badge";export*from"./components/BinaryFeedback/BinaryFeedback";export*from"./components/Box/Box";export*from"./components/BulkActionsToolbar/BulkActionsToolbar";export*from"./components/Button/Button";export*from"./components/Callout/Callout";export*from"./components/Card/Card";export*from"./components/Card/CardBox/CardBox";export*from"./components/CatalogCard/CatalogCard";export*from"./components/ChatMessage";export*from"./components/ChatResponse";export*from"./components/CheckboxCard/CheckboxCard";export*from"./components/Collapsible/Collapsible";export*from"./components/ColorIndicator/ColorIndicator";export*from"./components/ColorPicker/ColorPicker";export*from"./components/Column/Columns";export*from"./components/Composite/FilterDialog/FilterDialog";export*from"./components/Container";export*from"./components/Content/ContentBadge/ContentBadge";export*from"./components/Content/ContentBox/ContentBox";export*from"./components/Content/ContentCheckbox/ContentCheckbox";export*from"./components/Content/ContentFontResizer";export*from"./components/Content/ContentHeading/ContentHeading";export*from"./components/Content/ContentLink/ContentLink";export*from"./components/Content/ContentList";export*from"./components/Content/ContentPictogramButton/ContentPictogramButton";export*from"./components/Content/ContentTable";export*from"./components/Content/ContentTableModal/ContentTableModal";export*from"./components/Content/ContentText/ContentText";export*from"./components/Content/DosageButton";export*from"./components/Content/ReferenceButton";export*from"./components/CountButton/CountButton";export*from"./components/DataTable";export*from"./components/Divider/Divider";export*from"./components/DropdownMenu/DropdownMenu";export*from"./components/EntityList";export*from"./components/EntityTree";export*from"./components/Form/Checkbox/Checkbox";export*from"./components/Form/Combobox/Combobox";export*from"./components/Form/DateInput/DateInput";export*from"./components/Form/DatePicker";export*from"./components/Form/FormFieldGroup/FormFieldGroup";export*from"./components/Form/Input";export*from"./components/Form/MaskedInput/MaskedInput";export*from"./components/Form/PasswordInput";export*from"./components/Form/Radio/Radio";export*from"./components/Form/RadioButton/RadioButton";export*from"./components/Form/RangeInput/RangeInput";export*from"./components/Form/SearchInput/SearchInput";export*from"./components/Form/SegmentedControl/SegmentedControl";export*from"./components/Form/Select";export*from"./components/Form/Textarea/Textarea";export*from"./components/Form/Toggle/Toggle";export*from"./components/Form/ToggleButton/ToggleButton";export*from"./components/Form/ToolbarToggle/ToolbarToggle";export*from"./components/Grid/Grid";export*from"./components/Icon/Icon";export*from"./components/IconTile/IconTile";export*from"./components/Image/Image";export*from"./components/Inline/Inline";export*from"./components/InlineMessage/InlineMessage";export*from"./components/InteractiveBox/InteractiveBox";export*from"./components/Layout";export*from"./components/Lightbox/Lightbox";export*from"./components/Link/Link";export*from"./components/LoadingSpinner/LoadingSpinner";export*from"./components/Logo/Logo";export*from"./components/MediaItem";export*from"./components/MediaViewerBar/MediaViewerBar";export*from"./components/MediaViewerCarousel/MediaViewerCarousel";export*from"./components/NavBar";export*from"./components/Notification/Notification";export*from"./components/Pagination/Pagination";export*from"./components/Patterns/ButtonGroup/ButtonGroup";export*from"./components/Patterns/EmptyState/EmptyState";export*from"./components/Patterns/Modal/Modal";export*from"./components/PictogramButton/PictogramButton";export*from"./components/Popover/Popover";export*from"./components/ProgressBar/ProgressBar";export*from"./components/PromptButton/PromptButton";export*from"./components/PromptButtonGroup/PromptButtonGroup";export*from"./components/PromptInput/PromptInput";export*from"./components/QBankRichText/QBankRichText";export*from"./components/RadioCard/RadioCard";export*from"./components/RangePopover/RangePopover";export*from"./components/RoundButton/RoundButton";export*from"./components/SearchResult/SearchResult";export*from"./components/SegmentedProgressBar/SegmentedProgressBar";export*from"./components/Sheet/Sheet";export*from"./components/SplashCard/SplashCard";export*from"./components/SplashCardMedia/SplashCardMedia";export*from"./components/Stack/Stack";export*from"./components/StatusIndicator/StatusIndicator";export*from"./components/SubThemeProvider/SubThemeProvider";export*from"./components/Tabs/Tabs";export*from"./components/Tag/Tag";export*from"./components/TagGroup/TagGroup";export*from"./components/Toast";export*from"./components/Toggletip/Toggletip";export*from"./components/Tooltip/Tooltip";export*from"./components/Tutorialtip/Tutorialtip";export*from"./components/Typography/Header";export*from"./components/Typography/StyledText/StyledText";export*from"./components/Typography/Text";export*from"./components/Typography/TextClamped/TextClamped";export*from"./components/UserHighlightTooltip/UserHighlightTooltip";export*from"./components/Utilities/AnimatedBorder/useAnimatedBorder";export*from"./components/Utilities/ContainerQuery/ContainerQuery";export*from"./components/Utilities/Expandable/Expandable";export*from"./components/Utilities/ScreenReaderText/ScreenReaderText";export*from"./shared/useSelectionRange";
|
|
1
|
+
import{ambossVisualConfiguration}from"./web-tokens/visualConfig";export const{dark,light}=ambossVisualConfiguration;export{default as createCache}from"@emotion/cache";export{CacheProvider,ThemeProvider}from"@emotion/react";export*from"./components/AccessCardItem/AccessCardItem";export*from"./components/AIButton/AIButton";export*from"./components/AIFloatingButton/AIFloatingButton";export*from"./components/Avatar/Avatar";export*from"./components/AvatarGroup/AvatarGroup";export*from"./components/Badge/Badge";export*from"./components/BinaryFeedback/BinaryFeedback";export*from"./components/Box/Box";export*from"./components/BulkActionsToolbar/BulkActionsToolbar";export*from"./components/Button/Button";export*from"./components/Callout/Callout";export*from"./components/Card/Card";export*from"./components/Card/CardBox/CardBox";export*from"./components/CatalogCard/CatalogCard";export*from"./components/ChatMessage";export*from"./components/ChatResponse";export*from"./components/CheckboxCard/CheckboxCard";export*from"./components/Collapsible/Collapsible";export*from"./components/ColorIndicator/ColorIndicator";export*from"./components/ColorPicker/ColorPicker";export*from"./components/Column/Columns";export*from"./components/Composite/FilterDialog/FilterDialog";export*from"./components/Container";export*from"./components/Content/ContentBadge/ContentBadge";export*from"./components/Content/ContentBox/ContentBox";export*from"./components/Content/ContentCheckbox/ContentCheckbox";export*from"./components/Content/ContentFontResizer";export*from"./components/Content/ContentHeading/ContentHeading";export*from"./components/Content/ContentLink/ContentLink";export*from"./components/Content/ContentList";export*from"./components/Content/ContentPictogramButton/ContentPictogramButton";export*from"./components/Content/ContentTable";export*from"./components/Content/ContentTableModal/ContentTableModal";export*from"./components/Content/ContentText/ContentText";export*from"./components/Content/DosageButton";export*from"./components/Content/ReferenceButton";export*from"./components/CountButton/CountButton";export*from"./components/DataTable";export*from"./components/DataTable/DataTableToolbar/DataTableToolbar";export*from"./components/Divider/Divider";export*from"./components/DropdownMenu/DropdownMenu";export*from"./components/EntityList";export*from"./components/EntityTree";export*from"./components/Form/Checkbox/Checkbox";export*from"./components/Form/Combobox/Combobox";export*from"./components/Form/DateInput/DateInput";export*from"./components/Form/DatePicker";export*from"./components/Form/FormFieldGroup/FormFieldGroup";export*from"./components/Form/Input";export*from"./components/Form/MaskedInput/MaskedInput";export*from"./components/Form/PasswordInput";export*from"./components/Form/Radio/Radio";export*from"./components/Form/RadioButton/RadioButton";export*from"./components/Form/RangeInput/RangeInput";export*from"./components/Form/SearchInput/SearchInput";export*from"./components/Form/SegmentedControl/SegmentedControl";export*from"./components/Form/Select";export*from"./components/Form/Textarea/Textarea";export*from"./components/Form/Toggle/Toggle";export*from"./components/Form/ToggleButton/ToggleButton";export*from"./components/Form/ToolbarToggle/ToolbarToggle";export*from"./components/Grid/Grid";export*from"./components/Icon/Icon";export*from"./components/IconTile/IconTile";export*from"./components/Image/Image";export*from"./components/Inline/Inline";export*from"./components/InlineMessage/InlineMessage";export*from"./components/InteractiveBox/InteractiveBox";export*from"./components/Layout";export*from"./components/Lightbox/Lightbox";export*from"./components/Link/Link";export*from"./components/LoadingSpinner/LoadingSpinner";export*from"./components/Logo/Logo";export*from"./components/MediaItem";export*from"./components/MediaViewerBar/MediaViewerBar";export*from"./components/MediaViewerCarousel/MediaViewerCarousel";export*from"./components/NavBar";export*from"./components/Notification/Notification";export*from"./components/Pagination/Pagination";export*from"./components/Patterns/ButtonGroup/ButtonGroup";export*from"./components/Patterns/EmptyState/EmptyState";export*from"./components/Patterns/Modal/Modal";export*from"./components/PictogramButton/PictogramButton";export*from"./components/Popover/Popover";export*from"./components/ProgressBar/ProgressBar";export*from"./components/PromptButton/PromptButton";export*from"./components/PromptButtonGroup/PromptButtonGroup";export*from"./components/PromptInput/PromptInput";export*from"./components/QBankRichText/QBankRichText";export*from"./components/RadioCard/RadioCard";export*from"./components/RangePopover/RangePopover";export*from"./components/RoundButton/RoundButton";export*from"./components/SearchResult/SearchResult";export*from"./components/SegmentedProgressBar/SegmentedProgressBar";export*from"./components/Sheet/Sheet";export*from"./components/SplashCard/SplashCard";export*from"./components/SplashCardMedia/SplashCardMedia";export*from"./components/Stack/Stack";export*from"./components/StatusIndicator/StatusIndicator";export*from"./components/SubThemeProvider/SubThemeProvider";export*from"./components/Tabs/Tabs";export*from"./components/Tag/Tag";export*from"./components/TagGroup/TagGroup";export*from"./components/Toast";export*from"./components/Toggletip/Toggletip";export*from"./components/Tooltip/Tooltip";export*from"./components/Tutorialtip/Tutorialtip";export*from"./components/Typography/Header";export*from"./components/Typography/StyledText/StyledText";export*from"./components/Typography/Text";export*from"./components/Typography/TextClamped/TextClamped";export*from"./components/UserHighlightTooltip/UserHighlightTooltip";export*from"./components/Utilities/AnimatedBorder/useAnimatedBorder";export*from"./components/Utilities/ContainerQuery/ContainerQuery";export*from"./components/Utilities/Expandable/Expandable";export*from"./components/Utilities/ScreenReaderText/ScreenReaderText";export*from"./shared/useSelectionRange";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useIsMacOs: () => boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useCallback,useSyncExternalStore}from"react";import{useWindow}from"./useWindow";let MAC_PLATFORM_PATTERN=/mac|iphone|ipad|ipod/i,readPlatform=navigator=>navigator.userAgentData?.platform||navigator.platform||navigator.userAgent,subscribeToPlatform=()=>()=>{},getServerIsMacOs=()=>!1;export const useIsMacOs=()=>{let window=useWindow();return useSyncExternalStore(subscribeToPlatform,useCallback(()=>!!window&&MAC_PLATFORM_PATTERN.test(readPlatform(window.navigator)),[window]),getServerIsMacOs)};
|
|
@@ -927,6 +927,32 @@
|
|
|
927
927
|
"lightOriginalValue": "neutral.white"
|
|
928
928
|
}
|
|
929
929
|
},
|
|
930
|
+
"kbd": {
|
|
931
|
+
"color-kbd-background-default": {
|
|
932
|
+
"name": "kbd.background",
|
|
933
|
+
"subState": "default",
|
|
934
|
+
"darkValue": "#1e2125",
|
|
935
|
+
"darkOriginalValue": "night-black.dark02",
|
|
936
|
+
"lightValue": "#f5f7f9",
|
|
937
|
+
"lightOriginalValue": "gray.light04"
|
|
938
|
+
},
|
|
939
|
+
"color-kbd-foreground-default": {
|
|
940
|
+
"name": "kbd.foreground",
|
|
941
|
+
"subState": "default",
|
|
942
|
+
"darkValue": "#ffffff",
|
|
943
|
+
"darkOriginalValue": "neutral.white",
|
|
944
|
+
"lightValue": "#314554",
|
|
945
|
+
"lightOriginalValue": "gray.dark02"
|
|
946
|
+
},
|
|
947
|
+
"color-kbd-border-default": {
|
|
948
|
+
"name": "kbd.border",
|
|
949
|
+
"subState": "default",
|
|
950
|
+
"darkValue": "#5b5f67",
|
|
951
|
+
"darkOriginalValue": "night-gray.dark02",
|
|
952
|
+
"lightValue": "#a3b2bd",
|
|
953
|
+
"lightOriginalValue": "gray.light01"
|
|
954
|
+
}
|
|
955
|
+
},
|
|
930
956
|
"canvas": {
|
|
931
957
|
"color-canvas": {
|
|
932
958
|
"name": "canvas",
|
|
@@ -89,6 +89,16 @@
|
|
|
89
89
|
"variableName": "$size-dimension-checkbox-m",
|
|
90
90
|
"isUsed": false
|
|
91
91
|
},
|
|
92
|
+
{
|
|
93
|
+
"category": "size",
|
|
94
|
+
"type": "dimension",
|
|
95
|
+
"name": "dimension kbd",
|
|
96
|
+
"subitemName": "kbd minWidth",
|
|
97
|
+
"value": "16px",
|
|
98
|
+
"original": 16,
|
|
99
|
+
"variableName": "$size-dimension-kbd-min-width",
|
|
100
|
+
"isUsed": false
|
|
101
|
+
},
|
|
92
102
|
{
|
|
93
103
|
"category": "size",
|
|
94
104
|
"type": "dimension",
|
|
@@ -18,6 +18,9 @@ type Variables = {
|
|
|
18
18
|
"s": string;
|
|
19
19
|
"m": string;
|
|
20
20
|
};
|
|
21
|
+
"kbd": {
|
|
22
|
+
"minWidth": string;
|
|
23
|
+
};
|
|
21
24
|
"radio": {
|
|
22
25
|
"s": string;
|
|
23
26
|
"m": string;
|
|
@@ -537,6 +540,17 @@ export type AmbossTheme = {
|
|
|
537
540
|
};
|
|
538
541
|
};
|
|
539
542
|
};
|
|
543
|
+
"kbd": {
|
|
544
|
+
"background": {
|
|
545
|
+
"default": string;
|
|
546
|
+
};
|
|
547
|
+
"foreground": {
|
|
548
|
+
"default": string;
|
|
549
|
+
};
|
|
550
|
+
"border": {
|
|
551
|
+
"default": string;
|
|
552
|
+
};
|
|
553
|
+
};
|
|
540
554
|
"canvas": string;
|
|
541
555
|
"background": {
|
|
542
556
|
"primary": {
|
|
@@ -1772,6 +1786,17 @@ export type AmbossTheme = {
|
|
|
1772
1786
|
"default": string;
|
|
1773
1787
|
};
|
|
1774
1788
|
};
|
|
1789
|
+
"kbd": {
|
|
1790
|
+
"background": {
|
|
1791
|
+
"default": string;
|
|
1792
|
+
};
|
|
1793
|
+
"foreground": {
|
|
1794
|
+
"default": string;
|
|
1795
|
+
};
|
|
1796
|
+
"border": {
|
|
1797
|
+
"default": string;
|
|
1798
|
+
};
|
|
1799
|
+
};
|
|
1775
1800
|
};
|
|
1776
1801
|
};
|
|
1777
1802
|
"success": {
|