@salt-ds/lab 1.0.0-alpha.27 → 1.0.0-alpha.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/css/salt-lab.css +33 -309
  2. package/dist-cjs/color-chooser/ColorChooser.css.js +1 -1
  3. package/dist-cjs/color-chooser/ColorChooser.js +52 -55
  4. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  5. package/dist-cjs/index.js +4 -22
  6. package/dist-cjs/index.js.map +1 -1
  7. package/dist-cjs/layer-layout/LayerLayout.js +1 -2
  8. package/dist-cjs/layer-layout/LayerLayout.js.map +1 -1
  9. package/dist-cjs/overlay/Overlay.css.js +1 -1
  10. package/dist-cjs/overlay/Overlay.js +89 -60
  11. package/dist-cjs/overlay/Overlay.js.map +1 -1
  12. package/dist-cjs/overlay/OverlayContext.js +43 -0
  13. package/dist-cjs/overlay/OverlayContext.js.map +1 -0
  14. package/dist-cjs/overlay/OverlayPanel.js +64 -0
  15. package/dist-cjs/overlay/OverlayPanel.js.map +1 -0
  16. package/dist-cjs/overlay/OverlayPanelBase.js +65 -0
  17. package/dist-cjs/overlay/OverlayPanelBase.js.map +1 -0
  18. package/dist-cjs/overlay/OverlayTrigger.js +40 -0
  19. package/dist-cjs/overlay/OverlayTrigger.js.map +1 -0
  20. package/dist-es/color-chooser/ColorChooser.css.js +1 -1
  21. package/dist-es/color-chooser/ColorChooser.js +53 -56
  22. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  23. package/dist-es/index.js +2 -11
  24. package/dist-es/index.js.map +1 -1
  25. package/dist-es/layer-layout/LayerLayout.js +1 -2
  26. package/dist-es/layer-layout/LayerLayout.js.map +1 -1
  27. package/dist-es/overlay/Overlay.css.js +1 -1
  28. package/dist-es/overlay/Overlay.js +91 -62
  29. package/dist-es/overlay/Overlay.js.map +1 -1
  30. package/dist-es/overlay/OverlayContext.js +38 -0
  31. package/dist-es/overlay/OverlayContext.js.map +1 -0
  32. package/dist-es/overlay/OverlayPanel.js +60 -0
  33. package/dist-es/overlay/OverlayPanel.js.map +1 -0
  34. package/dist-es/overlay/OverlayPanelBase.js +57 -0
  35. package/dist-es/overlay/OverlayPanelBase.js.map +1 -0
  36. package/dist-es/overlay/OverlayTrigger.js +36 -0
  37. package/dist-es/overlay/OverlayTrigger.js.map +1 -0
  38. package/dist-types/index.d.ts +0 -4
  39. package/dist-types/layer-layout/LayerLayout.d.ts +1 -1
  40. package/dist-types/overlay/Overlay.d.ts +6 -14
  41. package/dist-types/overlay/OverlayContext.d.ts +26 -0
  42. package/dist-types/overlay/OverlayPanel.d.ts +4 -0
  43. package/dist-types/overlay/OverlayPanelBase.d.ts +2 -0
  44. package/dist-types/overlay/OverlayTrigger.d.ts +5 -0
  45. package/dist-types/overlay/index.d.ts +2 -1
  46. package/package.json +2 -2
  47. package/dist-cjs/file-drop-zone/FileDropZone.css.js +0 -6
  48. package/dist-cjs/file-drop-zone/FileDropZone.css.js.map +0 -1
  49. package/dist-cjs/file-drop-zone/FileDropZone.js +0 -94
  50. package/dist-cjs/file-drop-zone/FileDropZone.js.map +0 -1
  51. package/dist-cjs/file-drop-zone/FileDropZoneIcon.js +0 -25
  52. package/dist-cjs/file-drop-zone/FileDropZoneIcon.js.map +0 -1
  53. package/dist-cjs/file-drop-zone/FileDropZoneTrigger.js +0 -52
  54. package/dist-cjs/file-drop-zone/FileDropZoneTrigger.js.map +0 -1
  55. package/dist-cjs/file-drop-zone/internal/utils.js +0 -30
  56. package/dist-cjs/file-drop-zone/internal/utils.js.map +0 -1
  57. package/dist-cjs/navigation-item/ConditionalWrapper.js +0 -35
  58. package/dist-cjs/navigation-item/ConditionalWrapper.js.map +0 -1
  59. package/dist-cjs/navigation-item/ExpansionIcon.js +0 -29
  60. package/dist-cjs/navigation-item/ExpansionIcon.js.map +0 -1
  61. package/dist-cjs/navigation-item/NavigationItem.css.js +0 -6
  62. package/dist-cjs/navigation-item/NavigationItem.css.js.map +0 -1
  63. package/dist-cjs/navigation-item/NavigationItem.js +0 -78
  64. package/dist-cjs/navigation-item/NavigationItem.js.map +0 -1
  65. package/dist-cjs/overlay/useOverlay.js +0 -97
  66. package/dist-cjs/overlay/useOverlay.js.map +0 -1
  67. package/dist-cjs/pagination/CompactInput.css.js +0 -6
  68. package/dist-cjs/pagination/CompactInput.css.js.map +0 -1
  69. package/dist-cjs/pagination/CompactInput.js +0 -62
  70. package/dist-cjs/pagination/CompactInput.js.map +0 -1
  71. package/dist-cjs/pagination/CompactPaginator.css.js +0 -6
  72. package/dist-cjs/pagination/CompactPaginator.css.js.map +0 -1
  73. package/dist-cjs/pagination/CompactPaginator.js +0 -76
  74. package/dist-cjs/pagination/CompactPaginator.js.map +0 -1
  75. package/dist-cjs/pagination/GoToInput.css.js +0 -6
  76. package/dist-cjs/pagination/GoToInput.css.js.map +0 -1
  77. package/dist-cjs/pagination/GoToInput.js +0 -77
  78. package/dist-cjs/pagination/GoToInput.js.map +0 -1
  79. package/dist-cjs/pagination/PageButton.css.js +0 -6
  80. package/dist-cjs/pagination/PageButton.css.js.map +0 -1
  81. package/dist-cjs/pagination/PageButton.js +0 -44
  82. package/dist-cjs/pagination/PageButton.js.map +0 -1
  83. package/dist-cjs/pagination/PageRanges.css.js +0 -6
  84. package/dist-cjs/pagination/PageRanges.css.js.map +0 -1
  85. package/dist-cjs/pagination/PageRanges.js +0 -73
  86. package/dist-cjs/pagination/PageRanges.js.map +0 -1
  87. package/dist-cjs/pagination/Pagination.css.js +0 -6
  88. package/dist-cjs/pagination/Pagination.css.js.map +0 -1
  89. package/dist-cjs/pagination/Pagination.js +0 -78
  90. package/dist-cjs/pagination/Pagination.js.map +0 -1
  91. package/dist-cjs/pagination/PaginationContext.js +0 -17
  92. package/dist-cjs/pagination/PaginationContext.js.map +0 -1
  93. package/dist-cjs/pagination/Paginator.css.js +0 -6
  94. package/dist-cjs/pagination/Paginator.css.js.map +0 -1
  95. package/dist-cjs/pagination/Paginator.js +0 -69
  96. package/dist-cjs/pagination/Paginator.js.map +0 -1
  97. package/dist-cjs/pagination/usePagination.js +0 -27
  98. package/dist-cjs/pagination/usePagination.js.map +0 -1
  99. package/dist-cjs/pagination/usePaginationContext.js +0 -19
  100. package/dist-cjs/pagination/usePaginationContext.js.map +0 -1
  101. package/dist-cjs/scrim/Scrim.css.js +0 -6
  102. package/dist-cjs/scrim/Scrim.css.js.map +0 -1
  103. package/dist-cjs/scrim/Scrim.js +0 -40
  104. package/dist-cjs/scrim/Scrim.js.map +0 -1
  105. package/dist-es/file-drop-zone/FileDropZone.css.js +0 -4
  106. package/dist-es/file-drop-zone/FileDropZone.css.js.map +0 -1
  107. package/dist-es/file-drop-zone/FileDropZone.js +0 -90
  108. package/dist-es/file-drop-zone/FileDropZone.js.map +0 -1
  109. package/dist-es/file-drop-zone/FileDropZoneIcon.js +0 -21
  110. package/dist-es/file-drop-zone/FileDropZoneIcon.js.map +0 -1
  111. package/dist-es/file-drop-zone/FileDropZoneTrigger.js +0 -48
  112. package/dist-es/file-drop-zone/FileDropZoneTrigger.js.map +0 -1
  113. package/dist-es/file-drop-zone/internal/utils.js +0 -25
  114. package/dist-es/file-drop-zone/internal/utils.js.map +0 -1
  115. package/dist-es/navigation-item/ConditionalWrapper.js +0 -31
  116. package/dist-es/navigation-item/ConditionalWrapper.js.map +0 -1
  117. package/dist-es/navigation-item/ExpansionIcon.js +0 -25
  118. package/dist-es/navigation-item/ExpansionIcon.js.map +0 -1
  119. package/dist-es/navigation-item/NavigationItem.css.js +0 -4
  120. package/dist-es/navigation-item/NavigationItem.css.js.map +0 -1
  121. package/dist-es/navigation-item/NavigationItem.js +0 -74
  122. package/dist-es/navigation-item/NavigationItem.js.map +0 -1
  123. package/dist-es/overlay/useOverlay.js +0 -93
  124. package/dist-es/overlay/useOverlay.js.map +0 -1
  125. package/dist-es/pagination/CompactInput.css.js +0 -4
  126. package/dist-es/pagination/CompactInput.css.js.map +0 -1
  127. package/dist-es/pagination/CompactInput.js +0 -58
  128. package/dist-es/pagination/CompactInput.js.map +0 -1
  129. package/dist-es/pagination/CompactPaginator.css.js +0 -4
  130. package/dist-es/pagination/CompactPaginator.css.js.map +0 -1
  131. package/dist-es/pagination/CompactPaginator.js +0 -72
  132. package/dist-es/pagination/CompactPaginator.js.map +0 -1
  133. package/dist-es/pagination/GoToInput.css.js +0 -4
  134. package/dist-es/pagination/GoToInput.css.js.map +0 -1
  135. package/dist-es/pagination/GoToInput.js +0 -73
  136. package/dist-es/pagination/GoToInput.js.map +0 -1
  137. package/dist-es/pagination/PageButton.css.js +0 -4
  138. package/dist-es/pagination/PageButton.css.js.map +0 -1
  139. package/dist-es/pagination/PageButton.js +0 -40
  140. package/dist-es/pagination/PageButton.js.map +0 -1
  141. package/dist-es/pagination/PageRanges.css.js +0 -4
  142. package/dist-es/pagination/PageRanges.css.js.map +0 -1
  143. package/dist-es/pagination/PageRanges.js +0 -69
  144. package/dist-es/pagination/PageRanges.js.map +0 -1
  145. package/dist-es/pagination/Pagination.css.js +0 -4
  146. package/dist-es/pagination/Pagination.css.js.map +0 -1
  147. package/dist-es/pagination/Pagination.js +0 -74
  148. package/dist-es/pagination/Pagination.js.map +0 -1
  149. package/dist-es/pagination/PaginationContext.js +0 -13
  150. package/dist-es/pagination/PaginationContext.js.map +0 -1
  151. package/dist-es/pagination/Paginator.css.js +0 -4
  152. package/dist-es/pagination/Paginator.css.js.map +0 -1
  153. package/dist-es/pagination/Paginator.js +0 -65
  154. package/dist-es/pagination/Paginator.js.map +0 -1
  155. package/dist-es/pagination/usePagination.js +0 -23
  156. package/dist-es/pagination/usePagination.js.map +0 -1
  157. package/dist-es/pagination/usePaginationContext.js +0 -15
  158. package/dist-es/pagination/usePaginationContext.js.map +0 -1
  159. package/dist-es/scrim/Scrim.css.js +0 -4
  160. package/dist-es/scrim/Scrim.css.js.map +0 -1
  161. package/dist-es/scrim/Scrim.js +0 -36
  162. package/dist-es/scrim/Scrim.js.map +0 -1
  163. package/dist-types/file-drop-zone/FileDropZone.d.ts +0 -17
  164. package/dist-types/file-drop-zone/FileDropZoneIcon.d.ts +0 -9
  165. package/dist-types/file-drop-zone/FileDropZoneTrigger.d.ts +0 -22
  166. package/dist-types/file-drop-zone/index.d.ts +0 -3
  167. package/dist-types/file-drop-zone/internal/utils.d.ts +0 -3
  168. package/dist-types/navigation-item/ConditionalWrapper.d.ts +0 -8
  169. package/dist-types/navigation-item/ExpansionIcon.d.ts +0 -2
  170. package/dist-types/navigation-item/NavigationItem.d.ts +0 -36
  171. package/dist-types/navigation-item/index.d.ts +0 -1
  172. package/dist-types/overlay/useOverlay.d.ts +0 -8
  173. package/dist-types/pagination/CompactInput.d.ts +0 -2
  174. package/dist-types/pagination/CompactPaginator.d.ts +0 -1
  175. package/dist-types/pagination/GoToInput.d.ts +0 -16
  176. package/dist-types/pagination/PageButton.d.ts +0 -6
  177. package/dist-types/pagination/PageRanges.d.ts +0 -5
  178. package/dist-types/pagination/Pagination.d.ts +0 -20
  179. package/dist-types/pagination/PaginationContext.d.ts +0 -7
  180. package/dist-types/pagination/Paginator.d.ts +0 -12
  181. package/dist-types/pagination/index.d.ts +0 -5
  182. package/dist-types/pagination/usePagination.d.ts +0 -2
  183. package/dist-types/pagination/usePaginationContext.d.ts +0 -1
  184. package/dist-types/scrim/Scrim.d.ts +0 -13
  185. package/dist-types/scrim/index.d.ts +0 -1
  186. package/dist-types/scrim/internal/PreventFocus.d.ts +0 -1
