@hlf-fe/pulmo-ui 1.0.1 → 1.1.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 (133) hide show
  1. package/README.md +21 -54
  2. package/dist/components/buttons/button/button.js +1 -1
  3. package/dist/components/buttons/button/button.stories.js +6 -1
  4. package/dist/components/buttons/loading-button/loading-button.d.ts +14 -0
  5. package/dist/components/buttons/loading-button/loading-button.js +26 -0
  6. package/dist/components/buttons/loading-button/loading-button.stories.d.ts +7 -0
  7. package/dist/components/buttons/loading-button/loading-button.stories.js +23 -0
  8. package/dist/components/buttons/text-button/text-button.d.ts +20 -0
  9. package/dist/components/buttons/text-button/text-button.js +61 -0
  10. package/dist/components/buttons/text-button/text-button.stories.d.ts +6 -0
  11. package/dist/components/buttons/text-button/text-button.stories.js +16 -0
  12. package/dist/components/decorator/decorator.d.ts +7 -0
  13. package/dist/components/decorator/decorator.js +13 -0
  14. package/dist/components/feedback/alert/alert.d.ts +17 -0
  15. package/dist/components/feedback/alert/alert.js +68 -0
  16. package/dist/components/feedback/alert/alert.stories.d.ts +6 -0
  17. package/dist/components/feedback/alert/alert.stories.js +23 -0
  18. package/dist/components/icons/chevron-left-icon/chevron-left-icon.d.ts +7 -0
  19. package/dist/components/icons/chevron-left-icon/chevron-left-icon.js +3 -0
  20. package/dist/components/icons/chevron-left-icon/chevron-left-icon.stories.d.ts +6 -0
  21. package/dist/components/icons/chevron-left-icon/chevron-left-icon.stories.js +14 -0
  22. package/dist/components/icons/chevron-right-icon/chevron-right-icon.d.ts +7 -0
  23. package/dist/components/icons/chevron-right-icon/chevron-right-icon.js +3 -0
  24. package/dist/components/icons/chevron-right-icon/chevron-right-icon.stories.d.ts +6 -0
  25. package/dist/components/icons/chevron-right-icon/chevron-right-icon.stories.js +14 -0
  26. package/dist/components/icons/close-icon/close-icon.d.ts +12 -0
  27. package/dist/components/icons/close-icon/close-icon.js +9 -0
  28. package/dist/components/icons/close-icon/close-icon.stories.d.ts +6 -0
  29. package/dist/components/icons/close-icon/close-icon.stories.js +16 -0
  30. package/dist/components/icons/exclamation-mark-icon/exclamation-mark-icon.d.ts +3 -0
  31. package/dist/components/icons/exclamation-mark-icon/exclamation-mark-icon.js +3 -0
  32. package/dist/components/icons/exclamation-mark-icon/exclamation-mark-icon.stories.d.ts +6 -0
  33. package/dist/components/icons/exclamation-mark-icon/exclamation-mark-icon.stories.js +16 -0
  34. package/dist/components/icons/loading-spinner/loading-spinner.d.ts +20 -0
  35. package/dist/components/icons/loading-spinner/loading-spinner.js +32 -0
  36. package/dist/components/icons/loading-spinner/loading-spinner.stories.d.ts +6 -0
  37. package/dist/components/icons/loading-spinner/loading-spinner.stories.js +18 -0
  38. package/dist/components/icons/search-icon/search-icon.d.ts +5 -0
  39. package/dist/components/icons/search-icon/search-icon.js +3 -0
  40. package/dist/components/icons/search-icon/search-icon.stories.d.ts +6 -0
  41. package/dist/components/icons/search-icon/search-icon.stories.js +18 -0
  42. package/dist/components/icons/toggable-chevron/toggable-chevron.d.ts +12 -0
  43. package/dist/components/icons/toggable-chevron/toggable-chevron.js +20 -0
  44. package/dist/components/icons/toggable-chevron/toggable-chevron.stories.d.ts +7 -0
  45. package/dist/components/icons/toggable-chevron/toggable-chevron.stories.js +21 -0
  46. package/dist/components/icons/toggable-plus-minus-icon/toggable-plus-minus-icon.d.ts +6 -0
  47. package/dist/components/icons/toggable-plus-minus-icon/toggable-plus-minus-icon.js +13 -0
  48. package/dist/components/icons/toggable-plus-minus-icon/toggable-plus-minus-icon.stories.d.ts +7 -0
  49. package/dist/components/icons/toggable-plus-minus-icon/toggable-plus-minus-icon.stories.js +21 -0
  50. package/dist/components/icons/warning-icon/warning-icon.d.ts +3 -0
  51. package/dist/components/icons/warning-icon/warning-icon.js +3 -0
  52. package/dist/components/icons/warning-icon/warning-icon.stories.d.ts +6 -0
  53. package/dist/components/icons/warning-icon/warning-icon.stories.js +16 -0
  54. package/dist/components/inputs/dropdown/dropdown-list-item.d.ts +6 -0
  55. package/dist/components/inputs/dropdown/dropdown-list-item.js +33 -0
  56. package/dist/components/inputs/dropdown/dropdown.d.ts +13 -0
  57. package/dist/components/inputs/dropdown/dropdown.js +109 -0
  58. package/dist/components/inputs/dropdown/dropdown.stories.d.ts +7 -0
  59. package/dist/components/inputs/dropdown/dropdown.stories.js +84 -0
  60. package/dist/components/inputs/form-error/form-error.d.ts +11 -0
  61. package/dist/components/inputs/form-error/form-error.js +16 -0
  62. package/dist/components/inputs/form-error/form-error.stories.d.ts +6 -0
  63. package/dist/components/inputs/form-error/form-error.stories.js +22 -0
  64. package/dist/components/inputs/form-label/form-label.d.ts +7 -0
  65. package/dist/components/inputs/form-label/form-label.js +12 -0
  66. package/dist/components/inputs/form-label/form-label.stories.d.ts +6 -0
  67. package/dist/components/inputs/form-label/form-label.stories.js +16 -0
  68. package/dist/components/inputs/text-field/text-field.d.ts +32 -0
  69. package/dist/components/inputs/text-field/text-field.js +65 -0
  70. package/dist/components/inputs/text-field/text-field.stories.d.ts +11 -0
  71. package/dist/components/inputs/text-field/text-field.stories.js +51 -0
  72. package/dist/components/layout/accordion/accordion.d.ts +13 -0
  73. package/dist/components/layout/accordion/accordion.js +115 -0
  74. package/dist/components/layout/accordion/accordion.stories.d.ts +6 -0
  75. package/dist/components/layout/accordion/accordion.stories.js +14 -0
  76. package/dist/components/layout/container/container.d.ts +10 -0
  77. package/dist/components/layout/container/container.js +19 -0
  78. package/dist/components/layout/container/container.stories.d.ts +9 -0
  79. package/dist/components/layout/container/container.stories.js +47 -0
  80. package/dist/components/layout/image/image.d.ts +22 -0
  81. package/dist/components/layout/image/image.js +27 -0
  82. package/dist/components/layout/image/image.stories.d.ts +6 -0
  83. package/dist/components/layout/image/image.stories.js +33 -0
  84. package/dist/components/modules/email-signup-form/email-signup-form.d.ts +16 -0
  85. package/dist/components/modules/email-signup-form/email-signup-form.js +63 -0
  86. package/dist/components/modules/email-signup-form/email-signup-form.stories.d.ts +9 -0
  87. package/dist/components/modules/email-signup-form/email-signup-form.stories.js +51 -0
  88. package/dist/components/modules/entry-list/entry-list.d.ts +27 -0
  89. package/dist/components/modules/entry-list/entry-list.js +54 -0
  90. package/dist/components/modules/entry-list/entry-list.stories.d.ts +6 -0
  91. package/dist/components/modules/entry-list/entry-list.stories.js +14 -0
  92. package/dist/components/navigation/pagination/pagination.d.ts +12 -0
  93. package/dist/components/navigation/pagination/pagination.js +114 -0
  94. package/dist/components/navigation/pagination/pagination.stories.d.ts +6 -0
  95. package/dist/components/navigation/pagination/pagination.stories.js +21 -0
  96. package/dist/constants/general.d.ts +4 -0
  97. package/dist/constants/general.js +5 -0
  98. package/dist/hoc/withDefaultTheme.d.ts +1 -1
  99. package/dist/hoc/withDefaultTheme.js +4 -8
  100. package/dist/index.d.ts +40 -2
  101. package/dist/index.js +42 -2
  102. package/dist/styles/mixins.js +8 -4
  103. package/dist/styles/theme.d.ts +11 -9
  104. package/dist/styles/theme.js +12 -11
  105. package/package.json +78 -67
  106. package/dist/App.d.ts +0 -3
  107. package/dist/App.js +0 -10
  108. package/dist/main.d.ts +0 -1
  109. package/dist/main.js +0 -6
  110. package/dist/stories/Button.d.ts +0 -14
  111. package/dist/stories/Button.js +0 -20
  112. package/dist/stories/Button.stories.d.ts +0 -23
  113. package/dist/stories/Button.stories.js +0 -44
  114. package/dist/stories/Header.d.ts +0 -12
  115. package/dist/stories/Header.js +0 -4
  116. package/dist/stories/Header.stories.d.ts +0 -18
  117. package/dist/stories/Header.stories.js +0 -26
  118. package/dist/stories/Page.d.ts +0 -3
  119. package/dist/stories/Page.js +0 -7
  120. package/dist/stories/Page.stories.d.ts +0 -12
  121. package/dist/stories/Page.stories.js +0 -24
  122. package/dist/styles/styles/mixins/theme-mixins.d.ts +0 -5
  123. package/dist/styles/styles/mixins/theme-mixins.js +0 -37
  124. package/dist/styles/styles/mixins/units.d.ts +0 -3
  125. package/dist/styles/styles/mixins/units.js +0 -3
  126. package/dist/styles/styles/mixins.d.ts +0 -48
  127. package/dist/styles/styles/mixins.js +0 -336
  128. package/dist/styles/styles/theme.d.ts +0 -135
  129. package/dist/styles/styles/theme.js +0 -77
  130. package/dist/styles/types.d.ts +0 -3
  131. package/dist/styles/types.js +0 -1
  132. package/dist/styles/withDefaultTheme.d.ts +0 -1
  133. package/dist/styles/withDefaultTheme.js +0 -12
