@teambit/component 0.0.747 → 0.0.748

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.
@@ -81,6 +81,16 @@ function _designInputs() {
81
81
  return data;
82
82
  }
83
83
 
84
+ function _baseReactNavigation() {
85
+ const data = require("@teambit/base-react.navigation.link");
86
+
87
+ _baseReactNavigation = function () {
88
+ return data;
89
+ };
90
+
91
+ return data;
92
+ }
93
+
84
94
  function _topBarNav() {
85
95
  const data = require("../top-bar-nav");
86
96
 
@@ -159,17 +169,43 @@ function Placeholder(_ref) {
159
169
  rest = (0, _objectWithoutProperties2().default)(_ref, ["slots"]);
160
170
  return /*#__PURE__*/_react().default.createElement("div", (0, _extends2().default)({}, rest, {
161
171
  className: _mobileMenuNavModule().default.placeholder
162
- }), /*#__PURE__*/_react().default.createElement(_reactRouterDom().Routes, null, slots === null || slots === void 0 ? void 0 : slots.map(([id, menuItem]) => {
163
- var _menuItem$props, _menuItem$props2, _menuItem$props3, _menuItem$props4;
164
-
165
- return /*#__PURE__*/_react().default.createElement(_reactRouterDom().Route, {
166
- key: id,
167
- path: menuItem === null || menuItem === void 0 ? void 0 : (_menuItem$props = menuItem.props) === null || _menuItem$props === void 0 ? void 0 : _menuItem$props.href,
168
- element: typeof (menuItem === null || menuItem === void 0 ? void 0 : (_menuItem$props2 = menuItem.props) === null || _menuItem$props2 === void 0 ? void 0 : _menuItem$props2.children) === 'string' ? menuItem === null || menuItem === void 0 ? void 0 : (_menuItem$props3 = menuItem.props) === null || _menuItem$props3 === void 0 ? void 0 : _menuItem$props3.children : menuItem === null || menuItem === void 0 ? void 0 : (_menuItem$props4 = menuItem.props) === null || _menuItem$props4 === void 0 ? void 0 : _menuItem$props4.displayName
169
- });
170
- })), /*#__PURE__*/_react().default.createElement(_designElements().Icon, {
172
+ }), slots.map(([id, menuItem]) => /*#__PURE__*/_react().default.createElement(ShowWhenMatch, {
173
+ key: id,
174
+ href: menuItem.props.href || '',
175
+ end: menuItem.props.exact
176
+ }, typeof menuItem.props.children === 'string' ? menuItem.props.children : menuItem.props.displayName)), /*#__PURE__*/_react().default.createElement(_designElements().Icon, {
171
177
  of: "fat-arrow-down"
172
178
  }));
173
179
  }
174
180
 
181
+ function ShowWhenMatch({
182
+ href,
183
+ children,
184
+ caseSensitive,
185
+ end: exact
186
+ }) {
187
+ const isMatch = useLinkMatch(href, {
188
+ caseSensitive,
189
+ exact
190
+ });
191
+ if (!isMatch) return null;
192
+ return /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, children);
193
+ }
194
+
195
+ function useLinkMatch(href, {
196
+ caseSensitive,
197
+ exact
198
+ } = {}) {
199
+ const location = (0, _baseReactNavigation().useLocation)();
200
+ let pathname = (location === null || location === void 0 ? void 0 : location.pathname) || '/';
201
+ let destination = (0, _reactRouterDom().useResolvedPath)(href).pathname;
202
+
203
+ if (!caseSensitive) {
204
+ pathname = pathname.toLowerCase();
205
+ destination = destination.toLowerCase();
206
+ }
207
+
208
+ return destination === pathname || !exact && pathname.startsWith(destination) && pathname.charAt(destination.length) === '/';
209
+ }
210
+
175
211
  //# sourceMappingURL=mobile-menu-nav.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MobileMenuNav","navigationSlot","widgetSlot","className","totalSlots","useMemo","toArray","sort","sortFn","classnames","styles","navigation","mobileNav","mobileStyles","mobileMenu","close","map","id","menuItem","props","mobileMenuLink","active","children","displayName","order","first","second","Placeholder","slots","rest","placeholder","href"],"sources":["mobile-menu-nav.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Routes, Route } from 'react-router-dom';\nimport classnames from 'classnames';\nimport { Icon } from '@teambit/design.elements.icon';\nimport { Dropdown } from '@teambit/design.inputs.dropdown';\nimport { TopBarNav } from '../top-bar-nav';\nimport styles from './menu.module.scss';\nimport mobileStyles from './mobile-menu-nav.module.scss';\nimport { NavPlugin, OrderedNavigationSlot } from './nav-plugin';\n\nexport function MobileMenuNav({\n navigationSlot,\n widgetSlot,\n className,\n}: {\n navigationSlot: OrderedNavigationSlot;\n widgetSlot: OrderedNavigationSlot;\n className?: string;\n}) {\n const totalSlots = useMemo(\n () => [...navigationSlot.toArray().sort(sortFn), ...widgetSlot.toArray().sort(sortFn)],\n [navigationSlot, widgetSlot]\n );\n\n return (\n <Dropdown\n // @ts-ignore - mismatch between @types/react\n placeholder={<Placeholder slots={totalSlots} />}\n className={classnames(styles.navigation, styles.mobileNav, className)}\n dropClass={mobileStyles.mobileMenu}\n >\n <nav>\n <Icon of=\"x-thick\" className={mobileStyles.close} />\n {totalSlots.map(([id, menuItem]) => {\n return (\n <TopBarNav\n key={id}\n {...menuItem.props}\n className={mobileStyles.mobileMenuLink}\n activeClassName={mobileStyles.active}\n >\n {typeof menuItem.props.children === 'string' ? menuItem.props.children : menuItem.props.displayName}\n </TopBarNav>\n );\n })}\n </nav>\n </Dropdown>\n );\n}\n\nfunction sortFn([, { order: first }]: [string, NavPlugin], [, { order: second }]: [string, NavPlugin]) {\n // 0 - equal\n // <0 - first < second\n // >0 - first > second\n\n return (first ?? 0) - (second ?? 0);\n}\n\ntype PlaceholderProps = {\n slots: [string, NavPlugin][];\n baseUrl?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction Placeholder({ slots, ...rest }: PlaceholderProps) {\n return (\n <div {...rest} className={mobileStyles.placeholder}>\n <Routes>\n {slots?.map(([id, menuItem]) => (\n <Route\n key={id}\n path={menuItem?.props?.href}\n element={\n typeof menuItem?.props?.children === 'string' ? menuItem?.props?.children : menuItem?.props?.displayName\n }\n />\n ))}\n </Routes>\n <Icon of=\"fat-arrow-down\" />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["MobileMenuNav","navigationSlot","widgetSlot","className","totalSlots","useMemo","toArray","sort","sortFn","classnames","styles","navigation","mobileNav","mobileStyles","mobileMenu","close","map","id","menuItem","props","mobileMenuLink","active","children","displayName","order","first","second","Placeholder","slots","rest","placeholder","href","exact","ShowWhenMatch","caseSensitive","end","isMatch","useLinkMatch","location","useLocation","pathname","destination","useResolvedPath","toLowerCase","startsWith","charAt","length"],"sources":["mobile-menu-nav.tsx"],"sourcesContent":["import React, { ReactNode, useMemo } from 'react';\nimport { useResolvedPath } from 'react-router-dom';\nimport classnames from 'classnames';\nimport { Icon } from '@teambit/design.elements.icon';\nimport { Dropdown } from '@teambit/design.inputs.dropdown';\nimport { useLocation } from '@teambit/base-react.navigation.link';\nimport { TopBarNav } from '../top-bar-nav';\nimport styles from './menu.module.scss';\nimport mobileStyles from './mobile-menu-nav.module.scss';\nimport { NavPlugin, OrderedNavigationSlot } from './nav-plugin';\n\nexport function MobileMenuNav({\n navigationSlot,\n widgetSlot,\n className,\n}: {\n navigationSlot: OrderedNavigationSlot;\n widgetSlot: OrderedNavigationSlot;\n className?: string;\n}) {\n const totalSlots = useMemo(\n () => [...navigationSlot.toArray().sort(sortFn), ...widgetSlot.toArray().sort(sortFn)],\n [navigationSlot, widgetSlot]\n );\n\n return (\n <Dropdown\n // @ts-ignore - mismatch between @types/react\n placeholder={<Placeholder slots={totalSlots} />}\n className={classnames(styles.navigation, styles.mobileNav, className)}\n dropClass={mobileStyles.mobileMenu}\n >\n <nav>\n <Icon of=\"x-thick\" className={mobileStyles.close} />\n {totalSlots.map(([id, menuItem]) => {\n return (\n <TopBarNav\n key={id}\n {...menuItem.props}\n className={mobileStyles.mobileMenuLink}\n activeClassName={mobileStyles.active}\n >\n {typeof menuItem.props.children === 'string' ? menuItem.props.children : menuItem.props.displayName}\n </TopBarNav>\n );\n })}\n </nav>\n </Dropdown>\n );\n}\n\nfunction sortFn([, { order: first }]: [string, NavPlugin], [, { order: second }]: [string, NavPlugin]) {\n // 0 - equal\n // <0 - first < second\n // >0 - first > second\n\n return (first ?? 0) - (second ?? 0);\n}\n\ntype PlaceholderProps = {\n slots: [string, NavPlugin][];\n baseUrl?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction Placeholder({ slots, ...rest }: PlaceholderProps) {\n return (\n <div {...rest} className={mobileStyles.placeholder}>\n {slots.map(([id, menuItem]) => (\n <ShowWhenMatch key={id} href={menuItem.props.href || ''} end={menuItem.props.exact}>\n {typeof menuItem.props.children === 'string' ? menuItem.props.children : menuItem.props.displayName}\n </ShowWhenMatch>\n ))}\n <Icon of=\"fat-arrow-down\" />\n </div>\n );\n}\n\nfunction ShowWhenMatch({\n href,\n children,\n caseSensitive,\n end: exact,\n}: {\n href: string;\n children: ReactNode;\n caseSensitive?: boolean;\n end?: boolean;\n}) {\n const isMatch = useLinkMatch(href, { caseSensitive, exact });\n if (!isMatch) return null;\n return <>{children}</>;\n}\n\nfunction useLinkMatch(href: string, { caseSensitive, exact }: { caseSensitive?: boolean; exact?: boolean } = {}) {\n const location = useLocation();\n let pathname = location?.pathname || '/';\n let destination = useResolvedPath(href).pathname;\n\n if (!caseSensitive) {\n pathname = pathname.toLowerCase();\n destination = destination.toLowerCase();\n }\n\n return (\n destination === pathname ||\n (!exact && pathname.startsWith(destination) && pathname.charAt(destination.length) === '/')\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/component",
