@pareto-engineering/design-system 2.0.0-alpha.41 → 2.0.0-alpha.42

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 (189) hide show
  1. package/dist/cjs/a/GradientBackground/GradientBackground.js +140 -0
  2. package/dist/cjs/a/GradientBackground/index.js +15 -0
  3. package/dist/cjs/a/GradientBackground/styles.scss +191 -0
  4. package/dist/cjs/a/Popover/Popover.js +134 -0
  5. package/dist/cjs/a/Popover/common/Divider/Divider.js +67 -0
  6. package/dist/cjs/a/Popover/common/Divider/index.js +15 -0
  7. package/dist/cjs/a/Popover/common/Item/Item.js +67 -0
  8. package/dist/cjs/a/Popover/common/Item/index.js +15 -0
  9. package/dist/cjs/a/Popover/common/index.js +21 -0
  10. package/dist/cjs/a/Popover/index.js +15 -0
  11. package/dist/cjs/a/Popover/styles.scss +43 -0
  12. package/dist/cjs/a/index.js +9 -1
  13. package/dist/cjs/c/AcceptCookies/AcceptCookies.js +134 -0
  14. package/dist/cjs/c/AcceptCookies/index.js +15 -0
  15. package/dist/cjs/c/AcceptCookies/styles.scss +49 -0
  16. package/dist/cjs/c/BlogCategoryButton/BlogCategoryButton.js +95 -0
  17. package/dist/cjs/c/BlogCategoryButton/index.js +15 -0
  18. package/dist/cjs/c/BlogContext/BlogContextProvider.js +63 -0
  19. package/dist/cjs/c/BlogContext/Context.js +16 -0
  20. package/dist/cjs/c/BlogContext/ContextProvider.js +63 -0
  21. package/dist/cjs/c/BlogContext/index.js +31 -0
  22. package/dist/cjs/c/BlogContext/useBlog.js +16 -0
  23. package/dist/cjs/c/BlogPost/BlogPost.js +147 -0
  24. package/dist/cjs/c/BlogPost/index.js +15 -0
  25. package/dist/cjs/c/BlogPost/styles.scss +33 -0
  26. package/dist/cjs/c/BlogPostsList/BlogPostsList.js +73 -0
  27. package/dist/cjs/c/BlogPostsList/common/Card/Card.js +170 -0
  28. package/dist/cjs/c/BlogPostsList/common/Card/index.js +15 -0
  29. package/dist/cjs/c/BlogPostsList/common/index.js +13 -0
  30. package/dist/cjs/c/BlogPostsList/index.js +15 -0
  31. package/dist/cjs/c/BlogPostsList/styles.scss +72 -0
  32. package/dist/cjs/c/SiteFooter/SiteFooter.js +73 -0
  33. package/dist/cjs/c/SiteFooter/common/Section/Section.js +95 -0
  34. package/dist/cjs/c/SiteFooter/common/Section/index.js +15 -0
  35. package/dist/cjs/c/SiteFooter/common/index.js +13 -0
  36. package/dist/cjs/c/SiteFooter/index.js +15 -0
  37. package/dist/cjs/c/SiteFooter/styles.scss +34 -0
  38. package/dist/cjs/c/SiteHeaderCTA/SiteHeaderCTA.js +108 -0
  39. package/dist/cjs/c/SiteHeaderCTA/index.js +15 -0
  40. package/dist/cjs/c/SiteHeaderCTA/styles.scss +44 -0
  41. package/dist/cjs/c/SiteMission/SiteMission.js +113 -0
  42. package/dist/cjs/c/SiteMission/index.js +15 -0
  43. package/dist/cjs/c/SiteMission/styles.scss +30 -0
  44. package/dist/cjs/c/SiteNavigation/SiteNavigation.js +130 -0
  45. package/dist/cjs/c/SiteNavigation/index.js +15 -0
  46. package/dist/cjs/c/SiteNavigation/styles.scss +118 -0
  47. package/dist/cjs/c/SiteOnboardingStep/SiteOnboardingStep.js +98 -0
  48. package/dist/cjs/c/SiteOnboardingStep/index.js +15 -0
  49. package/dist/cjs/c/SiteOnboardingStep/styles.scss +51 -0
  50. package/dist/cjs/c/SitePricing/SitePricing.js +108 -0
  51. package/dist/cjs/c/SitePricing/index.js +15 -0
  52. package/dist/cjs/c/SitePricing/styles.scss +73 -0
  53. package/dist/cjs/c/SiteServices/SiteServices.js +211 -0
  54. package/dist/cjs/c/SiteServices/index.js +15 -0
  55. package/dist/cjs/c/SiteServices/styles.scss +138 -0
  56. package/dist/cjs/c/TeamGallery/TeamGallery.js +80 -0
  57. package/dist/cjs/c/TeamGallery/common/PersonCard/PersonCard.js +84 -0
  58. package/dist/cjs/c/TeamGallery/common/PersonCard/index.js +15 -0
  59. package/dist/cjs/c/TeamGallery/common/index.js +13 -0
  60. package/dist/cjs/c/TeamGallery/index.js +15 -0
  61. package/dist/cjs/c/TeamGallery/styles.scss +100 -0
  62. package/dist/cjs/c/Testimonials/Testimonials.js +119 -0
  63. package/dist/cjs/c/Testimonials/index.js +15 -0
  64. package/dist/cjs/c/Testimonials/styles.scss +112 -0
  65. package/dist/cjs/experimental/GradientBackground/GradientBackground.js +98 -0
  66. package/dist/cjs/experimental/GradientBackground/index.js +15 -0
  67. package/dist/cjs/experimental/GradientBackground/styles.scss +64 -0
  68. package/dist/cjs/experimental/index.js +13 -0
  69. package/dist/cjs/f/fields/CheckboxInput/CheckboxInput.js +105 -0
  70. package/dist/cjs/f/fields/CheckboxInput/index.js +15 -0
  71. package/dist/cjs/f/fields/CheckboxInput/styles.scss +28 -0
  72. package/dist/cjs/f/fields/RadioInput/RadioInput.js +110 -0
  73. package/dist/cjs/f/fields/RadioInput/index.js +15 -0
  74. package/dist/cjs/f/fields/RadioInput/styles.scss +26 -0
  75. package/dist/cjs/f/fields/TaskRecommendation/TaskRecommendation.js +129 -0
  76. package/dist/cjs/f/fields/TaskRecommendation/index.js +15 -0
  77. package/dist/cjs/f/fields/TaskRecommendation/styles.scss +37 -0
  78. package/dist/cjs/f/fields/TaskRecommendationInput/TaskRecommendationInput.js +131 -0
  79. package/dist/cjs/f/fields/TaskRecommendationInput/index.js +15 -0
  80. package/dist/cjs/f/fields/TaskRecommendationInput/styles.scss +41 -0
  81. package/dist/cjs/f/fields/TextArea/TextArea.js +141 -0
  82. package/dist/cjs/f/fields/TextArea/index.js +15 -0
  83. package/dist/cjs/f/fields/TextArea/styles.scss +19 -0
  84. package/dist/cjs/index.js +13 -0
  85. package/dist/cjs/utils/hooks/index.js +23 -0
  86. package/dist/cjs/utils/hooks/useDynamicPosition.js +107 -0
  87. package/dist/cjs/utils/hooks/useWindowSize.js +39 -0
  88. package/dist/cjs/utils/index.js +19 -0
  89. package/dist/es/a/GradientBackground/GradientBackground.js +118 -0
  90. package/dist/es/a/GradientBackground/index.js +2 -0
  91. package/dist/es/a/GradientBackground/styles.scss +191 -0
  92. package/dist/es/a/Popover/Popover.js +118 -0
  93. package/dist/es/a/Popover/common/Divider/Divider.js +47 -0
  94. package/dist/es/a/Popover/common/Divider/index.js +2 -0
  95. package/dist/es/a/Popover/common/Item/Item.js +47 -0
  96. package/dist/es/a/Popover/common/Item/index.js +2 -0
  97. package/dist/es/a/Popover/common/index.js +2 -0
  98. package/dist/es/a/Popover/index.js +2 -0
  99. package/dist/es/a/Popover/styles.scss +43 -0
  100. package/dist/es/a/index.js +2 -1
  101. package/dist/es/c/AcceptCookies/AcceptCookies.js +117 -0
  102. package/dist/es/c/AcceptCookies/index.js +2 -0
  103. package/dist/es/c/AcceptCookies/styles.scss +49 -0
  104. package/dist/es/c/BlogCategoryButton/BlogCategoryButton.js +68 -0
  105. package/dist/es/c/BlogCategoryButton/index.js +2 -0
  106. package/dist/es/c/BlogContext/BlogContextProvider.js +45 -0
  107. package/dist/es/c/BlogContext/Context.js +2 -0
  108. package/dist/es/c/BlogContext/ContextProvider.js +45 -0
  109. package/dist/es/c/BlogContext/index.js +4 -0
  110. package/dist/es/c/BlogContext/useBlog.js +3 -0
  111. package/dist/es/c/BlogPost/BlogPost.js +128 -0
  112. package/dist/es/c/BlogPost/index.js +2 -0
  113. package/dist/es/c/BlogPost/styles.scss +33 -0
  114. package/dist/es/c/BlogPostsList/BlogPostsList.js +56 -0
  115. package/dist/es/c/BlogPostsList/common/Card/Card.js +143 -0
  116. package/dist/es/c/BlogPostsList/common/Card/index.js +2 -0
  117. package/dist/es/c/BlogPostsList/common/index.js +1 -0
  118. package/dist/es/c/BlogPostsList/index.js +2 -0
  119. package/dist/es/c/BlogPostsList/styles.scss +72 -0
  120. package/dist/es/c/SiteFooter/SiteFooter.js +56 -0
  121. package/dist/es/c/SiteFooter/common/Section/Section.js +73 -0
  122. package/dist/es/c/SiteFooter/common/Section/index.js +2 -0
  123. package/dist/es/c/SiteFooter/common/index.js +1 -0
  124. package/dist/es/c/SiteFooter/index.js +2 -0
  125. package/dist/es/c/SiteFooter/styles.scss +34 -0
  126. package/dist/es/c/SiteHeaderCTA/SiteHeaderCTA.js +92 -0
  127. package/dist/es/c/SiteHeaderCTA/index.js +2 -0
  128. package/dist/es/c/SiteHeaderCTA/styles.scss +44 -0
  129. package/dist/es/c/SiteMission/SiteMission.js +96 -0
  130. package/dist/es/c/SiteMission/index.js +2 -0
  131. package/dist/es/c/SiteMission/styles.scss +30 -0
  132. package/dist/es/c/SiteNavigation/SiteNavigation.js +111 -0
  133. package/dist/es/c/SiteNavigation/index.js +2 -0
  134. package/dist/es/c/SiteNavigation/styles.scss +118 -0
  135. package/dist/es/c/SiteOnboardingStep/SiteOnboardingStep.js +81 -0
  136. package/dist/es/c/SiteOnboardingStep/index.js +2 -0
  137. package/dist/es/c/SiteOnboardingStep/styles.scss +51 -0
  138. package/dist/es/c/SitePricing/SitePricing.js +91 -0
  139. package/dist/es/c/SitePricing/index.js +2 -0
  140. package/dist/es/c/SitePricing/styles.scss +73 -0
  141. package/dist/es/c/SiteServices/SiteServices.js +195 -0
  142. package/dist/es/c/SiteServices/index.js +2 -0
  143. package/dist/es/c/SiteServices/styles.scss +138 -0
  144. package/dist/es/c/TeamGallery/TeamGallery.js +64 -0
  145. package/dist/es/c/TeamGallery/common/PersonCard/PersonCard.js +64 -0
  146. package/dist/es/c/TeamGallery/common/PersonCard/index.js +2 -0
  147. package/dist/es/c/TeamGallery/common/index.js +1 -0
  148. package/dist/es/c/TeamGallery/index.js +2 -0
  149. package/dist/es/c/TeamGallery/styles.scss +100 -0
  150. package/dist/es/c/Testimonials/Testimonials.js +99 -0
  151. package/dist/es/c/Testimonials/index.js +2 -0
  152. package/dist/es/c/Testimonials/styles.scss +112 -0
  153. package/dist/es/experimental/GradientBackground/GradientBackground.js +76 -0
  154. package/dist/es/experimental/GradientBackground/index.js +2 -0
  155. package/dist/es/experimental/GradientBackground/styles.scss +64 -0
  156. package/dist/es/experimental/index.js +1 -0
  157. package/dist/es/f/fields/CheckboxInput/CheckboxInput.js +85 -0
  158. package/dist/es/f/fields/CheckboxInput/index.js +2 -0
  159. package/dist/es/f/fields/CheckboxInput/styles.scss +28 -0
  160. package/dist/es/f/fields/RadioInput/RadioInput.js +90 -0
  161. package/dist/es/f/fields/RadioInput/index.js +2 -0
  162. package/dist/es/f/fields/RadioInput/styles.scss +26 -0
  163. package/dist/es/f/fields/TaskRecommendation/TaskRecommendation.js +111 -0
  164. package/dist/es/f/fields/TaskRecommendation/index.js +2 -0
  165. package/dist/es/f/fields/TaskRecommendation/styles.scss +37 -0
  166. package/dist/es/f/fields/TaskRecommendationInput/TaskRecommendationInput.js +111 -0
  167. package/dist/es/f/fields/TaskRecommendationInput/index.js +2 -0
  168. package/dist/es/f/fields/TaskRecommendationInput/styles.scss +41 -0
  169. package/dist/es/f/fields/TextArea/TextArea.js +124 -0
  170. package/dist/es/f/fields/TextArea/index.js +2 -0
  171. package/dist/es/f/fields/TextArea/styles.scss +19 -0
  172. package/dist/es/index.js +2 -1
  173. package/dist/es/utils/hooks/index.js +2 -0
  174. package/dist/es/utils/hooks/useDynamicPosition.js +93 -0
  175. package/dist/es/utils/hooks/useWindowSize.js +27 -0
  176. package/dist/es/utils/index.js +1 -0
  177. package/package.json +1 -1
  178. package/src/__snapshots__/Storyshots.test.js.snap +413 -1
  179. package/src/stories/a/Popover.stories.jsx +106 -0
  180. package/src/stories/utils/lorem.js +15 -0
  181. package/src/ui/a/Popover/Popover.jsx +157 -0
  182. package/src/ui/a/Popover/index.js +2 -0
  183. package/src/ui/a/Popover/styles.scss +43 -0
  184. package/src/ui/a/index.js +1 -0
  185. package/src/ui/index.js +1 -0
  186. package/src/ui/utils/hooks/index.js +2 -0
  187. package/src/ui/utils/hooks/useDynamicPosition.js +104 -0
  188. package/src/ui/utils/hooks/useWindowSize.js +32 -0
  189. package/src/ui/utils/index.js +1 -0