@@ -0,0 +1,54 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ import { rem } from "../../../styles/units";
4
+ import { media } from "../../../styles/mixins";
5
+ export const EntryList = ({ children }) => {
6
+ return _jsx(List, { children: children });
7
+ };
8
+ export const EntryListItem = ({ children }) => {
9
+ return _jsx(ListItem, { children: children });
10
+ };
11
+ export const EntryListText = ({ children, fontSizeMobile = 14, fontSizeDesktop = 16, breakpoint = "M", bold = false, as = "p", color, }) => {
12
+ return (_jsx(Text, { as: as, fontSizeMobile: fontSizeMobile, fontSizeDesktop: fontSizeDesktop, breakpoint: breakpoint, bold: bold, color: color, children: children }));
13
+ };
14
+ export const EntryListHeading = ({ children, fontSizeMobile = 18, fontSizeDesktop = 20, as = "h2", breakpoint = "M", }) => {
15
+ return (_jsx(Heading, { as: as, fontSizeMobile: fontSizeMobile, fontSizeDesktop: fontSizeDesktop, breakpoint: breakpoint, children: children }));
16
+ };
17
+ const List = styled.ul `
18
+ list-style: none;
19
+ padding: 0;
20
+ margin: 0;
21
+ `;
22
+ const ListItem = styled.li `
23
+ border-bottom: 1px solid #e9e9e9;
24
+ padding: 20px 0;
25
+ &:first-of-type {
26
+ border-top: 1px solid #e9e9e9;
27
+ }
28
+ `;
29
+ const responsiveFont = css `
30
+ font-size: ${({ fontSizeMobile }) => rem(fontSizeMobile)};
31
+
32
+ ${({ fontSizeDesktop, breakpoint }) => media[breakpoint] `
33
+ font-size: ${rem(fontSizeDesktop)};
34
+ `}
35
+ `;
36
+ const Heading = styled.h2 `
37
+ font-family: ${({ theme }) => theme.valueBold};
38
+ color: ${({ theme }) => theme.blackLight};
39
+ margin-top: 0;
40
+ ${responsiveFont}
41
+ `;
42
+ const Text = styled.p `
43
+ color: ${({ theme, color }) => (color ? color : theme.blackLight)};
44
+ font-family: ${({ theme, bold }) => bold ? theme.valueBold : theme.valueRegular};
45
+
46
+ ${responsiveFont}
47
+ &:last-child {
48
+ margin-bottom: 0;
49
+ }
50
+
51
+ &:first-of-type {
52
+ margin-top: 0;
53
+ }
54
+ `;
@@ -0,0 +1,6 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { EntryList } from "./entry-list";
3
+ declare const meta: Meta<typeof EntryList>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof EntryList>;
6
+ export declare const Default: Story;
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { EntryList, EntryListItem, EntryListHeading, EntryListText, } from "./entry-list";
3
+ import { Decorator } from "../../../components/decorator/decorator";
4
+ const meta = {
5
+ title: "Modules/EntryList",
6
+ component: EntryList,
7
+ decorators: [
8
+ (Story) => (_jsx(Decorator, { maxWidth: "800px", children: _jsx(Story, {}) })),
9
+ ],
10
+ };
11
+ export default meta;
12
+ export const Default = {
13
+ render: () => (_jsxs(EntryList, { children: [_jsxs(EntryListItem, { children: [_jsx(EntryListText, { fontSizeDesktop: 14, color: "#545454", children: "2025-05-11" }), _jsx(EntryListHeading, { children: "In volutpat est eu dolor efficitur" }), _jsxs(EntryListText, { children: [_jsxs(EntryListText, { as: "span", fontSizeMobile: 12, fontSizeDesktop: 14, children: ["Nulla facilisi:", " "] }), _jsx(EntryListText, { as: "span", fontSizeMobile: 12, fontSizeDesktop: 14, bold: true, children: "volutpat, XiO, MD, Condimentum Ultricies" })] }), _jsx(EntryListText, { children: "Aliquam erat volutpat. Nulla facilisi. Vestibulum eget ullamcorper elit. Praesent mattis arcu ante, in gravida eros pharetra sit amet." }), _jsx(EntryListText, { children: "Praesent mattis arcu ante, in gravida eros pharetra sit amet. Etiam ac enim lorem. Proin euismod vulputate faucibus." })] }), _jsxs(EntryListItem, { children: [_jsx(EntryListHeading, { children: "In volutpat est eu dolor efficitur" }), _jsxs(EntryListText, { children: [_jsxs(EntryListText, { as: "span", fontSizeMobile: 12, fontSizeDesktop: 14, children: ["Nulla facilisi:", " "] }), _jsx(EntryListText, { as: "span", fontSizeMobile: 12, fontSizeDesktop: 14, bold: true, children: "volutpat, XiO, MD, Condimentum Ultricies" })] }), _jsx(EntryListText, { children: "Aliquam erat volutpat. Nulla facilisi. Vestibulum eget ullamcorper elit. Praesent mattis arcu ante, in gravida eros pharetra sit amet." }), _jsx(EntryListText, { children: "Praesent mattis arcu ante, in gravida eros pharetra sit amet. Etiam ac enim lorem. Proin euismod vulputate faucibus." })] }), _jsxs(EntryListItem, { children: [_jsx(EntryListHeading, { children: "In volutpat est eu dolor efficitur" }), _jsxs(EntryListText, { children: [_jsxs(EntryListText, { as: "span", fontSizeMobile: 12, fontSizeDesktop: 14, children: ["Nulla facilisi:", " "] }), _jsx(EntryListText, { as: "span", fontSizeMobile: 12, fontSizeDesktop: 14, bold: true, children: "volutpat, XiO, MD, Condimentum Ultricies" })] }), _jsx(EntryListText, { children: "Aliquam erat volutpat. Nulla facilisi. Vestibulum eget ullamcorper elit. Praesent mattis arcu ante, in gravida eros pharetra sit amet." }), _jsx(EntryListText, { children: "Praesent mattis arcu ante, in gravida eros pharetra sit amet. Etiam ac enim lorem. Proin euismod vulputate faucibus." })] })] })),
14
+ };
@@ -0,0 +1,12 @@
1
+ export type PaginationProps = {
2
+ numberOfPages: number;
3
+ currentPage: number;
4
+ onChange?: (page: number) => void;
5
+ isMobile?: boolean;
6
+ indexStartsAt?: number;
7
+ localeText: {
8
+ prePage: string;
9
+ nextPage: string;
10
+ };
11
+ };
12
+ export declare const Pagination: ({ numberOfPages, currentPage, isMobile, localeText, onChange, indexStartsAt, }: PaginationProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,114 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled, { css } from "styled-components";
3
+ import { rem } from "../../../styles/units";
4
+ import { ChevronLeftIcon } from "../../../components/icons/chevron-left-icon/chevron-left-icon";
5
+ import { ChevronRightIcon } from "../../../components/icons/chevron-right-icon/chevron-right-icon";
6
+ import { COLORS } from "../../../styles/theme";
7
+ export const Pagination = ({ numberOfPages, currentPage, isMobile = true, localeText = {
8
+ prePage: "",
9
+ nextPage: "",
10
+ }, onChange = () => { }, indexStartsAt = 0, }) => {
11
+ const pageIndex = currentPage - indexStartsAt;
12
+ const { prePage, nextPage } = localeText;
13
+ const isFirstPage = pageIndex === 0;
14
+ const isLastPage = pageIndex === numberOfPages - 1;
15
+ const goToPage = (e, pageIndex) => {
16
+ e.preventDefault();
17
+ const adjustedIndex = pageIndex + indexStartsAt;
18
+ onChange(adjustedIndex);
19
+ };
20
+ const getVisiblePages = (currentPage, total, isMobile) => {
21
+ if (total <= 7)
22
+ return Array.from({ length: total }, (_, i) => i);
23
+ if (isMobile) {
24
+ if (currentPage <= 1)
25
+ return [0, 1, 2, "...", total - 1];
26
+ if (currentPage >= total - 2)
27
+ return [0, "...", total - 3, total - 2, total - 1];
28
+ return [0, "...", currentPage, "...", total - 1];
29
+ }
30
+ if (currentPage <= 2)
31
+ return [0, 1, 2, 3, 4, "...", total - 1];
32
+ if (currentPage >= total - 3)
33
+ return [0, "...", total - 5, total - 4, total - 3, total - 2, total - 1];
34
+ return [
35
+ 0,
36
+ "...",
37
+ currentPage - 1,
38
+ currentPage,
39
+ currentPage + 1,
40
+ "...",
41
+ total - 1,
42
+ ];
43
+ };
44
+ return (numberOfPages > 0 && (_jsxs(StyledList, { children: [_jsx(StyleListItem, { children: _jsx(PaginationArrow, { isDisabled: isFirstPage, "aria-label": prePage, onClick: (e) => goToPage(e, pageIndex - 1), children: _jsx(ChevronLeftIcon, { width: 12, height: 12, color: isFirstPage ? COLORS.grayDark : COLORS.blackLight }) }) }), getVisiblePages(pageIndex, numberOfPages, isMobile).map((page, index) => (_jsx(StyleListItem, { children: page === "..." ? (_jsx(Ellipsis, { children: "\u2026" })) : (_jsx(PaginationItem, { isSelected: pageIndex === page, onClick: (e) => goToPage(e, page), children: page + 1 })) }, index))), _jsx(StyleListItem, { children: _jsx(PaginationArrow, { isDisabled: isLastPage, "aria-label": nextPage, onClick: (e) => goToPage(e, pageIndex + 1), children: _jsx(ChevronRightIcon, { width: 12, height: 12, color: isLastPage ? COLORS.grayDark : COLORS.blackLight }) }) })] })));
45
+ };
46
+ const StyledList = styled.ul `
47
+ margin: 0 auto;
48
+ margin-top: ${rem(32)};
49
+ display: flex;
50
+ padding: 0;
51
+ flex-wrap: wrap;
52
+ list-style: none;
53
+ align-items: center;
54
+ justify-content: center;
55
+ `;
56
+ const StyleListItem = styled.li `
57
+ padding: ${rem(4)};
58
+ `;
59
+ const PaginationItem = styled.button `
60
+ cursor: pointer;
61
+ width: ${rem(40)};
62
+ height: ${rem(40)};
63
+ padding: 0;
64
+ margin: 0;
65
+ display: flex;
66
+ justify-content: center;
67
+ align-items: center;
68
+ border-radius: ${rem(5)};
69
+ background-color: transparent;
70
+ text-decoration: none;
71
+
72
+ ${({ theme }) => css `
73
+ color: ${theme.blackLight};
74
+ font-family: ${theme.valueBold};
75
+ font-weight: 400;
76
+ line-height: ${rem(22)};
77
+ border: ${rem(1)} solid ${theme.blackLight};
78
+ `};
79
+
80
+ ${({ theme, isSelected }) => isSelected &&
81
+ css `
82
+ background-color: ${theme.blackLight};
83
+ border-color: transparent;
84
+ color: ${theme.white};
85
+ `};
86
+ `;
87
+ const PaginationArrow = styled.button `
88
+ cursor: pointer;
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ width: ${rem(40)};
93
+ height: ${rem(40)};
94
+ border: ${({ theme }) => `${rem(1)} solid ${theme.blackLight}`};
95
+ border-radius: ${rem(5)};
96
+ background-color: ${({ theme }) => theme.white};
97
+
98
+ ${({ isDisabled }) => isDisabled &&
99
+ css `
100
+ pointer-events: none;
101
+ cursor: default;
102
+ border: ${({ theme }) => `${rem(1)} solid ${theme.grayDark}`};
103
+ `}
104
+ `;
105
+ const Ellipsis = styled.span `
106
+ display: flex;
107
+ align-items: center;
108
+ justify-content: center;
109
+ width: ${rem(40)};
110
+ height: ${rem(40)};
111
+ border: ${({ theme }) => `${rem(1)} solid ${theme.blackLight}`};
112
+ border-radius: ${rem(5)};
113
+ color: ${({ theme }) => theme.blackLight};
114
+ `;
@@ -0,0 +1,6 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { Pagination } from "./pagination";
3
+ declare const meta: Meta<typeof Pagination>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Pagination>;
6
+ export declare const Default: Story;
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Pagination } from "./pagination";
4
+ import { Decorator } from "../../../components/decorator/decorator";
5
+ const meta = {
6
+ title: "Navigation/Pagination",
7
+ component: Pagination,
8
+ decorators: [
9
+ (Story) => (_jsx(Decorator, { children: _jsx(Story, {}) })),
10
+ ],
11
+ };
12
+ export default meta;
13
+ export const Default = {
14
+ render: () => {
15
+ const [page, setPage] = useState(0);
16
+ return (_jsx(Pagination, { currentPage: page, numberOfPages: 27, indexStartsAt: 0, onChange: (newPage) => setPage(newPage), localeText: {
17
+ prePage: "Previous page",
18
+ nextPage: "Next page",
19
+ } }));
20
+ },
21
+ };
@@ -0,0 +1,4 @@
1
+ export declare const INFO = "info";
2
+ export declare const WARNING = "warning";
3
+ export declare const ERROR = "error";
4
+ export declare const SUCCESS = "success";
@@ -0,0 +1,5 @@
1
+ // Severities
2
+ export const INFO = "info";
3
+ export const WARNING = "warning";
4
+ export const ERROR = "error";
5
+ export const SUCCESS = "success";
@@ -1 +1 @@
1
- export declare function withDefaultTheme<T extends object>(Component: React.ComponentType<T>): React.FC<T>;
1
+ export declare const withDefaultTheme: <T extends object>(Component: React.ComponentType<T>) => React.FC<T>;
@@ -2,11 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useContext } from "react";
3
3
  import { THEME_SETTINGS } from "../styles/theme";
