@cypress-design/react-docmenu 0.5.0 → 0.5.1

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.
@@ -2,5 +2,5 @@ $ yarn build:module && yarn build:types
2
2
  $ rollup -c ./rollup.config.mjs
3
3
  
4
4
  ./index.ts → ./dist/index.umd.js, ./dist/index.es.mjs...
5
- created ./dist/index.umd.js, ./dist/index.es.mjs in 15.7s
5
+ created ./dist/index.umd.js, ./dist/index.es.mjs in 12.8s
6
6
  $ tsc --project ./tsconfig.build.json
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @cypress-design/react-docmenu
2
2
 
3
+ ## 0.5.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`171cf54`](https://github.com/cypress-io/cypress-design/commit/171cf546bd79e96b8ef140b2af34d1949d022a4b) Thanks [@elevatebart](https://github.com/elevatebart)! - fix: make docmenu transition properly
8
+
3
9
  ## 0.5.0
4
10
 
5
11
  ### Minor Changes
package/_DocGroup.tsx CHANGED
@@ -13,18 +13,6 @@ import {
13
13
  } from './_DocLink'
14
14
  import { MarkerIsMovingContext } from './markerIsMoving'
15
15
 
16
- const useIsMounted = () => {
17
- const isMounted = React.useRef(false)
18
-
19
- React.useEffect(() => {
20
- isMounted.current = true
21
- return () => {
22
- isMounted.current = false
23
- }
24
- }, [])
25
- return isMounted
26
- }
27
-
28
16
  export interface DocGroupProps {
29
17
  group: NavGroup
30
18
  activePath: string
@@ -57,11 +45,12 @@ export const DocGroup = React.forwardRef<DocGroupForward, DocGroupProps>(
57
45
  const [open, setOpen] = React.useState(group.collapsed !== true)
58
46
  const $groupElements = React.useRef<DocGroupElementsForward>(null)
59
47
  const $listWrapper = React.useRef<HTMLDivElement>(null)
60
- const didMount = useIsMounted()
61
48
 
62
49
  function toggleMenu(open: boolean) {
63
50
  if (!collapsible) return
64
51
  setOpen(open)
52
+ hideShowAbsoluteMarker()
53
+ readjustMarkerPosition()
65
54
  }
66
55
 
67
56
  const hasActiveItemRecursively = React.useCallback(
@@ -93,53 +82,42 @@ export const DocGroup = React.forwardRef<DocGroupForward, DocGroupProps>(
93
82
  $groupElements.current?.reTriggerSetActiveGroup()
94
83
  }
95
84
 
96
- React.useEffect(() => {
97
- if (didMount.current) {
98
- $listWrapper.current?.addEventListener(
99
- 'transitionstart',
100
- () => {
101
- setMarkerIsMoving(true)
102
- },
103
- { once: true },
104
- )
105
- $listWrapper.current?.addEventListener(
106
- 'transitionend',
107
- () => {
108
- setMarkerIsMoving(false)
109
- if (open || !hasActiveItemRecursively()) {
110
- updateMarkerPosition?.()
111
- }
112
- },
113
- { once: true },
114
- )
115
- }
116
- }, [
117
- open,
118
- setMarkerIsMoving,
119
- updateMarkerPosition,
120
- hasActiveItemRecursively,
121
- didMount,
122
- ])
123
-
124
- React.useEffect(() => {
125
- if (didMount.current) {
126
- if (hasActiveItemRecursively()) {
127
- if (open) {
128
- reTriggerSetActiveGroupParent()
129
- } else {
130
- hideMarker()
85
+ /**
86
+ * To make the marker follow smooth open/close animation of the menu groups
87
+ * We replace the absolute marker by one in the link. After the transition, the
88
+ * marker is replaced by the absolute one again.
89
+ */
90
+ function hideShowAbsoluteMarker() {
91
+ $listWrapper.current?.addEventListener(
92
+ 'transitionstart',
93
+ () => {
94
+ setMarkerIsMoving(true)
95
+ },
96
+ { once: true },
97
+ )
98
+ $listWrapper.current?.addEventListener(
99
+ 'transitionend',
100
+ () => {
101
+ if (open || !hasActiveItemRecursively()) {
102
+ updateMarkerPosition?.()
131
103
  }
104
+ setMarkerIsMoving(false)
105
+ },
106
+ { once: true },
107
+ )
108
+ }
109
+
110
+ function readjustMarkerPosition() {
111
+ if (hasActiveItemRecursively()) {
112
+ if (open) {
113
+ reTriggerSetActiveGroupParent()
132
114
  } else {
133
- updateMarkerPosition?.()
115
+ hideMarker()
134
116
  }
117
+ } else {
118
+ updateMarkerPosition?.()
135
119
  }
136
- }, [
137
- open,
138
- updateMarkerPosition,
139
- hideMarker,
140
- hasActiveItemRecursively,
141
- didMount,
142
- ])
120
+ }
143
121
 
144
122
  React.useImperativeHandle(ref, () => ({
145
123
  reTriggerSetActiveGroup: reTriggerSetActiveGroupParent,
package/_DocLink.tsx CHANGED
@@ -30,9 +30,7 @@ export const DocLink = React.forwardRef<DocLinkForward, DocLinkProps>(
30
30
  ) => {
31
31
  const activeLIRef = React.useRef<HTMLLIElement>(null)
32
32
 
33
- const { markerIsMoving, setMarkerIsMoving } = React.useContext(
34
- MarkerIsMovingContext,
35
- )
33
+ const { markerIsMoving } = React.useContext(MarkerIsMovingContext)
36
34
 
37
35
  const setActiveMarkerPosition = () => {
38
36
  if (active) {
@@ -47,11 +45,7 @@ export const DocLink = React.forwardRef<DocLinkForward, DocLinkProps>(
47
45
 
48
46
  // on mount, if the item is active,
49
47
  // send the top position to the parent
50
- React.useEffect(setActiveMarkerPosition, [
51
- onActive,
52
- active,
53
- setMarkerIsMoving,
54
- ])
48
+ React.useEffect(setActiveMarkerPosition, [onActive, active])
55
49
 
56
50
  React.useImperativeHandle(ref, () => ({
57
51
  setActiveMarkerPosition,
@@ -1 +1 @@
1
- {"version":3,"file":"_DocGroup.d.ts","sourceRoot":"./","sources":["_DocGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,WAAW,EAEjB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAA;AAenB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACjE,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,iBAAiB,CAAA;IACjC,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,uBAAuB,EAAE,MAAM,IAAI,CAAA;CACpC;AAED,eAAO,MAAM,QAAQ,uFAmKpB,CAAA;AAED,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAC9C,KAAK,EAAE,CAAC,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAA;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACjE,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAA;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,iBAAiB,CAAA;IAChC,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,uBAAuB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAClD;AAED,eAAO,MAAM,gBAAgB,uGA6G5B,CAAA"}
1
+ {"version":3,"file":"_DocGroup.d.ts","sourceRoot":"./","sources":["_DocGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,WAAW,EAEjB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAA;AAGnB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACjE,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,iBAAiB,CAAA;IACjC,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,uBAAuB,EAAE,MAAM,IAAI,CAAA;CACpC;AAED,eAAO,MAAM,QAAQ,uFAyJpB,CAAA;AAED,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAC9C,KAAK,EAAE,CAAC,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAA;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACjE,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAA;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,iBAAiB,CAAA;IAChC,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,uBAAuB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAClD;AAED,eAAO,MAAM,gBAAgB,uGA6G5B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"_DocLink.d.ts","sourceRoot":"./","sources":["_DocLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAG/D,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAA;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,CAAC,CAAA;AAEF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC1D,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,uBAAuB,EAAE,MAAM,IAAI,CAAA;CACpC;AAED,eAAO,MAAM,OAAO,qFAiEnB,CAAA"}
1
+ {"version":3,"file":"_DocLink.d.ts","sourceRoot":"./","sources":["_DocLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAG/D,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAA;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,CAAC,CAAA;AAEF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC1D,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,uBAAuB,EAAE,MAAM,IAAI,CAAA;CACpC;AAED,eAAO,MAAM,OAAO,qFA2DnB,CAAA"}
package/dist/index.es.mjs CHANGED
@@ -170,7 +170,7 @@ var MarkerIsMovingContext = createContext({
170
170
  var DocLink = React.forwardRef(function (_a, ref) {
171
171
  var item = _a.item, active = _a.active, collapsible = _a.collapsible, _b = _a.depth, depth = _b === void 0 ? -1 : _b, onActive = _a.onActive, _c = _a.LinkComponent, LinkComponent = _c === void 0 ? 'a' : _c;
172
172
  var activeLIRef = React.useRef(null);
173
- var _d = React.useContext(MarkerIsMovingContext), markerIsMoving = _d.markerIsMoving, setMarkerIsMoving = _d.setMarkerIsMoving;
173
+ var markerIsMoving = React.useContext(MarkerIsMovingContext).markerIsMoving;
174
174
  var setActiveMarkerPosition = function () {
175
175
  var _a;
176
176
  if (active) {
@@ -183,11 +183,7 @@ var DocLink = React.forwardRef(function (_a, ref) {
183
183
  };
184
184
  // on mount, if the item is active,
185
185
  // send the top position to the parent
186
- React.useEffect(setActiveMarkerPosition, [
187
- onActive,
188
- active,
189
- setMarkerIsMoving,
190
- ]);
186
+ React.useEffect(setActiveMarkerPosition, [onActive, active]);
191
187
  React.useImperativeHandle(ref, function () { return ({
192
188
  setActiveMarkerPosition: setActiveMarkerPosition,
193
189
  }); });
@@ -208,27 +204,18 @@ var DocLink = React.forwardRef(function (_a, ref) {
208
204
  item.label)));
209
205
  });
210
206
 
211
- var useIsMounted = function () {
212
- var isMounted = React.useRef(false);
213
- React.useEffect(function () {
214
- isMounted.current = true;
215
- return function () {
216
- isMounted.current = false;
217
- };
218
- }, []);
219
- return isMounted;
220
- };
221
207
  var DocGroup = React.forwardRef(function (_a, ref) {
222
208
  var _b;
223
209
  var group = _a.group, activePath = _a.activePath, collapsible = _a.collapsible, _c = _a.depth, depth = _c === void 0 ? 0 : _c, onActivePosition = _a.onActivePosition, updateMarkerPosition = _a.updateMarkerPosition, _d = _a.LinkComponent, LinkComponent = _d === void 0 ? 'a' : _d, hideMarker = _a.hideMarker;
224
210
  var _e = React.useState(group.collapsed !== true), open = _e[0], setOpen = _e[1];
225
211
  var $groupElements = React.useRef(null);
226
212
  var $listWrapper = React.useRef(null);
227
- var didMount = useIsMounted();
228
213
  function toggleMenu(open) {
229
214
  if (!collapsible)
230
215
  return;
231
216
  setOpen(open);
217
+ hideShowAbsoluteMarker();
218
+ readjustMarkerPosition();
232
219
  }
233
220
  var hasActiveItemRecursively = React.useCallback(function (items) {
234
221
  if (items === void 0) { items = group.items; }
@@ -251,47 +238,36 @@ var DocGroup = React.forwardRef(function (_a, ref) {
251
238
  var _a;
252
239
  (_a = $groupElements.current) === null || _a === void 0 ? void 0 : _a.reTriggerSetActiveGroup();
253
240
  }
254
- React.useEffect(function () {
241
+ /**
242
+ * To make the marker follow smooth open/close animation of the menu groups
243
+ * We replace the absolute marker by one in the link. After the transition, the
244
+ * marker is replaced by the absolute one again.
245
+ */
246
+ function hideShowAbsoluteMarker() {
255
247
  var _a, _b;
256
- if (didMount.current) {
257
- (_a = $listWrapper.current) === null || _a === void 0 ? void 0 : _a.addEventListener('transitionstart', function () {
258
- setMarkerIsMoving(true);
259
- }, { once: true });
260
- (_b = $listWrapper.current) === null || _b === void 0 ? void 0 : _b.addEventListener('transitionend', function () {
261
- setMarkerIsMoving(false);
262
- if (open || !hasActiveItemRecursively()) {
263
- updateMarkerPosition === null || updateMarkerPosition === void 0 ? void 0 : updateMarkerPosition();
264
- }
265
- }, { once: true });
266
- }
267
- }, [
268
- open,
269
- setMarkerIsMoving,
270
- updateMarkerPosition,
271
- hasActiveItemRecursively,
272
- didMount,
273
- ]);
274
- React.useEffect(function () {
275
- if (didMount.current) {
276
- if (hasActiveItemRecursively()) {
277
- if (open) {
278
- reTriggerSetActiveGroupParent();
279
- }
280
- else {
281
- hideMarker();
282
- }
248
+ (_a = $listWrapper.current) === null || _a === void 0 ? void 0 : _a.addEventListener('transitionstart', function () {
249
+ setMarkerIsMoving(true);
250
+ }, { once: true });
251
+ (_b = $listWrapper.current) === null || _b === void 0 ? void 0 : _b.addEventListener('transitionend', function () {
252
+ if (open || !hasActiveItemRecursively()) {
253
+ updateMarkerPosition === null || updateMarkerPosition === void 0 ? void 0 : updateMarkerPosition();
254
+ }
255
+ setMarkerIsMoving(false);
256
+ }, { once: true });
257
+ }
258
+ function readjustMarkerPosition() {
259
+ if (hasActiveItemRecursively()) {
260
+ if (open) {
261
+ reTriggerSetActiveGroupParent();
283
262
  }
284
263
  else {
285
- updateMarkerPosition === null || updateMarkerPosition === void 0 ? void 0 : updateMarkerPosition();
264
+ hideMarker();
286
265
  }
287
266
  }
288
- }, [
289
- open,
290
- updateMarkerPosition,
291
- hideMarker,
292
- hasActiveItemRecursively,
293
- didMount,
294
- ]);
267
+ else {
268
+ updateMarkerPosition === null || updateMarkerPosition === void 0 ? void 0 : updateMarkerPosition();
269
+ }
270
+ }
295
271
  React.useImperativeHandle(ref, function () { return ({
296
272
  reTriggerSetActiveGroup: reTriggerSetActiveGroupParent,
297
273
  }); });
@@ -401,4 +377,4 @@ var DocMenu = function (_a) {
401
377
  export { DocMenu as default };
402
378
  //# sourceMappingURL=index.es.mjs.map
403
379
 
404
- /* <wind-keep class="container relative absolute h-[36px] w-[4px] z-50 rounded-full bg-indigo-500 transition-all duration-300 ml-[6.5px] mt-[4px] text-indigo-500 rotate-0 -rotate-90 ml-[28px] grid grid-rows-[0fr] grid-rows-[1fr] overflow-hidden filter list-none p-0 block w-full pl-[24px] text-gray-700 dark:text-gray-500 py-[8px] text-[16px] leading-[24px] leading-[20px] text-[14px] py-[12px] left-[6.5px] top-[4px] bottom-[4px] z-10 hidden group-hover:block bg-gray-300 text-gray-500 left-0 transform transition-transform text-gray-400 dark:text-gray-700 flex py-[10px] items-center text-start font-medium pl-[48px] left-[8px] top-0 w-[1px] h-full bg-gray-100 dark:bg-gray-900"> */
380
+ /* <wind-keep class="container relative absolute h-[36px] w-[4px] z-50 rounded-full bg-indigo-500 transition-all duration-300 ml-[6.5px] mt-[4px] transition text-indigo-500 rotate-0 -rotate-90 ml-[28px] grid grid-rows-[0fr] grid-rows-[1fr] overflow-hidden filter list-none p-0 block w-full pl-[24px] text-gray-700 dark:text-gray-500 py-[8px] text-[16px] leading-[24px] leading-[20px] text-[14px] py-[12px] left-[6.5px] top-[4px] bottom-[4px] z-10 hidden group-hover:block bg-gray-300 text-gray-500 left-0 transform transition-transform text-gray-400 dark:text-gray-700 flex py-[10px] items-center text-start font-medium pl-[48px] left-[8px] top-0 w-[1px] h-full bg-gray-100 dark:bg-gray-900"> */