@@ -1,8 +1,9 @@
1
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { useState } from 'react';
3
3
  import { clsx } from 'clsx';
4
4
  import { Overlay } from '../overlay/Overlay.js';
5
- import { useOverlay } from '../overlay/useOverlay.js';
5
+ import { OverlayTrigger } from '../overlay/OverlayTrigger.js';
6
+ import { OverlayPanel } from '../overlay/OverlayPanel.js';
6
7
  import { makePrefixer, Button } from '@salt-ds/core';
7
8
  import { RefreshIcon } from '@salt-ds/icons';
8
9
  import { isTransparent } from './color-utils.js';
@@ -14,6 +15,7 @@ import { createTabsMapping } from './createTabsMapping.js';
14
15
  import { useWindow } from '@salt-ds/window';
15
16
  import { useComponentCssInjection } from '@salt-ds/styles';
16
17
  import css_248z from './ColorChooser.css.js';
18
+ import { useOverlayContext } from '../overlay/OverlayContext.js';
17
19
 
18
20
  const withBaseName = makePrefixer("saltColorChooser");
19
21
  function getActiveTab(hexValue, tabs, saltColorOverrides) {
@@ -90,72 +92,67 @@ const ColorChooser = ({
90
92
  const onTabClick = (index) => {
91
93
  setActiveTab(index);
92
94
  };
93
- const { getTriggerProps, getOverlayProps } = useOverlay({
95
+ const OverlayContent = () => {
96
+ const { id } = useOverlayContext();
97
+ return /* @__PURE__ */ jsxs("div", {
98
+ id: `${id}-content`,
99
+ className: clsx(withBaseName("overlayContent")),
100
+ "data-testid": "overlay-content",
101
+ children: [
102
+ /* @__PURE__ */ jsxs(Button, {
103
+ "data-testid": "default-button",
104
+ variant: "secondary",
105
+ className: clsx(withBaseName("defaultButton")),
106
+ onClick: onDefaultSelected,
107
+ children: [
108
+ /* @__PURE__ */ jsx(RefreshIcon, {
109
+ className: clsx(withBaseName("refreshIcon"))
110
+ }),
111
+ "Default"
112
+ ]
113
+ }),
114
+ /* @__PURE__ */ jsx(DictTabs, {
115
+ tabs: tabsMapping,
116
+ hexValue: color == null ? void 0 : color.hex,
117
+ onTabClick,
118
+ activeTab
119
+ })
120
+ ]
121
+ });
122
+ };
123
+ return /* @__PURE__ */ jsxs(Overlay, {
94
124
  placement: "bottom",
95
- open,
96
- onOpenChange: handleOpenChange
97
- });
98
- return /* @__PURE__ */ jsxs(Fragment, {
125
+ "data-testid": "color-chooser-overlay",
99
126
  children: [
100
- /* @__PURE__ */ jsxs(Button, {
101
- ...getTriggerProps({
127
+ /* @__PURE__ */ jsx(OverlayTrigger, {
128
+ children: /* @__PURE__ */ jsxs(Button, {
102
129
  className: clsx(withBaseName("overlayButton"), {
103
130
  [withBaseName("overlayButtonHiddenLabel")]: hideLabel
104
131
  }),
105
132
  "data-testid": "color-chooser-overlay-button",
106
133
  disabled: readOnly,
107
- ...buttonProps
108
- }),
109
- children: [
110
- color && /* @__PURE__ */ jsx("div", {
111
- className: clsx(withBaseName("overlayButtonSwatch"), {
112
- [withBaseName("overlayButtonSwatchWithBorder")]: color == null ? void 0 : color.hex.startsWith("#ffffff"),
113
- [withBaseName("overlayButtonSwatchTransparent")]: isTransparent(
114
- color == null ? void 0 : color.hex
115
- )
116
- }),
117
- style: {
118
- backgroundColor: color == null ? void 0 : color.hex
119
- }
120
- }),
121
- !hideLabel && /* @__PURE__ */ jsx("div", {
122
- className: withBaseName("overlayButtonText"),
123
- children: (_c = displayColorName != null ? displayColorName : placeholder) != null ? _c : "No color selected"
124
- })
125
- ]
126
- }),
127
- /* @__PURE__ */ jsx(Overlay, {
128
- ...getOverlayProps({
129
- adaExceptions: {
130
- showClose: false
131
- },
132
- "data-testid": "color-chooser-overlay",
133
- className: clsx(withBaseName("overlayButtonClose"))
134
- }),
135
- children: /* @__PURE__ */ jsxs("div", {
136
- className: clsx(withBaseName("overlayContent")),
137
- "data-testid": "overlay-content",
134
+ ...buttonProps,
138
135
  children: [
139
- /* @__PURE__ */ jsxs(Button, {
140
- "data-testid": "default-button",
141
- variant: "secondary",
142
- className: clsx(withBaseName("defaultButton")),
143
- onClick: onDefaultSelected,
144
- children: [
145
- /* @__PURE__ */ jsx(RefreshIcon, {
146
- className: clsx(withBaseName("refreshIcon"))
147
- }),
148
- "Default"
149
- ]
136
+ color && /* @__PURE__ */ jsx("div", {
137
+ className: clsx(withBaseName("overlayButtonSwatch"), {
138
+ [withBaseName("overlayButtonSwatchWithBorder")]: color == null ? void 0 : color.hex.startsWith("#ffffff"),
139
+ [withBaseName("overlayButtonSwatchTransparent")]: isTransparent(
140
+ color == null ? void 0 : color.hex
141
+ )
142
+ }),
143
+ style: {
144
+ backgroundColor: color == null ? void 0 : color.hex
145
+ }
150
146
  }),
151
- /* @__PURE__ */ jsx(DictTabs, {
152
- tabs: tabsMapping,
153
- hexValue: color == null ? void 0 : color.hex,
154
- onTabClick,
155
- activeTab
147
+ !hideLabel && /* @__PURE__ */ jsx("div", {
148
+ className: withBaseName("overlayButtonText"),
149
+ children: (_c = displayColorName != null ? displayColorName : placeholder) != null ? _c : "No color selected"
156
150
  })
157
151
  ]
158
152
  })
153
+ }),
154
+ /* @__PURE__ */ jsx(OverlayPanel, {
155
+ children: /* @__PURE__ */ jsx(OverlayContent, {})
159
156
  })
160
157
  ]
161
158
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ColorChooser.js","sources":["../src/color-chooser/ColorChooser.tsx"],"sourcesContent":["import { ChangeEvent, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { Overlay, useOverlay } from \"../overlay\";\nimport { Button, ButtonProps, makePrefixer } from \"@salt-ds/core\";\nimport { RefreshIcon } from \"@salt-ds/icons\";\nimport { Color } from \"./Color\";\nimport { isTransparent } from \"./color-utils\";\n\nimport {\n convertColorMapValueToHex,\n getColorNameByHexValue,\n getHexValue,\n hexValueWithoutAlpha,\n} from \"./ColorHelpers\";\nimport { saltColorMap } from \"./colorMap\";\nimport { ColorChooserTabs, DictTabs } from \"./DictTabs\";\nimport { getColorPalettes } from \"./GetColorPalettes\";\nimport { createTabsMapping } from \"./createTabsMapping\";\n\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport colorChooserCss from \"./ColorChooser.css\";\n\nconst withBaseName = makePrefixer(\"saltColorChooser\");\n\nfunction getActiveTab(\n hexValue: string | undefined,\n tabs: ColorChooserTabs,\n saltColorOverrides: Record<string, string> | undefined\n): number {\n if (tabs.Swatches && tabs[\"Color Picker\"]) {\n const hexNoAlpha: string | undefined = hexValueWithoutAlpha(hexValue);\n const colors = saltColorOverrides ?? saltColorMap;\n // if hexNoAlpha is a Salt color or null/undefined then set the active tab as Swatches\n if (\n hexNoAlpha &&\n !Object.keys(colors).find(\n (key: string) =>\n convertColorMapValueToHex(colors[key])?.toLowerCase() ===\n hexNoAlpha?.toLowerCase()\n )\n ) {\n return 1;\n }\n }\n return 0;\n}\n\nexport interface ColorChooserProps {\n color: Color | undefined;\n defaultAlpha?: number;\n disableAlphaChooser?: boolean;\n displayHexOnly?: boolean;\n hideLabel?: boolean;\n onClear: () => void; // called when user clicks \"default\" button\n onSelect: (\n color: Color | undefined,\n finalSelection: boolean,\n event?: ChangeEvent\n ) => void;\n placeholder?: string;\n buttonProps?: Partial<ButtonProps>;\n saltColorOverrides?: Record<string, string>;\n showSwatches?: boolean;\n showColorPicker?: boolean;\n readOnly?: boolean;\n}\n\nexport const ColorChooser = ({\n onClear,\n onSelect,\n color,\n showSwatches = true,\n showColorPicker = true,\n defaultAlpha = 1,\n disableAlphaChooser = false,\n hideLabel = false,\n placeholder,\n buttonProps,\n saltColorOverrides,\n readOnly = false,\n displayHexOnly = false,\n}: ColorChooserProps): JSX.Element => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-color-chooser\",\n css: colorChooserCss,\n window: targetWindow,\n });\n\n const [open, setOpen] = useState(false);\n\n const allColors: string[][] = saltColorOverrides\n ? getColorPalettes(saltColorOverrides)\n : getColorPalettes();\n const displayColorName = displayHexOnly\n ? getHexValue(color?.hex, disableAlphaChooser)\n : getColorNameByHexValue(\n color?.hex,\n disableAlphaChooser,\n saltColorOverrides\n );\n\n const handleOpenChange = (open: boolean) => setOpen(open);\n\n const alphaForTabs = isTransparent(color?.hex)\n ? defaultAlpha\n : color?.rgba?.a ?? defaultAlpha;\n\n const tabsMapping = createTabsMapping({\n swatches: showSwatches,\n colorPicker: showColorPicker,\n disableAlphaChooser,\n allColors,\n color,\n alpha: alphaForTabs,\n handleColorChange: onSelect,\n displayColorName,\n placeholder,\n onDialogClosed: () => {\n setOpen(false);\n },\n });\n\n const [activeTab, setActiveTab] = useState<number>(\n getActiveTab(color?.hex, tabsMapping, saltColorOverrides)\n );\n const onDefaultSelected = (): void => {\n if (activeTab === 0 && showSwatches) {\n onClear();\n handleOpenChange(false);\n } else {\n onClear();\n }\n };\n const onTabClick = (index: number): void => {\n setActiveTab(index);\n };\n\n const { getTriggerProps, getOverlayProps } = useOverlay({\n placement: \"bottom\",\n open,\n onOpenChange: handleOpenChange,\n });\n\n return (\n <>\n <Button\n {...getTriggerProps<typeof Button>({\n className: clsx(withBaseName(\"overlayButton\"), {\n [withBaseName(\"overlayButtonHiddenLabel\")]: hideLabel,\n }),\n // @ts-ignore\n \"data-testid\": \"color-chooser-overlay-button\",\n disabled: readOnly,\n ...buttonProps,\n })}\n >\n {color && (\n <div\n className={clsx(withBaseName(\"overlayButtonSwatch\"), {\n [withBaseName(\"overlayButtonSwatchWithBorder\")]:\n color?.hex.startsWith(\"#ffffff\"),\n [withBaseName(\"overlayButtonSwatchTransparent\")]: isTransparent(\n color?.hex\n ),\n })}\n style={{\n backgroundColor: color?.hex,\n }}\n />\n )}\n {!hideLabel && (\n <div className={withBaseName(\"overlayButtonText\")}>\n {displayColorName ?? placeholder ?? \"No color selected\"}\n </div>\n )}\n </Button>\n <Overlay\n {...getOverlayProps({\n adaExceptions: {\n showClose: false,\n },\n // @ts-ignore\n \"data-testid\": \"color-chooser-overlay\",\n className: clsx(withBaseName(\"overlayButtonClose\")),\n })}\n >\n <div\n className={clsx(withBaseName(\"overlayContent\"))}\n data-testid=\"overlay-content\"\n >\n <Button\n data-testid=\"default-button\"\n variant=\"secondary\"\n className={clsx(withBaseName(\"defaultButton\"))}\n onClick={onDefaultSelected}\n >\n <RefreshIcon className={clsx(withBaseName(\"refreshIcon\"))} />\n Default\n </Button>\n <DictTabs\n tabs={tabsMapping}\n hexValue={color?.hex}\n onTabClick={onTabClick}\n activeTab={activeTab}\n />\n </div>\n </Overlay>\n </>\n );\n};\n"],"names":["colorChooserCss","open"],"mappings":"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"}
1
+ {"version":3,"file":"ColorChooser.js","sources":["../src/color-chooser/ColorChooser.tsx"],"sourcesContent":["import { ChangeEvent, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { Overlay, OverlayPanel, OverlayTrigger } from \"../overlay\";\nimport { Button, ButtonProps, makePrefixer } from \"@salt-ds/core\";\nimport { RefreshIcon } from \"@salt-ds/icons\";\nimport { Color } from \"./Color\";\nimport { isTransparent } from \"./color-utils\";\n\nimport {\n convertColorMapValueToHex,\n getColorNameByHexValue,\n getHexValue,\n hexValueWithoutAlpha,\n} from \"./ColorHelpers\";\nimport { saltColorMap } from \"./colorMap\";\nimport { ColorChooserTabs, DictTabs } from \"./DictTabs\";\nimport { getColorPalettes } from \"./GetColorPalettes\";\nimport { createTabsMapping } from \"./createTabsMapping\";\n\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport colorChooserCss from \"./ColorChooser.css\";\nimport { useOverlayContext } from \"../overlay/OverlayContext\";\n\nconst withBaseName = makePrefixer(\"saltColorChooser\");\n\nfunction getActiveTab(\n hexValue: string | undefined,\n tabs: ColorChooserTabs,\n saltColorOverrides: Record<string, string> | undefined\n): number {\n if (tabs.Swatches && tabs[\"Color Picker\"]) {\n const hexNoAlpha: string | undefined = hexValueWithoutAlpha(hexValue);\n const colors = saltColorOverrides ?? saltColorMap;\n // if hexNoAlpha is a Salt color or null/undefined then set the active tab as Swatches\n if (\n hexNoAlpha &&\n !Object.keys(colors).find(\n (key: string) =>\n convertColorMapValueToHex(colors[key])?.toLowerCase() ===\n hexNoAlpha?.toLowerCase()\n )\n ) {\n return 1;\n }\n }\n return 0;\n}\n\nexport interface ColorChooserProps {\n color: Color | undefined;\n defaultAlpha?: number;\n disableAlphaChooser?: boolean;\n displayHexOnly?: boolean;\n hideLabel?: boolean;\n onClear: () => void; // called when user clicks \"default\" button\n onSelect: (\n color: Color | undefined,\n finalSelection: boolean,\n event?: ChangeEvent\n ) => void;\n placeholder?: string;\n buttonProps?: Partial<ButtonProps>;\n saltColorOverrides?: Record<string, string>;\n showSwatches?: boolean;\n showColorPicker?: boolean;\n readOnly?: boolean;\n}\n\nexport const ColorChooser = ({\n onClear,\n onSelect,\n color,\n showSwatches = true,\n showColorPicker = true,\n defaultAlpha = 1,\n disableAlphaChooser = false,\n hideLabel = false,\n placeholder,\n buttonProps,\n saltColorOverrides,\n readOnly = false,\n displayHexOnly = false,\n}: ColorChooserProps): JSX.Element => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-color-chooser\",\n css: colorChooserCss,\n window: targetWindow,\n });\n\n const [open, setOpen] = useState(false);\n\n const allColors: string[][] = saltColorOverrides\n ? getColorPalettes(saltColorOverrides)\n : getColorPalettes();\n const displayColorName = displayHexOnly\n ? getHexValue(color?.hex, disableAlphaChooser)\n : getColorNameByHexValue(\n color?.hex,\n disableAlphaChooser,\n saltColorOverrides\n );\n\n const handleOpenChange = (open: boolean) => setOpen(open);\n\n const alphaForTabs = isTransparent(color?.hex)\n ? defaultAlpha\n : color?.rgba?.a ?? defaultAlpha;\n\n const tabsMapping = createTabsMapping({\n swatches: showSwatches,\n colorPicker: showColorPicker,\n disableAlphaChooser,\n allColors,\n color,\n alpha: alphaForTabs,\n handleColorChange: onSelect,\n displayColorName,\n placeholder,\n onDialogClosed: () => {\n setOpen(false);\n },\n });\n\n const [activeTab, setActiveTab] = useState<number>(\n getActiveTab(color?.hex, tabsMapping, saltColorOverrides)\n );\n const onDefaultSelected = (): void => {\n if (activeTab === 0 && showSwatches) {\n onClear();\n handleOpenChange(false);\n } else {\n onClear();\n }\n };\n\n const onTabClick = (index: number): void => {\n setActiveTab(index);\n };\n\n const OverlayContent = () => {\n const { id } = useOverlayContext();\n\n return (\n <div\n id={`${id}-content`}\n className={clsx(withBaseName(\"overlayContent\"))}\n data-testid=\"overlay-content\"\n >\n <Button\n data-testid=\"default-button\"\n variant=\"secondary\"\n className={clsx(withBaseName(\"defaultButton\"))}\n onClick={onDefaultSelected}\n >\n <RefreshIcon className={clsx(withBaseName(\"refreshIcon\"))} />\n Default\n </Button>\n <DictTabs\n tabs={tabsMapping}\n hexValue={color?.hex}\n onTabClick={onTabClick}\n activeTab={activeTab}\n />\n </div>\n );\n };\n\n return (\n <Overlay placement=\"bottom\" data-testid=\"color-chooser-overlay\">\n <OverlayTrigger>\n <Button\n className={clsx(withBaseName(\"overlayButton\"), {\n [withBaseName(\"overlayButtonHiddenLabel\")]: hideLabel,\n })}\n // @ts-ignore\n data-testid=\"color-chooser-overlay-button\"\n disabled={readOnly}\n {...buttonProps}\n >\n {color && (\n <div\n className={clsx(withBaseName(\"overlayButtonSwatch\"), {\n [withBaseName(\"overlayButtonSwatchWithBorder\")]:\n color?.hex.startsWith(\"#ffffff\"),\n [withBaseName(\"overlayButtonSwatchTransparent\")]: isTransparent(\n color?.hex\n ),\n })}\n style={{\n backgroundColor: color?.hex,\n }}\n />\n )}\n {!hideLabel && (\n <div className={withBaseName(\"overlayButtonText\")}>\n {displayColorName ?? placeholder ?? \"No color selected\"}\n </div>\n )}\n </Button>\n </OverlayTrigger>\n <OverlayPanel>\n <OverlayContent />\n </OverlayPanel>\n </Overlay>\n );\n};\n"],"names":["colorChooserCss","open"],"mappings":"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"}
package/dist-es/index.js CHANGED
@@ -71,9 +71,6 @@ export { Dropdown } from './dropdown/Dropdown.js';
71
71
  export { useDropdownBase } from './dropdown/useDropdownBase.js';
72
72
  export { DropdownNext } from './dropdown-next/DropdownNext.js';
73
73
  export { EditableLabel } from './editable-label/EditableLabel.js';
74
- export { FileDropZone } from './file-drop-zone/FileDropZone.js';
75
- export { FileDropZoneIcon } from './file-drop-zone/FileDropZoneIcon.js';
76
- export { FileDropZoneTrigger } from './file-drop-zone/FileDropZoneTrigger.js';
77
74
  export { FormFieldLegacy as FormField } from './form-field-legacy/FormFieldLegacy.js';
78
75
  export { FormLabel } from './form-field-legacy/FormLabel.js';
79
76
  export { FormFieldLegacyContext } from './form-field-context-legacy/FormFieldLegacyContext.js';
@@ -99,16 +96,11 @@ export { MenuButton } from './menu-button/MenuButton.js';
99
96
  export { Metric } from './metric/Metric.js';
100
97
  export { MetricHeader } from './metric/MetricHeader.js';
101
98
  export { MetricContent } from './metric/MetricContent.js';
102
- export { NavigationItem } from './navigation-item/NavigationItem.js';
103
99
  export { Option } from './option/Option.js';
104
100
  export { OptionGroup } from './option/OptionGroup.js';
105
101
  export { Overlay } from './overlay/Overlay.js';
106
- export { useOverlay } from './overlay/useOverlay.js';
107
- export { Pagination } from './pagination/Pagination.js';
108
- export { Paginator } from './pagination/Paginator.js';
109
- export { CompactInput } from './pagination/CompactInput.js';
110
- export { CompactPaginator } from './pagination/CompactPaginator.js';
111
- export { GoToInput } from './pagination/GoToInput.js';
102
+ export { OverlayTrigger } from './overlay/OverlayTrigger.js';
103
+ export { OverlayPanel } from './overlay/OverlayPanel.js';
112
104
  export { ParentChildItem } from './parent-child-item/ParentChildItem.js';
113
105
  export { ParentChildLayout } from './parent-child-layout/ParentChildLayout.js';
114
106
  export { Portal } from './portal/Portal.js';
@@ -126,7 +118,6 @@ export { useOverflowLayout } from './responsive/useOverflowLayout.js';
126
118
  export { useWidth } from './responsive/useWidth.js';
127
119
  export { DropdownPlaceholder, NO_DATA, addAll, allExceptOverflowIndicator, byDescendingPriority, getDropdownPlaceholder, getElementForItem, getIsOverflowed, getOverflowIndicator, getRuntimePadding, isCollapsed, isCollapsedOrCollapsing, isCollapsible, isCollapsing, isOverflowed, measureContainer, measureContainerOverflow, measureElementSize, measureOverflowItems, notOverflowed, popNextItemByPriority } from './responsive/overflowUtils.js';
128
120
  export { isResponsiveAttribute, liftResponsivePropsToFormField } from './responsive/utils.js';
129
- export { Scrim } from './scrim/Scrim.js';
130
121
  export { SearchInput } from './search-input/SearchInput.js';
131
122
  export { SkipLink } from './skip-link/SkipLink.js';
132
123
  export { SkipLinks } from './skip-link/SkipLinks.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,8 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { forwardRef, useState, useEffect } from 'react';
3
3
  import { clsx } from 'clsx';
4
- import { Scrim } from '../scrim/Scrim.js';
5
- import { makePrefixer, usePrevious } from '@salt-ds/core';
4
+ import { makePrefixer, usePrevious, Scrim } from '@salt-ds/core';
6
5
  import { useIsViewportLargerThanBreakpoint } from '../utils/useIsViewportLargerThanBreakpoint.js';
7
6
  import { useWindow } from '@salt-ds/window';
8
7
  import { useComponentCssInjection } from '@salt-ds/styles';
@@ -1 +1 @@
1
- {"version":3,"file":"LayerLayout.js","sources":["../src/layer-layout/LayerLayout.tsx"],"sourcesContent":["import { forwardRef, HTMLAttributes, useEffect, useState } from \"react\";\nimport { clsx } from \"clsx\";\n\nimport { Scrim, ScrimProps } from \"../scrim\";\n\nimport { Breakpoints, makePrefixer, usePrevious } from \"@salt-ds/core\";\nimport { useIsViewportLargerThanBreakpoint } from \"../utils\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport layerLayoutCss from \"./LayerLayout.css\";\n\nexport const LAYER_POSITIONS = [\n \"center\",\n \"left\",\n \"top\",\n \"right\",\n \"bottom\",\n] as const;\n\nexport type LayerPositions = (typeof LAYER_POSITIONS)[number];\n\nexport interface LayerLayoutProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Disable the scrim.\n */\n disableScrim?: boolean;\n /**\n * Defines the layer position within the screen.\n */\n position?: LayerPositions;\n /**\n * Breakpoint at which the layer will become fullscreen.\n */\n fullScreenAtBreakpoint?: keyof Breakpoints;\n /**\n * Disable all animations.\n */\n disableAnimations?: boolean;\n /**\n * Display or hide the component.\n */\n isOpen?: boolean;\n /**\n * Props to be passed to the Scrim component.\n */\n scrimProps?: Partial<ScrimProps>;\n}\n\nconst withBaseName = makePrefixer(\"saltLayerLayout\");\n\nconst ariaAttributes = { role: \"dialog\", \"aria-modal\": true };\n\nexport const LayerLayout = forwardRef<HTMLDivElement, LayerLayoutProps>(\n function LayerLayout(props, ref) {\n const {\n children,\n className,\n disableScrim = false,\n position = \"center\",\n fullScreenAtBreakpoint = \"sm\",\n disableAnimations = false,\n scrimProps,\n isOpen = true,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-layer-layout\",\n css: layerLayoutCss,\n window: targetWindow,\n });\n\n const previousDisableAnimationsProp = usePrevious(\n disableAnimations,\n [disableAnimations],\n false\n ); // we check the previous value for this prop to prevent the animations from triggering again when it changes\n\n const [showComponent, setShowComponent] = useState(false);\n\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n if ((!isOpen && disableAnimations) || (!isOpen && !isAnimating)) {\n setShowComponent(false);\n }\n\n if (isOpen && !showComponent) {\n setShowComponent(true);\n }\n }, [isOpen, showComponent, disableAnimations, isAnimating]);\n\n const fullScreen = useIsViewportLargerThanBreakpoint(\n fullScreenAtBreakpoint\n );\n\n const anchored = position !== \"center\" && !fullScreen;\n\n const enterAnimation =\n !disableAnimations && isOpen && !previousDisableAnimationsProp;\n\n const exitAnimation = !disableAnimations && !isOpen;\n\n const layerLayout = showComponent ? (\n <div\n ref={ref}\n className={clsx(withBaseName(), className, {\n [withBaseName(\"anchor\")]: anchored,\n [withBaseName(\"fullScreen\")]: fullScreen,\n [withBaseName(position)]: !fullScreen,\n [withBaseName(\"enter-animation\")]: enterAnimation,\n [withBaseName(\"exit-animation\")]: exitAnimation,\n })}\n onAnimationStart={() => setIsAnimating(true)}\n onAnimationEnd={() => {\n if (!isOpen && showComponent) {\n setShowComponent(false);\n }\n }}\n {...(disableScrim && ariaAttributes)}\n {...rest}\n >\n {children}\n </div>\n ) : null;\n\n return disableScrim ? (\n layerLayout\n ) : (\n <Scrim\n open={showComponent}\n className={clsx({\n [withBaseName(\"enter-animation\")]: enterAnimation,\n [withBaseName(\"exit-animation\")]: exitAnimation,\n })}\n {...scrimProps}\n >\n {layerLayout}\n </Scrim>\n );\n }\n);\n"],"names":["LayerLayout","layerLayoutCss"],"mappings":"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"}
1
+ {"version":3,"file":"LayerLayout.js","sources":["../src/layer-layout/LayerLayout.tsx"],"sourcesContent":["import { forwardRef, HTMLAttributes, useEffect, useState } from \"react\";\nimport { clsx } from \"clsx\";\n\nimport { Scrim, ScrimProps } from \"@salt-ds/core\";\n\nimport { Breakpoints, makePrefixer, usePrevious } from \"@salt-ds/core\";\nimport { useIsViewportLargerThanBreakpoint } from \"../utils\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport layerLayoutCss from \"./LayerLayout.css\";\n\nexport const LAYER_POSITIONS = [\n \"center\",\n \"left\",\n \"top\",\n \"right\",\n \"bottom\",\n] as const;\n\nexport type LayerPositions = (typeof LAYER_POSITIONS)[number];\n\nexport interface LayerLayoutProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Disable the scrim.\n */\n disableScrim?: boolean;\n /**\n * Defines the layer position within the screen.\n */\n position?: LayerPositions;\n /**\n * Breakpoint at which the layer will become fullscreen.\n */\n fullScreenAtBreakpoint?: keyof Breakpoints;\n /**\n * Disable all animations.\n */\n disableAnimations?: boolean;\n /**\n * Display or hide the component.\n */\n isOpen?: boolean;\n /**\n * Props to be passed to the Scrim component.\n */\n scrimProps?: Partial<ScrimProps>;\n}\n\nconst withBaseName = makePrefixer(\"saltLayerLayout\");\n\nconst ariaAttributes = { role: \"dialog\", \"aria-modal\": true };\n\nexport const LayerLayout = forwardRef<HTMLDivElement, LayerLayoutProps>(\n function LayerLayout(props, ref) {\n const {\n children,\n className,\n disableScrim = false,\n position = \"center\",\n fullScreenAtBreakpoint = \"sm\",\n disableAnimations = false,\n scrimProps,\n isOpen = true,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-layer-layout\",\n css: layerLayoutCss,\n window: targetWindow,\n });\n\n const previousDisableAnimationsProp = usePrevious(\n disableAnimations,\n [disableAnimations],\n false\n ); // we check the previous value for this prop to prevent the animations from triggering again when it changes\n\n const [showComponent, setShowComponent] = useState(false);\n\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n if ((!isOpen && disableAnimations) || (!isOpen && !isAnimating)) {\n setShowComponent(false);\n }\n\n if (isOpen && !showComponent) {\n setShowComponent(true);\n }\n }, [isOpen, showComponent, disableAnimations, isAnimating]);\n\n const fullScreen = useIsViewportLargerThanBreakpoint(\n fullScreenAtBreakpoint\n );\n\n const anchored = position !== \"center\" && !fullScreen;\n\n const enterAnimation =\n !disableAnimations && isOpen && !previousDisableAnimationsProp;\n\n const exitAnimation = !disableAnimations && !isOpen;\n\n const layerLayout = showComponent ? (\n <div\n ref={ref}\n className={clsx(withBaseName(), className, {\n [withBaseName(\"anchor\")]: anchored,\n [withBaseName(\"fullScreen\")]: fullScreen,\n [withBaseName(position)]: !fullScreen,\n [withBaseName(\"enter-animation\")]: enterAnimation,\n [withBaseName(\"exit-animation\")]: exitAnimation,\n })}\n onAnimationStart={() => setIsAnimating(true)}\n onAnimationEnd={() => {\n if (!isOpen && showComponent) {\n setShowComponent(false);\n }\n }}\n {...(disableScrim && ariaAttributes)}\n {...rest}\n >\n {children}\n </div>\n ) : null;\n\n return disableScrim ? (\n layerLayout\n ) : (\n <Scrim\n open={showComponent}\n className={clsx({\n [withBaseName(\"enter-animation\")]: enterAnimation,\n [withBaseName(\"exit-animation\")]: exitAnimation,\n })}\n {...scrimProps}\n >\n {layerLayout}\n </Scrim>\n );\n }\n);\n"],"names":["LayerLayout","layerLayoutCss"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- var css_248z = "/* Experimental - Overlay css variable API */\n.saltOverlay {\n --overlay-text-color: var(--salt-content-primary-foreground);\n --overlay-spacing: var(--salt-size-unit);\n --overlay-fontSize: var(--salt-text-fontSize);\n --overlay-background: var(--salt-container-primary-background);\n --overlay-borderColor: var(--salt-container-primary-borderColor);\n /* TODO: z-index audit, provide z index here or rely on popper */\n --overlay-zindex: var(--salt-zIndex-flyover);\n}\n\n.saltOverlay-secondary.saltOverlay {\n --overlay-background: var(--salt-container-secondary-background);\n --overlay-borderColor: var(--salt-container-secondary-borderColor);\n}\n\n.saltOverlay-content {\n display: flex;\n padding: calc(var(--overlay-spacing) * 2);\n font-size: var(--overlay-fontSize);\n\n border: 1px solid var(--overlay-borderColor);\n box-shadow: var(--salt-overlayable-shadow-popout);\n line-height: var(--salt-text-lineHeight);\n background: var(--overlay-background);\n color: var(--overlay-text-color);\n position: relative;\n opacity: 1;\n overflow: visible;\n z-index: var(--overlay-zindex);\n}\n\n.saltOverlay-arrow,\n.saltOverlay-arrow::after {\n border: 8px solid transparent;\n position: absolute;\n}\n\n.saltOverlay-arrow::after {\n content: \"\";\n}\n\n.saltOverlay[data-placement^=\"top\"] .saltOverlay-arrow {\n border-top-color: var(--overlay-borderColor);\n bottom: -17px;\n}\n\n.saltOverlay[data-placement^=\"bottom\"] .saltOverlay-arrow {\n border-bottom-color: var(--overlay-borderColor);\n top: -17px;\n}\n\n.saltOverlay[data-placement^=\"left\"] .saltOverlay-arrow {\n border-left-color: var(--overlay-borderColor);\n right: -17px;\n}\n\n.saltOverlay[data-placement^=\"right\"] .saltOverlay-arrow {\n border-right-color: var(--overlay-borderColor);\n left: -17px;\n}\n\n.saltOverlay[data-placement^=\"top\"] .saltOverlay-arrow::after {\n border-top-color: var(--overlay-background);\n bottom: -7px;\n left: calc(100% - 8px);\n}\n\n.saltOverlay[data-placement^=\"bottom\"] .saltOverlay-arrow::after {\n border-bottom-color: var(--overlay-background);\n top: -7px;\n left: calc(100% - 8px);\n}\n\n.saltOverlay[data-placement^=\"left\"] .saltOverlay-arrow::after {\n border-left-color: var(--overlay-background);\n right: -7px;\n top: calc(100% - 8px);\n}\n\n.saltOverlay[data-placement^=\"right\"] .saltOverlay-arrow::after {\n border-right-color: var(--overlay-background);\n left: -7px;\n top: calc(100% - 8px);\n}\n\n/* Close Button */\n.saltOverlay-close {\n position: absolute;\n right: 0;\n top: 0;\n z-index: var(--salt-zIndex-default);\n}\n";
1
+ var css_248z = ".saltOverlayPanel {\n --overlay-borderColor: var(--saltOverlay-borderColor, var(--salt-container-primary-borderColor));\n --overlay-background: var(--saltOverlay-background, var(--salt-container-primary-background));\n}\n\n.saltOverlayPanel {\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltOverlay-fontSize, var(--salt-text-fontSize));\n font-weight: var(--saltOverlay-fontWeight, var(--salt-text-fontWeight));\n line-height: var(--saltOverlay-lineHeight, var(--salt-text-lineHeight));\n\n border-color: var(--overlay-borderColor);\n border-style: var(--saltOverlay-borderStyle, var(--salt-container-borderStyle));\n border-width: var(--saltOverlay-borderWidth, var(--salt-size-border));\n\n background: var(--overlay-background);\n box-shadow: var(--saltOverlay-boxShadow, var(--salt-overlayable-shadow-popout));\n\n color: var(--saltOverlay-text-color, var(--salt-text-primary-foreground));\n z-index: var(--saltOverlay-zIndex, var(--salt-zIndex-flyover));\n width: max-content;\n}\n\n.saltOverlayPanelBase-container {\n animation: fade-in var(--salt-duration-perceptible) ease-in-out;\n position: relative;\n}\n\n@keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n.saltOverlayPanelBase-content {\n overflow: auto;\n padding: var(--saltOverlay-content-padding, var(--salt-spacing-100) 0 var(--salt-spacing-100) var(--salt-spacing-100));\n}\n\n.saltButton-secondary.saltOverlayPanelBase-closeButton {\n position: sticky;\n top: 0;\n float: right;\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Overlay.css.js.map
@@ -1,71 +1,100 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { makePrefixer, useId, Button } from '@salt-ds/core';
3
- import { CloseIcon } from '@salt-ds/icons';
4
- import { clsx } from 'clsx';
5
- import { forwardRef } from 'react';
6
- import { Portal } from '../portal/Portal.js';
7
- import { useComponentCssInjection } from '@salt-ds/styles';
8
- import { useWindow } from '@salt-ds/window';
9
- import { useWindow as useWindow$1 } from '../window/WindowContext.js';
10
- import '../window/ElectronWindow.js';
11
- import css_248z from './Overlay.css.js';
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { forwardRef, useRef, useMemo } from 'react';
3
+ import { OverlayContext } from './OverlayContext.js';
4
+ import { useId, useControlled, useFloatingUI } from '@salt-ds/core';
5
+ import { offset, flip, shift, limitShift, arrow, useInteractions, useRole, useClick, useDismiss } from '@floating-ui/react';
12
6
 
13
- const withBaseName = makePrefixer("saltOverlay");
14
7
  const Overlay = forwardRef(
15
- ({
16
- adaExceptions: { showClose } = {
17
- showClose: true
18
- },
19
- arrowProps,
20
- children,
21
- className,
22
- open,
23
- onOpenChange,
24
- variant = "primary",
25
- ...rest
26
- }, ref) => {
27
- const targetWindow = useWindow();
28
- useComponentCssInjection({
29
- testId: "salt-overlay",
30
- css: css_248z,
31
- window: targetWindow
8
+ function Overlay2(props, ref) {
9
+ const {
10
+ children,
11
+ open,
12
+ onOpenChange,
13
+ placement: placementProp = "top",
14
+ id: idProp,
15
+ onClose,
16
+ ...rest
17
+ } = props;
18
+ const id = useId(idProp);
19
+ const arrowRef = useRef(null);
20
+ const [openState, setOpenState] = useControlled({
21
+ controlled: open,
22
+ default: false,
23
+ name: "Overlay",
24
+ state: "open"
32
25
  });
33
- const id = useId();
34
- const Window = useWindow$1();
35
- const handleCloseButton = () => {
36
- onOpenChange == null ? void 0 : onOpenChange(false);
26
+ const {
27
+ x,
28
+ y,
29
+ strategy,
30
+ context,
31
+ elements,
32
+ floating,
33
+ reference,
34
+ middlewareData: { arrow: { x: arrowX, y: arrowY } = {} },
35
+ placement
36
+ } = useFloatingUI({
37
+ open: openState,
38
+ onOpenChange: setOpenState,
39
+ placement: placementProp,
40
+ middleware: [
41
+ offset(11),
42
+ flip(),
43
+ shift({ limiter: limitShift() }),
44
+ arrow({ element: arrowRef })
45
+ ]
46
+ });
47
+ const { getReferenceProps, getFloatingProps } = useInteractions([
48
+ useRole(context, { role: "dialog" }),
49
+ useClick(context),
50
+ useDismiss(context)
51
+ ]);
52
+ const floatingStyles = useMemo(() => {
53
+ var _a, _b;
54
+ return {
55
+ top: y != null ? y : 0,
56
+ left: x != null ? x : 0,
57
+ position: strategy,
58
+ width: (_a = elements.floating) == null ? void 0 : _a.offsetWidth,
59
+ height: (_b = elements.floating) == null ? void 0 : _b.offsetHeight
60
+ };
61
+ }, [elements.floating, strategy, x, y]);
62
+ const setOpen = (event, newOpen) => {
63
+ setOpenState(newOpen);
64
+ onOpenChange == null ? void 0 : onOpenChange(event, newOpen);
65
+ };
66
+ const arrowProps = {
67
+ ref: arrowRef,
68
+ context,
69
+ style: {
70
+ position: strategy,
71
+ left: arrowX != null ? arrowX : 0,
72
+ top: arrowY != null ? arrowY : 0
73
+ }
74
+ };
75
+ const handleCloseButton = (event) => {
76
+ setOpen(event, false);
77
+ onClose == null ? void 0 : onClose(event);
37
78
  };
38
- if (!open) {
39
- return null;
40
- }
41
- return /* @__PURE__ */ jsx(Portal, {
42
- children: /* @__PURE__ */ jsx(Window, {
43
- className: clsx(withBaseName(), className, {
44
- [withBaseName(variant)]: variant === "secondary"
45
- }),
46
- id,
79
+ return /* @__PURE__ */ jsx(OverlayContext.Provider, {
80
+ value: {
81
+ id: id != null ? id : "",
82
+ openState,
83
+ setOpen,
84
+ floatingStyles,
85
+ placement,
86
+ context,
87
+ arrowProps,
88
+ floating,
89
+ reference,
90
+ handleCloseButton,
91
+ getFloatingProps,
92
+ getReferenceProps
93
+ },
94
+ children: /* @__PURE__ */ jsx("div", {
47
95
  ref,
48
96
  ...rest,
49
- children: /* @__PURE__ */ jsxs("div", {
50
- className: clsx(withBaseName("content")),
51
- "data-testid": "overlay-content",
52
- children: [
53
- showClose && /* @__PURE__ */ jsx(Button, {
54
- onClick: handleCloseButton,
55
- className: withBaseName("close"),
56
- variant: "secondary",
57
- children: /* @__PURE__ */ jsx(CloseIcon, {
58
- "accessible-text": "close overlay",
59
- className: withBaseName("closeIcon")
60
- })
61
- }),
62
- children,
63
- /* @__PURE__ */ jsx("div", {
64
- className: withBaseName("arrow"),
65
- ...arrowProps
66
- })
67
- ]
68
- })
97
+ children
69
98
  })
70
99
  });
71
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Overlay.js","sources":["../src/overlay/Overlay.tsx"],"sourcesContent":["import { Button, makePrefixer, UseFloatingUIProps, useId } from \"@salt-ds/core\";\nimport { CloseIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport { ComponentProps, ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport { Portal } from \"../portal\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { useWindow as usePortalWindow } from \"../window\";\n\nimport overlayCSS from \"./Overlay.css\";\n\ninterface ADAExceptions {\n showClose?: boolean;\n}\n\nexport interface OverlayProps\n extends ComponentPropsWithoutRef<\"div\">,\n Partial<Pick<UseFloatingUIProps, \"onOpenChange\" | \"open\">> {\n /**\n * object that houses ada related props.\n * adaExceptions.showClose defaults to true. It can be removed at the risk of ADA compliance\n */\n adaExceptions?: ADAExceptions;\n arrowProps?: ComponentProps<\"div\">;\n variant?: \"primary\" | \"secondary\";\n}\n\nconst withBaseName = makePrefixer(\"saltOverlay\");\n\nexport const Overlay = forwardRef<HTMLDivElement, OverlayProps>(\n (\n {\n adaExceptions: { showClose } = {\n showClose: true,\n },\n arrowProps,\n children,\n className,\n open,\n onOpenChange,\n variant = \"primary\",\n ...rest\n },\n ref\n ) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-overlay\",\n css: overlayCSS,\n window: targetWindow,\n });\n\n // Will need to figure out a better way to assign popper id's for the electron windows\n const id = useId();\n const Window = usePortalWindow();\n\n const handleCloseButton = () => {\n onOpenChange?.(false);\n };\n\n if (!open) {\n return null;\n }\n\n return (\n <Portal>\n <Window\n className={clsx(withBaseName(), className, {\n [withBaseName(variant)]: variant === \"secondary\",\n })}\n id={id}\n ref={ref}\n {...rest}\n >\n <div\n className={clsx(withBaseName(\"content\"))}\n data-testid=\"overlay-content\"\n >\n {showClose && (\n <Button\n onClick={handleCloseButton}\n className={withBaseName(\"close\")}\n variant=\"secondary\"\n >\n <CloseIcon\n accessible-text=\"close overlay\"\n className={withBaseName(\"closeIcon\")}\n />\n </Button>\n )}\n {children}\n <div className={withBaseName(\"arrow\")} {...arrowProps} />\n </div>\n </Window>\n </Portal>\n );\n }\n);\n"],"names":["overlayCSS","usePortalWindow"],"mappings":";;;;;;;;;;;;AA6BA,MAAM,YAAA,GAAe,aAAa,aAAa,CAAA,CAAA;AAExC,MAAM,OAAU,GAAA,UAAA;AAAA,EACrB,CACE;AAAA,IACE,aAAA,EAAe,EAAE,SAAA,EAAc,GAAA;AAAA,MAC7B,SAAW,EAAA,IAAA;AAAA,KACb;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAU,GAAA,SAAA;AAAA,IACP,GAAA,IAAA;AAAA,KAEL,GACG,KAAA;AACH,IAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,cAAA;AAAA,MACR,GAAK,EAAAA,QAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAGD,IAAA,MAAM,KAAK,KAAM,EAAA,CAAA;AACjB,IAAA,MAAM,SAASC,WAAgB,EAAA,CAAA;AAE/B,IAAA,MAAM,oBAAoB,MAAM;AAC9B,MAAe,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACjB,CAAA;AAEA,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAEA,IAAA,uBACG,GAAA,CAAA,MAAA,EAAA;AAAA,MACC,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA;AAAA,QACC,SAAW,EAAA,IAAA,CAAK,YAAa,EAAA,EAAG,SAAW,EAAA;AAAA,UACzC,CAAC,YAAA,CAAa,OAAO,CAAA,GAAI,OAAY,KAAA,WAAA;AAAA,SACtC,CAAA;AAAA,QACD,EAAA;AAAA,QACA,GAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA;AAAA,UACC,SAAW,EAAA,IAAA,CAAK,YAAa,CAAA,SAAS,CAAC,CAAA;AAAA,UACvC,aAAY,EAAA,iBAAA;AAAA,UAEX,QAAA,EAAA;AAAA,YAAA,SAAA,oBACE,GAAA,CAAA,MAAA,EAAA;AAAA,cACC,OAAS,EAAA,iBAAA;AAAA,cACT,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,cAC/B,OAAQ,EAAA,WAAA;AAAA,cAER,QAAC,kBAAA,GAAA,CAAA,SAAA,EAAA;AAAA,gBACC,iBAAgB,EAAA,eAAA;AAAA,gBAChB,SAAA,EAAW,aAAa,WAAW,CAAA;AAAA,eACrC,CAAA;AAAA,aACF,CAAA;AAAA,YAED,QAAA;AAAA,4BACA,GAAA,CAAA,KAAA,EAAA;AAAA,cAAI,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,cAAI,GAAG,UAAA;AAAA,aAAY,CAAA;AAAA,WAAA;AAAA,SACzD,CAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
1
+ {"version":3,"file":"Overlay.js","sources":["../src/overlay/Overlay.tsx"],"sourcesContent":["import {\n ComponentPropsWithoutRef,\n forwardRef,\n SyntheticEvent,\n useMemo,\n useRef,\n} from \"react\";\nimport { OverlayContext } from \"./OverlayContext\";\nimport { useControlled, useFloatingUI, useId } from \"@salt-ds/core\";\nimport {\n flip,\n offset,\n shift,\n limitShift,\n arrow,\n useClick,\n useDismiss,\n useInteractions,\n useRole,\n} from \"@floating-ui/react\";\n\nexport interface OverlayProps extends ComponentPropsWithoutRef<\"div\"> {\n open?: boolean;\n onOpenChange?: (event: SyntheticEvent, newOpen: boolean) => void;\n /*\n * Set the placement of the Overlay component relative to the trigger element. Defaults to `top`.\n */\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /*\n * Use in controlled version to close Overlay.\n */\n onClose?: (event: SyntheticEvent) => void;\n}\n\nexport const Overlay = forwardRef<HTMLDivElement, OverlayProps>(\n function Overlay(props, ref) {\n const {\n children,\n open,\n onOpenChange,\n placement: placementProp = \"top\",\n id: idProp,\n onClose,\n ...rest\n } = props;\n\n const id = useId(idProp);\n const arrowRef = useRef<SVGSVGElement | null>(null);\n\n const [openState, setOpenState] = useControlled({\n controlled: open,\n default: false,\n name: \"Overlay\",\n state: \"open\",\n });\n\n const {\n x,\n y,\n strategy,\n context,\n elements,\n floating,\n reference,\n middlewareData: { arrow: { x: arrowX, y: arrowY } = {} },\n placement,\n } = useFloatingUI({\n open: openState,\n onOpenChange: setOpenState,\n placement: placementProp,\n middleware: [\n offset(11),\n flip(),\n shift({ limiter: limitShift() }),\n arrow({ element: arrowRef }),\n ],\n });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useRole(context, { role: \"dialog\" }),\n useClick(context),\n useDismiss(context),\n ]);\n\n const floatingStyles = useMemo(() => {\n return {\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n width: elements.floating?.offsetWidth,\n height: elements.floating?.offsetHeight,\n };\n }, [elements.floating, strategy, x, y]);\n\n const setOpen = (event: SyntheticEvent, newOpen: boolean) => {\n setOpenState(newOpen);\n onOpenChange?.(event, newOpen);\n };\n\n const arrowProps = {\n ref: arrowRef,\n context,\n style: {\n position: strategy,\n left: arrowX ?? 0,\n top: arrowY ?? 0,\n },\n };\n\n const handleCloseButton = (event: SyntheticEvent) => {\n setOpen(event, false);\n onClose?.(event);\n };\n\n return (\n <OverlayContext.Provider\n value={{\n id: id ?? \"\",\n openState,\n setOpen,\n floatingStyles,\n placement,\n context,\n arrowProps,\n floating,\n reference,\n handleCloseButton,\n getFloatingProps,\n getReferenceProps,\n }}\n >\n <div ref={ref} {...rest}>\n {children}\n </div>\n </OverlayContext.Provider>\n );\n }\n);\n"],"names":["Overlay"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { createContext } from '@salt-ds/core';
2
+ import { useContext } from 'react';
3
+
4
+ const OverlayContext = createContext(
5
+ "OverlayContext",
6
+ {
7
+ id: "",
8
+ openState: false,
9
+ setOpen() {
10
+ return void 0;
11
+ },
12
+ floatingStyles: {
13
+ top: 0,
14
+ left: 0,
15
+ position: ""
16
+ },
17
+ placement: "",
18
+ context: {},
19
+ arrowProps: {},
20
+ handleCloseButton() {
21
+ return void 0;
22
+ },
23
+ reference: {},
24
+ floating: {},
25
+ getFloatingProps() {
26
+ return {};
27
+ },
28
+ getReferenceProps() {
29
+ return {};
30
+ }
31
+ }
32
+ );
33
+ function useOverlayContext() {
34
+ return useContext(OverlayContext);
35
+ }
36
+
37
+ export { OverlayContext, useOverlayContext };
38
+ //# sourceMappingURL=OverlayContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OverlayContext.js","sources":["../src/overlay/OverlayContext.ts"],"sourcesContent":["import {\n FloatingArrowProps,\n FloatingContext,\n Placement,\n ReferenceType,\n Strategy,\n} from \"@floating-ui/react\";\nimport { createContext, useFloatingUI } from \"@salt-ds/core\";\nimport { SyntheticEvent, useContext } from \"react\";\n\ntype FloatingReturn = ReturnType<typeof useFloatingUI>;\ntype FloatingStyleProps = {\n top: number;\n left: number;\n position: Strategy;\n width?: number;\n height?: number;\n};\n\nexport interface OverlayContextValue {\n id: string;\n openState: boolean;\n setOpen: (event: SyntheticEvent, newOpen: boolean) => void;\n floatingStyles: FloatingStyleProps;\n placement: Placement;\n arrowProps: FloatingArrowProps;\n context: FloatingContext;\n reference?: (node: ReferenceType | null) => void;\n floating?: (node: HTMLElement | null) => void;\n handleCloseButton: (event: SyntheticEvent) => void;\n getFloatingProps: (\n userProps?: React.HTMLProps<HTMLElement> | undefined\n ) => Record<string, unknown>;\n getReferenceProps: (\n userProps?: React.HTMLProps<Element> | undefined\n ) => Record<string, unknown>;\n}\n\nexport const OverlayContext = createContext<OverlayContextValue>(\n \"OverlayContext\",\n {\n id: \"\",\n openState: false,\n setOpen() {\n return undefined;\n },\n floatingStyles: {\n top: 0,\n left: 0,\n position: \"\" as Strategy,\n },\n placement: \"\" as Placement,\n context: {} as FloatingContext,\n arrowProps: {} as FloatingArrowProps,\n handleCloseButton() {\n return undefined;\n },\n reference: {} as FloatingReturn[\"reference\"],\n floating: {} as FloatingReturn[\"floating\"],\n getFloatingProps() {\n return {} as Record<string, unknown>;\n },\n getReferenceProps() {\n return {} as Record<string, unknown>;\n },\n }\n);\n\nexport function useOverlayContext() {\n return useContext(OverlayContext);\n}\n"],"names":[],"mappings":";;;AAsCO,MAAM,cAAiB,GAAA,aAAA;AAAA,EAC5B,gBAAA;AAAA,EACA;AAAA,IACE,EAAI,EAAA,EAAA;AAAA,IACJ,SAAW,EAAA,KAAA;AAAA,IACX,OAAU,GAAA;AACR,MAAO,OAAA,KAAA,CAAA,CAAA;AAAA,KACT;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,GAAK,EAAA,CAAA;AAAA,MACL,IAAM,EAAA,CAAA;AAAA,MACN,QAAU,EAAA,EAAA;AAAA,KACZ;AAAA,IACA,SAAW,EAAA,EAAA;AAAA,IACX,SAAS,EAAC;AAAA,IACV,YAAY,EAAC;AAAA,IACb,iBAAoB,GAAA;AAClB,MAAO,OAAA,KAAA,CAAA,CAAA;AAAA,KACT;AAAA,IACA,WAAW,EAAC;AAAA,IACZ,UAAU,EAAC;AAAA,IACX,gBAAmB,GAAA;AACjB,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAAA,IACA,iBAAoB,GAAA;AAClB,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAAA,GACF;AACF,EAAA;AAEO,SAAS,iBAAoB,GAAA;AAClC,EAAA,OAAO,WAAW,cAAc,CAAA,CAAA;AAClC;;;;"}
@@ -0,0 +1,60 @@
1
+ import { jsx, Fragment } from 'react/jsx-runtime';
2
+ import { forwardRef } from 'react';
3
+ import { makePrefixer, useFloatingComponent, useForkRef } from '@salt-ds/core';
4
+ import { clsx } from 'clsx';
5
+ import { useOverlayContext } from './OverlayContext.js';
6
+ import { FloatingOverlay } from '@floating-ui/react';
7
+ import { OverlayPanelBase } from './OverlayPanelBase.js';
8
+
9
+ const withBaseName = makePrefixer("saltOverlayPanel");
10
+ const OverlayPanel = forwardRef(
11
+ function OverlayPanel2(props, ref) {
12
+ const { className, ...rest } = props;
13
+ const { Component: FloatingComponent } = useFloatingComponent();
14
+ const {
15
+ id,
16
+ openState,
17
+ floatingStyles,
18
+ placement,
19
+ context,
20
+ getFloatingProps,
21
+ floating
22
+ } = useOverlayContext();
23
+ const handleRef = useForkRef(floating, ref);
24
+ const { top, left, width, height, position } = floatingStyles;
25
+ const getOverlayProps = () => {
26
+ return getFloatingProps({
27
+ "data-placement": placement,
28
+ ref: floating,
29
+ id: `${id}-panel`
30
+ });
31
+ };
32
+ if (!openState)
33
+ return /* @__PURE__ */ jsx(Fragment, {});
34
+ return /* @__PURE__ */ jsx(FloatingOverlay, {
35
+ children: /* @__PURE__ */ jsx(FloatingComponent, {
36
+ open: openState,
37
+ className: clsx(withBaseName(), className),
38
+ "aria-modal": "true",
39
+ "aria-labelledby": `${id}-header`,
40
+ "aria-describedby": `${id}-content`,
41
+ ...getOverlayProps(),
42
+ ref: handleRef,
43
+ width,
44
+ height,
45
+ top,
46
+ left,
47
+ position,
48
+ focusManagerProps: {
49
+ context
50
+ },
51
+ children: /* @__PURE__ */ jsx(OverlayPanelBase, {
52
+ ...rest
53
+ })
54
+ })
55
+ });
56
+ }
57
+ );
58
+
59
+ export { OverlayPanel };
60
+ //# sourceMappingURL=OverlayPanel.js.map