4
4
  import { ThemeContext, ThemeProvider } from "styled-components";
5
- export function withDefaultTheme(Component) {
6
- return function Wrapped(props) {
7
- const theme = useContext(ThemeContext);
8
- if (theme)
9
- return _jsx(Component, { ...props });
10
- return (_jsx(ThemeProvider, { theme: THEME_SETTINGS, children: _jsx(Component, { ...props }) }));
11
- };
12
- }
5
+ export const withDefaultTheme = (Component) => (props) => {
6
+ const theme = useContext(ThemeContext);
7
+ return theme ? (_jsx(Component, { ...props })) : (_jsx(ThemeProvider, { theme: THEME_SETTINGS, children: _jsx(Component, { ...props }) }));
8
+ };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,41 @@
1
- import { ButtonProps } from "./components/buttons/button/button";
2
- export type { ButtonProps } from "./components/buttons/button/button";
1
+ import { type ButtonProps } from "./components/buttons/button/button";
2
+ import { type TextButtonProps } from "./components/buttons/text-button/text-button";
3
+ import { type LoadingButtonProps } from "./components/buttons/loading-button/loading-button";
4
+ import { type AlertProps } from "./components/feedback/alert/alert";
5
+ import { type LoadingSpinnerProps } from "./components/icons/loading-spinner/loading-spinner";
6
+ import { type FormErrorProps } from "./components/inputs/form-error/form-error";
7
+ import { type FormLabelProps } from "./components/inputs/form-label/form-label";
8
+ import { type TextFieldProps } from "./components/inputs/text-field/text-field";
9
+ import { type EmailSignupFormProps } from "./components/modules/email-signup-form/email-signup-form";
10
+ import { type ImageProps } from "./components/layout/image/image";
11
+ import { type ContainerProps } from "./components/layout/container/container";
12
+ import { type EntryListProps, type EntryListItemProps, type EntryListHeadingProps, type EntryListTextProps } from "./components/modules/entry-list/entry-list";
13
+ import { type DropdownProps } from "./components/inputs/dropdown/dropdown";
14
+ import { type PaginationProps } from "./components/navigation/pagination/pagination";
15
+ import { type AccordionItemProps } from "./components/layout/accordion/accordion";
16
+ export type { ButtonProps, LoadingButtonProps, TextButtonProps, EmailSignupFormProps, ImageProps, ContainerProps, AlertProps, EntryListHeadingProps, EntryListTextProps, PaginationProps, };
17
+ export { CloseIcon } from "./components/icons/close-icon/close-icon";
18
+ export { ExclamationMarkIcon } from "./components/icons/exclamation-mark-icon/exclamation-mark-icon";
19
+ export { WarningIcon } from "./components/icons/warning-icon/warning-icon";
20
+ export { SearchIcon } from "./components/icons/search-icon/search-icon";
21
+ export declare const LoadingSpinner: import("react").FC<LoadingSpinnerProps>;
3
22
  export declare const Button: import("react").FC<ButtonProps>;
