@pareto-engineering/design-system 2.0.0-alpha.30 → 2.0.0-alpha.34

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 (187) hide show
  1. package/dist/cjs/a/ContentTree/ContentTree.js +83 -0
  2. package/dist/cjs/a/ContentTree/common/Tree/Tree.js +116 -0
  3. package/dist/cjs/a/ContentTree/common/Tree/index.js +15 -0
  4. package/dist/cjs/a/ContentTree/common/index.js +31 -0
  5. package/dist/cjs/a/ContentTree/common/useContentTree.js +82 -0
  6. package/dist/cjs/a/ContentTree/common/useFirstVisibleNode.js +65 -0
  7. package/dist/cjs/a/ContentTree/index.js +15 -0
  8. package/dist/cjs/a/ContentTree/styles.scss +33 -0
  9. package/dist/cjs/a/GradientBackground/GradientBackground.js +140 -0
  10. package/dist/cjs/a/GradientBackground/index.js +15 -0
  11. package/dist/cjs/a/GradientBackground/styles.scss +191 -0
  12. package/dist/cjs/a/SVG/SVG.js +3 -9
  13. package/dist/cjs/a/index.js +9 -1
  14. package/dist/cjs/c/AcceptCookies/AcceptCookies.js +134 -0
  15. package/dist/cjs/c/AcceptCookies/index.js +15 -0
  16. package/dist/cjs/c/AcceptCookies/styles.scss +49 -0
  17. package/dist/cjs/c/BlogCategoryButton/BlogCategoryButton.js +95 -0
  18. package/dist/cjs/c/BlogCategoryButton/index.js +15 -0
  19. package/dist/cjs/c/BlogContext/BlogContextProvider.js +63 -0
  20. package/dist/cjs/c/BlogContext/Context.js +16 -0
  21. package/dist/cjs/c/BlogContext/ContextProvider.js +63 -0
  22. package/dist/cjs/c/BlogContext/index.js +31 -0
  23. package/dist/cjs/c/BlogContext/useBlog.js +16 -0
  24. package/dist/cjs/c/BlogPost/BlogPost.js +147 -0
  25. package/dist/cjs/c/BlogPost/index.js +15 -0
  26. package/dist/cjs/c/BlogPost/styles.scss +33 -0
  27. package/dist/cjs/c/BlogPostsList/BlogPostsList.js +73 -0
  28. package/dist/cjs/c/BlogPostsList/common/Card/Card.js +170 -0
  29. package/dist/cjs/c/BlogPostsList/common/Card/index.js +15 -0
  30. package/dist/cjs/c/BlogPostsList/common/index.js +13 -0
  31. package/dist/cjs/c/BlogPostsList/index.js +15 -0
  32. package/dist/cjs/c/BlogPostsList/styles.scss +72 -0
  33. package/dist/cjs/c/ContentSlides/common/HorizontalMenu/HorizontalMenu.js +1 -1
  34. package/dist/cjs/c/SiteFooter/SiteFooter.js +73 -0
  35. package/dist/cjs/c/SiteFooter/common/Section/Section.js +95 -0
  36. package/dist/cjs/c/SiteFooter/common/Section/index.js +15 -0
  37. package/dist/cjs/c/SiteFooter/common/index.js +13 -0
  38. package/dist/cjs/c/SiteFooter/index.js +15 -0
  39. package/dist/cjs/c/SiteFooter/styles.scss +34 -0
  40. package/dist/cjs/c/SiteHeaderCTA/SiteHeaderCTA.js +108 -0
  41. package/dist/cjs/c/SiteHeaderCTA/index.js +15 -0
  42. package/dist/cjs/c/SiteHeaderCTA/styles.scss +44 -0
  43. package/dist/cjs/c/SiteMission/SiteMission.js +113 -0
  44. package/dist/cjs/c/SiteMission/index.js +15 -0
  45. package/dist/cjs/c/SiteMission/styles.scss +30 -0
  46. package/dist/cjs/c/SiteNavigation/SiteNavigation.js +130 -0
  47. package/dist/cjs/c/SiteNavigation/index.js +15 -0
  48. package/dist/cjs/c/SiteNavigation/styles.scss +118 -0
  49. package/dist/cjs/c/SiteOnboardingStep/SiteOnboardingStep.js +98 -0
  50. package/dist/cjs/c/SiteOnboardingStep/index.js +15 -0
  51. package/dist/cjs/c/SiteOnboardingStep/styles.scss +51 -0
  52. package/dist/cjs/c/SitePricing/SitePricing.js +108 -0
  53. package/dist/cjs/c/SitePricing/index.js +15 -0
  54. package/dist/cjs/c/SitePricing/styles.scss +73 -0
  55. package/dist/cjs/c/SiteServices/SiteServices.js +211 -0
  56. package/dist/cjs/c/SiteServices/index.js +15 -0
  57. package/dist/cjs/c/SiteServices/styles.scss +138 -0
  58. package/dist/cjs/c/TeamGallery/TeamGallery.js +80 -0
  59. package/dist/cjs/c/TeamGallery/common/PersonCard/PersonCard.js +84 -0
  60. package/dist/cjs/c/TeamGallery/common/PersonCard/index.js +15 -0
  61. package/dist/cjs/c/TeamGallery/common/index.js +13 -0
  62. package/dist/cjs/c/TeamGallery/index.js +15 -0
  63. package/dist/cjs/c/TeamGallery/styles.scss +100 -0
  64. package/dist/cjs/c/Testimonials/Testimonials.js +119 -0
  65. package/dist/cjs/c/Testimonials/index.js +15 -0
  66. package/dist/cjs/c/Testimonials/styles.scss +112 -0
  67. package/dist/cjs/experimental/GradientBackground/GradientBackground.js +98 -0
  68. package/dist/cjs/experimental/GradientBackground/index.js +15 -0
  69. package/dist/cjs/experimental/GradientBackground/styles.scss +64 -0
  70. package/dist/cjs/experimental/index.js +13 -0
  71. package/dist/cjs/f/fields/CheckboxInput/CheckboxInput.js +105 -0
  72. package/dist/cjs/f/fields/CheckboxInput/index.js +15 -0
  73. package/dist/cjs/f/fields/CheckboxInput/styles.scss +28 -0
  74. package/dist/cjs/f/fields/RadioInput/RadioInput.js +110 -0
  75. package/dist/cjs/f/fields/RadioInput/index.js +15 -0
  76. package/dist/cjs/f/fields/RadioInput/styles.scss +26 -0
  77. package/dist/cjs/f/fields/TaskRecommendation/TaskRecommendation.js +129 -0
  78. package/dist/cjs/f/fields/TaskRecommendation/index.js +15 -0
  79. package/dist/cjs/f/fields/TaskRecommendation/styles.scss +37 -0
  80. package/dist/cjs/f/fields/TaskRecommendationInput/TaskRecommendationInput.js +131 -0
  81. package/dist/cjs/f/fields/TaskRecommendationInput/index.js +15 -0
  82. package/dist/cjs/f/fields/TaskRecommendationInput/styles.scss +41 -0
  83. package/dist/cjs/f/fields/TextArea/TextArea.js +141 -0
  84. package/dist/cjs/f/fields/TextArea/index.js +15 -0
  85. package/dist/cjs/f/fields/TextArea/styles.scss +19 -0
  86. package/dist/es/a/ContentTree/ContentTree.js +67 -0
  87. package/dist/es/a/ContentTree/common/Tree/Tree.js +98 -0
  88. package/dist/es/a/ContentTree/common/Tree/index.js +2 -0
  89. package/dist/es/a/ContentTree/common/index.js +3 -0
  90. package/dist/es/a/ContentTree/common/useContentTree.js +74 -0
  91. package/dist/es/a/ContentTree/common/useFirstVisibleNode.js +54 -0
  92. package/dist/es/a/ContentTree/index.js +2 -0
  93. package/dist/es/a/ContentTree/styles.scss +33 -0
  94. package/dist/es/a/GradientBackground/GradientBackground.js +118 -0
  95. package/dist/es/a/GradientBackground/index.js +2 -0
  96. package/dist/es/a/GradientBackground/styles.scss +191 -0
  97. package/dist/es/a/SVG/SVG.js +1 -1
  98. package/dist/es/a/index.js +2 -1
  99. package/dist/es/c/AcceptCookies/AcceptCookies.js +117 -0
  100. package/dist/es/c/AcceptCookies/index.js +2 -0
  101. package/dist/es/c/AcceptCookies/styles.scss +49 -0
  102. package/dist/es/c/BlogCategoryButton/BlogCategoryButton.js +68 -0
  103. package/dist/es/c/BlogCategoryButton/index.js +2 -0
  104. package/dist/es/c/BlogContext/BlogContextProvider.js +45 -0
  105. package/dist/es/c/BlogContext/Context.js +2 -0
  106. package/dist/es/c/BlogContext/ContextProvider.js +45 -0
  107. package/dist/es/c/BlogContext/index.js +4 -0
  108. package/dist/es/c/BlogContext/useBlog.js +3 -0
  109. package/dist/es/c/BlogPost/BlogPost.js +128 -0
  110. package/dist/es/c/BlogPost/index.js +2 -0
  111. package/dist/es/c/BlogPost/styles.scss +33 -0
  112. package/dist/es/c/BlogPostsList/BlogPostsList.js +56 -0
  113. package/dist/es/c/BlogPostsList/common/Card/Card.js +143 -0
  114. package/dist/es/c/BlogPostsList/common/Card/index.js +2 -0
  115. package/dist/es/c/BlogPostsList/common/index.js +1 -0
  116. package/dist/es/c/BlogPostsList/index.js +2 -0
  117. package/dist/es/c/BlogPostsList/styles.scss +72 -0
  118. package/dist/es/c/ContentSlides/common/HorizontalMenu/HorizontalMenu.js +1 -1
  119. package/dist/es/c/SiteFooter/SiteFooter.js +56 -0
  120. package/dist/es/c/SiteFooter/common/Section/Section.js +73 -0
  121. package/dist/es/c/SiteFooter/common/Section/index.js +2 -0
  122. package/dist/es/c/SiteFooter/common/index.js +1 -0
  123. package/dist/es/c/SiteFooter/index.js +2 -0
  124. package/dist/es/c/SiteFooter/styles.scss +34 -0
  125. package/dist/es/c/SiteHeaderCTA/SiteHeaderCTA.js +92 -0
  126. package/dist/es/c/SiteHeaderCTA/index.js +2 -0
  127. package/dist/es/c/SiteHeaderCTA/styles.scss +44 -0
  128. package/dist/es/c/SiteMission/SiteMission.js +96 -0
  129. package/dist/es/c/SiteMission/index.js +2 -0
  130. package/dist/es/c/SiteMission/styles.scss +30 -0
  131. package/dist/es/c/SiteNavigation/SiteNavigation.js +111 -0
  132. package/dist/es/c/SiteNavigation/index.js +2 -0
  133. package/dist/es/c/SiteNavigation/styles.scss +118 -0
  134. package/dist/es/c/SiteOnboardingStep/SiteOnboardingStep.js +81 -0
  135. package/dist/es/c/SiteOnboardingStep/index.js +2 -0
  136. package/dist/es/c/SiteOnboardingStep/styles.scss +51 -0
  137. package/dist/es/c/SitePricing/SitePricing.js +91 -0
  138. package/dist/es/c/SitePricing/index.js +2 -0
  139. package/dist/es/c/SitePricing/styles.scss +73 -0
  140. package/dist/es/c/SiteServices/SiteServices.js +195 -0
  141. package/dist/es/c/SiteServices/index.js +2 -0
  142. package/dist/es/c/SiteServices/styles.scss +138 -0
  143. package/dist/es/c/TeamGallery/TeamGallery.js +64 -0
  144. package/dist/es/c/TeamGallery/common/PersonCard/PersonCard.js +64 -0
  145. package/dist/es/c/TeamGallery/common/PersonCard/index.js +2 -0
  146. package/dist/es/c/TeamGallery/common/index.js +1 -0
  147. package/dist/es/c/TeamGallery/index.js +2 -0
  148. package/dist/es/c/TeamGallery/styles.scss +100 -0
  149. package/dist/es/c/Testimonials/Testimonials.js +99 -0
  150. package/dist/es/c/Testimonials/index.js +2 -0
  151. package/dist/es/c/Testimonials/styles.scss +112 -0
  152. package/dist/es/experimental/GradientBackground/GradientBackground.js +76 -0
  153. package/dist/es/experimental/GradientBackground/index.js +2 -0
  154. package/dist/es/experimental/GradientBackground/styles.scss +64 -0
  155. package/dist/es/experimental/index.js +1 -0
  156. package/dist/es/f/fields/CheckboxInput/CheckboxInput.js +85 -0
  157. package/dist/es/f/fields/CheckboxInput/index.js +2 -0
  158. package/dist/es/f/fields/CheckboxInput/styles.scss +28 -0
  159. package/dist/es/f/fields/RadioInput/RadioInput.js +90 -0
  160. package/dist/es/f/fields/RadioInput/index.js +2 -0
  161. package/dist/es/f/fields/RadioInput/styles.scss +26 -0
  162. package/dist/es/f/fields/TaskRecommendation/TaskRecommendation.js +111 -0
  163. package/dist/es/f/fields/TaskRecommendation/index.js +2 -0
  164. package/dist/es/f/fields/TaskRecommendation/styles.scss +37 -0
  165. package/dist/es/f/fields/TaskRecommendationInput/TaskRecommendationInput.js +111 -0
  166. package/dist/es/f/fields/TaskRecommendationInput/index.js +2 -0
  167. package/dist/es/f/fields/TaskRecommendationInput/styles.scss +41 -0
  168. package/dist/es/f/fields/TextArea/TextArea.js +124 -0
  169. package/dist/es/f/fields/TextArea/index.js +2 -0
  170. package/dist/es/f/fields/TextArea/styles.scss +19 -0
  171. package/package.json +3 -2
  172. package/src/__snapshots__/Storyshots.test.js.snap +167 -12
  173. package/src/local.scss +1 -0
  174. package/src/stories/StyleGuide/Sprites.stories.mdx +25 -0
  175. package/src/stories/StyleGuide/helpers.js +16 -0
  176. package/src/stories/a/ContentTree.stories.jsx +662 -0
  177. package/src/ui/a/ContentTree/ContentTree.jsx +88 -0
  178. package/src/ui/a/ContentTree/common/Tree/Tree.jsx +138 -0
  179. package/src/ui/a/ContentTree/common/Tree/index.js +2 -0
  180. package/src/ui/a/ContentTree/common/index.js +3 -0
  181. package/src/ui/a/ContentTree/common/useContentTree.js +83 -0
  182. package/src/ui/a/ContentTree/common/useFirstVisibleNode.js +59 -0
  183. package/src/ui/a/ContentTree/index.js +2 -0
  184. package/src/ui/a/ContentTree/styles.scss +33 -0
  185. package/src/ui/a/SVG/SVG.jsx +1 -1
  186. package/src/ui/a/index.js +1 -0
  187. package/src/ui/c/ContentSlides/common/HorizontalMenu/HorizontalMenu.jsx +1 -1
