@canonical/react-components 2.7.8 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/components/SidePanel/SidePanel.d.ts +55 -0
  2. package/dist/components/SidePanel/SidePanel.js +97 -0
  3. package/dist/components/SidePanel/SidePanel.scss +45 -0
  4. package/dist/components/SidePanel/SidePanel.stories.d.ts +10 -0
  5. package/dist/components/SidePanel/SidePanel.stories.js +165 -0
  6. package/dist/components/SidePanel/SidePanel.test.d.ts +1 -0
  7. package/dist/components/SidePanel/common/Content.d.ts +7 -0
  8. package/dist/components/SidePanel/common/Content.js +19 -0
  9. package/dist/components/SidePanel/common/Footer.d.ts +7 -0
  10. package/dist/components/SidePanel/common/Footer.js +22 -0
  11. package/dist/components/SidePanel/common/Header.d.ts +7 -0
  12. package/dist/components/SidePanel/common/Header.js +19 -0
  13. package/dist/components/SidePanel/common/HeaderControls.d.ts +7 -0
  14. package/dist/components/SidePanel/common/HeaderControls.js +19 -0
  15. package/dist/components/SidePanel/common/HeaderTitle.d.ts +6 -0
  16. package/dist/components/SidePanel/common/HeaderTitle.js +19 -0
  17. package/dist/components/SidePanel/common/Sticky.d.ts +8 -0
  18. package/dist/components/SidePanel/common/Sticky.js +23 -0
  19. package/dist/components/SidePanel/index.d.ts +1 -0
  20. package/dist/components/SidePanel/index.js +13 -0
  21. package/dist/components/Stepper/Step/Step.scss +1 -1
  22. package/dist/components/Stepper/Stepper.stories.js +6 -2
  23. package/dist/esm/components/SidePanel/SidePanel.d.ts +55 -0
  24. package/dist/esm/components/SidePanel/SidePanel.js +91 -0
  25. package/dist/esm/components/SidePanel/SidePanel.scss +45 -0
  26. package/dist/esm/components/SidePanel/SidePanel.stories.d.ts +10 -0
  27. package/dist/esm/components/SidePanel/SidePanel.stories.js +156 -0
  28. package/dist/esm/components/SidePanel/SidePanel.test.d.ts +1 -0
  29. package/dist/esm/components/SidePanel/common/Content.d.ts +7 -0
  30. package/dist/esm/components/SidePanel/common/Content.js +12 -0
  31. package/dist/esm/components/SidePanel/common/Footer.d.ts +7 -0
  32. package/dist/esm/components/SidePanel/common/Footer.js +15 -0
  33. package/dist/esm/components/SidePanel/common/Header.d.ts +7 -0
  34. package/dist/esm/components/SidePanel/common/Header.js +12 -0
  35. package/dist/esm/components/SidePanel/common/HeaderControls.d.ts +7 -0
  36. package/dist/esm/components/SidePanel/common/HeaderControls.js +12 -0
  37. package/dist/esm/components/SidePanel/common/HeaderTitle.d.ts +6 -0
  38. package/dist/esm/components/SidePanel/common/HeaderTitle.js +12 -0
  39. package/dist/esm/components/SidePanel/common/Sticky.d.ts +8 -0
  40. package/dist/esm/components/SidePanel/common/Sticky.js +16 -0
  41. package/dist/esm/components/SidePanel/index.d.ts +1 -0
  42. package/dist/esm/components/SidePanel/index.js +1 -0
  43. package/dist/esm/components/Stepper/Step/Step.scss +1 -1
  44. package/dist/esm/components/Stepper/Stepper.stories.js +6 -2
  45. package/dist/esm/index.d.ts +2 -0
  46. package/dist/esm/index.js +1 -0
  47. package/dist/index.d.ts +2 -0
  48. package/dist/index.js +8 -0
  49. package/package.json +2 -2