23
+ export declare const LoadingButton: import("react").FC<LoadingButtonProps>;
24
+ export declare const TextButton: import("react").FC<TextButtonProps>;
25
+ export declare const Alert: import("react").FC<AlertProps>;
26
+ export declare const FormError: import("react").FC<FormErrorProps>;
27
+ export declare const FormLabel: import("react").FC<FormLabelProps>;
28
+ export declare const TextField: import("react").FC<TextFieldProps>;
29
+ export declare const EmailSignupForm: import("react").FC<EmailSignupFormProps>;
30
+ export declare const Image: import("react").FC<ImageProps>;
31
+ export declare const Container: import("react").FC<ContainerProps>;
32
+ export declare const EntryList: import("react").FC<EntryListProps>;
33
+ export declare const EntryListItem: import("react").FC<EntryListItemProps>;
34
+ export declare const EntryListText: import("react").FC<EntryListTextProps>;
35
+ export declare const EntryListHeading: import("react").FC<EntryListHeadingProps>;
36
+ export declare const Dropdown: import("react").FC<DropdownProps>;
37
+ export declare const Pagination: import("react").FC<PaginationProps>;
38
+ export declare const Accordion: import("react").FC<import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
39
+ disabled?: boolean;
40
+ }>>;
41
+ export declare const AccordionItem: import("react").FC<AccordionItemProps>;
package/dist/index.js CHANGED
@@ -1,3 +1,43 @@
1
1
  import { withDefaultTheme } from "./hoc/withDefaultTheme";