@@ -0,0 +1,111 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ /* @pareto-engineering/generator-front 1.0.12 */
4
+ import * as React from 'react';
5
+ import { useLayoutEffect, memo } from 'react';
6
+ import PropTypes from 'prop-types';
7
+ import { useField } from 'formik';
8
+ import styleNames from '@pareto-engineering/bem';
9
+ import { FormLabel } from "../../common"; // Local Definitions
10
+
11
+ const baseClassName = styleNames.base;
12
+ const componentClassName = 'task-recommendation-input';
13
+ /**
14
+ * This is the component description.
15
+ */
16
+
17
+ const TaskRecommendationInput = ({
18
+ id,
19
+ className: userClassName,
20
+ style,
21
+ name,
22
+ value,
23
+ oneLiner,
24
+ label,
25
+ color,
26
+ image // ...otherProps
27
+
28
+ }) => {
29
+ var _field$value;
30
+
31
+ useLayoutEffect(() => {
32
+ import("./styles.scss");
33
+ }, []);
34
+ const [field] = useField(name);
35
+ const isOptionSelected = !!(((_field$value = field.value) === null || _field$value === void 0 ? void 0 : _field$value.length) > 0 && field.value.includes(value));
36
+ return /*#__PURE__*/React.createElement("div", {
37
+ id: id,
38
+ className: [baseClassName, componentClassName, userClassName, `x-${color}`].filter(e => e).join(' '),
39
+ style: style // {...otherProps}
40
+
41
+ }, /*#__PURE__*/React.createElement("div", {
42
+ className: `task-content ${isOptionSelected ? 'b-x' : 'b-on-x'}`
43
+ }, /*#__PURE__*/React.createElement("div", {
44
+ className: "v1 p-v task"
45
+ }, /*#__PURE__*/React.createElement(FormLabel, {
46
+ className: `uc mb-v ${isOptionSelected ? styleNames.modifierActive : ''}`,
47
+ name: name
48
+ }, label), /*#__PURE__*/React.createElement("input", _extends({}, field, {
49
+ value: value,
50
+ id: name,
51
+ className: "input",
52
+ type: "checkbox"
53
+ })), /*#__PURE__*/React.createElement("img", {
54
+ className: "image",
55
+ src: image,
56
+ alt: "img"
57
+ }), /*#__PURE__*/React.createElement("p", {
58
+ className: ['uc u2 mt-u', isOptionSelected && 'c-on-x'].filter(e => e).join(' ')
59
+ }, oneLiner))));
60
+ };
61
+
62
+ TaskRecommendationInput.propTypes = {
63
+ /**
64
+ * The HTML id for this element
65
+ */
66
+ id: PropTypes.string,
67
+
68
+ /**
69
+ * The HTML class names for this element
70
+ */
71
+ className: PropTypes.string,
72
+
73
+ /**
74
+ * The React-written, css properties for this element.
75
+ */
76
+ style: PropTypes.objectOf(PropTypes.string),
77
+
78
+ /**
79
+ * The name of the input
80
+ */
81
+ name: PropTypes.string.isRequired,
82
+
83
+ /**
84
+ * The value of the input
85
+ */
86
+ value: PropTypes.string.isRequired,
87
+
88
+ /**
89
+ * The task one liner description
90
+ */
91
+ oneLiner: PropTypes.string.isRequired,
92
+
93
+ /**
94
+ * The task label
95
+ */
96
+ label: PropTypes.string.isRequired,
97
+
98
+ /**
99
+ * The color
100
+ */
101
+ color: PropTypes.string,
102
+
103
+ /**
104
+ * Task image
105
+ */
106
+ image: PropTypes.string.isRequired
107
+ };
108
+ TaskRecommendationInput.defaultProps = {
109
+ color: 'main2'
110
+ };
111
+ export default /*#__PURE__*/memo(TaskRecommendationInput);
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as TaskRecommendationInput } from "./TaskRecommendationInput";
@@ -0,0 +1,41 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ @use "@pareto-engineering/bem";
3
+
4
+ .#{bem.$base}.task-recommendation-input {
5
+
6
+ .task-content {
7
+ border-radius: var(--theme-border-radius);
8
+ border: 1px solid var(--x);
9
+ height: 100%;
10
+
11
+ .task {
12
+ position: relative;
13
+ display: flex;
14
+ flex-direction: column;
15
+ justify-content: space-around;
16
+ align-items: center;
17
+ height: 100%;
18
+
19
+ .#{bem.$modifier-active} {
20
+ color: var(--on-x);
21
+ }
22
+
23
+ .input {
24
+ appearance: none;
25
+ position: absolute;
26
+ left: 0;
27
+ top: 0;
28
+ bottom:0;
29
+ cursor: pointer;
30
+ width: 100%;
31
+ }
32
+
33
+ .image {
34
+ width: 7rem;
35
+ }
36
+ }
37
+ }
38
+ }
39
+
40
+
41
+
@@ -0,0 +1,124 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ /* @pareto-engineering/generator-front 1.0.12 */
4
+ import * as React from 'react';
5
+ import { useLayoutEffect } from 'react';
6
+ import PropTypes from 'prop-types';
7
+ import styleNames from '@pareto-engineering/bem';
8
+ import { useField } from 'formik'; // Local Definitions
9
+
10
+ import { FormLabel, FormDescription } from "../../common";
11
+ const baseClassName = styleNames.base;
12
+ const componentClassName = 'text-area';
13
+ /**
14
+ * This is the component description.
15
+ */
16
+
17
+ const TextArea = ({
18
+ id,
19
+ className: userClassName,
20
+ style,
21
+ name,
22
+ label,
23
+ validate,
24
+ labelAsDescription,
25
+ textAreaId,
26
+ rows,
27
+ textAreaColor,
28
+ labelColor,
29
+ description // ...otherProps
30
+
31
+ }) => {
32
+ useLayoutEffect(() => {
33
+ import("./styles.scss");
34
+ }, []);
35
+ const [field, meta] = useField({
36
+ name,
37
+ validate
38
+ });
39
+ return /*#__PURE__*/React.createElement("div", {
40
+ id: id,
41
+ className: [baseClassName, componentClassName, userClassName, `x-${textAreaColor}`, `y-${labelColor}`].filter(e => e).join(' '),
42
+ style: style // {...otherProps}
43
+
44
+ }, /*#__PURE__*/React.createElement(FormLabel, {
45
+ className: ['c-y', labelAsDescription ? 'md-s2 s0 v1 mb-v' : 'v50 mb-v'].filter(e => e).join(' '),
46
+ name: name
47
+ }, label), /*#__PURE__*/React.createElement("textarea", _extends({
48
+ id: textAreaId,
49
+ className: `textarea v50 pv-v ${meta.touched && meta.error ? 'input-border-error' : 'input-border'}`
50
+ }, field, {
51
+ rows: rows
52
+ })), (description || meta.touched && meta.error) && /*#__PURE__*/React.createElement(FormDescription, {
53
+ isError: !!meta.error,
54
+ className: "v50 mt-v s-1"
55
+ }, meta.error || description), ' ');
56
+ };
57
+
58
+ TextArea.propTypes = {
59
+ /**
60
+ * The HTML id for this element
61
+ */
62
+ id: PropTypes.string,
63
+
64
+ /**
65
+ * The HTML class names for this element
66
+ */
67
+ className: PropTypes.string,
68
+
69
+ /**
70
+ * The React-written, css properties for this element.
71
+ */
72
+ style: PropTypes.objectOf(PropTypes.string),
73
+
74
+ /**
75
+ * The input name (html - and Formik state)
76
+ */
77
+ name: PropTypes.string.isRequired,
78
+
79
+ /**
80
+ * The input label
81
+ */
82
+ label: PropTypes.string.isRequired,
83
+
84
+ /**
85
+ * The input value validator function
86
+ */
87
+ validate: PropTypes.func,
88
+
89
+ /**
90
+ * If the text area depends on it's label's text as the default description
91
+ */
92
+ labelAsDescription: PropTypes.bool,
93
+
94
+ /**
95
+ * The textarea id
96
+ */
97
+ textAreaId: PropTypes.string,
98
+
99
+ /**
100
+ * The number of rows int the text area
101
+ */
102
+ rows: PropTypes.number,
103
+
104
+ /**
105
+ * Text area base color
106
+ */
107
+ textAreaColor: PropTypes.string,
108
+
109
+ /**
110
+ * Label base color
111
+ */
112
+ labelColor: PropTypes.string,
113
+
114
+ /**
115
+ * Text area description
116
+ */
117
+ description: PropTypes.string
118
+ };
119
+ TextArea.defaultProps = {
120
+ rows: 3,
121
+ textAreaColor: 'background',
122
+ labelColor: 'main1'
123
+ };
124
+ export default TextArea;
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as TextArea } from "./TextArea";
@@ -0,0 +1,19 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ @use "@pareto-engineering/bem";
3
+
4
+ .#{bem.$base}.text-area{
5
+ display: flex;
6
+ flex-direction: column;
7
+
8
+ .textarea {
9
+ background: var(--light-x);
10
+ color: var(--on-x);
11
+
12
+ &:focus {
13
+ background: var(--dark-x);
14
+ }
15
+ }
16
+ }
17
+
18
+
19
+
package/dist/es/index.js CHANGED
@@ -4,4 +4,5 @@ export * from "./a";
4
4
  export * from "./b";
