@cypress-design/react-docmenu 0.5.1 → 0.5.2

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 12.8s
5
+ created ./dist/index.umd.js, ./dist/index.es.mjs in 12.9s
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.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`5927136`](https://github.com/cypress-io/cypress-design/commit/59271366a460cbdc411a6bec75feb663d3991029) Thanks [@elevatebart](https://github.com/elevatebart)! - fix: make sure when dynamic marker reappear, it does not bounce up
8
+
3
9
  ## 0.5.1
4
10
 
5
11
  ### Patch Changes
package/DocMenu.tsx CHANGED
@@ -23,7 +23,8 @@ export const DocMenu: React.FC<DocMenuProps> = ({
23
23
  const [activeTop, setActiveTop] = React.useState(0)
24
24
  const [activeHeight, setActiveHeight] = React.useState(36)
25
25
  const [showMarker, setShowMarker] = React.useState(false)
26
- const [markerIsMoving, setMarkerIsMoving] = React.useState(false)
26
+ const [markerIsMoving, localSetMarkerIsMoving] = React.useState(false)
27
+ const [hasCSSTransition, setHasCSSTransition] = React.useState(true)
27
28
 
28
29
  const container = React.useRef<HTMLDivElement>(null)
29
30
 
@@ -38,6 +39,19 @@ export const DocMenu: React.FC<DocMenuProps> = ({
38
39
  )
39
40
 
40
41
  const setShowMarkerFalse = React.useCallback(() => setShowMarker(false), [])
42
+ const setMarkerIsMoving = React.useCallback(
43
+ (val: boolean) => {
44
+ localSetMarkerIsMoving(val)
45
+ if (!val) return
46
+ // make sure the animation does not fire "after"
47
+ // the marker has reappeared at its right place
48
+ setHasCSSTransition(false)
49
+ setTimeout(() => {
50
+ setHasCSSTransition(true)
51
+ }, 300)
52
+ },
53
+ [localSetMarkerIsMoving],
54
+ )
41
55
 
42
56
  return (
43
57
  <MarkerIsMovingContext.Provider
@@ -46,10 +60,13 @@ export const DocMenu: React.FC<DocMenuProps> = ({
46
60
  <div ref={container} className="relative">
47
61
  {showMarker && !markerIsMoving && collapsible ? (
48
62
  <div
49
- className="absolute h-[36px] w-[4px] z-50 rounded-full bg-indigo-500 transition-all duration-300 ml-[6.5px] mt-[4px]"
63
+ className="absolute h-[36px] w-[4px] z-50 rounded-full bg-indigo-500 ml-[6.5px] mt-[4px]"
50
64
  style={{
51
65
  top: `${activeTop}px`,
52
66
  height: `${activeHeight - 8}px`,
67
+ transition: hasCSSTransition
68
+ ? 'height .3s ease-in-out, top .3s ease-in-out'
69
+ : 'none',
53
70
  }}
54
71
  />
55
72
  ) : null}
package/_DocGroup.tsx CHANGED
@@ -46,11 +46,11 @@ export const DocGroup = React.forwardRef<DocGroupForward, DocGroupProps>(
46
46
  const $groupElements = React.useRef<DocGroupElementsForward>(null)
47
47
  const $listWrapper = React.useRef<HTMLDivElement>(null)
48
48
 
49
- function toggleMenu(open: boolean) {
49
+ function toggleMenu(localOpen: boolean) {
50
50
  if (!collapsible) return
51
- setOpen(open)
52
- hideShowAbsoluteMarker()
53
- readjustMarkerPosition()
51
+ hideShowAbsoluteMarker(localOpen)
52
+ setOpen(localOpen)
53
+ readjustMarkerPosition(localOpen)
54
54
  }
55
55
 
56
56
  const hasActiveItemRecursively = React.useCallback(
@@ -87,7 +87,7 @@ export const DocGroup = React.forwardRef<DocGroupForward, DocGroupProps>(
87
87
  * We replace the absolute marker by one in the link. After the transition, the
88
88
  * marker is replaced by the absolute one again.
89
89
  */
90
- function hideShowAbsoluteMarker() {
90
+ function hideShowAbsoluteMarker(localOpen: boolean) {
91
91
  $listWrapper.current?.addEventListener(
92
92
  'transitionstart',
93
93
  () => {
@@ -98,7 +98,7 @@ export const DocGroup = React.forwardRef<DocGroupForward, DocGroupProps>(
98
98
  $listWrapper.current?.addEventListener(
99
99
  'transitionend',
100
100
  () => {
101
- if (open || !hasActiveItemRecursively()) {
101
+ if (localOpen || !hasActiveItemRecursively()) {
102
102
  updateMarkerPosition?.()
103
103
  }
104
104
  setMarkerIsMoving(false)
@@ -107,9 +107,9 @@ export const DocGroup = React.forwardRef<DocGroupForward, DocGroupProps>(
107
107
  )
108
108
  }
109
109
 
110
- function readjustMarkerPosition() {
110
+ function readjustMarkerPosition(localOpen: boolean) {
111
111
  if (hasActiveItemRecursively()) {
112
- if (open) {
112
+ if (localOpen) {
113
113
  reTriggerSetActiveGroupParent()
114
114
  } else {
115
115
  hideMarker()
@@ -240,6 +240,7 @@ export const DocGroupElements = React.forwardRef<
240
240
  item?.setActiveMarkerPosition()
241
241
  })
242
242
  // calculate the index of the calling group in the list of groups
243
+ // "index" is the index of the calling group in the list of items (groups and links)
243
244
  const indexGroup =
244
245
  index -
245
246
  // remove all the items that are not groups from the array and count them
@@ -1 +1 @@
1
- {"version":3,"file":"DocMenu.d.ts","sourceRoot":"./","sources":["DocMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAInD,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE5C,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAC1E,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAClC;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAqD1C,CAAA;AAED,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"DocMenu.d.ts","sourceRoot":"./","sources":["DocMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAInD,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE5C,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAC1E,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAClC;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAsE1C,CAAA;AAED,eAAe,OAAO,CAAA"}
@@ -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;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
+ {"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,uGA8G5B,CAAA"}
package/dist/index.es.mjs CHANGED
@@ -210,12 +210,12 @@ var DocGroup = React.forwardRef(function (_a, ref) {
210
210
  var _e = React.useState(group.collapsed !== true), open = _e[0], setOpen = _e[1];
211
211
  var $groupElements = React.useRef(null);
212
212
  var $listWrapper = React.useRef(null);
213
- function toggleMenu(open) {
213
+ function toggleMenu(localOpen) {
214
214
  if (!collapsible)
215
215
  return;
216
- setOpen(open);
217
- hideShowAbsoluteMarker();
218
- readjustMarkerPosition();
216
+ hideShowAbsoluteMarker(localOpen);
217
+ setOpen(localOpen);
218
+ readjustMarkerPosition(localOpen);
219
219
  }
220
220
  var hasActiveItemRecursively = React.useCallback(function (items) {
221
221
  if (items === void 0) { items = group.items; }
@@ -243,21 +243,21 @@ var DocGroup = React.forwardRef(function (_a, ref) {
243
243
  * We replace the absolute marker by one in the link. After the transition, the
244
244
  * marker is replaced by the absolute one again.
245
245
  */
246
- function hideShowAbsoluteMarker() {
246
+ function hideShowAbsoluteMarker(localOpen) {
247
247
  var _a, _b;
248
248
  (_a = $listWrapper.current) === null || _a === void 0 ? void 0 : _a.addEventListener('transitionstart', function () {
249
249
  setMarkerIsMoving(true);
250
250
  }, { once: true });
251
251
  (_b = $listWrapper.current) === null || _b === void 0 ? void 0 : _b.addEventListener('transitionend', function () {
252
- if (open || !hasActiveItemRecursively()) {
252
+ if (localOpen || !hasActiveItemRecursively()) {
253
253
  updateMarkerPosition === null || updateMarkerPosition === void 0 ? void 0 : updateMarkerPosition();
254
254
  }
255
255
  setMarkerIsMoving(false);
256
256
  }, { once: true });
257
257
  }
258
- function readjustMarkerPosition() {
258
+ function readjustMarkerPosition(localOpen) {
259
259
  if (hasActiveItemRecursively()) {
260
- if (open) {
260
+ if (localOpen) {
261
261
  reTriggerSetActiveGroupParent();
262
262
  }
263
263
  else {
@@ -317,6 +317,7 @@ var DocGroupElements = React.forwardRef(function (_a, ref) {
317
317
  item === null || item === void 0 ? void 0 : item.setActiveMarkerPosition();
318
318
  });
319
319
  // calculate the index of the calling group in the list of groups
320
+ // "index" is the index of the calling group in the list of items (groups and links)
320
321
  var indexGroup = index -
321
322
  // remove all the items that are not groups from the array and count them
322
323
  items.slice(0, index).filter(function (item) { return !('items' in item); }).length;
@@ -355,7 +356,8 @@ var DocMenu = function (_a) {
355
356
  var _e = React.useState(0), activeTop = _e[0], setActiveTop = _e[1];
356
357
  var _f = React.useState(36), activeHeight = _f[0], setActiveHeight = _f[1];
357
358
  var _g = React.useState(false), showMarker = _g[0], setShowMarker = _g[1];
358
- var _h = React.useState(false), markerIsMoving = _h[0], setMarkerIsMoving = _h[1];
359
+ var _h = React.useState(false), markerIsMoving = _h[0], localSetMarkerIsMoving = _h[1];
360
+ var _j = React.useState(true), hasCSSTransition = _j[0], setHasCSSTransition = _j[1];
359
361
  var container = React.useRef(null);
360
362
  var setActivePosition = React.useCallback(function (opts) {
361
363
  var _a;
@@ -365,11 +367,25 @@ var DocMenu = function (_a) {
365
367
  setActiveHeight(opts.height);
366
368
  }, []);
367
369
  var setShowMarkerFalse = React.useCallback(function () { return setShowMarker(false); }, []);
370
+ var setMarkerIsMoving = React.useCallback(function (val) {
371
+ localSetMarkerIsMoving(val);
372
+ if (!val)
373
+ return;
374
+ // make sure the animation does not fire "after"
375
+ // the marker has reappeared at its right place
376
+ setHasCSSTransition(false);
377
+ setTimeout(function () {
378
+ setHasCSSTransition(true);
379
+ }, 300);
380
+ }, [localSetMarkerIsMoving]);
368
381
  return (React.createElement(MarkerIsMovingContext.Provider, { value: { markerIsMoving: markerIsMoving, setMarkerIsMoving: setMarkerIsMoving } },
369
382
  React.createElement("div", { ref: container, className: "relative" },
370
- showMarker && !markerIsMoving && collapsible ? (React.createElement("div", { className: "absolute h-[36px] w-[4px] z-50 rounded-full bg-indigo-500 transition-all duration-300 ml-[6.5px] mt-[4px]", style: {
383
+ showMarker && !markerIsMoving && collapsible ? (React.createElement("div", { className: "absolute h-[36px] w-[4px] z-50 rounded-full bg-indigo-500 ml-[6.5px] mt-[4px]", style: {
371
384
  top: "".concat(activeTop, "px"),
372
385
  height: "".concat(activeHeight - 8, "px"),
386
+ transition: hasCSSTransition
387
+ ? 'height .3s ease-in-out, top .3s ease-in-out'
388
+ : 'none',
373
389
  } })) : null,
374
390
  React.createElement(DocGroupElements, __assign$1({}, rest, { items: items, activePath: activePath, collapsible: collapsible, depth: -1, onActivePosition: setActivePosition, LinkComponent: LinkComponent, hideMarker: setShowMarkerFalse })))));
375
391
  };
@@ -377,4 +393,4 @@ var DocMenu = function (_a) {
377
393
  export { DocMenu as default };
378
394
  //# sourceMappingURL=index.es.mjs.map
379
395
 
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"> */
396
+ /* <wind-keep class="container relative absolute h-[36px] w-[4px] z-50 rounded-full bg-indigo-500 ml-[6.5px] mt-[4px] transition ease-in-out text-indigo-500 rotate-0 -rotate-90 ml-[28px] grid transition-all 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"> */