2
- import { Button as RawButton, } from "./components/buttons/button/button";
3
- export const Button = withDefaultTheme(RawButton);
2
+ // Buttons
3
+ import { Button as ButtonComponent, } from "./components/buttons/button/button";
4
+ import { TextButton as TextButtonComponent, } from "./components/buttons/text-button/text-button";
5
+ import { LoadingButton as LoadingButtonComponent, } from "./components/buttons/loading-button/loading-button";
6
+ // Components
7
+ import { Alert as AlertComponent, } from "./components/feedback/alert/alert";
8
+ import { LoadingSpinner as LoadingSpinnerComponent, } from "./components/icons/loading-spinner/loading-spinner";
9
+ import { FormError as FormErrorComponent, } from "./components/inputs/form-error/form-error";
10
+ import { FormLabel as FormLabelComponent, } from "./components/inputs/form-label/form-label";
11
+ import { TextField as TextFieldComponent, } from "./components/inputs/text-field/text-field";
12
+ import { EmailSignupForm as EmailSignupFormComponent, } from "./components/modules/email-signup-form/email-signup-form";
13
+ import { Image as ImageComponent, } from "./components/layout/image/image";
14
+ import { Container as ContainerComponent, } from "./components/layout/container/container";
15
+ import { EntryList as EntryListComponent, EntryListItem as EntryListItemComponent, EntryListText as EntryListTextComponent, EntryListHeading as EntryListHeadingComoponent, } from "./components/modules/entry-list/entry-list";
16
+ import { Dropdown as DropdownComponent, } from "./components/inputs/dropdown/dropdown";
17
+ import { Pagination as PaginationComponent, } from "./components/navigation/pagination/pagination";
18
+ import { Accordion as AccordionComponent, AccordionItem as AccordionItemComponent, } from "./components/layout/accordion/accordion";
19
+ // Icons
20
+ export { CloseIcon } from "./components/icons/close-icon/close-icon";
21
+ export { ExclamationMarkIcon } from "./components/icons/exclamation-mark-icon/exclamation-mark-icon";
22
+ export { WarningIcon } from "./components/icons/warning-icon/warning-icon";
23
+ export { SearchIcon } from "./components/icons/search-icon/search-icon";
24
+ export const LoadingSpinner = withDefaultTheme(LoadingSpinnerComponent);
25
+ // Components
26
+ export const Button = withDefaultTheme(ButtonComponent);
27
+ export const LoadingButton = withDefaultTheme(LoadingButtonComponent);
28
+ export const TextButton = withDefaultTheme(TextButtonComponent);
29
+ export const Alert = withDefaultTheme(AlertComponent);
30
+ export const FormError = withDefaultTheme(FormErrorComponent);
31
+ export const FormLabel = withDefaultTheme(FormLabelComponent);
32
+ export const TextField = withDefaultTheme(TextFieldComponent);
33
+ export const EmailSignupForm = withDefaultTheme(EmailSignupFormComponent);
34
+ export const Image = withDefaultTheme(ImageComponent);
35
+ export const Container = withDefaultTheme(ContainerComponent);
36
+ export const EntryList = withDefaultTheme(EntryListComponent);
37
+ export const EntryListItem = withDefaultTheme(EntryListItemComponent);
38
+ export const EntryListText = withDefaultTheme(EntryListTextComponent);
39
+ export const EntryListHeading = withDefaultTheme(EntryListHeadingComoponent);
40
+ export const Dropdown = withDefaultTheme(DropdownComponent);
41
+ export const Pagination = withDefaultTheme(PaginationComponent);
42
+ export const Accordion = withDefaultTheme(AccordionComponent);
43
+ export const AccordionItem = withDefaultTheme(AccordionItemComponent);
@@ -94,8 +94,8 @@ export const siteWidthRow = () => css `
94
94
  ${media.M `