5
5
  export * from "./c";
6
6
  export * from "./d";
7
- export * from "./f";
7
+ export * from "./f";
8
+ export * from "./utils";
@@ -0,0 +1,2 @@
1
+ export { default as useWindowSize } from "./useWindowSize";
2
+ export { default as useDynamicPosition } from "./useDynamicPosition";
@@ -0,0 +1,93 @@
1
+ import { useState, useEffect, useMemo, useCallback } from 'react';
2
+ import throttle from 'lodash/throttle';
3
+ import useWindowSize from "./useWindowSize";
4
+ const verticalPositions = ['top', 'bottom'];
5
+ const horizontalPositions = ['left', 'right'];
6
+
7
+ const findCompatiblePositions = (primary, secondaryArray) => {
8
+ if (verticalPositions.includes(primary)) {
9
+ return secondaryArray.filter(secondary => horizontalPositions.includes(secondary));
10
+ }
11
+
12
+ if (horizontalPositions.includes(primary)) {
13
+ return secondaryArray.filter(secondary => verticalPositions.includes(secondary));
14
+ }
15
+
16
+ return [];
17
+ };
18
+
19
+ const useDynamicPosition = ({
20
+ elementRef,
21
+ parentRef,
22
+ preferredPrimaryOrder,
23
+ preferredSecondaryOrder,
24
+ // offsetYPx,
25
+ offsetXPx,
26
+ throttleMs = 200
27
+ }) => {
28
+ const isClient = typeof window === 'object';
29
+ const {
30
+ height: currentHeight,
31
+ width: currentWidth
32
+ } = useWindowSize();
33
+ const [primaryPosition, setPrimaryPosition] = useState(preferredPrimaryOrder[0]);
34
+ const compatibleSecondaryPositions = useMemo(() => findCompatiblePositions(primaryPosition, preferredSecondaryOrder), [primaryPosition, preferredSecondaryOrder]);
35
+ const [secondaryPosition, setSecondaryPosition] = useState(compatibleSecondaryPositions[0]);
36
+ const handle = useCallback(throttle(() => {
37
+ const parentNode = parentRef === null || parentRef === void 0 ? void 0 : parentRef.current;
38
+ const elementNode = elementRef === null || elementRef === void 0 ? void 0 : elementRef.current;
39
+ const {
40
+ top: parentTop,
41
+ bottom: parentBottom,
42
+ right: parentRight,
43
+ left: parentLeft
44
+ } = (parentNode === null || parentNode === void 0 ? void 0 : parentNode.getBoundingClientRect()) || {};
45
+ const {
46
+ width: elementWidth,
47
+ height: elementHeight
48
+ } = (elementNode === null || elementNode === void 0 ? void 0 : elementNode.getBoundingClientRect()) || {};
49
+ const availablePositions = {
50
+ top: parentTop >= elementHeight,
51
+ bottom: currentHeight - parentBottom >= elementHeight,
52
+ right: parentRight >= elementWidth,
53
+ left: currentWidth - parentLeft >= elementWidth
54
+ };
55
+
56
+ for (let i = 0; i < preferredPrimaryOrder.length; i += 1) {
57
+ const position = preferredPrimaryOrder[i];
58
+
59
+ if (availablePositions[position]) {
60
+ setPrimaryPosition(position);
61
+ break;
62
+ }
63
+ }
64
+
65
+ for (let i = 0; i < compatibleSecondaryPositions.length; i += 1) {
66
+ const position = compatibleSecondaryPositions[i];
67
+
68
+ if (availablePositions[position]) {
69
+ setSecondaryPosition(position);
70
+ break;
71
+ }
72
+ }
73
+ }, throttleMs), [elementRef, offsetXPx, throttleMs]);
74
+ useEffect(() => {
75
+ if (!isClient) {
76
+ return false;
77
+ }
78
+
79
+ handle();
80
+ window.addEventListener('scroll', handle);
81
+ window.addEventListener('resize', handle);
82
+ return () => {
83
+ window.removeEventListener('scroll', handle);
84
+ window.removeEventListener('resize', handle);
85
+ };
86
+ }, [handle]);
87
+ return {
88
+ primaryPosition,
89
+ secondaryPosition
90
+ };
91
+ };
92
+
93
+ export default useDynamicPosition;
@@ -0,0 +1,27 @@
1
+ import { useCallback, useState, useEffect } from 'react';
2
+ import debounce from 'lodash/debounce';
3
+
4
+ const useWindowSize = (debounceMs = 700) => {
5
+ const isClient = typeof window === 'object';
6
+
7
+ const getSize = () => ({
8
+ width: isClient ? window.innerWidth : undefined,
9
+ height: isClient ? window.innerHeight : undefined
10
+ });
11
+
12
+ const [windowSize, setWindowSize] = useState(getSize);
13
+ const handle = useCallback(debounce(() => {
14
+ setWindowSize(getSize());
15
+ }, debounceMs));
16
+ useEffect(() => {
17
+ if (!isClient) {
18
+ return false;
19
+ }
20
+
21
+ window.addEventListener('resize', handle);
22
+ return () => window.removeEventListener('resize', handle);
23
+ }, [getSize, handle, isClient]);
24
+ return windowSize;
25
+ };
26
+
27
+ export default useWindowSize;
@@ -0,0 +1 @@
1
+ export { useWindowSize, useDynamicPosition } from "./hooks";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pareto-engineering/design-system",
3
- "version": "2.0.0-alpha.41",
3
+ "version": "2.0.0-alpha.42",
4
4
  "description": "",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/es/index.js",