3
- "version": "0.0.747",
3
+ "version": "0.0.748",
4
4
  "homepage": "https://bit.dev/teambit/component/component",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.component",
8
8
  "name": "component",
9
- "version": "0.0.747"
9
+ "version": "0.0.748"
10
10
  },
11
11
  "dependencies": {
12
12
  "@teambit/any-fs": "0.0.5",
@@ -31,25 +31,25 @@
31
31
  "@teambit/design.inputs.dropdown": "0.0.7",
32
32
  "@teambit/component-id": "0.0.402",
33
33
  "@teambit/ui-foundation.ui.menu-widget-icon": "0.0.488",
34
- "@teambit/aspect-loader": "0.0.747",
34
+ "@teambit/aspect-loader": "0.0.748",
35
35
  "@teambit/legacy-bit-id": "0.0.399",
36
36
  "@teambit/toolbox.path.match-patterns": "0.0.1",
37
37
  "@teambit/toolbox.string.capitalize": "0.0.483",
38
38
  "@teambit/cli": "0.0.493",
39
39
  "@teambit/config": "0.0.506",
40
40
  "@teambit/express": "0.0.591",
41
- "@teambit/graphql": "0.0.747",
41
+ "@teambit/graphql": "0.0.748",
42
42
  "@teambit/bit-error": "0.0.394",
43
- "@teambit/command-bar": "0.0.747",
43
+ "@teambit/command-bar": "0.0.748",
44
44
  "@teambit/component.ui.deprecation-icon": "0.0.493",
45
- "@teambit/preview": "0.0.747",
46
- "@teambit/pubsub": "0.0.747",
47
- "@teambit/react-router": "0.0.747",
45
+ "@teambit/preview": "0.0.748",
46
+ "@teambit/pubsub": "0.0.748",
47
+ "@teambit/react-router": "0.0.748",
48
48
  "@teambit/ui-foundation.ui.is-browser": "0.0.486",
49
49
  "@teambit/ui-foundation.ui.main-dropdown": "0.0.487",
50
50
  "@teambit/ui-foundation.ui.react-router.slot-router": "0.0.490",
51
51
  "@teambit/ui-foundation.ui.use-box.menu": "0.0.115",
52
- "@teambit/ui": "0.0.747",
52
+ "@teambit/ui": "0.0.748",
53
53
  "@teambit/component-issues": "0.0.53",
54
54
  "@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.487",
55
55
  "@teambit/cli-table": "0.0.34",
@@ -60,9 +60,9 @@
60
60
  "@teambit/harmony.ui.aspect-box": "0.0.486",
61
61
  "@teambit/design.ui.pages.not-found": "0.0.355",
62
62
  "@teambit/design.ui.pages.server-error": "0.0.355",
63
- "@teambit/compositions": "0.0.747",
64
- "@teambit/deprecation": "0.0.747",
65
- "@teambit/envs": "0.0.747",
63
+ "@teambit/compositions": "0.0.748",
64
+ "@teambit/deprecation": "0.0.748",
65
+ "@teambit/envs": "0.0.748",
66
66
  "@teambit/legacy-component-log": "0.0.392",
67
67
  "@teambit/design.ui.styles.ellipsis": "0.0.347",
68
68
  "@teambit/envs.ui.env-icon": "0.0.486",
@@ -1,2 +1,2 @@
1
- export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.747/dist/component.composition.js')]
2
- export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.747/dist/component.docs.mdx')]
1
+ export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.748/dist/component.composition.js')]
2
+ export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.component_component@0.0.748/dist/component.docs.mdx')]
package/tsconfig.json CHANGED
@@ -31,5 +31,9 @@
31
31
  },