95
95
  margin-bottom: ${SPACING.spacingXL};
96
96
  margin-top: ${SPACING.spacingXL};
97
- margin-left: ${rem(24)};
98
- margin-right: ${rem(24)};
97
+ margin-left: ${rem(SPACING.blockSpacingM)};
98
+ margin-right: ${rem(SPACING.blockSpacingM)};
99
99
  `}
100
100
 
101
101
  ${media.L `
@@ -103,6 +103,8 @@ export const siteWidthRow = () => css `
103
103
  margin-right: auto;
104
104
  margin-bottom: ${SPACING.spacingXXL};
105
105
  margin-left: auto;
106
+ padding-left: ${rem(SPACING.blockSpacingM)};
107
+ padding-right: ${rem(SPACING.blockSpacingM)};
106
108
  `}
107
109
  `;
108
110
  export const siteWidthRowXL = () => css `
@@ -120,8 +122,8 @@ export const siteWidthRowXL = () => css `
120
122
  ${media.M `
121
123
  margin-bottom: ${SPACING.spacingXL};
122
124
  margin-top: ${SPACING.spacingXL};
123
- margin-left: ${rem(24)};
124
- margin-right: ${rem(24)};
125
+ margin-left: ${rem(SPACING.blockSpacingM)};
126
+ margin-right: ${rem(SPACING.blockSpacingM)};
125
127
  `}
126
128
 
127
129
  ${media.XL `
