@sproutsocial/seeds-react-panel 0.3.7

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/dist/index.js ADDED
@@ -0,0 +1,410 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ Panel: () => Panel_default,
34
+ PanelCloseButton: () => PanelCloseButton,
35
+ PanelContent: () => PanelContent,
36
+ PanelContext: () => PanelContext,
37
+ PanelFooter: () => PanelFooter,
38
+ PanelHeader: () => PanelHeader,
39
+ PanelProvider: () => PanelProvider,
40
+ default: () => index_default,
41
+ usePanelContext: () => usePanelContext
42
+ });
43
+ module.exports = __toCommonJS(index_exports);
44
+
45
+ // src/Panel.tsx
46
+ var React6 = __toESM(require("react"));
47
+ var import_seeds_react_drawer2 = __toESM(require("@sproutsocial/seeds-react-drawer"));
48
+ var import_seeds_react_hooks = require("@sproutsocial/seeds-react-hooks");
49
+
50
+ // src/PanelContext.tsx
51
+ var React = __toESM(require("react"));
52
+ var PanelContext = React.createContext(null);
53
+ var usePanelContext = () => {
54
+ const ctx = React.useContext(PanelContext);
55
+ if (!ctx) {
56
+ throw new Error(
57
+ "usePanelContext must be used within a <PanelProvider>. Wrap the consuming tree in <PanelProvider> to provide isPanelOpen / togglePanel."
58
+ );
59
+ }
60
+ return ctx;
61
+ };
62
+
63
+ // src/PanelHeader.tsx
64
+ var import_seeds_react_box = __toESM(require("@sproutsocial/seeds-react-box"));
65
+ var import_seeds_react_text = __toESM(require("@sproutsocial/seeds-react-text"));
66
+
67
+ // src/PanelCloseButton.tsx
68
+ var React2 = require("react");
69
+ var import_seeds_react_button = __toESM(require("@sproutsocial/seeds-react-button"));
70
+ var import_seeds_react_icon = __toESM(require("@sproutsocial/seeds-react-icon"));
71
+ var import_jsx_runtime = require("react/jsx-runtime");
72
+ var PanelCloseButton = (props) => {
73
+ const panelContext = usePanelContext();
74
+ if (props.render) {
75
+ return props.render(panelContext) ?? null;
76
+ }
77
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
78
+ import_seeds_react_button.default,
79
+ {
80
+ appearance: "pill",
81
+ "aria-label": panelContext.closeButtonLabel,
82
+ onClick: panelContext.closePanel,
83
+ ...props,
84
+ children: props.children || /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_seeds_react_icon.default, { "aria-hidden": true, name: "x-outline" })
85
+ }
86
+ );
87
+ };
88
+ PanelCloseButton.displayName = "Panel.CloseButton";
89
+
90
+ // src/PanelHeader.tsx
91
+ var import_jsx_runtime2 = require("react/jsx-runtime");
92
+ var PanelHeader = ({
93
+ title = "",
94
+ id = void 0,
95
+ children,
96
+ render,
97
+ ...rest
98
+ }) => {
99
+ const panelContext = usePanelContext();
100
+ if (render) {
101
+ return render(panelContext);
102
+ }
103
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
104
+ import_seeds_react_box.default,
105
+ {
106
+ display: "flex",
107
+ flex: "0 0 auto",
108
+ justifyContent: "space-between",
109
+ alignItems: "center",
110
+ p: 400,
111
+ borderBottom: "1px solid",
112
+ borderColor: "container.border.base",
113
+ ...rest,
114
+ children: children || /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
115
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_seeds_react_text.default.Headline, { id, children: title }),
116
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(PanelCloseButton, {})
117
+ ] })
118
+ }
119
+ );
120
+ };
121
+ PanelHeader.displayName = "Panel.Header";
122
+
123
+ // src/PanelContent.tsx
124
+ var React3 = require("react");
125
+
126
+ // src/styles.ts
127
+ var import_styled_components = __toESM(require("styled-components"));
128
+ var import_seeds_react_system_props = require("@sproutsocial/seeds-react-system-props");
129
+ var import_unitless = require("@sproutsocial/seeds-motion/unitless");
130
+ var import_seeds_react_box2 = __toESM(require("@sproutsocial/seeds-react-box"));
131
+ var gapSide = (direction) => {
132
+ if (direction === "right") return "left";
133
+ if (direction === "left") return "right";
134
+ return "top";
135
+ };
136
+ var PanelContainer = import_styled_components.default.aside`
137
+ background: ${(props) => props.theme.colors.container.background.base};
138
+ flex-grow: 0;
139
+ flex-shrink: 0;
140
+ overflow: hidden;
141
+ transition: flex-basis ${import_unitless.MOTION_DURATION_MEDIUM}s ease-in-out,
142
+ margin ${import_unitless.MOTION_DURATION_MEDIUM}s ease-in-out;
143
+ flex-basis: ${(props) => props.$isOpen ? `${props.$width}px` : "0px"};
144
+ margin-${(props) => gapSide(props.$direction)}: ${(props) => props.$isOpen && props.$gap ? `${props.$gap}px` : "0px"};
145
+ border-radius: ${({ theme }) => theme.radii[800]};
146
+
147
+ ${(props) => props.$direction === "bottom" ? import_styled_components.css`
148
+ width: 100%;
149
+ ` : import_styled_components.css`
150
+ height: 100%;
151
+ `}
152
+
153
+ ${import_seeds_react_system_props.COMMON}
154
+ `;
155
+ var PanelInner = import_styled_components.default.div`
156
+ ${(props) => props.$direction === "bottom" ? import_styled_components.css`
157
+ min-height: ${props.$width}px;
158
+ width: 100%;
159
+ ` : import_styled_components.css`
160
+ min-width: ${props.$width}px;
161
+ height: 100%;
162
+ `}
163
+ display: flex;
164
+ flex-direction: column;
165
+ overflow: hidden;
166
+ `;
167
+ var Content = (0, import_styled_components.default)(import_seeds_react_box2.default)`
168
+ overflow-y: auto;
169
+ `;
170
+ var Footer = (0, import_styled_components.default)(import_seeds_react_box2.default)`
171
+ flex: 0 0 auto;
172
+ overflow: hidden;
173
+ `;
174
+
175
+ // src/PanelContent.tsx
176
+ var import_jsx_runtime3 = require("react/jsx-runtime");
177
+ var PanelContent = ({ children, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
178
+ Content,
179
+ {
180
+ flex: "1 1 auto",
181
+ minHeight: "0",
182
+ p: 450,
183
+ color: "text.body",
184
+ "data-panel-content": "",
185
+ ...rest,
186
+ children
187
+ }
188
+ );
189
+ PanelContent.displayName = "Panel.Content";
190
+
191
+ // src/PanelFooter.tsx
192
+ var React4 = require("react");
193
+ var import_jsx_runtime4 = require("react/jsx-runtime");
194
+ var PanelFooter = ({ children, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Footer, { p: 450, "data-panel-footer": "", ...rest, children });
195
+ PanelFooter.displayName = "Panel.Footer";
196
+
197
+ // src/PanelMobileActionsHeader.tsx
198
+ var React5 = require("react");
199
+ var import_seeds_react_box3 = __toESM(require("@sproutsocial/seeds-react-box"));
200
+ var import_seeds_react_button2 = __toESM(require("@sproutsocial/seeds-react-button"));
201
+ var import_seeds_react_drawer = __toESM(require("@sproutsocial/seeds-react-drawer"));
202
+ var import_seeds_react_icon2 = __toESM(require("@sproutsocial/seeds-react-icon"));
203
+ var import_seeds_react_text2 = __toESM(require("@sproutsocial/seeds-react-text"));
204
+ var import_jsx_runtime5 = require("react/jsx-runtime");
205
+ var PanelMobileActionsHeader = ({
206
+ title,
207
+ titleId,
208
+ actions
209
+ }) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
210
+ import_seeds_react_drawer.default.Header,
211
+ {
212
+ render: (ctx) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
213
+ import_seeds_react_box3.default,
214
+ {
215
+ display: "flex",
216
+ alignItems: "center",
217
+ justifyContent: "space-between",
218
+ pt: 400,
219
+ px: 450,
220
+ flex: "0 0 auto",
221
+ children: [
222
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
223
+ import_seeds_react_text2.default,
224
+ {
225
+ as: "h2",
226
+ fontSize: 400,
227
+ fontWeight: "semibold",
228
+ color: "text.headline",
229
+ id: titleId,
230
+ children: title
231
+ }
232
+ ),
233
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_seeds_react_box3.default, { display: "flex", alignItems: "center", gap: 200, children: [
234
+ actions.map((action, i) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
235
+ import_seeds_react_button2.default,
236
+ {
237
+ appearance: "pill",
238
+ "aria-label": action["aria-label"],
239
+ onClick: action.onClick,
240
+ disabled: action.disabled,
241
+ children: action.iconName && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_seeds_react_icon2.default, { "aria-hidden": true, name: action.iconName })
242
+ },
243
+ i
244
+ )),
245
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
246
+ import_seeds_react_button2.default,
247
+ {
248
+ appearance: "pill",
249
+ "aria-label": ctx.closeButtonLabel,
250
+ onClick: ctx.onClose,
251
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_seeds_react_icon2.default, { "aria-hidden": true, name: "x-outline" })
252
+ }
253
+ )
254
+ ] })
255
+ ]
256
+ }
257
+ )
258
+ }
259
+ );
260
+ PanelMobileActionsHeader.displayName = "PanelMobileActionsHeader";
261
+
262
+ // src/Panel.tsx
263
+ var import_jsx_runtime6 = require("react/jsx-runtime");
264
+ var PanelComponent = ({
265
+ children,
266
+ closeButtonLabel,
267
+ header,
268
+ footer,
269
+ title,
270
+ titleId,
271
+ direction = "right",
272
+ width = 384,
273
+ gap = 4,
274
+ mobileBreakpoint,
275
+ zIndex,
276
+ id,
277
+ snapPoints,
278
+ defaultSnapPoint,
279
+ snapPoint,
280
+ onSnapPointChange,
281
+ snapToSequentialPoints,
282
+ actions,
283
+ actionsInHeader,
284
+ "aria-labelledby": ariaLabelledByProp,
285
+ "aria-label": ariaLabel,
286
+ ...rest
287
+ }) => {
288
+ const panelContext = usePanelContext();
289
+ const { isPanelOpen, closePanel } = panelContext;
290
+ const isMobile = (0, import_seeds_react_hooks.useIsMobile)(mobileBreakpoint);
291
+ const enrichedValue = React6.useMemo(
292
+ () => ({ ...panelContext, closeButtonLabel }),
293
+ [panelContext, closeButtonLabel]
294
+ );
295
+ const prevChildrenRef = React6.useRef(null);
296
+ if (isPanelOpen) {
297
+ prevChildrenRef.current = children;
298
+ }
299
+ const renderedChildren = isPanelOpen ? children : prevChildrenRef.current;
300
+ const effectiveAriaLabelledBy = ariaLabelledByProp ?? (header == null ? titleId : void 0);
301
+ if (isMobile) {
302
+ const shouldRenderActionsHeader = header == null && actionsInHeader === true && !!actions && actions.length > 0;
303
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(PanelContext.Provider, { value: enrichedValue, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
304
+ import_seeds_react_drawer2.default,
305
+ {
306
+ ...rest,
307
+ open: isPanelOpen,
308
+ onClose: closePanel,
309
+ direction: "bottom",
310
+ closeButtonLabel,
311
+ zIndex,
312
+ snapPoints,
313
+ defaultSnapPoint,
314
+ snapPoint,
315
+ onSnapPointChange,
316
+ snapToSequentialPoints,
317
+ actions,
318
+ actionsInHeader,
319
+ "aria-labelledby": effectiveAriaLabelledBy,
320
+ "aria-label": ariaLabel,
321
+ children: [
322
+ header ?? (shouldRenderActionsHeader ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
323
+ PanelMobileActionsHeader,
324
+ {
325
+ title,
326
+ titleId,
327
+ actions
328
+ }
329
+ ) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_seeds_react_drawer2.default.Header, { title, id: titleId })),
330
+ children,
331
+ footer
332
+ ]
333
+ }
334
+ ) });
335
+ }
336
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(PanelContext.Provider, { value: enrichedValue, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
337
+ PanelContainer,
338
+ {
339
+ ...rest,
340
+ $isOpen: isPanelOpen,
341
+ $direction: direction,
342
+ $width: width,
343
+ $gap: gap,
344
+ "data-qa-panel": id,
345
+ "data-qa-panel-isopen": isPanelOpen,
346
+ "aria-labelledby": effectiveAriaLabelledBy,
347
+ "aria-label": ariaLabel,
348
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(PanelInner, { $direction: direction, $width: width, children: [
349
+ header ?? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(PanelHeader, { title, id: titleId }),
350
+ renderedChildren,
351
+ footer
352
+ ] })
353
+ }
354
+ ) });
355
+ };
356
+ PanelComponent.Header = PanelHeader;
357
+ PanelComponent.Content = PanelContent;
358
+ PanelComponent.CloseButton = PanelCloseButton;
359
+ PanelComponent.Footer = PanelFooter;
360
+ var Panel_default = PanelComponent;
361
+
362
+ // src/PanelProvider.tsx
363
+ var React7 = __toESM(require("react"));
364
+ var import_jsx_runtime7 = require("react/jsx-runtime");
365
+ var PanelProvider = ({
366
+ children,
367
+ defaultOpen = false,
368
+ open: controlledOpen,
369
+ onOpenChange
370
+ }) => {
371
+ const [internalOpen, setInternalOpen] = React7.useState(defaultOpen);
372
+ const isControlled = controlledOpen !== void 0;
373
+ const isPanelOpen = isControlled ? controlledOpen : internalOpen;
374
+ const setOpen = React7.useCallback(
375
+ (next) => {
376
+ if (!isControlled) setInternalOpen(next);
377
+ onOpenChange?.(next);
378
+ },
379
+ [isControlled, onOpenChange]
380
+ );
381
+ const openPanel = React7.useCallback(() => setOpen(true), [setOpen]);
382
+ const closePanel = React7.useCallback(() => setOpen(false), [setOpen]);
383
+ const togglePanel = React7.useCallback(
384
+ () => setOpen(!isPanelOpen),
385
+ [setOpen, isPanelOpen]
386
+ );
387
+ const value = React7.useMemo(
388
+ () => ({ isPanelOpen, openPanel, closePanel, togglePanel }),
389
+ [isPanelOpen, openPanel, closePanel, togglePanel]
390
+ );
391
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PanelContext.Provider, { value, children });
392
+ };
393
+
394
+ // src/PanelTypes.ts
395
+ var React8 = require("react");
396
+
397
+ // src/index.ts
398
+ var index_default = Panel_default;
399
+ // Annotate the CommonJS export names for ESM import in node:
400
+ 0 && (module.exports = {
401
+ Panel,
402
+ PanelCloseButton,
403
+ PanelContent,
404
+ PanelContext,
405
+ PanelFooter,
406
+ PanelHeader,
407
+ PanelProvider,
408
+ usePanelContext
409
+ });
410
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/Panel.tsx","../src/PanelContext.tsx","../src/PanelHeader.tsx","../src/PanelCloseButton.tsx","../src/PanelContent.tsx","../src/styles.ts","../src/PanelFooter.tsx","../src/PanelMobileActionsHeader.tsx","../src/PanelProvider.tsx","../src/PanelTypes.ts"],"sourcesContent":["import Panel from \"./Panel\";\n\nexport default Panel;\nexport { Panel };\nexport { PanelContext, usePanelContext } from \"./PanelContext\";\nexport { PanelProvider } from \"./PanelProvider\";\nexport { PanelHeader } from \"./PanelHeader\";\nexport { PanelContent } from \"./PanelContent\";\nexport { PanelCloseButton } from \"./PanelCloseButton\";\nexport { PanelFooter } from \"./PanelFooter\";\nexport * from \"./PanelTypes\";\n","import * as React from \"react\";\nimport Drawer from \"@sproutsocial/seeds-react-drawer\";\nimport { useIsMobile } from \"@sproutsocial/seeds-react-hooks\";\nimport { usePanelContext, PanelContext } from \"./PanelContext\";\nimport { PanelHeader } from \"./PanelHeader\";\nimport { PanelContent } from \"./PanelContent\";\nimport { PanelCloseButton } from \"./PanelCloseButton\";\nimport { PanelFooter } from \"./PanelFooter\";\nimport { PanelMobileActionsHeader } from \"./PanelMobileActionsHeader\";\nimport { PanelContainer, PanelInner } from \"./styles\";\nimport type { TypePanelProps, TypePanelContext } from \"./PanelTypes\";\n\nconst PanelComponent = ({\n children,\n closeButtonLabel,\n header,\n footer,\n title,\n titleId,\n direction = \"right\",\n width = 384,\n gap = 4,\n mobileBreakpoint,\n zIndex,\n id,\n snapPoints,\n defaultSnapPoint,\n snapPoint,\n onSnapPointChange,\n snapToSequentialPoints,\n actions,\n actionsInHeader,\n \"aria-labelledby\": ariaLabelledByProp,\n \"aria-label\": ariaLabel,\n ...rest\n}: TypePanelProps) => {\n const panelContext = usePanelContext();\n const { isPanelOpen, closePanel } = panelContext;\n const isMobile = useIsMobile(mobileBreakpoint);\n\n // Expose closeButtonLabel through context so PanelCloseButton can read it\n // without prop drilling — same pattern as DrawerContext.\n const enrichedValue = React.useMemo<TypePanelContext>(\n () => ({ ...panelContext, closeButtonLabel }),\n [panelContext, closeButtonLabel]\n );\n\n // Freeze the last-rendered children during the collapse so consumers that\n // conditionally render content don't produce an empty panel shell while the\n // flex-basis animation runs.\n const prevChildrenRef = React.useRef<React.ReactNode>(null);\n if (isPanelOpen) {\n prevChildrenRef.current = children;\n }\n const renderedChildren = isPanelOpen ? children : prevChildrenRef.current;\n\n // When the consumer relies on the default header, its title element renders\n // with `id={titleId}`. Auto-wire `aria-labelledby` so the dialog/aside has an\n // accessible name without forcing every caller to repeat the id.\n const effectiveAriaLabelledBy =\n ariaLabelledByProp ?? (header == null ? titleId : undefined);\n\n if (isMobile) {\n // With `actionsInHeader`, Drawer suppresses the floating rail and expects\n // the consumer to render the actions inside a custom header. Auto-compose\n // one (title + action pills + close pill) when the consumer hasn't\n // supplied their own header; otherwise we'd drop `actions` on the floor.\n const shouldRenderActionsHeader =\n header == null &&\n actionsInHeader === true &&\n !!actions &&\n actions.length > 0;\n\n return (\n <PanelContext.Provider value={enrichedValue}>\n <Drawer\n {...rest}\n open={isPanelOpen}\n onClose={closePanel}\n direction=\"bottom\"\n closeButtonLabel={closeButtonLabel}\n zIndex={zIndex}\n snapPoints={snapPoints}\n defaultSnapPoint={defaultSnapPoint}\n snapPoint={snapPoint}\n onSnapPointChange={onSnapPointChange}\n snapToSequentialPoints={snapToSequentialPoints}\n actions={actions}\n actionsInHeader={actionsInHeader}\n aria-labelledby={effectiveAriaLabelledBy}\n aria-label={ariaLabel}\n >\n {header ??\n (shouldRenderActionsHeader ? (\n <PanelMobileActionsHeader\n title={title}\n titleId={titleId}\n actions={actions!}\n />\n ) : (\n <Drawer.Header title={title} id={titleId} />\n ))}\n {children}\n {footer}\n </Drawer>\n </PanelContext.Provider>\n );\n }\n\n return (\n <PanelContext.Provider value={enrichedValue}>\n <PanelContainer\n {...rest}\n $isOpen={isPanelOpen}\n $direction={direction}\n $width={width}\n $gap={gap}\n data-qa-panel={id}\n data-qa-panel-isopen={isPanelOpen}\n aria-labelledby={effectiveAriaLabelledBy}\n aria-label={ariaLabel}\n >\n <PanelInner $direction={direction} $width={width}>\n {header ?? <PanelHeader title={title} id={titleId} />}\n {renderedChildren}\n {footer}\n </PanelInner>\n </PanelContainer>\n </PanelContext.Provider>\n );\n};\n\nPanelComponent.Header = PanelHeader;\nPanelComponent.Content = PanelContent;\nPanelComponent.CloseButton = PanelCloseButton;\nPanelComponent.Footer = PanelFooter;\n\nexport const Panel = PanelComponent;\nexport default PanelComponent;\n","import * as React from \"react\";\nimport type { TypePanelContext } from \"./PanelTypes\";\n\nexport const PanelContext = React.createContext<TypePanelContext | null>(null);\n\nexport const usePanelContext = (): TypePanelContext => {\n const ctx = React.useContext(PanelContext);\n if (!ctx) {\n throw new Error(\n \"usePanelContext must be used within a <PanelProvider>. Wrap the consuming tree in <PanelProvider> to provide isPanelOpen / togglePanel.\"\n );\n }\n return ctx;\n};\n","import Box from \"@sproutsocial/seeds-react-box\";\nimport Text from \"@sproutsocial/seeds-react-text\";\nimport { usePanelContext } from \"./PanelContext\";\nimport { PanelCloseButton } from \"./PanelCloseButton\";\nimport type { TypePanelHeaderProps } from \"./PanelTypes\";\n\nexport const PanelHeader = ({\n title = \"\",\n id = undefined,\n children,\n render,\n ...rest\n}: TypePanelHeaderProps) => {\n const panelContext = usePanelContext();\n\n if (render) {\n return render(panelContext);\n }\n\n return (\n <Box\n display=\"flex\"\n flex=\"0 0 auto\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n p={400}\n borderBottom=\"1px solid\"\n borderColor=\"container.border.base\"\n {...rest}\n >\n {children || (\n <>\n <Text.Headline id={id}>{title}</Text.Headline>\n <PanelCloseButton />\n </>\n )}\n </Box>\n );\n};\n\nPanelHeader.displayName = \"Panel.Header\";\n","import * as React from \"react\";\nimport Button from \"@sproutsocial/seeds-react-button\";\nimport Icon from \"@sproutsocial/seeds-react-icon\";\nimport { usePanelContext } from \"./PanelContext\";\nimport type { TypePanelCloseButtonProps } from \"./PanelTypes\";\n\nexport const PanelCloseButton = (props: TypePanelCloseButtonProps) => {\n const panelContext = usePanelContext();\n\n if (props.render) {\n return props.render(panelContext) ?? null;\n }\n\n return (\n <Button\n appearance=\"pill\"\n aria-label={panelContext.closeButtonLabel}\n onClick={panelContext.closePanel}\n {...props}\n >\n {props.children || <Icon aria-hidden name=\"x-outline\" />}\n </Button>\n );\n};\n\nPanelCloseButton.displayName = \"Panel.CloseButton\";\n","import * as React from \"react\";\nimport { Content } from \"./styles\";\nimport type { TypePanelContentProps } from \"./PanelTypes\";\n\nexport const PanelContent = ({ children, ...rest }: TypePanelContentProps) => (\n <Content\n flex=\"1 1 auto\"\n minHeight=\"0\"\n p={450}\n color=\"text.body\"\n data-panel-content=\"\"\n {...rest}\n >\n {children}\n </Content>\n);\n\nPanelContent.displayName = \"Panel.Content\";\n","import styled, { css } from \"styled-components\";\nimport { COMMON } from \"@sproutsocial/seeds-react-system-props\";\nimport type { TypeSystemCommonProps } from \"@sproutsocial/seeds-react-system-props\";\nimport { MOTION_DURATION_MEDIUM } from \"@sproutsocial/seeds-motion/unitless\";\nimport Box from \"@sproutsocial/seeds-react-box\";\nimport type { PanelDirection } from \"./PanelTypes\";\n\ninterface PanelContainerProps extends TypeSystemCommonProps {\n $isOpen: boolean;\n $direction: PanelDirection;\n $width: number;\n $gap: number;\n}\n\nconst gapSide = (direction: PanelDirection): \"left\" | \"right\" | \"top\" => {\n if (direction === \"right\") return \"left\";\n if (direction === \"left\") return \"right\";\n return \"top\";\n};\n\nexport const PanelContainer = styled.aside<PanelContainerProps>`\n background: ${(props) => props.theme.colors.container.background.base};\n flex-grow: 0;\n flex-shrink: 0;\n overflow: hidden;\n transition: flex-basis ${MOTION_DURATION_MEDIUM}s ease-in-out,\n margin ${MOTION_DURATION_MEDIUM}s ease-in-out;\n flex-basis: ${(props) => (props.$isOpen ? `${props.$width}px` : \"0px\")};\n margin-${(props) => gapSide(props.$direction)}: ${(props) =>\n props.$isOpen && props.$gap ? `${props.$gap}px` : \"0px\"};\n border-radius: ${({ theme }) => theme.radii[800]};\n\n ${(props) =>\n props.$direction === \"bottom\"\n ? css`\n width: 100%;\n `\n : css`\n height: 100%;\n `}\n\n ${COMMON}\n`;\n\nexport const PanelInner = styled.div<{\n $direction: PanelDirection;\n $width: number;\n}>`\n ${(props) =>\n props.$direction === \"bottom\"\n ? css`\n min-height: ${props.$width}px;\n width: 100%;\n `\n : css`\n min-width: ${props.$width}px;\n height: 100%;\n `}\n display: flex;\n flex-direction: column;\n overflow: hidden;\n`;\n\nexport const Content = styled(Box)`\n overflow-y: auto;\n`;\n\nexport const Footer = styled(Box)`\n flex: 0 0 auto;\n overflow: hidden;\n`;\n","import * as React from \"react\";\nimport { Footer } from \"./styles\";\nimport type { TypePanelFooterProps } from \"./PanelTypes\";\n\nexport const PanelFooter = ({ children, ...rest }: TypePanelFooterProps) => (\n <Footer p={450} data-panel-footer=\"\" {...rest}>\n {children}\n </Footer>\n);\n\nPanelFooter.displayName = \"Panel.Footer\";\n","import * as React from \"react\";\nimport Box from \"@sproutsocial/seeds-react-box\";\nimport Button from \"@sproutsocial/seeds-react-button\";\nimport Drawer from \"@sproutsocial/seeds-react-drawer\";\nimport Icon from \"@sproutsocial/seeds-react-icon\";\n// eslint-disable-next-line import/no-deprecated\nimport Text from \"@sproutsocial/seeds-react-text\";\nimport type { TypeDrawerActionProps } from \"@sproutsocial/seeds-react-drawer\";\n\ninterface TypePanelMobileActionsHeaderProps {\n title?: string;\n titleId?: string;\n actions: TypeDrawerActionProps[];\n}\n\n/**\n * Mobile bottom-sheet header used by Panel when `actionsInHeader` is set and\n * no custom `header` is provided. Renders the title on the left and the\n * forwarded actions plus a close button as pills on the right — mirrors the\n * pattern in `seeds-react-peek-in/PeekIn.tsx`. The Drawer's floating rail is\n * suppressed in this combination (`actionsInHeader` opts out), so without this\n * header the actions would render nowhere.\n */\nexport const PanelMobileActionsHeader = ({\n title,\n titleId,\n actions,\n}: TypePanelMobileActionsHeaderProps) => (\n <Drawer.Header\n render={(ctx) => (\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n pt={400}\n px={450}\n flex=\"0 0 auto\"\n >\n <Text\n as=\"h2\"\n fontSize={400}\n fontWeight=\"semibold\"\n color=\"text.headline\"\n id={titleId}\n >\n {title}\n </Text>\n <Box display=\"flex\" alignItems=\"center\" gap={200}>\n {actions.map((action, i) => (\n <Button\n key={i}\n appearance=\"pill\"\n aria-label={action[\"aria-label\"]}\n onClick={action.onClick}\n disabled={action.disabled}\n >\n {action.iconName && <Icon aria-hidden name={action.iconName} />}\n </Button>\n ))}\n <Button\n appearance=\"pill\"\n aria-label={ctx.closeButtonLabel}\n onClick={ctx.onClose}\n >\n <Icon aria-hidden name=\"x-outline\" />\n </Button>\n </Box>\n </Box>\n )}\n />\n);\n\nPanelMobileActionsHeader.displayName = \"PanelMobileActionsHeader\";\n","import * as React from \"react\";\nimport { PanelContext } from \"./PanelContext\";\nimport type { TypePanelContext, TypePanelProviderProps } from \"./PanelTypes\";\n\nexport const PanelProvider = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n}: TypePanelProviderProps) => {\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const isPanelOpen = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const openPanel = React.useCallback(() => setOpen(true), [setOpen]);\n const closePanel = React.useCallback(() => setOpen(false), [setOpen]);\n const togglePanel = React.useCallback(\n () => setOpen(!isPanelOpen),\n [setOpen, isPanelOpen]\n );\n\n const value = React.useMemo<TypePanelContext>(\n () => ({ isPanelOpen, openPanel, closePanel, togglePanel }),\n [isPanelOpen, openPanel, closePanel, togglePanel]\n );\n\n return (\n <PanelContext.Provider value={value}>{children}</PanelContext.Provider>\n );\n};\n","import * as React from \"react\";\nimport type {\n TypeSystemCommonProps,\n TypeStyledComponentsCommonProps,\n} from \"@sproutsocial/seeds-react-system-props\";\nimport type { TypeBoxProps } from \"@sproutsocial/seeds-react-box\";\nimport type { TypeButtonProps } from \"@sproutsocial/seeds-react-button\";\nimport type {\n TypeDrawerSnapPoint,\n TypeDrawerActionProps,\n} from \"@sproutsocial/seeds-react-drawer\";\n\nexport type { TypeDrawerActionProps as TypePanelActionProps };\n\nexport type PanelDirection = \"left\" | \"right\" | \"bottom\";\n\nexport interface TypePanelContext {\n isPanelOpen: boolean;\n togglePanel: () => void;\n openPanel: () => void;\n closePanel: () => void;\n closeButtonLabel?: string;\n}\n\nexport interface TypePanelProviderProps {\n children: React.ReactNode;\n /** Initial open state for uncontrolled usage. */\n defaultOpen?: boolean;\n /** Controlled open state. When provided, the provider becomes controlled. */\n open?: boolean;\n /** Called whenever the open state changes. Required for controlled usage. */\n onOpenChange?: (open: boolean) => void;\n}\n\nexport interface TypePanelProps\n extends TypeStyledComponentsCommonProps,\n TypeSystemCommonProps,\n Omit<React.ComponentPropsWithoutRef<\"div\">, \"color\"> {\n children: React.ReactNode;\n\n /** Label for the close button. Usually \"Close\". */\n closeButtonLabel: string;\n\n /**\n * Custom header content. When provided, replaces the auto-rendered default\n * header entirely — `title` and `titleId` are ignored.\n */\n header?: React.ReactNode;\n\n /** Custom footer content. Not rendered when omitted. */\n footer?: React.ReactNode;\n\n /** Title shown in the auto-rendered default header. Ignored when `header` is provided. */\n title?: string;\n\n /**\n * Sets the `id` on the title element of the auto-rendered header. When the\n * default header is used, Panel automatically wires `aria-labelledby` to this\n * id so the dialog/aside has an accessible name. Pass an explicit\n * `aria-labelledby` to override (e.g. when pointing at a different element).\n * Ignored when `header` is provided — supply your own `aria-labelledby` in\n * that case.\n */\n titleId?: string;\n\n /** Side the panel anchors to on desktop. Defaults to \"right\". */\n direction?: PanelDirection;\n\n /**\n * Width (px) when direction is \"left\" or \"right\", or height (px) when\n * direction is \"bottom\". Defaults to 384 to match the existing web-app-core\n * Panel.\n */\n width?: number;\n\n /**\n * Visual gap (px) between the panel and the adjacent content. Applied as\n * margin on the side facing the content (left when direction=\"right\",\n * right when direction=\"left\", top when direction=\"bottom\"). Animates with\n * the panel's open/close transition and collapses to 0 when closed so the\n * gap does not remain visible alongside a zero-width panel. Defaults to 0.\n */\n gap?: number;\n\n /**\n * Forwarded to `useIsMobile`. Accepts a px number or any CSS media-query\n * length. Below this width, the panel renders as an overlay bottom sheet\n * (via seeds-react-drawer). Defaults to the theme's `breakpoints.sm`.\n */\n mobileBreakpoint?: number | string;\n\n /** Applies only to the mobile bottom-sheet rendering. */\n zIndex?: number;\n\n /** Optional id used for data-qa-panel attributes. */\n id?: string;\n\n /**\n * Snap points the panel can rest at when rendered as a mobile bottom sheet.\n * Numbers 0–1 are viewport-height fractions; numbers > 1 are pixels; strings\n * accept `px`/`rem` (e.g. `\"480px\"`, `\"30rem\"`). Order matters — the last\n * entry is the \"expanded\" state. Ignored on the desktop side-panel rendering.\n */\n snapPoints?: TypeDrawerSnapPoint[];\n\n /** Initial snap point for uncontrolled use. Mobile only. */\n defaultSnapPoint?: TypeDrawerSnapPoint | null;\n\n /** Controlled active snap point. Pair with `onSnapPointChange`. Mobile only. */\n snapPoint?: TypeDrawerSnapPoint | null;\n\n /** Fires when the active snap point changes. Mobile only. */\n onSnapPointChange?: (snapPoint: TypeDrawerSnapPoint | null) => void;\n\n /**\n * When true, fast swipes can't skip past adjacent snap points. Mobile only.\n */\n snapToSequentialPoints?: boolean;\n\n /**\n * Action buttons shown in a floating rail above the panel on mobile (the\n * bottom-sheet rendering). Ignored on desktop side-panel rendering — pass\n * actions through `header`/`footer` slots there. The rail owns the close\n * button so the default header omits its built-in close affordance.\n */\n actions?: TypeDrawerActionProps[];\n\n /**\n * Opt out of the floating mobile rail and render the `actions` inline in the\n * header as pill buttons instead. Useful for nested bottom sheets and\n * snap-point layouts where the floating rail would collide with surrounding\n * UI. Defaults to `false`.\n *\n * When `header` is omitted, Panel auto-composes a mobile header that renders\n * the title, the `actions` as pills, and a close-button pill. When `header`\n * is provided, the consumer is responsible for rendering the actions inside\n * their own header — `actions` is forwarded for context only.\n */\n actionsInHeader?: boolean;\n}\n\nexport interface TypePanelHeaderProps extends TypeBoxProps {\n title?: string;\n /**\n * When children are provided, `<Panel.CloseButton />` is NOT rendered\n * automatically. Include it yourself to preserve keyboard accessibility.\n */\n children?: React.ReactNode;\n /** Render-prop override that receives the parent panel context. */\n render?: React.FC<TypePanelContext>;\n}\n\nexport interface TypePanelContentProps extends TypeBoxProps {\n children?: React.ReactNode;\n}\n\nexport interface TypePanelFooterProps extends TypeBoxProps {\n children?: React.ReactNode;\n}\n\nexport interface TypePanelCloseButtonProps\n extends Omit<TypeButtonProps, \"children\"> {\n /** Render-prop override that receives the parent panel context. */\n render?: React.FC<TypePanelContext>;\n children?: React.ReactNode;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,SAAuB;AACvB,IAAAC,6BAAmB;AACnB,+BAA4B;;;ACF5B,YAAuB;AAGhB,IAAM,eAAqB,oBAAuC,IAAI;AAEtE,IAAM,kBAAkB,MAAwB;AACrD,QAAM,MAAY,iBAAW,YAAY;AACzC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;ACbA,6BAAgB;AAChB,8BAAiB;;;ACDjB,IAAAC,SAAuB;AACvB,gCAAmB;AACnB,8BAAiB;AAkBQ;AAdlB,IAAM,mBAAmB,CAAC,UAAqC;AACpE,QAAM,eAAe,gBAAgB;AAErC,MAAI,MAAM,QAAQ;AAChB,WAAO,MAAM,OAAO,YAAY,KAAK;AAAA,EACvC;AAEA,SACE;AAAA,IAAC,0BAAAC;AAAA,IAAA;AAAA,MACC,YAAW;AAAA,MACX,cAAY,aAAa;AAAA,MACzB,SAAS,aAAa;AAAA,MACrB,GAAG;AAAA,MAEH,gBAAM,YAAY,4CAAC,wBAAAC,SAAA,EAAK,eAAW,MAAC,MAAK,aAAY;AAAA;AAAA,EACxD;AAEJ;AAEA,iBAAiB,cAAc;;;ADMvB,IAAAC,sBAAA;AAzBD,IAAM,cAAc,CAAC;AAAA,EAC1B,QAAQ;AAAA,EACR,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA4B;AAC1B,QAAM,eAAe,gBAAgB;AAErC,MAAI,QAAQ;AACV,WAAO,OAAO,YAAY;AAAA,EAC5B;AAEA,SACE;AAAA,IAAC,uBAAAC;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,gBAAe;AAAA,MACf,YAAW;AAAA,MACX,GAAG;AAAA,MACH,cAAa;AAAA,MACb,aAAY;AAAA,MACX,GAAG;AAAA,MAEH,sBACC,8EACE;AAAA,qDAAC,wBAAAC,QAAK,UAAL,EAAc,IAAS,iBAAM;AAAA,QAC9B,6CAAC,oBAAiB;AAAA,SACpB;AAAA;AAAA,EAEJ;AAEJ;AAEA,YAAY,cAAc;;;AExC1B,IAAAC,SAAuB;;;ACAvB,+BAA4B;AAC5B,sCAAuB;AAEvB,sBAAuC;AACvC,IAAAC,0BAAgB;AAUhB,IAAM,UAAU,CAAC,cAAwD;AACvE,MAAI,cAAc,QAAS,QAAO;AAClC,MAAI,cAAc,OAAQ,QAAO;AACjC,SAAO;AACT;AAEO,IAAM,iBAAiB,yBAAAC,QAAO;AAAA,gBACrB,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU,WAAW,IAAI;AAAA;AAAA;AAAA;AAAA,2BAI5C,sCAAsB;AAAA,aACpC,sCAAsB;AAAA,gBACnB,CAAC,UAAW,MAAM,UAAU,GAAG,MAAM,MAAM,OAAO,KAAM;AAAA,WAC7D,CAAC,UAAU,QAAQ,MAAM,UAAU,CAAC,KAAK,CAAC,UACnD,MAAM,WAAW,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,KAAK;AAAA,mBACtC,CAAC,EAAE,MAAM,MAAM,MAAM,MAAM,GAAG,CAAC;AAAA;AAAA,IAE9C,CAAC,UACD,MAAM,eAAe,WACjB;AAAA;AAAA,YAGA;AAAA;AAAA,SAEC;AAAA;AAAA,IAEL,sCAAM;AAAA;AAGH,IAAM,aAAa,yBAAAA,QAAO;AAAA,IAI7B,CAAC,UACD,MAAM,eAAe,WACjB;AAAA,wBACgB,MAAM,MAAM;AAAA;AAAA,YAG5B;AAAA,uBACe,MAAM,MAAM;AAAA;AAAA,SAE1B;AAAA;AAAA;AAAA;AAAA;AAMF,IAAM,cAAU,yBAAAA,SAAO,wBAAAC,OAAG;AAAA;AAAA;AAI1B,IAAM,aAAS,yBAAAD,SAAO,wBAAAC,OAAG;AAAA;AAAA;AAAA;;;AD9D9B,IAAAC,sBAAA;AADK,IAAM,eAAe,CAAC,EAAE,UAAU,GAAG,KAAK,MAC/C;AAAA,EAAC;AAAA;AAAA,IACC,MAAK;AAAA,IACL,WAAU;AAAA,IACV,GAAG;AAAA,IACH,OAAM;AAAA,IACN,sBAAmB;AAAA,IAClB,GAAG;AAAA,IAEH;AAAA;AACH;AAGF,aAAa,cAAc;;;AEjB3B,IAAAC,SAAuB;AAKrB,IAAAC,sBAAA;AADK,IAAM,cAAc,CAAC,EAAE,UAAU,GAAG,KAAK,MAC9C,6CAAC,UAAO,GAAG,KAAK,qBAAkB,IAAI,GAAG,MACtC,UACH;AAGF,YAAY,cAAc;;;ACV1B,IAAAC,SAAuB;AACvB,IAAAC,0BAAgB;AAChB,IAAAC,6BAAmB;AACnB,gCAAmB;AACnB,IAAAC,2BAAiB;AAEjB,IAAAC,2BAAiB;AAgCT,IAAAC,sBAAA;AAfD,IAAM,2BAA2B,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,MACE;AAAA,EAAC,0BAAAC,QAAO;AAAA,EAAP;AAAA,IACC,QAAQ,CAAC,QACP;AAAA,MAAC,wBAAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,YAAW;AAAA,QACX,gBAAe;AAAA,QACf,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAK;AAAA,QAEL;AAAA;AAAA,YAAC,yBAAAC;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH,UAAU;AAAA,cACV,YAAW;AAAA,cACX,OAAM;AAAA,cACN,IAAI;AAAA,cAEH;AAAA;AAAA,UACH;AAAA,UACA,8CAAC,wBAAAD,SAAA,EAAI,SAAQ,QAAO,YAAW,UAAS,KAAK,KAC1C;AAAA,oBAAQ,IAAI,CAAC,QAAQ,MACpB;AAAA,cAAC,2BAAAE;AAAA,cAAA;AAAA,gBAEC,YAAW;AAAA,gBACX,cAAY,OAAO,YAAY;AAAA,gBAC/B,SAAS,OAAO;AAAA,gBAChB,UAAU,OAAO;AAAA,gBAEhB,iBAAO,YAAY,6CAAC,yBAAAC,SAAA,EAAK,eAAW,MAAC,MAAM,OAAO,UAAU;AAAA;AAAA,cANxD;AAAA,YAOP,CACD;AAAA,YACD;AAAA,cAAC,2BAAAD;AAAA,cAAA;AAAA,gBACC,YAAW;AAAA,gBACX,cAAY,IAAI;AAAA,gBAChB,SAAS,IAAI;AAAA,gBAEb,uDAAC,yBAAAC,SAAA,EAAK,eAAW,MAAC,MAAK,aAAY;AAAA;AAAA,YACrC;AAAA,aACF;AAAA;AAAA;AAAA,IACF;AAAA;AAEJ;AAGF,yBAAyB,cAAc;;;APG/B,IAAAC,sBAAA;AA/DR,IAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,GAAG;AACL,MAAsB;AACpB,QAAM,eAAe,gBAAgB;AACrC,QAAM,EAAE,aAAa,WAAW,IAAI;AACpC,QAAM,eAAW,sCAAY,gBAAgB;AAI7C,QAAM,gBAAsB;AAAA,IAC1B,OAAO,EAAE,GAAG,cAAc,iBAAiB;AAAA,IAC3C,CAAC,cAAc,gBAAgB;AAAA,EACjC;AAKA,QAAM,kBAAwB,cAAwB,IAAI;AAC1D,MAAI,aAAa;AACf,oBAAgB,UAAU;AAAA,EAC5B;AACA,QAAM,mBAAmB,cAAc,WAAW,gBAAgB;AAKlE,QAAM,0BACJ,uBAAuB,UAAU,OAAO,UAAU;AAEpD,MAAI,UAAU;AAKZ,UAAM,4BACJ,UAAU,QACV,oBAAoB,QACpB,CAAC,CAAC,WACF,QAAQ,SAAS;AAEnB,WACE,6CAAC,aAAa,UAAb,EAAsB,OAAO,eAC5B;AAAA,MAAC,2BAAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,WAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,mBAAiB;AAAA,QACjB,cAAY;AAAA,QAEX;AAAA,qBACE,4BACC;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA;AAAA,UACF,IAEA,6CAAC,2BAAAA,QAAO,QAAP,EAAc,OAAc,IAAI,SAAS;AAAA,UAE7C;AAAA,UACA;AAAA;AAAA;AAAA,IACH,GACF;AAAA,EAEJ;AAEA,SACE,6CAAC,aAAa,UAAb,EAAsB,OAAO,eAC5B;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,iBAAe;AAAA,MACf,wBAAsB;AAAA,MACtB,mBAAiB;AAAA,MACjB,cAAY;AAAA,MAEZ,wDAAC,cAAW,YAAY,WAAW,QAAQ,OACxC;AAAA,kBAAU,6CAAC,eAAY,OAAc,IAAI,SAAS;AAAA,QAClD;AAAA,QACA;AAAA,SACH;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,eAAe,SAAS;AACxB,eAAe,UAAU;AACzB,eAAe,cAAc;AAC7B,eAAe,SAAS;AAGxB,IAAO,gBAAQ;;;AQ1If,IAAAC,SAAuB;AAmCnB,IAAAC,sBAAA;AA/BG,IAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA,cAAc;AAAA,EACd,MAAM;AAAA,EACN;AACF,MAA8B;AAC5B,QAAM,CAAC,cAAc,eAAe,IAAU,gBAAS,WAAW;AAClE,QAAM,eAAe,mBAAmB;AACxC,QAAM,cAAc,eAAe,iBAAiB;AAEpD,QAAM,UAAgB;AAAA,IACpB,CAAC,SAAkB;AACjB,UAAI,CAAC,aAAc,iBAAgB,IAAI;AACvC,qBAAe,IAAI;AAAA,IACrB;AAAA,IACA,CAAC,cAAc,YAAY;AAAA,EAC7B;AAEA,QAAM,YAAkB,mBAAY,MAAM,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC;AAClE,QAAM,aAAmB,mBAAY,MAAM,QAAQ,KAAK,GAAG,CAAC,OAAO,CAAC;AACpE,QAAM,cAAoB;AAAA,IACxB,MAAM,QAAQ,CAAC,WAAW;AAAA,IAC1B,CAAC,SAAS,WAAW;AAAA,EACvB;AAEA,QAAM,QAAc;AAAA,IAClB,OAAO,EAAE,aAAa,WAAW,YAAY,YAAY;AAAA,IACzD,CAAC,aAAa,WAAW,YAAY,WAAW;AAAA,EAClD;AAEA,SACE,6CAAC,aAAa,UAAb,EAAsB,OAAe,UAAS;AAEnD;;;ACrCA,IAAAC,SAAuB;;;AVEvB,IAAO,gBAAQ;","names":["React","import_seeds_react_drawer","React","Button","Icon","import_jsx_runtime","Box","Text","React","import_seeds_react_box","styled","Box","import_jsx_runtime","React","import_jsx_runtime","React","import_seeds_react_box","import_seeds_react_button","import_seeds_react_icon","import_seeds_react_text","import_jsx_runtime","Drawer","Box","Text","Button","Icon","import_jsx_runtime","Drawer","React","import_jsx_runtime","React"]}
package/jest.config.js ADDED
@@ -0,0 +1,9 @@
1
+ const baseConfig = require("@sproutsocial/seeds-testing");
2
+
3
+ /** * @type {import('jest').Config} */
4
+ const config = {
5
+ ...baseConfig,
6
+ displayName: "seeds-react-panel",
7
+ };
8
+
9
+ module.exports = config;
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@sproutsocial/seeds-react-panel",
3
+ "version": "0.3.7",
4
+ "description": "Seeds React Panel",
5
+ "author": "Sprout Social, Inc.",
6
+ "license": "MIT",
7
+ "main": "dist/index.js",
8
+ "module": "dist/esm/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "scripts": {
11
+ "build": "tsup --dts",
12
+ "build:debug": "tsup --dts --metafile",
13
+ "dev": "tsup --watch --dts",
14
+ "clean": "rm -rf .turbo dist",
15
+ "clean:modules": "rm -rf node_modules",
16
+ "typecheck": "tsc --noEmit",
17
+ "test": "jest",
18
+ "test:watch": "jest --watch --coverage=false"
19
+ },
20
+ "dependencies": {
21
+ "@sproutsocial/seeds-react-theme": "^4.1.0",
22
+ "@sproutsocial/seeds-react-system-props": "^3.1.1",
23
+ "@sproutsocial/seeds-react-box": "^1.1.21",
24
+ "@sproutsocial/seeds-react-button": "^2.2.1",
25
+ "@sproutsocial/seeds-react-icon": "^2.4.0",
26
+ "@sproutsocial/seeds-react-text": "^1.4.3",
27
+ "@sproutsocial/seeds-motion": "^1.8.2",
28
+ "@sproutsocial/seeds-react-drawer": "*",
29
+ "@sproutsocial/seeds-react-hooks": "*"
30
+ },
31
+ "devDependencies": {
32
+ "@types/react": "^18.0.0",
33
+ "@types/styled-components": "^5.1.26",
34
+ "@sproutsocial/eslint-config-seeds": "*",
35
+ "react": "^18.0.0",
36
+ "styled-components": "^5.2.3",
37
+ "tsup": "^8.3.4",
38
+ "typescript": "^5.6.2",
39
+ "@sproutsocial/seeds-tsconfig": "*",
40
+ "@sproutsocial/seeds-testing": "*",
41
+ "@sproutsocial/seeds-react-testing-library": "*"
42
+ },
43
+ "peerDependencies": {
44
+ "styled-components": "^5.2.3"
45
+ },
46
+ "engines": {
47
+ "node": ">=18"
48
+ }
49
+ }