@@ -0,0 +1,91 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ import { createPortal } from "react-dom";
4
+ import Content from "./common/Content";
5
+ import Footer from "./common/Footer";
6
+ import Header from "./common/Header";
7
+ import HeaderControls from "./common/HeaderControls";
8
+ import HeaderTitle from "./common/HeaderTitle";
9
+ import Sticky from "./common/Sticky";
10
+ import AppAside from "../ApplicationLayout/AppAside";
11
+ import Spinner from "../Spinner";
12
+ import "./SidePanel.scss";
13
+
14
+ /**
15
+ * The props for the SidePanelComponent component.
16
+ */
17
+
18
+ /**
19
+ This is a [React](https://reactjs.org/) component for the Vanilla application layout [Side Panel](https://vanillaframework.io/docs/layouts/application#panels).
20
+
21
+ The sidepanel component should be used to show additional information relating to the main content on the page. It is using a composable structure with building blocks:
22
+
23
+ * **SidePanel.Header:** Defines the header of the side panel, which can include a title and controls.
24
+
25
+ * **SidePanel.HeaderTitle:** To show the title of the side panel as heading.
26
+
27
+ * **SidePanel.HeaderControls:** To show controls in the header, such as buttons or icons for actions like closing the panel.
28
+
29
+ * **SidePanel.Sticky:** Can be wrapped around the header or footer to make them sticky when scrolling.
30
+
31
+ * **SidePanel.Content:** To show the main content of the side panel.
32
+
33
+ * **SidePanel.Footer:** To show additional information or actions at the bottom of the side panel.
34
+
35
+ ## Example
36
+
37
+ Usage of the composable structure:
38
+
39
+ ```jsx
40
+ <SidePanel className="u-no-padding--top u-no-padding--bottom">
41
+ <SidePanel.Sticky>
42
+ <SidePanel.Header>
43
+ <SidePanel.HeaderTitle>Edit panel</SidePanel.HeaderTitle>
44
+ </SidePanel.Header>
45
+ </SidePanel.Sticky>
46
+ <SidePanel.Content className="u-no-padding">
47
+ <p>Here be dragons!</p>
48
+ </SidePanel.Content>
49
+ <SidePanel.Sticky position="bottom">
50
+ <SidePanel.Footer className="u-align--right">
51
+ <Button appearance="base">Cancel</Button>
52
+ <ActionButton appearance="positive">Save changes</ActionButton>
53
+ </SidePanel.Footer>
54
+ </SidePanel.Sticky>
55
+ </SidePanel>
56
+ ```
57
+ */
58
+ var SidePanelComponent = _ref => {
59
+ var {
60
+ children,
61
+ className,
62
+ hasError = false,
63
+ loading = false,
64
+ overlay,
65
+ pinned,
66
+ wide,
67
+ parentId = "l-application"
68
+ } = _ref;
69
+ var container = document.getElementById(parentId) || document.body;
70
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(AppAside, {
71
+ className: classnames("side-panel", className, {
72
+ "is-overlay": overlay
73
+ }),
74
+ "aria-label": "Side panel",
75
+ pinned: pinned,
76
+ narrow: !wide,
77
+ wide: wide
78
+ }, loading ? /*#__PURE__*/React.createElement("div", {
79
+ className: "loading"
80
+ }, /*#__PURE__*/React.createElement(Spinner, null)) : hasError ? /*#__PURE__*/React.createElement("div", {
81
+ className: "error"
82
+ }, "Loading failed") : children), container));
83
+ };
84
+ var SidePanel = SidePanelComponent;
85
+ SidePanel.Header = Header;
86
+ SidePanel.HeaderTitle = HeaderTitle;
87
+ SidePanel.HeaderControls = HeaderControls;
88
+ SidePanel.Sticky = Sticky;
89
+ SidePanel.Content = Content;
90
+ SidePanel.Footer = Footer;
91
+ export default SidePanel;
@@ -0,0 +1,45 @@
1
+ @import "vanilla-framework";
2
+
3
+ .side-panel.is-overlay {
4
+ position: absolute;
5
+ right: 0;
6
+ z-index: 103 !important;
7
+ }
8
+
9
+ .side-panel {
10
+ background-color: $colors--theme--background-default;
11
+ height: 100dvh;
12
+ padding: 0 $sph--x-large;
13
+ padding-bottom: $spv--medium;
14
+ padding-top: $spv--small;
15
+
16
+ .error,
17
+ .loading {
18
+ padding-top: $spv--medium;
19
+ }
20
+
21
+ .p-panel__header {
22
+ padding: 0;
23
+ }
24
+
25
+ .panel-footer {
26
+ .rule {
27
+ margin-bottom: $spv--medium;
28
+ }
29
+ }
30
+
31
+ .sticky-wrapper {
32
+ background: $colors--theme--background-default;
33
+ position: sticky;
34
+ top: 0;
35
+ z-index: 1;
36
+ }
37
+
38
+ .sticky-wrapper--top {
39
+ top: 0;
40
+ }
41
+
42
+ .sticky-wrapper--bottom {
43
+ bottom: 0;
44
+ }
45
+ }
@@ -0,0 +1,10 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import SidePanel from "./SidePanel";
3
+ declare const meta: Meta<typeof SidePanel>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Pinned: Story;
8
+ export declare const Loading: Story;
9
+ export declare const Error: Story;
10
+ export declare const Wide: Story;
@@ -0,0 +1,156 @@
1
+ import React, { useEffect, useId, useRef, useState } from "react";
2
+ import SidePanel from "./SidePanel";
3
+ import Button from "../Button";
4
+ import Application from "../ApplicationLayout/Application";
5
+ import AppMain from "../ApplicationLayout/AppMain";
6
+ import { ActionButton } from "../../index";
7
+ import Icon from "../Icon";
8
+ var meta = {
9
+ component: SidePanel,
10
+ tags: ["autodocs"],
11
+ decorators: [Story => {
12
+ var ref = useRef(null);
13
+ useEffect(() => {
14
+ var el = ref.current;
15
+ if (el) {
16
+ var _el$parentElement, _wrapper$parentElemen;
17
+ var wrapper = el === null || el === void 0 || (_el$parentElement = el.parentElement) === null || _el$parentElement === void 0 || (_el$parentElement = _el$parentElement.parentElement) === null || _el$parentElement === void 0 ? void 0 : _el$parentElement.parentElement;
18
+ var parent = wrapper === null || wrapper === void 0 || (_wrapper$parentElemen = wrapper.parentElement) === null || _wrapper$parentElemen === void 0 || (_wrapper$parentElemen = _wrapper$parentElemen.parentElement) === null || _wrapper$parentElemen === void 0 ? void 0 : _wrapper$parentElemen.parentElement;
19
+ console.log(wrapper);
20
+ if (wrapper) {
21
+ wrapper.style.setProperty("border", "0", "important");
22
+ }
23
+ if (parent) {
24
+ parent.style.margin = "0";
25
+ parent.style.padding = "0";
26
+ }
27
+ }
28
+ }, []);
29
+ document.body.style.padding = "0";
30
+ return /*#__PURE__*/React.createElement("div", {
31
+ ref: ref
32
+ }, /*#__PURE__*/React.createElement(Story, null));
33
+ }]
34
+ };
35
+ export default meta;
36
+ var StoryExample = args => {
37
+ var [isOpen, setIsOpen] = useState(false);
38
+
39
+ // Multiple stories get rendered on the docs page, ensure the ids are not colliding
40
+ var id = useId();
41
+ var parentId = args.parentId + id;
42
+ var openPanel = () => {
43
+ setIsOpen(true);
44
+ };
45
+ var closePanel = () => {
46
+ setIsOpen(false);
47
+ };
48
+
49
+ // Delay opening the panel, so the l-application container is ready to receive it
50
+ useEffect(() => void setTimeout(openPanel, 100), []);
51
+ return /*#__PURE__*/React.createElement(Application, {
52
+ id: parentId
53
+ }, /*#__PURE__*/React.createElement(AppMain, null, /*#__PURE__*/React.createElement(Button, {
54
+ onClick: openPanel,
55
+ style: {
56
+ margin: "1rem"
57
+ }
58
+ }, "Open side panel"), /*#__PURE__*/React.createElement(Button, {
59
+ onClick: closePanel,
60
+ style: {
61
+ margin: "1rem"
62
+ }
63
+ }, "Close side panel")), isOpen && /*#__PURE__*/React.createElement(SidePanel, {
64
+ overlay: args.overlay,
65
+ loading: args.loading,
66
+ hasError: args.hasError,
67
+ parentId: parentId,
68
+ pinned: args.pinned,
69
+ wide: args.wide,
70
+ className: "u-no-padding--top u-no-padding--bottom"
71
+ }, /*#__PURE__*/React.createElement(SidePanel.Sticky, null, /*#__PURE__*/React.createElement(SidePanel.Header, null, /*#__PURE__*/React.createElement(SidePanel.HeaderTitle, null, "Edit panel"), /*#__PURE__*/React.createElement(SidePanel.HeaderControls, null, /*#__PURE__*/React.createElement(Button, {
72
+ appearance: "base",
73
+ className: "u-no-margin--bottom",
74
+ hasIcon: true,
75
+ onClick: closePanel,
76
+ "aria-label": "Close"
77
+ }, /*#__PURE__*/React.createElement(Icon, {
78
+ name: "close"
79
+ }))))), /*#__PURE__*/React.createElement(SidePanel.Content, {
80
+ className: "u-no-padding"
81
+ }, /*#__PURE__*/React.createElement("p", null, "Here be dragons!"), /*#__PURE__*/React.createElement("p", null, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras varius mi eu pretium vulputate. Nunc commodo sit amet nibh quis rhoncus. Aliquam rhoncus porttitor semper. Aenean faucibus consectetur neque in sodales. Sed cursus mauris id ex sollicitudin sodales. Quisque molestie rutrum odio, ornare pharetra ligula. Pellentesque ornare tristique feugiat. In a augue neque. Aenean eget arcu quis lacus tempus posuere in sit amet dui. Suspendisse faucibus sapien nisl, nec laoreet sem convallis nec."), /*#__PURE__*/React.createElement("p", null, "Vestibulum sed placerat lorem. Nam luctus ex id nisi luctus, id vestibulum sem bibendum. Vivamus turpis sem, pellentesque fermentum malesuada eu, faucibus porta libero. Duis eget venenatis odio. Etiam sed volutpat magna, non tempus erat. Nunc id tortor ac quam consectetur dapibus ac ut tellus. Pellentesque ut tellus venenatis elit vehicula condimentum eget quis lorem. Ut non consectetur est, a fringilla ipsum. Nunc vitae ligula ipsum. Etiam suscipit, libero ut lacinia viverra, nunc urna consequat ex, vel eleifend eros mauris vitae ipsum. Pellentesque sed dictum augue. Ut sit amet ullamcorper mauris. Nunc congue orci mollis purus sodales facilisis ac ut arcu. Maecenas feugiat sapien ac massa mollis sodales. Donec vitae turpis eu nisi laoreet pulvinar quis at nisl. Integer volutpat, metus eget elementum dictum, lacus sapien viverra felis, consequat fermentum nisl mi ac dui."), /*#__PURE__*/React.createElement("p", null, "Nullam nulla turpis, dignissim vel dapibus ut, volutpat ac dui. Donec vel elementum lacus. Mauris maximus nec felis at faucibus. Nunc faucibus gravida velit, id blandit lectus tincidunt ac. Vestibulum orci diam, elementum in congue eu, placerat id risus. Sed tempor tempus tellus, vitae iaculis turpis fringilla nec. Phasellus imperdiet facilisis velit, sit amet lobortis odio dignissim ut."), /*#__PURE__*/React.createElement("p", null, "Nam placerat urna vitae ligula hendrerit, ac tincidunt lorem maximus. Mauris eu odio nisi. Nulla facilisi. Sed egestas elit sed velit rutrum, sit amet bibendum metus hendrerit. Pellentesque luctus placerat tellus, eu bibendum justo. Cras eget leo ac ex volutpat gravida. Duis vitae mollis ante. Duis a congue nunc. Aenean aliquet, sapien quis tincidunt tincidunt, odio eros consectetur lacus, vel finibus mauris tortor id velit. Donec tincidunt vitae purus eu interdum. Pellentesque scelerisque dui viverra ex ullamcorper volutpat. Vestibulum lacinia vitae arcu volutpat porta. Etiam et cursus nulla, id aliquet felis. Nam ultricies, urna id mattis pretium, velit erat viverra elit, eu maximus diam eros id nisi."), /*#__PURE__*/React.createElement("p", null, "Nullam eget nisl lectus. Pellentesque eu mauris ut tortor malesuada sagittis. Cras dictum cursus est non ultricies. Duis mollis non neque at commodo. Nunc feugiat justo et consequat aliquam. Ut consectetur libero eu erat feugiat finibus. Duis varius convallis quam eu sagittis. Maecenas ac est arcu. Suspendisse at enim eget nibh ultricies dictum. Etiam aliquet tellus vel felis malesuada laoreet.")), /*#__PURE__*/React.createElement(SidePanel.Sticky, {
82
+ position: "bottom"
83
+ }, /*#__PURE__*/React.createElement(SidePanel.Footer, {
84
+ className: "u-align--right"
85
+ }, /*#__PURE__*/React.createElement(Button, {
86
+ appearance: "base",
87
+ onClick: closePanel
88
+ }, "Cancel"), /*#__PURE__*/React.createElement(ActionButton, {
89
+ appearance: "positive"
90
+ }, "Save changes")))));
91
+ };
92
+ export var Default = {
93
+ args: {
94
+ className: "",
95
+ hasError: false,
96
+ parentId: "l-application-default",
97
+ pinned: false,
98
+ loading: false,
99
+ overlay: true,
100
+ wide: false
101
+ },
102
+ render: StoryExample
103
+ };
104
+ export var Pinned = {
105
+ args: {
106
+ className: "",
107
+ hasError: false,
108
+ parentId: "l-application-pinned",
109
+ pinned: true,
110
+ loading: false,
111
+ overlay: false,
112
+ wide: false
113
+ },
114
+ render: StoryExample,
115
+ parameters: {
116
+ docs: {
117
+ disable: true
118
+ }
119
+ }
120
+ };
121
+ export var Loading = {
122
+ args: {
123
+ className: "",
124
+ hasError: false,
125
+ parentId: "l-application-loading",
126
+ pinned: false,
127
+ loading: true,
128
+ overlay: true,
129
+ wide: false
130
+ },
131
+ render: StoryExample
132
+ };
133
+ export var Error = {
134
+ args: {
135
+ className: "",
136
+ hasError: true,
137
+ parentId: "l-application-error",
138
+ pinned: false,
139
+ loading: false,
140
+ overlay: true,
141
+ wide: false
142
+ },
143
+ render: StoryExample
144
+ };
145
+ export var Wide = {
146
+ args: {
147
+ className: "",
148
+ hasError: false,
149
+ parentId: "l-application-wide",
150
+ pinned: false,
151
+ loading: false,
152
+ overlay: true,
153
+ wide: true
154
+ },
155
+ render: StoryExample
156
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { FC, PropsWithChildren } from "react";
2
+ export interface ContentProps {
3
+ className?: string;
4
+ key?: string;
5
+ }
6
+ declare const Content: FC<PropsWithChildren & ContentProps>;
7
+ export default Content;
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ var Content = _ref => {
4
+ var {
5
+ children,
6
+ className
7
+ } = _ref;
8
+ return /*#__PURE__*/React.createElement("div", {
9
+ className: classnames("p-panel__content", className)
10
+ }, children);
11
+ };
12
+ export default Content;
@@ -0,0 +1,7 @@
1
+ import type { FC, PropsWithChildren } from "react";
2
+ export interface FooterProps {
3
+ className?: string;
4
+ key?: string;
5
+ }
6
+ declare const Footer: FC<PropsWithChildren & FooterProps>;
7
+ export default Footer;
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ var Footer = _ref => {
4
+ var {
5
+ children,
6
+ className
7
+ } = _ref;
8
+ return /*#__PURE__*/React.createElement("div", {
9
+ className: classnames("panel-footer", className),
10
+ id: "panel-footer"
11
+ }, /*#__PURE__*/React.createElement("hr", {
12
+ className: "rule"
13
+ }), children);
14
+ };
15
+ export default Footer;
@@ -0,0 +1,7 @@
1
+ import type { FC, PropsWithChildren } from "react";
2
+ export interface HeaderProps {
3
+ className?: string;
4
+ key?: string;
5
+ }
6
+ declare const Header: FC<PropsWithChildren & HeaderProps>;
7
+ export default Header;
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ var Header = _ref => {
4
+ var {
5
+ children,
6
+ className
7
+ } = _ref;
8
+ return /*#__PURE__*/React.createElement("div", {
9
+ className: classnames("p-panel__header", className)
10
+ }, children);
11
+ };
12
+ export default Header;
@@ -0,0 +1,7 @@
1
+ import type { FC, PropsWithChildren } from "react";
2
+ export interface HeaderControlsProps {
3
+ className?: string;
4
+ key?: string;
5
+ }
6
+ declare const HeaderControls: FC<PropsWithChildren & HeaderControlsProps>;
7
+ export default HeaderControls;
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ var HeaderControls = _ref => {
4
+ var {
5
+ children,
6
+ className
7
+ } = _ref;
8
+ return /*#__PURE__*/React.createElement("div", {
9
+ className: classnames("p-panel__controls", className)
10
+ }, children);
11
+ };
12
+ export default HeaderControls;
@@ -0,0 +1,6 @@
1
+ import type { FC, PropsWithChildren } from "react";
2
+ export interface HeaderTitleProps {
3
+ className?: string;
4
+ }
5
+ declare const HeaderTitle: FC<PropsWithChildren & HeaderTitleProps>;
6
+ export default HeaderTitle;
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ var HeaderTitle = _ref => {
4
+ var {
5
+ children,
6
+ className
7
+ } = _ref;
8
+ return /*#__PURE__*/React.createElement("h2", {
9
+ className: classnames("p-panel__title", className)
10
+ }, children);
11
+ };
12
+ export default HeaderTitle;
@@ -0,0 +1,8 @@
1
+ import type { FC, PropsWithChildren } from "react";
2
+ export interface StickyProps {
3
+ className?: string;
4
+ position?: "top" | "bottom";
5
+ key?: string;
6
+ }
7
+ declare const Sticky: FC<PropsWithChildren & StickyProps>;
8
+ export default Sticky;
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ var Sticky = _ref => {
4
+ var {
5
+ children,
6
+ className,
7
+ position = "top"
8
+ } = _ref;
9
+ return /*#__PURE__*/React.createElement("div", {
10
+ className: classnames("sticky-wrapper", className, {
11
+ "sticky-wrapper--top": position === "top",
12
+ "sticky-wrapper--bottom": position === "bottom"
13
+ })
14
+ }, children);
15
+ };
16
+ export default Sticky;
@@ -0,0 +1 @@
1
+ export { default, type Props as SidePanelProps } from "./SidePanel";
@@ -0,0 +1 @@
1
+ export { default } from "./SidePanel";
@@ -96,7 +96,7 @@
96
96
  display: flex;
97
97
  padding: $spv--medium 0;
98
98
  padding-right: 0.5rem;
99
- width: fit-content;
99
+ width: inherit;
100
100
  }