32
32
  "exclude": [
33
33
  "dist"
34
+ ],
35
+ "include": [
36
+ "**/*",
37
+ "**/*.json"
34
38
  ]
35
39
  }
@@ -1,8 +1,9 @@
1
- import React, { useMemo } from 'react';
2
- import { Routes, Route } from 'react-router-dom';
1
+ import React, { ReactNode, useMemo } from 'react';
2
+ import { useResolvedPath } from 'react-router-dom';
3
3
  import classnames from 'classnames';
4
4
  import { Icon } from '@teambit/design.elements.icon';
5
5
  import { Dropdown } from '@teambit/design.inputs.dropdown';
6
+ import { useLocation } from '@teambit/base-react.navigation.link';
6
7
  import { TopBarNav } from '../top-bar-nav';
7
8
  import styles from './menu.module.scss';
8
9
  import mobileStyles from './mobile-menu-nav.module.scss';
@@ -64,18 +65,44 @@ type PlaceholderProps = {
64
65
  function Placeholder({ slots, ...rest }: PlaceholderProps) {
65
66
  return (
66
67
  <div {...rest} className={mobileStyles.placeholder}>
67
- <Routes>
68
- {slots?.map(([id, menuItem]) => (
69
- <Route
70
- key={id}
71
- path={menuItem?.props?.href}
72
- element={
73
- typeof menuItem?.props?.children === 'string' ? menuItem?.props?.children : menuItem?.props?.displayName
74
- }
75
- />
76
- ))}
77
- </Routes>
68
+ {slots.map(([id, menuItem]) => (
69
+ <ShowWhenMatch key={id} href={menuItem.props.href || ''} end={menuItem.props.exact}>
70
+ {typeof menuItem.props.children === 'string' ? menuItem.props.children : menuItem.props.displayName}
71
+ </ShowWhenMatch>
72
+ ))}
78
73
  <Icon of="fat-arrow-down" />
79
74
  </div>
80
75
  );
81
76
  }
77
+
78
+ function ShowWhenMatch({
79
+ href,
80
+ children,
81
+ caseSensitive,
82
+ end: exact,
83
+ }: {
84
+ href: string;
85
+ children: ReactNode;
86
+ caseSensitive?: boolean;
87
+ end?: boolean;
88
+ }) {
89
+ const isMatch = useLinkMatch(href, { caseSensitive, exact });
90
+ if (!isMatch) return null;
91
+ return <>{children}</>;
92
+ }
93
+
94
+ function useLinkMatch(href: string, { caseSensitive, exact }: { caseSensitive?: boolean; exact?: boolean } = {}) {
95
+ const location = useLocation();
96
+ let pathname = location?.pathname || '/';
97
+ let destination = useResolvedPath(href).pathname;
98
+
99
+ if (!caseSensitive) {
100
+ pathname = pathname.toLowerCase();
101
+ destination = destination.toLowerCase();
102
+ }
103
+
104
+ return (
105
+ destination === pathname ||
106
+ (!exact && pathname.startsWith(destination) && pathname.charAt(destination.length) === '/')
107
+ );
108
+ }