@@ -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
+
@@ -0,0 +1,67 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ import * as React from 'react';
3
+ import { useLayoutEffect } from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import styleNames from '@pareto-engineering/bem'; // Local Definitions
6
+
7
+ import { Tree, useContentTree } from "./common";
8
+ const baseClassName = styleNames.base;
9
+ const componentClassName = 'content-tree';
10
+ /**
11
+ * This is the component description.
12
+ */
13
+
14
+ const ContentTree = ({
15
+ id,
16
+ className: userClassName,
17
+ style,
18
+ target,
19
+ selectors // ...otherProps
20
+
21
+ }) => {
22
+ useLayoutEffect(() => {
23
+ import("./styles.scss");
24
+ }, []);
25
+ const contentTree = useContentTree(target, selectors);
26
+ return /*#__PURE__*/React.createElement("div", {
27
+ id: id,
28
+ className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' '),
29
+ style: style // {...otherProps}
30
+
31
+ }, /*#__PURE__*/React.createElement(Tree, {
32
+ tree: contentTree
33
+ }));
34
+ };
35
+
36
+ ContentTree.propTypes = {
37
+ /**
38
+ * The HTML id for this element
39
+ */
40
+ id: PropTypes.string,
41
+
42
+ /**
43
+ * The HTML class names for this element
44
+ */
45
+ className: PropTypes.string,
46
+
47
+ /**
48
+ * The React-written, css properties for this element.
49
+ */
50
+ style: PropTypes.objectOf(PropTypes.string),
51
+
52
+ /**
53
+ * The selectors to use to extract the navigation tree from the content.
54
+ */
55
+ selectors: PropTypes.arrayOf(PropTypes.string),
56
+
57
+ /**
58
+ * The reference to the parent element.
59
+ */
60
+ target: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
61
+ current: PropTypes.instanceOf(Element)
62
+ })])
63
+ };
64
+ ContentTree.defaultProps = {
65
+ selectors: ['h2', 'h3']
66
+ };
67
+ export default ContentTree;
@@ -0,0 +1,98 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ import * as React from 'react';
3
+ import { useState, useEffect, useMemo } from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import styleNames from '@pareto-engineering/bem'; // Local Definitions
6
+
7
+ import useFirstVisibleNode from "../useFirstVisibleNode";
8
+ const baseClassName = styleNames.base;
9
+ const componentClassName = 'tree';
10
+ /**
11
+ * This is the component description.
12
+ */
13
+
14
+ const Tree = ({
15
+ id,
16
+ className: userClassName,
17
+ style,
18
+ tree,
19
+ displayDepth // ...otherProps
20
+
21
+ }) => {
22
+ // The nodeIds to be used to get the first visible node
23
+ const [nodeIds, setNodeIds] = useState([]); // current visible nodeId
24
+
25
+ const visibleNodeId = useFirstVisibleNode(nodeIds);
26
+ useEffect(() => {
27
+ const node = document.getElementsByClassName(visibleNodeId)[0];
28
+ node === null || node === void 0 ? void 0 : node.classList.add(styleNames.modifierActive);
29
+ return () => {
30
+ node === null || node === void 0 ? void 0 : node.classList.remove(styleNames.modifierActive);
31
+ };
32
+ }, [visibleNodeId]); // Generate the tree structure from the content tree data depending on the display depth
33
+
34
+ const getNestedTree = (node, depth) => {
35
+ setNodeIds(prev => [...prev, node.id]);
36
+
37
+ if (depth <= 1) {
38
+ return /*#__PURE__*/React.createElement("li", {
39
+ key: node.id
40
+ }, /*#__PURE__*/React.createElement("a", {
41
+ className: node.id,
42
+ href: node.id
43
+ }, node.text));
44
+ }
45
+
46
+ return /*#__PURE__*/React.createElement("li", {
47
+ key: node.id
48
+ }, /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("a", {
49
+ href: node.id,
50
+ className: node.id
51
+ }, node.text)), node.children.length > 0 && /*#__PURE__*/React.createElement("ul", null, node.children.map(child => getNestedTree(child, depth - 1))));
52
+ };
53
+
54
+ const ContentTree = useMemo(() => tree.map(node => getNestedTree(node, displayDepth)), [tree]);
55
+ return /*#__PURE__*/React.createElement("ul", {
56
+ id: id,
57
+ className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' '),
58
+ style: style
59
+ }, ContentTree);
60
+ };
61
+
62
+ Tree.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 tree to render.
80
+ */
81
+ tree: PropTypes.arrayOf(PropTypes.shape({
82
+ text: PropTypes.string,
83
+ id: PropTypes.string,
84
+ children: PropTypes.arrayOf(PropTypes.shape({
85
+ text: PropTypes.string,
86
+ id: PropTypes.string
87
+ }))
88
+ })),
89
+
90
+ /**
91
+ * The levels of the tree to display.
92
+ */
93
+ displayDepth: PropTypes.number
94
+ };
95
+ Tree.defaultProps = {
96
+ displayDepth: 4
97
+ };
98
+ export default Tree;
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as Tree } from "./Tree";
@@ -0,0 +1,3 @@
1
+ export { default as useContentTree } from "./useContentTree";
2
+ export { default as useFirstVisibleNode } from "./useFirstVisibleNode";
3
+ export { Tree } from "./Tree";
@@ -0,0 +1,74 @@
1
+ import { useState, useEffect, useCallback } from 'react';
2
+
3
+ const useContentTree = (target, selectors) => {
4
+ const [contentTree, setContentTree] = useState([]);
5
+ const getNodes = useCallback(parentTag => {
6
+ const nodeList = parentTag.querySelectorAll(selectors.join(', '));
7
+ const nodes = [];
8
+ nodeList.forEach(nodeNode => {
9
+ const {
10
+ id,
11
+ innerText,
12
+ tagName
13
+ } = nodeNode;
14
+ nodes.push({
15
+ id: `#${id}`,
16
+ text: innerText,
17
+ level: selectors.indexOf(tagName.toLowerCase())
18
+ });
19
+ });
20
+ return nodes;
21
+ }, [selectors]);
22
+ const buildTree = useCallback(nodes => {
23
+ // Track the nodes we've seen so far in the same level
24
+ const currentSameLevelNodes = []; // Track nodes of the next level which will be children of the current node
25
+
26
+ let nextLevelNodes = []; // Track the current node level
27
+
28
+ let lastLevel = -1; // If the nodes are empty, return an empty tree
29
+
30
+ if (nodes.length === 0) {
31
+ return [];
32
+ }
33
+
34
+ const buildSubTree = () => {
35
+ if (nextLevelNodes.length > 0) {
36
+ currentSameLevelNodes[currentSameLevelNodes.length - 1].children.push(...buildTree(nextLevelNodes));
37
+ }
38
+ };
39
+
40
+ nodes.forEach(node => {
41
+ // If the node is of a greater level, we need to build the sub tree
42
+ if (lastLevel !== -1 && lastLevel < node.level) {
43
+ nextLevelNodes.push(node);
44
+ return;
45
+ } // build a subtree
46
+
47
+
48
+ buildSubTree(); // reset the next level nodes
49
+
50
+ lastLevel = node.level; // add the current node to the current level nodes
51
+
52
+ currentSameLevelNodes.push({
53
+ id: node.id,
54
+ text: node.text,
55
+ children: []
56
+ }); // reset the next level nodes after building the subtree
57
+
58
+ nextLevelNodes = [];
59
+ }); // build subtree
60
+
61
+ buildSubTree();
62
+ return currentSameLevelNodes;
63
+ }, []);
64
+ useEffect(() => {
65
+ if (target.current) {
66
+ const nodes = getNodes(target.current);
67
+ const tree = buildTree(nodes);
68
+ setContentTree(tree);
69
+ }
70
+ }, [target.current]);
71
+ return contentTree;
72
+ };
73
+
74
+ export default useContentTree;
@@ -0,0 +1,54 @@
1
+ import { useState, useEffect, useMemo, useCallback } from 'react';
2
+ import debounce from 'lodash/debounce';
3
+
4
+ const useFirstVisibleNode = (nodeIds, config) => {
5
+ const [visibleNodeId, setVisibleNodeId] = useState(null);
6
+ const {
7
+ debounceMs = 25
8
+ } = config || {}; // get headlines nodes - Should only be recalculated when the ids change
9
+
10
+ const nodes = useMemo(() => {
11
+ if ((nodeIds === null || nodeIds === void 0 ? void 0 : nodeIds.length) > 0) {
12
+ return Array.from(document.querySelectorAll(nodeIds.join(',')));
13
+ }
14
+
15
+ return [];
16
+ }, [nodeIds]);
17
+ const getVisibleNodeId = useCallback(debounce(() => {
18
+ var _visibleNode$node;
19
+
20
+ // Get the top postion of each headline node relative to the viewport
21
+ const topOffsets = nodes.map(node => node.getBoundingClientRect().top); // Get the node closer to zero (the top of the viewport)
22
+ // We have the default offset as Infinity so it's always greater that the first node Y position
23
+
24
+ const visibleNode = topOffsets.reduce((prev, currentOffset, currentIndex) => {
25
+ const node = Math.abs(currentOffset - 0) < Math.abs(prev.offset - 0) ? {
26
+ node: nodes[currentIndex],
27
+ offset: currentOffset
28
+ } : prev;
29
+ return node;
30
+ }, {
31
+ node: nodes[0],
32
+ offset: Infinity
33
+ }); // Set the visible node id
34
+
35
+ setVisibleNodeId(`#${visibleNode === null || visibleNode === void 0 ? void 0 : (_visibleNode$node = visibleNode.node) === null || _visibleNode$node === void 0 ? void 0 : _visibleNode$node.id}`);
36
+ }, debounceMs), [nodes]); // Recalculate the visible node id when the page is scrolled
37
+
38
+ useEffect(() => {
39
+ window.addEventListener('scroll', getVisibleNodeId);
40
+ return () => {
41
+ window.removeEventListener('scroll', getVisibleNodeId);
42
+ };
43
+ }, [getVisibleNodeId]); // Recalculate the visible node id when the page is resized
44
+
45
+ useEffect(() => {
46
+ window.addEventListener('resize', getVisibleNodeId);
47
+ return () => {
48
+ window.removeEventListener('resize', getVisibleNodeId);
49
+ };
50
+ }, [getVisibleNodeId]);
51
+ return visibleNodeId;
52
+ };
53
+
54
+ export default useFirstVisibleNode;
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as ContentTree } from "./ContentTree";
@@ -0,0 +1,33 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ @use "@pareto-engineering/bem";
3
+
4
+ $default-margin: 1em;
5
+ $default-padding: 1em;
6
+
7
+ .#{bem.$base}.content-tree{
8
+
9
+ ul {
10
+ list-style: none;
11
+ }
12
+
13
+ .#{bem.$base}.tree {
14
+ position: sticky;
15
+ top: 0;
16
+ padding: 0;
17
+
18
+ .#{bem.$modifier-active} {
19
+ color: var(--main2);
20
+ transition: color 0.2s;
21
+ }
22
+
23
+ li:not(:last-child) {
24
+ margin-bottom: $default-margin;
25
+ ul {
26
+ padding-left: $default-padding;
27
+ }
28
+ }
29
+ }
30
+ }
31
+
32
+
33
+
@@ -0,0 +1,118 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ import * as React from 'react';
3
+ import { useLayoutEffect } from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import styleNames from '@pareto-engineering/bem'; // Local Definitions
6
+
7
+ const baseClassName = styleNames.base;
8
+ const componentClassName = 'gradient-background';
9
+ /**
10
+ * This is the component description.
11
+ */
12
+
13
+ const GradientBackground = ({
14
+ id,
15
+ className: userClassName,
16
+ style,
17
+ pin,
18
+ shape,
19
+ height,
20
+ width // ...otherProps
21
+
22
+ }) => {
23
+ useLayoutEffect(() => {
24
+ import("./styles.scss");
25
+ }, []);
26
+ return /*#__PURE__*/React.createElement("div", {
27
+ id: id,
28
+ className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' '),
29
+ style: { ...style,
30
+ '--pin': pin,
31
+ '--height': height,
32
+ '--width': width
33
+ } // {...otherProps}
34
+
35
+ }, /*#__PURE__*/React.createElement("div", {
36
+ className: "shapes"
37
+ }, shape === 'triangle' && /*#__PURE__*/React.createElement("div", {
38
+ className: "triangle"
39
+ }), shape === 'half-ellipses' && /*#__PURE__*/React.createElement("div", {
40
+ className: "half-ellipses"
41
+ }, /*#__PURE__*/React.createElement("div", {
42
+ className: "up"
43
+ }), /*#__PURE__*/React.createElement("div", {
44
+ className: "down"
45
+ })), shape === 'ellipse' && /*#__PURE__*/React.createElement("div", {
46
+ className: "ellipse"
47
+ }), shape === 'diamonds' && /*#__PURE__*/React.createElement("div", {
48
+ className: "diamonds"
49
+ }, /*#__PURE__*/React.createElement("div", {
50
+ className: "top-right"
51
+ }), /*#__PURE__*/React.createElement("div", {
52
+ className: "bottom-left"
53
+ }), /*#__PURE__*/React.createElement("div", {
54
+ className: "bottom-right"
55
+ })), shape === 'rectangles' && /*#__PURE__*/React.createElement("div", {
56
+ className: "rectangles"
57
+ }, /*#__PURE__*/React.createElement("div", {
58
+ className: "top"
59
+ }), /*#__PURE__*/React.createElement("div", {
60
+ className: "center"
61
+ }), /*#__PURE__*/React.createElement("div", {
62
+ className: "bottom"
63
+ })), shape === 'half-ellipse' && /*#__PURE__*/React.createElement("div", {
64
+ className: "half-ellipse"
65
+ }), shape === 'circle' && /*#__PURE__*/React.createElement("div", {
66
+ className: "circle"
67
+ }), shape === 'half-circle' && /*#__PURE__*/React.createElement("div", {
68
+ className: "half-circle"
69
+ }), shape === 'ellipses' && /*#__PURE__*/React.createElement("div", {
70
+ className: "ellipses"
71
+ }, /*#__PURE__*/React.createElement("div", {
72
+ className: "first"
73
+ }), /*#__PURE__*/React.createElement("div", {
74
+ className: "second"
75
+ })), shape === 'spiral' && /*#__PURE__*/React.createElement("div", {
76
+ className: "spiral"
77
+ }, /*#__PURE__*/React.createElement("div", {
78
+ className: "quater-circle-one"
79
+ }), /*#__PURE__*/React.createElement("div", {
80
+ className: "quater-circle-two"
81
+ }), /*#__PURE__*/React.createElement("div", {
82
+ className: "quater-circle-three"
83
+ }), /*#__PURE__*/React.createElement("div", {
84
+ className: "quater-circle-four"
85
+ }))));
86
+ };
87
+
88
+ GradientBackground.propTypes = {
89
+ /**
90
+ * The HTML id for this element
91
+ */
92
+ id: PropTypes.string,
93
+
94
+ /**
95
+ * The HTML class names for this element
96
+ */
97
+ className: PropTypes.string,
98
+
99
+ /**
100
+ * The React-written, css properties for this element.
101
+ */
102
+ style: PropTypes.objectOf(PropTypes.string),
103
+
104
+ /**
105
+ * Where to pin the shapes
106
+ */
107
+ pin: PropTypes.oneOf(['flex-start', 'center', 'flex-end']),
108
+
109
+ /**
110
+ * The options of a shape to use
111
+ */
112
+ shape: PropTypes.oneOf(['triangle', 'ellipse', 'half-ellipse', 'half-ellipses', 'spiral', 'diamonds', 'circle', 'half-circle', 'ellipses', 'rectangles'])
113
+ };
114
+ GradientBackground.defaultProps = {
115
+ pin: 'center',
116
+ shape: 'triangle'
117
+ };
118
+ export default GradientBackground;
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as GradientBackground } from "./GradientBackground";
@@ -0,0 +1,191 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+
3
+ @use "@pareto-engineering/bem";
4
+
5
+ $default-triangle-dimension:30em;
6
+ $default-ellipses-dimension:50em;
7
+ $default-ellipse-dimension:50em;
8
+ $default-shapes-opacity:.8;
9
+ $default-diamonds-dimension:40em;
10
+ $default-circle-dimension:40em;
11
+
12
+ .#{bem.$base}.gradient-background {
13
+ align-items: center;
14
+ background: var(--light-y);
15
+ display: flex;
16
+ flex-direction: column;
17
+ height: 100%;
18
+ justify-content: var(--pin);
19
+ position: absolute;
20
+ width: 100%;
21
+
22
+ .shapes {
23
+ display: flex;
24
+ justify-content: center;
25
+
26
+ .triangle {
27
+ background-image: linear-gradient(var(--light-y), var(--dark-y));
28
+ clip-path: polygon(0 0, 50% 100%, 100% 0);
29
+ height: $default-triangle-dimension * .86;
30
+ opacity: $default-shapes-opacity;
31
+ width: $default-triangle-dimension;
32
+ }
33
+
34
+ .half-ellipses {
35
+
36
+ height: $default-ellipses-dimension / 2;
37
+ width: $default-ellipses-dimension;
38
+ opacity: $default-shapes-opacity;
39
+
40
+ .up {
41
+ background-image: linear-gradient(var(--light-y), var(--y));
42
+ clip-path: ellipse(40% 100% at 50% 0%);
43
+ height:50%;
44
+ }
45
+
46
+ .down {
47
+ background-image: linear-gradient(to top, var(--light-y), var(--y));
48
+ clip-path: ellipse(40% 100% at 50% 100%);
49
+ height:50%;
50
+ }
51
+
52
+ }
53
+
54
+ .ellipse {
55
+ height: $default-ellipse-dimension / 1.5;
56
+ width: $default-ellipse-dimension;
57
+ background-image: linear-gradient( to top left, var(--dark-y), var(--light-y),var(--dark-y));
58
+ clip-path: ellipse(50% 25% at 50% 50%);
59
+ opacity: $default-shapes-opacity;
60
+ transform: rotate3d(0, 0, -1, 10deg);
61
+ }
62
+
63
+ .diamonds {
64
+
65
+ height: $default-diamonds-dimension;
66
+ width: $default-diamonds-dimension;
67
+ opacity: $default-shapes-opacity;
68
+ position: relative;
69
+
70
+ .top-right {
71
+ height: 100%;
72
+ width: 100%;
73
+ background-image: linear-gradient(to right, var(--dark-y), var(--y));
74
+ clip-path: polygon(100% 100%, 0 0, 100% 0);
75
+ position: absolute;
76
+ }
77
+ .bottom-left {
78
+ height: 100%;
79
+ width: 100%;
80
+ background-image: linear-gradient(to left, var(--dark-y), var(--y));
81
+ clip-path: polygon(0 100%, 0 0, 100% 100%);
82
+ position: absolute;
83
+ z-index: 1;
84
+ opacity: .95;
85
+ }
86
+ .bottom-right {
87
+ height: 100%;
88
+ width: 100%;
89
+ background-image: linear-gradient(to bottom, var(--dark-y), var(--y));
90
+ clip-path: polygon(100% 100%, 100% 0, 0 100%);
91
+ position: absolute;
92
+ }
93
+ }
94
+
95
+ .rectangles {
96
+ height: $default-diamonds-dimension;
97
+ width: $default-diamonds-dimension;
98
+ opacity: $default-shapes-opacity;
99
+ display: grid;
100
+ grid-template-rows: repeat(3, 1fr);
101
+
102
+ .top {
103
+ background-image: linear-gradient(to right, var(--dark-y), var(--y));
104
+ }
105
+
106
+ .center {
107
+ background-image: linear-gradient(to left, var(--dark-y), var(--y));
108
+ }
109
+
110
+ .bottom {
111
+ background-image: linear-gradient(to right, var(--dark-y), var(--y));
112
+ }
113
+ }
114
+
115
+ .half-ellipse {
116
+ height: $default-ellipses-dimension / 2;
117
+ width: $default-ellipses-dimension;
118
+ opacity: $default-shapes-opacity;
119
+ background-image: linear-gradient(var(--light-y), var(--dark-y));
120
+ clip-path: ellipse(50% 50% at 50% 0);
121
+ }
122
+
123
+ .circle {
124
+ height: $default-circle-dimension;
125
+ width: $default-circle-dimension;
126
+ opacity: $default-shapes-opacity;
127
+ background-image: linear-gradient(var(--light-y), var(--dark-y));
128
+ clip-path: circle(50% at 50% 50%);
129
+ }
130
+
131
+ .ellipses {
132
+ height: var(--height);
133
+ width: var(--width);
134
+ opacity: $default-shapes-opacity;
135
+ position: relative;
136
+
137
+ .first {
138
+ height: 100%;
139
+ width: 100%;
140
+ position: absolute;
141
+ background-image: linear-gradient(to top, var(--dark-y), var(--light-y));
142
+ clip-path: ellipse(50% 20% at 50% 60%);
143
+ }
144
+
145
+ .second{
146
+ height: 100%;
147
+ width: 100%;
148
+ position: absolute;
149
+ background-image: linear-gradient(to bottom, var(--dark-y), var(--light-y));
150
+ clip-path: ellipse(50% 20% at 50% 40%);
151
+ }
152
+
153
+ }
154
+
155
+ // .spiral {
156
+ // height: $default-ellipses-dimension;
157
+ // width: $default-ellipses-dimension;
158
+ // opacity: $default-shapes-opacity;
159
+ // position: relative;
160
+
161
+ // > *{
162
+ // position: absolute;
163
+ // height: 100%;
164
+ // width: 100%;
165
+ // background: radial-gradient(var(--dark-y) 30%, var(--light-y));
166
+ // transform-origin: 0 0;
167
+ // }
168
+
169
+ // .quater-circle-one{
170
+ // transform: rotate(90deg);
171
+ // clip-path: circle(200px at 0 0);
172
+ // z-index: 1;
173
+ // }
174
+
175
+ // .quater-circle-two {
176
+ // clip-path: circle(250px at 0 0);
177
+ // transform: rotate(45deg);
178
+ // }
179
+
180
+ // .quater-circle-three {
181
+ // clip-path: circle(300px at 0 0);
182
+ // }
183
+
184
+ // .quater-circle-four{
185
+ // clip-path: circle(350px at 0 0);
186
+ // transform: rotate(-45deg);
187
+ // }
188
+ // }
189
+
190
+ }
191
+ }
@@ -33,7 +33,7 @@ const SVG = ({
33
33
  const useSVGProps = useMemo(() => ({
34
34
  className: useClassName,
35
35
  source,
36
- ...target,
36
+ target,
37
37
  sprite,
38
38
  strokeWidth
39
39
  }), [useClassName, source, target, strokeWidth, sprite]);
@@ -21,4 +21,5 @@ export { Timestamp } from "./Timestamp";
21
21
  export { Shapes } from "./Shapes";
22
22
  export { OvalIllustration } from "./OvalIllustration";
23
23
  export { SnapScroller } from "./SnapScroller";
24
- export { BackgroundGradient } from "./BackgroundGradient";
24
+ export { BackgroundGradient } from "./BackgroundGradient";
25
+ export { ContentTree } from "./ContentTree";