101
101
 
102
102
  .progress-line {
@@ -183,7 +183,11 @@ export var HorizontalOptional = {
183
183
  };
184
184
  export var VerticalSelected = {
185
185
  name: "Vertical variant: Selected step",
186
- render: () => /*#__PURE__*/React.createElement(Stepper, {
186
+ render: () => /*#__PURE__*/React.createElement("div", {
187
+ style: {
188
+ width: "50%"
189
+ }
190
+ }, /*#__PURE__*/React.createElement(Stepper, {
187
191
  steps: [/*#__PURE__*/React.createElement(Step, {
188
192
  key: "Vertical Selected Step 1",
189
193
  title: "Step 1",
@@ -228,7 +232,7 @@ export var VerticalSelected = {
228
232
  label: "Optional label",
229
233
  handleClick: () => {}
230
234
  })]
231
- })
235
+ }))
232
236
  };
233
237
  export var HorizontalSelected = {
234
238
  name: "Horizontal variant: Selected step",
@@ -51,6 +51,7 @@ export { default as SideNavigation } from "./components/SideNavigation";
51
51
  export { default as SideNavigationItem } from "./components/SideNavigation/SideNavigationItem";
52
52
  export { default as SideNavigationLink } from "./components/SideNavigation/SideNavigationLink";
53
53
  export { default as SideNavigationText } from "./components/SideNavigation/SideNavigationText";
54
+ export { default as SidePanel } from "./components/SidePanel";
54
55
  export { default as SkipLink } from "./components/SkipLink";
55
56
  export { default as Slider } from "./components/Slider";
56
57
  export { default as Switch } from "./components/Switch";
@@ -120,6 +121,7 @@ export type { SideNavigationProps } from "./components/SideNavigation";
120
121
  export type { SideNavigationItemProps } from "./components/SideNavigation/SideNavigationItem";
121
122
  export type { SideNavigationLinkProps } from "./components/SideNavigation/SideNavigationLink";
122
123
  export type { SideNavigationTextProps } from "./components/SideNavigation/SideNavigationText";
124
+ export type { SidePanelProps } from "./components/SidePanel";
123
125
  export type { SkipLinkProps } from "./components/SkipLink";
124
126
  export type { SliderProps } from "./components/Slider";
125
127
  export type { SpinnerProps } from "./components/Spinner";
package/dist/esm/index.js CHANGED
@@ -51,6 +51,7 @@ export { default as SideNavigation } from "./components/SideNavigation";
51
51
  export { default as SideNavigationItem } from "./components/SideNavigation/SideNavigationItem";
52
52
  export { default as SideNavigationLink } from "./components/SideNavigation/SideNavigationLink";
53
53
  export { default as SideNavigationText } from "./components/SideNavigation/SideNavigationText";
54
+ export { default as SidePanel } from "./components/SidePanel";
54
55
  export { default as SkipLink } from "./components/SkipLink";
55
56
  export { default as Slider } from "./components/Slider";
56
57
  export { default as Switch } from "./components/Switch";
package/dist/index.d.ts CHANGED
@@ -51,6 +51,7 @@ export { default as SideNavigation } from "./components/SideNavigation";
51
51
  export { default as SideNavigationItem } from "./components/SideNavigation/SideNavigationItem";
52
52
  export { default as SideNavigationLink } from "./components/SideNavigation/SideNavigationLink";
53
53
  export { default as SideNavigationText } from "./components/SideNavigation/SideNavigationText";
54
+ export { default as SidePanel } from "./components/SidePanel";
54
55
  export { default as SkipLink } from "./components/SkipLink";
55
56
  export { default as Slider } from "./components/Slider";
56
57
  export { default as Switch } from "./components/Switch";
@@ -120,6 +121,7 @@ export type { SideNavigationProps } from "./components/SideNavigation";
120
121
  export type { SideNavigationItemProps } from "./components/SideNavigation/SideNavigationItem";
121
122
  export type { SideNavigationLinkProps } from "./components/SideNavigation/SideNavigationLink";
122
123
  export type { SideNavigationTextProps } from "./components/SideNavigation/SideNavigationText";
124
+ export type { SidePanelProps } from "./components/SidePanel";
123
125
  export type { SkipLinkProps } from "./components/SkipLink";
124
126
  export type { SliderProps } from "./components/Slider";
125
127
  export type { SpinnerProps } from "./components/Spinner";
package/dist/index.js CHANGED
@@ -70,6 +70,7 @@ var _exportNames = {
70
70
  SideNavigationItem: true,
71
71
  SideNavigationLink: true,
72
72
  SideNavigationText: true,
73
+ SidePanel: true,
73
74
  SkipLink: true,
74
75
  Slider: true,
75
76
  Switch: true,
@@ -447,6 +448,12 @@ Object.defineProperty(exports, "SideNavigationText", {
447
448
  return _SideNavigationText.default;
448
449
  }
449
450
  });
451
+ Object.defineProperty(exports, "SidePanel", {
452
+ enumerable: true,
453
+ get: function () {
454
+ return _SidePanel.default;
455
+ }
456
+ });
450
457
  Object.defineProperty(exports, "SkipLink", {
451
458
  enumerable: true,
452
459
  get: function () {
@@ -769,6 +776,7 @@ var _SideNavigation = _interopRequireDefault(require("./components/SideNavigatio
769
776
  var _SideNavigationItem = _interopRequireDefault(require("./components/SideNavigation/SideNavigationItem"));
770
777
  var _SideNavigationLink = _interopRequireDefault(require("./components/SideNavigation/SideNavigationLink"));
771
778
  var _SideNavigationText = _interopRequireDefault(require("./components/SideNavigation/SideNavigationText"));
779
+ var _SidePanel = _interopRequireDefault(require("./components/SidePanel"));
772
780
  var _SkipLink = _interopRequireDefault(require("./components/SkipLink"));
773
781
  var _Slider = _interopRequireDefault(require("./components/Slider"));
774
782
  var _Switch = _interopRequireDefault(require("./components/Switch"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonical/react-components",
3
- "version": "2.7.8",
3
+ "version": "2.8.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "author": {
@@ -93,7 +93,7 @@
93
93
  "tsc-alias": "1.8.10",
94
94
  "typescript": "5.7.3",
95
95
  "typescript-eslint": "8.24.1",
96
- "vanilla-framework": "4.24.1",
96
+ "vanilla-framework": "4.25.0",
97
97
  "wait-on": "8.0.2",
98
98
  "webpack": "5.98.0"
99
99
  },