@@ -129,6 +131,8 @@ export const siteWidthRowXL = () => css `
129
131
  margin-right: auto;
130
132
  margin-bottom: ${SPACING.spacingXXL};
131
133
  margin-left: auto;
134
+ padding-left: ${rem(SPACING.blockSpacingM)};
135
+ padding-right: ${rem(SPACING.blockSpacingM)};
132
136
  `}
133
137
  `;
134
138
  export const fullWidthRow = () => css `
@@ -7,6 +7,16 @@ export declare const BREAKPOINT_VALUES: {
7
7
  XL: number;
8
8
  XXL: number;
9
9
  };
10
+ export declare const SPACING: {
11
+ spacingXXS: string;
12
+ spacingXS: string;
13
+ spacingS: string;
14
+ spacingM: string;
15
+ spacingL: string;
16
+ spacingXL: string;
17
+ spacingXXL: string;
18
+ blockSpacingM: number;
19
+ };
10
20
  export declare const VARIABLES: {
11
21
  siteWidthS: string;
12
22
  siteWidth: string;
@@ -20,15 +30,6 @@ export declare const THEME_SPACING: {
20
30
  lg: string;
21
31
  xl: string;
22
32
  };
23
- export declare const SPACING: {
24
- spacingXXS: string;
25
- spacingXS: string;
26
- spacingS: string;
27
- spacingM: string;
28
- spacingL: string;
29
- spacingXL: string;
30
- spacingXXL: string;
31
- };
32
33
  export declare const FONTS: {
33
34
  valueRegular: string;
34
35
  valueMedium: string;
@@ -81,6 +82,7 @@ export declare const THEME_SETTINGS: {
81
82
  spacingL: string;
82
83
  spacingXL: string;
83
84
  spacingXXL: string;
85
+ blockSpacingM: number;
84
86
  skyBlue: string;
85
87
  black: string;
86
88
  blackLight: string;
@@ -8,10 +8,20 @@ export const BREAKPOINT_VALUES = {
8
8
  XL: 1200,
9
9
  XXL: 1440,
10
10
  };
11
+ export const SPACING = {
12
+ spacingXXS: rem(6),
13
+ spacingXS: rem(8),
14
+ spacingS: rem(12),
15
+ spacingM: rem(16),
16
+ spacingL: rem(32),
17
+ spacingXL: rem(40),
18
+ spacingXXL: rem(48),
19
+ blockSpacingM: 24,
20
+ };
11
21
  export const VARIABLES = {
12
22
  siteWidthS: rem(BREAKPOINT_VALUES.S_ALT),
13
- siteWidth: rem(BREAKPOINT_VALUES.L),
14
- siteWidthXL: rem(BREAKPOINT_VALUES.XL),
23
+ siteWidth: rem(BREAKPOINT_VALUES.L + SPACING.blockSpacingM * 2),
24
+ siteWidthXL: rem(BREAKPOINT_VALUES.XL + SPACING.blockSpacingM * 2),
15
25
  siteMaxWidth: rem(1920),
16
26
  mobileNavHeight: 56,
17
27
  };
@@ -21,15 +31,6 @@ export const THEME_SPACING = {
21
31
  lg: rem(32),
22
32
  xl: rem(40),
23
33
  };
24
- export const SPACING = {
25
- spacingXXS: rem(6),
26
- spacingXS: rem(8),
27
- spacingS: rem(12),
28
- spacingM: rem(16),
29
- spacingL: rem(32),
30
- spacingXL: rem(40),
31
- spacingXXL: rem(48),
32
- };
33
34
  export const FONTS = {
34
35
  valueRegular: '"ValueRegular", Arial, sans-serif',
35
36
  valueMedium: '"ValueMedium", Arial, sans-serif',
package/package.json CHANGED
@@ -1,67 +1,78 @@
1
- {
2
- "name": "@hlf-fe/pulmo-ui",
3
- "private": false,
4
- "version": "1.0.1",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "module": "dist/index.js",
8
- "types": "dist/index.d.ts",
9
- "files": [
10
- "dist"
11
- ],
12
- "scripts": {
13
- "dev": "npm-run-all --parallel storybook watch",
14
- "build": "tsc -b tsconfig.app.json",
15
- "watch": "tsc -b tsconfig.app.json --watch",
16
- "lint": "eslint .",
17
- "preview": "vite preview",
18
- "storybook": "storybook dev -p 6006",
19
- "build-storybook": "storybook build"
20
- },
21
- "dependencies": {
22
- "gatsby": "^5.14.3",
23
- "npm-run-all": "^4.1.5",
24
- "react": "^18.2.0",
25
- "react-dom": "^18.2.0",
26
- "styled-components": "^6.1.0"
27
- },
28
- "peerDependencies": {
29
- "gatsby": "^5.14.3",
30
- "react": "^18.2.0",
31
- "react-dom": "^18.2.0",
32
- "styled-components": "^6.1.0"
33
- },
34
- "devDependencies": {
35
- "@chromatic-com/storybook": "^3.2.6",
36
- "@eslint/js": "^9.25.0",
37
- "@storybook/addon-essentials": "^8.6.12",
38
- "@storybook/addon-onboarding": "^8.6.12",
39
- "@storybook/blocks": "^8.6.12",
40
- "@storybook/experimental-addon-test": "^8.6.12",
41
- "@storybook/react": "^8.6.12",
42
- "@storybook/react-vite": "^8.6.12",
43
- "@storybook/test": "^8.6.12",
44
- "@types/node": "^22.15.17",
45
- "@types/react": "^18.3.21",
46
- "@types/react-dom": "^18.3.7",
47
- "@vitejs/plugin-react": "^4.4.1",
48
- "@vitest/browser": "^3.1.3",
49
- "@vitest/coverage-v8": "^3.1.3",
50
- "eslint": "^9.25.0",
51
- "eslint-plugin-react-hooks": "^5.2.0",
52
- "eslint-plugin-react-refresh": "^0.4.19",
53
- "eslint-plugin-storybook": "^0.12.0",
54
- "globals": "^16.0.0",
55
- "playwright": "^1.52.0",
56
- "storybook": "^8.6.12",
57
- "typescript": "~5.8.3",
58
- "typescript-eslint": "^8.30.1",
59
- "vite": "^6.3.5",
60
- "vitest": "^3.1.3"
61
- },
62
- "eslintConfig": {
63
- "extends": [
64
- "plugin:storybook/recommended"
65
- ]
66
- }
67
- }
1
+ {
2
+ "name": "@hlf-fe/pulmo-ui",
3
+ "private": false,
4
+ "version": "1.1.0",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "dev": "npm-run-all --parallel storybook watch",
14
+ "build": "tsc -p tsconfig.app.json && tsc-alias -p tsconfig.app.json",
15
+ "watch": "nodemon --watch src --ext ts,tsx --exec \"tsc -p tsconfig.app.json && tsc-alias -p tsconfig.app.json\"",
16
+ "lint": "eslint .",
17
+ "preview": "vite preview",
18
+ "storybook": "storybook dev -p 6006",
19
+ "build-storybook": "storybook build",
20
+ "release:npm": "npm run build && npm publish --access public"
21
+ },
22
+ "dependencies": {
23
+ "@hookform/resolvers": "^5.0.1",
24
+ "gatsby": "^5.14.3",
25
+ "gatsby-plugin-image": "^3.14.0",
26
+ "i": "^0.3.7",
27
+ "nodemon": "^3.1.10",
28
+ "npm": "^11.3.0",
29
+ "npm-run-all": "^4.1.5",
30
+ "react": "^18.2.0",
31
+ "react-dom": "^18.2.0",
32
+ "react-hook-form": "^7.56.3",
33
+ "styled-components": "^6.1.0",
34
+ "vite-tsconfig-paths": "^5.1.4",
35
+ "yup": "^1.6.1"
36
+ },
37
+ "peerDependencies": {
38
+ "gatsby": "^5.14.3",
39
+ "react": "^18.2.0",
40
+ "react-dom": "^18.2.0",
41
+ "styled-components": "^6.1.0"
42
+ },
43
+ "devDependencies": {
44
+ "@chromatic-com/storybook": "^3.2.6",
45
+ "@eslint/js": "^9.25.0",
46
+ "@storybook/addon-essentials": "^8.6.12",
47
+ "@storybook/addon-onboarding": "^8.6.12",
48
+ "@storybook/blocks": "^8.6.12",
49
+ "@storybook/experimental-addon-test": "^8.6.12",
50
+ "@storybook/react": "^8.6.12",
51
+ "@storybook/react-vite": "^8.6.12",
52
+ "@storybook/test": "^8.6.12",
53
+ "@types/node": "^22.15.17",
54
+ "@types/react": "^18.3.21",
55
+ "@types/react-dom": "^18.3.7",
56
+ "@vitejs/plugin-react": "^4.4.1",
57
+ "@vitest/browser": "^3.1.3",
58
+ "@vitest/coverage-v8": "^3.1.3",
59
+ "concurrently": "^9.1.2",
60
+ "eslint": "^9.25.0",
61
+ "eslint-plugin-react-hooks": "^5.2.0",
62
+ "eslint-plugin-react-refresh": "^0.4.19",
63
+ "eslint-plugin-storybook": "^0.12.0",
64
+ "globals": "^16.0.0",
65
+ "playwright": "^1.52.0",
66
+ "storybook": "^8.6.12",
67
+ "tsc-alias": "^1.8.16",
68
+ "typescript": "~5.8.3",
69
+ "typescript-eslint": "^8.30.1",
70
+ "vite": "^6.3.5",
71
+ "vitest": "^3.1.3"
72
+ },
73
+ "eslintConfig": {
74
+ "extends": [
75
+ "plugin:storybook/recommended"
76
+ ]
77
+ }
78
+ }
package/dist/App.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import './App.css';
2
- declare function App(): import("react/jsx-runtime").JSX.Element;
3
- export default App;