@tanstack/router-devtools 1.112.18 → 1.114.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.
Files changed (91) hide show
  1. package/dist/cjs/index.cjs +12 -4
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.d.cts +2 -2
  4. package/dist/esm/index.d.ts +2 -2
  5. package/dist/esm/index.js +6 -4
  6. package/dist/esm/index.js.map +1 -1
  7. package/package.json +4 -3
  8. package/src/index.tsx +6 -2
  9. package/dist/cjs/AgeTicker.cjs +0 -58
  10. package/dist/cjs/AgeTicker.cjs.map +0 -1
  11. package/dist/cjs/AgeTicker.d.cts +0 -5
  12. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs +0 -421
  13. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs.map +0 -1
  14. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.d.cts +0 -3
  15. package/dist/cjs/Explorer.cjs +0 -310
  16. package/dist/cjs/Explorer.cjs.map +0 -1
  17. package/dist/cjs/Explorer.d.cts +0 -46
  18. package/dist/cjs/TanStackRouterDevtools.cjs +0 -177
  19. package/dist/cjs/TanStackRouterDevtools.cjs.map +0 -1
  20. package/dist/cjs/TanStackRouterDevtools.d.cts +0 -41
  21. package/dist/cjs/TanStackRouterDevtoolsPanel.cjs +0 -21
  22. package/dist/cjs/TanStackRouterDevtoolsPanel.cjs.map +0 -1
  23. package/dist/cjs/TanStackRouterDevtoolsPanel.d.cts +0 -33
  24. package/dist/cjs/context.cjs +0 -18
  25. package/dist/cjs/context.cjs.map +0 -1
  26. package/dist/cjs/context.d.cts +0 -8
  27. package/dist/cjs/logo.cjs +0 -1012
  28. package/dist/cjs/logo.cjs.map +0 -1
  29. package/dist/cjs/logo.d.cts +0 -1
  30. package/dist/cjs/theme.d.cts +0 -34
  31. package/dist/cjs/tokens.cjs +0 -201
  32. package/dist/cjs/tokens.cjs.map +0 -1
  33. package/dist/cjs/tokens.d.cts +0 -298
  34. package/dist/cjs/useLocalStorage.cjs +0 -45
  35. package/dist/cjs/useLocalStorage.cjs.map +0 -1
  36. package/dist/cjs/useLocalStorage.d.cts +0 -1
  37. package/dist/cjs/useMediaQuery.d.cts +0 -1
  38. package/dist/cjs/useStyles.cjs +0 -570
  39. package/dist/cjs/useStyles.cjs.map +0 -1
  40. package/dist/cjs/useStyles.d.cts +0 -52
  41. package/dist/cjs/utils.cjs +0 -84
  42. package/dist/cjs/utils.cjs.map +0 -1
  43. package/dist/cjs/utils.d.cts +0 -23
  44. package/dist/esm/AgeTicker.d.ts +0 -5
  45. package/dist/esm/AgeTicker.js +0 -58
  46. package/dist/esm/AgeTicker.js.map +0 -1
  47. package/dist/esm/BaseTanStackRouterDevtoolsPanel.d.ts +0 -3
  48. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js +0 -421
  49. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js.map +0 -1
  50. package/dist/esm/Explorer.d.ts +0 -46
  51. package/dist/esm/Explorer.js +0 -292
  52. package/dist/esm/Explorer.js.map +0 -1
  53. package/dist/esm/TanStackRouterDevtools.d.ts +0 -41
  54. package/dist/esm/TanStackRouterDevtools.js +0 -177
  55. package/dist/esm/TanStackRouterDevtools.js.map +0 -1
  56. package/dist/esm/TanStackRouterDevtoolsPanel.d.ts +0 -33
  57. package/dist/esm/TanStackRouterDevtoolsPanel.js +0 -21
  58. package/dist/esm/TanStackRouterDevtoolsPanel.js.map +0 -1
  59. package/dist/esm/context.d.ts +0 -8
  60. package/dist/esm/context.js +0 -18
  61. package/dist/esm/context.js.map +0 -1
  62. package/dist/esm/logo.d.ts +0 -1
  63. package/dist/esm/logo.js +0 -1012
  64. package/dist/esm/logo.js.map +0 -1
  65. package/dist/esm/theme.d.ts +0 -34
  66. package/dist/esm/tokens.d.ts +0 -298
  67. package/dist/esm/tokens.js +0 -201
  68. package/dist/esm/tokens.js.map +0 -1
  69. package/dist/esm/useLocalStorage.d.ts +0 -1
  70. package/dist/esm/useLocalStorage.js +0 -46
  71. package/dist/esm/useLocalStorage.js.map +0 -1
  72. package/dist/esm/useMediaQuery.d.ts +0 -1
  73. package/dist/esm/useStyles.d.ts +0 -52
  74. package/dist/esm/useStyles.js +0 -553
  75. package/dist/esm/useStyles.js.map +0 -1
  76. package/dist/esm/utils.d.ts +0 -23
  77. package/dist/esm/utils.js +0 -84
  78. package/dist/esm/utils.js.map +0 -1
  79. package/src/AgeTicker.tsx +0 -73
  80. package/src/BaseTanStackRouterDevtoolsPanel.tsx +0 -488
  81. package/src/Explorer.tsx +0 -362
  82. package/src/TanStackRouterDevtools.tsx +0 -250
  83. package/src/TanStackRouterDevtoolsPanel.tsx +0 -54
  84. package/src/context.ts +0 -22
  85. package/src/logo.tsx +0 -817
  86. package/src/theme.tsx +0 -31
  87. package/src/tokens.ts +0 -305
  88. package/src/useLocalStorage.ts +0 -52
  89. package/src/useMediaQuery.ts +0 -41
  90. package/src/useStyles.tsx +0 -589
  91. package/src/utils.ts +0 -188
@@ -1 +0,0 @@
1
- {"version":3,"file":"useStyles.js","sources":["../../src/useStyles.tsx"],"sourcesContent":["import React from 'react'\n\nimport * as goober from 'goober'\nimport { tokens } from './tokens'\nimport { ShadowDomTargetContext } from './context'\n\nconst stylesFactory = (shadowDOMTarget?: ShadowRoot) => {\n const { colors, font, size, alpha, shadow, border } = tokens\n const { fontFamily, lineHeight, size: fontSize } = font\n const css = shadowDOMTarget\n ? goober.css.bind({ target: shadowDOMTarget })\n : goober.css\n\n return {\n devtoolsPanelContainer: css`\n direction: ltr;\n position: fixed;\n bottom: 0;\n right: 0;\n z-index: 99999;\n width: 100%;\n max-height: 90%;\n border-top: 1px solid ${colors.gray[700]};\n transform-origin: top;\n `,\n devtoolsPanelContainerVisibility: (isOpen: boolean) => {\n return css`\n visibility: ${isOpen ? 'visible' : 'hidden'};\n `\n },\n devtoolsPanelContainerResizing: (isResizing: boolean) => {\n if (isResizing) {\n return css`\n transition: none;\n `\n }\n\n return css`\n transition: all 0.4s ease;\n `\n },\n devtoolsPanelContainerAnimation: (isOpen: boolean, height: number) => {\n if (isOpen) {\n return css`\n pointer-events: auto;\n transform: translateY(0);\n `\n }\n return css`\n pointer-events: none;\n transform: translateY(${height}px);\n `\n },\n logo: css`\n cursor: pointer;\n display: flex;\n flex-direction: column;\n background-color: transparent;\n border: none;\n font-family: ${fontFamily.sans};\n gap: ${tokens.size[0.5]};\n padding: 0px;\n &:hover {\n opacity: 0.7;\n }\n &:focus-visible {\n outline-offset: 4px;\n border-radius: ${border.radius.xs};\n outline: 2px solid ${colors.blue[800]};\n }\n `,\n tanstackLogo: css`\n font-size: ${font.size.md};\n font-weight: ${font.weight.bold};\n line-height: ${font.lineHeight.xs};\n white-space: nowrap;\n color: ${colors.gray[300]};\n `,\n routerLogo: css`\n font-weight: ${font.weight.semibold};\n font-size: ${font.size.xs};\n background: linear-gradient(to right, #84cc16, #10b981);\n background-clip: text;\n -webkit-background-clip: text;\n line-height: 1;\n -webkit-text-fill-color: transparent;\n white-space: nowrap;\n `,\n devtoolsPanel: css`\n display: flex;\n font-size: ${fontSize.sm};\n font-family: ${fontFamily.sans};\n background-color: ${colors.darkGray[700]};\n color: ${colors.gray[300]};\n\n @media (max-width: 700px) {\n flex-direction: column;\n }\n @media (max-width: 600px) {\n font-size: ${fontSize.xs};\n }\n `,\n dragHandle: css`\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 4px;\n cursor: row-resize;\n z-index: 100000;\n &:hover {\n background-color: ${colors.purple[400]}${alpha[90]};\n }\n `,\n firstContainer: css`\n flex: 1 1 500px;\n min-height: 40%;\n max-height: 100%;\n overflow: auto;\n border-right: 1px solid ${colors.gray[700]};\n display: flex;\n flex-direction: column;\n `,\n routerExplorerContainer: css`\n overflow-y: auto;\n flex: 1;\n `,\n routerExplorer: css`\n padding: ${tokens.size[2]};\n `,\n row: css`\n display: flex;\n align-items: center;\n padding: ${tokens.size[2]} ${tokens.size[2.5]};\n gap: ${tokens.size[2.5]};\n border-bottom: ${colors.darkGray[500]} 1px solid;\n align-items: center;\n `,\n detailsHeader: css`\n font-family: ui-sans-serif, Inter, system-ui, sans-serif, sans-serif;\n position: sticky;\n top: 0;\n z-index: 2;\n background-color: ${colors.darkGray[600]};\n padding: 0px ${tokens.size[2]};\n font-weight: ${font.weight.medium};\n font-size: ${font.size.xs};\n min-height: ${tokens.size[8]};\n line-height: ${font.lineHeight.xs};\n text-align: left;\n display: flex;\n align-items: center;\n `,\n maskedBadge: css`\n background: ${colors.yellow[900]}${alpha[70]};\n color: ${colors.yellow[300]};\n display: inline-block;\n padding: ${tokens.size[0]} ${tokens.size[2.5]};\n border-radius: ${border.radius.full};\n font-size: ${font.size.xs};\n font-weight: ${font.weight.normal};\n border: 1px solid ${colors.yellow[300]};\n `,\n maskedLocation: css`\n color: ${colors.yellow[300]};\n `,\n detailsContent: css`\n padding: ${tokens.size[1.5]} ${tokens.size[2]};\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: ${font.size.xs};\n `,\n routeMatchesToggle: css`\n display: flex;\n align-items: center;\n border: 1px solid ${colors.gray[500]};\n border-radius: ${border.radius.sm};\n overflow: hidden;\n `,\n routeMatchesToggleBtn: (active: boolean, showBorder: boolean) => {\n const base = css`\n appearance: none;\n border: none;\n font-size: 12px;\n padding: 4px 8px;\n background: transparent;\n cursor: pointer;\n font-family: ${fontFamily.sans};\n font-weight: ${font.weight.medium};\n `\n const classes = [base]\n\n if (active) {\n const activeStyles = css`\n background: ${colors.darkGray[400]};\n color: ${colors.gray[300]};\n `\n classes.push(activeStyles)\n } else {\n const inactiveStyles = css`\n color: ${colors.gray[500]};\n background: ${colors.darkGray[800]}${alpha[20]};\n `\n classes.push(inactiveStyles)\n }\n\n if (showBorder) {\n classes.push(css`\n border-right: 1px solid ${tokens.colors.gray[500]};\n `)\n }\n\n return classes\n },\n detailsHeaderInfo: css`\n flex: 1;\n justify-content: flex-end;\n display: flex;\n align-items: center;\n font-weight: ${font.weight.normal};\n color: ${colors.gray[400]};\n `,\n matchRow: (active: boolean) => {\n const base = css`\n display: flex;\n border-bottom: 1px solid ${colors.darkGray[400]};\n cursor: pointer;\n align-items: center;\n padding: ${size[1]} ${size[2]};\n gap: ${size[2]};\n font-size: ${fontSize.xs};\n color: ${colors.gray[300]};\n `\n const classes = [base]\n\n if (active) {\n const activeStyles = css`\n background: ${colors.darkGray[500]};\n `\n classes.push(activeStyles)\n }\n\n return classes\n },\n matchIndicator: (\n color: 'green' | 'red' | 'yellow' | 'gray' | 'blue' | 'purple',\n ) => {\n const base = css`\n flex: 0 0 auto;\n width: ${size[3]};\n height: ${size[3]};\n background: ${colors[color][900]};\n border: 1px solid ${colors[color][500]};\n border-radius: ${border.radius.full};\n transition: all 0.25s ease-out;\n box-sizing: border-box;\n `\n const classes = [base]\n\n if (color === 'gray') {\n const grayStyles = css`\n background: ${colors.gray[700]};\n border-color: ${colors.gray[400]};\n `\n classes.push(grayStyles)\n }\n\n return classes\n },\n matchID: css`\n flex: 1;\n line-height: ${lineHeight['xs']};\n `,\n ageTicker: (showWarning: boolean) => {\n const base = css`\n display: flex;\n gap: ${size[1]};\n font-size: ${fontSize.xs};\n color: ${colors.gray[400]};\n font-variant-numeric: tabular-nums;\n line-height: ${lineHeight['xs']};\n `\n\n const classes = [base]\n\n if (showWarning) {\n const warningStyles = css`\n color: ${colors.yellow[400]};\n `\n classes.push(warningStyles)\n }\n\n return classes\n },\n secondContainer: css`\n flex: 1 1 500px;\n min-height: 40%;\n max-height: 100%;\n overflow: auto;\n border-right: 1px solid ${colors.gray[700]};\n display: flex;\n flex-direction: column;\n `,\n thirdContainer: css`\n flex: 1 1 500px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n height: 100%;\n border-right: 1px solid ${colors.gray[700]};\n\n @media (max-width: 700px) {\n border-top: 2px solid ${colors.gray[700]};\n }\n `,\n fourthContainer: css`\n flex: 1 1 500px;\n min-height: 40%;\n max-height: 100%;\n overflow: auto;\n display: flex;\n flex-direction: column;\n `,\n routesContainer: css`\n overflow-x: auto;\n overflow-y: visible;\n `,\n routesRowContainer: (active: boolean, isMatch: boolean) => {\n const base = css`\n display: flex;\n border-bottom: 1px solid ${colors.darkGray[400]};\n align-items: center;\n padding: ${size[1]} ${size[2]};\n gap: ${size[2]};\n font-size: ${fontSize.xs};\n color: ${colors.gray[300]};\n cursor: ${isMatch ? 'pointer' : 'default'};\n line-height: ${lineHeight['xs']};\n `\n const classes = [base]\n\n if (active) {\n const activeStyles = css`\n background: ${colors.darkGray[500]};\n `\n classes.push(activeStyles)\n }\n\n return classes\n },\n routesRow: (isMatch: boolean) => {\n const base = css`\n flex: 1 0 auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: ${fontSize.xs};\n line-height: ${lineHeight['xs']};\n `\n\n const classes = [base]\n\n if (!isMatch) {\n const matchStyles = css`\n color: ${colors.gray[400]};\n `\n classes.push(matchStyles)\n }\n\n return classes\n },\n routeParamInfo: css`\n color: ${colors.gray[400]};\n font-size: ${fontSize.xs};\n line-height: ${lineHeight['xs']};\n `,\n nestedRouteRow: (isRoot: boolean) => {\n const base = css`\n margin-left: ${isRoot ? 0 : size[3.5]};\n border-left: ${isRoot ? '' : `solid 1px ${colors.gray[700]}`};\n `\n return base\n },\n code: css`\n font-size: ${fontSize.xs};\n line-height: ${lineHeight['xs']};\n `,\n matchesContainer: css`\n flex: 1 1 auto;\n overflow-y: auto;\n `,\n cachedMatchesContainer: css`\n flex: 1 1 auto;\n overflow-y: auto;\n max-height: 50%;\n `,\n maskedBadgeContainer: css`\n flex: 1;\n justify-content: flex-end;\n display: flex;\n `,\n matchDetails: css`\n display: flex;\n flex-direction: column;\n padding: ${tokens.size[2]};\n font-size: ${tokens.font.size.xs};\n color: ${tokens.colors.gray[300]};\n line-height: ${tokens.font.lineHeight.sm};\n `,\n matchStatus: (\n status: 'pending' | 'success' | 'error' | 'notFound' | 'redirected',\n isFetching: false | 'beforeLoad' | 'loader',\n ) => {\n const colorMap = {\n pending: 'yellow',\n success: 'green',\n error: 'red',\n notFound: 'purple',\n redirected: 'gray',\n } as const\n\n const color =\n isFetching && status === 'success'\n ? isFetching === 'beforeLoad'\n ? 'purple'\n : 'blue'\n : colorMap[status]\n\n return css`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 40px;\n border-radius: ${tokens.border.radius.sm};\n font-weight: ${tokens.font.weight.normal};\n background-color: ${tokens.colors[color][900]}${tokens.alpha[90]};\n color: ${tokens.colors[color][300]};\n border: 1px solid ${tokens.colors[color][600]};\n margin-bottom: ${tokens.size[2]};\n transition: all 0.25s ease-out;\n `\n },\n matchDetailsInfo: css`\n display: flex;\n justify-content: flex-end;\n flex: 1;\n `,\n matchDetailsInfoLabel: css`\n display: flex;\n `,\n mainCloseBtn: css`\n background: ${colors.darkGray[700]};\n padding: ${size[1]} ${size[2]} ${size[1]} ${size[1.5]};\n border-radius: ${border.radius.md};\n position: fixed;\n z-index: 99999;\n display: inline-flex;\n width: fit-content;\n cursor: pointer;\n appearance: none;\n border: 0;\n gap: 8px;\n align-items: center;\n border: 1px solid ${colors.gray[500]};\n font-size: ${font.size.xs};\n cursor: pointer;\n transition: all 0.25s ease-out;\n\n &:hover {\n background: ${colors.darkGray[500]};\n }\n `,\n mainCloseBtnPosition: (\n position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right',\n ) => {\n const base = css`\n ${position === 'top-left' ? `top: ${size[2]}; left: ${size[2]};` : ''}\n ${position === 'top-right' ? `top: ${size[2]}; right: ${size[2]};` : ''}\n ${position === 'bottom-left'\n ? `bottom: ${size[2]}; left: ${size[2]};`\n : ''}\n ${position === 'bottom-right'\n ? `bottom: ${size[2]}; right: ${size[2]};`\n : ''}\n `\n return base\n },\n mainCloseBtnAnimation: (isOpen: boolean) => {\n if (isOpen) {\n return css`\n opacity: 1;\n pointer-events: auto;\n visibility: visible;\n `\n }\n return css`\n opacity: 0;\n pointer-events: none;\n visibility: hidden;\n `\n },\n routerLogoCloseButton: css`\n font-weight: ${font.weight.semibold};\n font-size: ${font.size.xs};\n background: linear-gradient(to right, #98f30c, #00f4a3);\n background-clip: text;\n -webkit-background-clip: text;\n line-height: 1;\n -webkit-text-fill-color: transparent;\n white-space: nowrap;\n `,\n mainCloseBtnDivider: css`\n width: 1px;\n background: ${tokens.colors.gray[600]};\n height: 100%;\n border-radius: 999999px;\n color: transparent;\n `,\n mainCloseBtnIconContainer: css`\n position: relative;\n width: ${size[5]};\n height: ${size[5]};\n background: pink;\n border-radius: 999999px;\n overflow: hidden;\n `,\n mainCloseBtnIconOuter: css`\n width: ${size[5]};\n height: ${size[5]};\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n filter: blur(3px) saturate(1.8) contrast(2);\n `,\n mainCloseBtnIconInner: css`\n width: ${size[4]};\n height: ${size[4]};\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n `,\n panelCloseBtn: css`\n position: absolute;\n cursor: pointer;\n z-index: 100001;\n display: flex;\n align-items: center;\n justify-content: center;\n outline: none;\n background-color: ${colors.darkGray[700]};\n &:hover {\n background-color: ${colors.darkGray[500]};\n }\n\n top: 0;\n right: ${size[2]};\n transform: translate(0, -100%);\n border-right: ${colors.darkGray[300]} 1px solid;\n border-left: ${colors.darkGray[300]} 1px solid;\n border-top: ${colors.darkGray[300]} 1px solid;\n border-bottom: none;\n border-radius: ${border.radius.sm} ${border.radius.sm} 0px 0px;\n padding: ${size[1]} ${size[1.5]} ${size[0.5]} ${size[1.5]};\n\n &::after {\n content: ' ';\n position: absolute;\n top: 100%;\n left: -${size[2.5]};\n height: ${size[1.5]};\n width: calc(100% + ${size[5]});\n }\n `,\n panelCloseBtnIcon: css`\n color: ${colors.gray[400]};\n width: ${size[2]};\n height: ${size[2]};\n `,\n }\n}\n\nexport function useStyles() {\n const shadowDomTarget = React.useContext(ShadowDomTargetContext)\n const [_styles] = React.useState(() => stylesFactory(shadowDomTarget))\n return _styles\n}\n"],"names":["React"],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import { default as React } from 'react';
2
- import { AnyRootRoute, AnyRoute, AnyRouteMatch } from '@tanstack/react-router';
3
- import { Theme } from './theme.js';
4
- export declare const isServer: boolean;
5
- type StyledComponent<T> = T extends 'button' ? React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement> : T extends 'input' ? React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> : T extends 'select' ? React.DetailedHTMLProps<React.SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement> : T extends keyof HTMLElementTagNameMap ? React.HTMLAttributes<HTMLElementTagNameMap[T]> : never;
6
- export declare function getStatusColor(match: AnyRouteMatch): "yellow" | "green" | "red" | "purple" | "gray" | "blue";
7
- export declare function getRouteStatusColor(matches: Array<AnyRouteMatch>, route: AnyRoute | AnyRootRoute): "yellow" | "green" | "red" | "purple" | "gray" | "blue";
8
- type Styles = React.CSSProperties | ((props: Record<string, any>, theme: Theme) => React.CSSProperties);
9
- export declare function styled<T extends keyof HTMLElementTagNameMap>(type: T, newStyles: Styles, queries?: Record<string, Styles>): React.ForwardRefExoticComponent<React.PropsWithoutRef<StyledComponent<T>> & React.RefAttributes<HTMLElementTagNameMap[T]>>;
10
- export declare function useIsMounted(): boolean;
11
- /**
12
- * Displays a string regardless the type of the data
13
- * @param {unknown} value Value to be stringified
14
- */
15
- export declare const displayValue: (value: unknown) => string;
16
- /**
17
- * This hook is a safe useState version which schedules state updates in microtasks
18
- * to prevent updating a component state while React is rendering different components
19
- * or when the component is not mounted anymore.
20
- */
21
- export declare function useSafeState<T>(initialState: T): [T, (value: T) => void];
22
- export declare function multiSortBy<T>(arr: Array<T>, accessors?: Array<(item: T) => any>): Array<T>;
23
- export {};
package/dist/esm/utils.js DELETED
@@ -1,84 +0,0 @@
1
- import React__default from "react";
2
- const isServer = typeof window === "undefined";
3
- function getStatusColor(match) {
4
- const colorMap = {
5
- pending: "yellow",
6
- success: "green",
7
- error: "red",
8
- notFound: "purple",
9
- redirected: "gray"
10
- };
11
- return match.isFetching && match.status === "success" ? match.isFetching === "beforeLoad" ? "purple" : "blue" : colorMap[match.status];
12
- }
13
- function getRouteStatusColor(matches, route) {
14
- const found = matches.find((d) => d.routeId === route.id);
15
- if (!found) return "gray";
16
- return getStatusColor(found);
17
- }
18
- function useIsMounted() {
19
- const [isMounted, setIsMounted] = React__default.useState(false);
20
- React__default[isServer ? "useEffect" : "useLayoutEffect"](() => {
21
- setIsMounted(true);
22
- }, []);
23
- return isMounted;
24
- }
25
- const displayValue = (value) => {
26
- const name = Object.getOwnPropertyNames(Object(value));
27
- const newValue = typeof value === "bigint" ? `${value.toString()}n` : value;
28
- try {
29
- return JSON.stringify(newValue, name);
30
- } catch (e) {
31
- return `unable to stringify`;
32
- }
33
- };
34
- function useSafeState(initialState) {
35
- const isMounted = useIsMounted();
36
- const [state, setState] = React__default.useState(initialState);
37
- const safeSetState = React__default.useCallback(
38
- (value) => {
39
- scheduleMicrotask(() => {
40
- if (isMounted) {
41
- setState(value);
42
- }
43
- });
44
- },
45
- [isMounted]
46
- );
47
- return [state, safeSetState];
48
- }
49
- function scheduleMicrotask(callback) {
50
- Promise.resolve().then(callback).catch(
51
- (error) => setTimeout(() => {
52
- throw error;
53
- })
54
- );
55
- }
56
- function multiSortBy(arr, accessors = [(d) => d]) {
57
- return arr.map((d, i) => [d, i]).sort(([a, ai], [b, bi]) => {
58
- for (const accessor of accessors) {
59
- const ao = accessor(a);
60
- const bo = accessor(b);
61
- if (typeof ao === "undefined") {
62
- if (typeof bo === "undefined") {
63
- continue;
64
- }
65
- return 1;
66
- }
67
- if (ao === bo) {
68
- continue;
69
- }
70
- return ao > bo ? 1 : -1;
71
- }
72
- return ai - bi;
73
- }).map(([d]) => d);
74
- }
75
- export {
76
- displayValue,
77
- getRouteStatusColor,
78
- getStatusColor,
79
- isServer,
80
- multiSortBy,
81
- useIsMounted,
82
- useSafeState
83
- };
84
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import React from 'react'\nimport { useTheme } from './theme'\nimport useMediaQuery from './useMediaQuery'\nimport type {\n AnyRootRoute,\n AnyRoute,\n AnyRouteMatch,\n} from '@tanstack/react-router'\n\nimport type { Theme } from './theme'\n\nexport const isServer = typeof window === 'undefined'\n\ntype StyledComponent<T> = T extends 'button'\n ? React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n >\n : T extends 'input'\n ? React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n >\n : T extends 'select'\n ? React.DetailedHTMLProps<\n React.SelectHTMLAttributes<HTMLSelectElement>,\n HTMLSelectElement\n >\n : T extends keyof HTMLElementTagNameMap\n ? React.HTMLAttributes<HTMLElementTagNameMap[T]>\n : never\n\nexport function getStatusColor(match: AnyRouteMatch) {\n const colorMap = {\n pending: 'yellow',\n success: 'green',\n error: 'red',\n notFound: 'purple',\n redirected: 'gray',\n } as const\n\n return match.isFetching && match.status === 'success'\n ? match.isFetching === 'beforeLoad'\n ? 'purple'\n : 'blue'\n : colorMap[match.status]\n}\n\nexport function getRouteStatusColor(\n matches: Array<AnyRouteMatch>,\n route: AnyRoute | AnyRootRoute,\n) {\n const found = matches.find((d) => d.routeId === route.id)\n if (!found) return 'gray'\n return getStatusColor(found)\n}\n\ntype Styles =\n | React.CSSProperties\n | ((props: Record<string, any>, theme: Theme) => React.CSSProperties)\n\nexport function styled<T extends keyof HTMLElementTagNameMap>(\n type: T,\n newStyles: Styles,\n queries: Record<string, Styles> = {},\n) {\n return React.forwardRef<HTMLElementTagNameMap[T], StyledComponent<T>>(\n ({ style, ...rest }, ref) => {\n const theme = useTheme()\n\n const mediaStyles = Object.entries(queries).reduce(\n (current, [key, value]) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useMediaQuery(key)\n ? {\n ...current,\n ...(typeof value === 'function' ? value(rest, theme) : value),\n }\n : current\n },\n {},\n )\n\n return React.createElement(type, {\n ...rest,\n style: {\n ...(typeof newStyles === 'function'\n ? newStyles(rest, theme)\n : newStyles),\n ...style,\n ...mediaStyles,\n },\n ref,\n })\n },\n )\n}\n\nexport function useIsMounted() {\n const [isMounted, setIsMounted] = React.useState(false)\n\n React[isServer ? 'useEffect' : 'useLayoutEffect'](() => {\n setIsMounted(true)\n }, [])\n\n return isMounted\n}\n\n/**\n * Displays a string regardless the type of the data\n * @param {unknown} value Value to be stringified\n */\nexport const displayValue = (value: unknown) => {\n const name = Object.getOwnPropertyNames(Object(value))\n const newValue = typeof value === 'bigint' ? `${value.toString()}n` : value\n try {\n return JSON.stringify(newValue, name)\n } catch (e) {\n return `unable to stringify`\n }\n}\n\n/**\n * This hook is a safe useState version which schedules state updates in microtasks\n * to prevent updating a component state while React is rendering different components\n * or when the component is not mounted anymore.\n */\nexport function useSafeState<T>(initialState: T): [T, (value: T) => void] {\n const isMounted = useIsMounted()\n const [state, setState] = React.useState(initialState)\n\n const safeSetState = React.useCallback(\n (value: T) => {\n scheduleMicrotask(() => {\n if (isMounted) {\n setState(value)\n }\n })\n },\n [isMounted],\n )\n\n return [state, safeSetState]\n}\n\n/**\n * Schedules a microtask.\n * This can be useful to schedule state updates after rendering.\n */\nfunction scheduleMicrotask(callback: () => void) {\n Promise.resolve()\n .then(callback)\n .catch((error) =>\n setTimeout(() => {\n throw error\n }),\n )\n}\n\nexport function multiSortBy<T>(\n arr: Array<T>,\n accessors: Array<(item: T) => any> = [(d) => d],\n): Array<T> {\n return arr\n .map((d, i) => [d, i] as const)\n .sort(([a, ai], [b, bi]) => {\n for (const accessor of accessors) {\n const ao = accessor(a)\n const bo = accessor(b)\n\n if (typeof ao === 'undefined') {\n if (typeof bo === 'undefined') {\n continue\n }\n return 1\n }\n\n if (ao === bo) {\n continue\n }\n\n return ao > bo ? 1 : -1\n }\n\n return ai - bi\n })\n .map(([d]) => d)\n}\n"],"names":["React"],"mappings":";AAWa,MAAA,WAAW,OAAO,WAAW;AAqBnC,SAAS,eAAe,OAAsB;AACnD,QAAM,WAAW;AAAA,IACf,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAEA,SAAO,MAAM,cAAc,MAAM,WAAW,YACxC,MAAM,eAAe,eACnB,WACA,SACF,SAAS,MAAM,MAAM;AAC3B;AAEgB,SAAA,oBACd,SACA,OACA;AACM,QAAA,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE,YAAY,MAAM,EAAE;AACpD,MAAA,CAAC,MAAc,QAAA;AACnB,SAAO,eAAe,KAAK;AAC7B;AA2CO,SAAS,eAAe;AAC7B,QAAM,CAAC,WAAW,YAAY,IAAIA,eAAM,SAAS,KAAK;AAEtDA,iBAAM,WAAW,cAAc,iBAAiB,EAAE,MAAM;AACtD,iBAAa,IAAI;AAAA,EACnB,GAAG,EAAE;AAEE,SAAA;AACT;AAMa,MAAA,eAAe,CAAC,UAAmB;AAC9C,QAAM,OAAO,OAAO,oBAAoB,OAAO,KAAK,CAAC;AAC/C,QAAA,WAAW,OAAO,UAAU,WAAW,GAAG,MAAM,SAAA,CAAU,MAAM;AAClE,MAAA;AACK,WAAA,KAAK,UAAU,UAAU,IAAI;AAAA,WAC7B,GAAG;AACH,WAAA;AAAA,EAAA;AAEX;AAOO,SAAS,aAAgB,cAA0C;AACxE,QAAM,YAAY,aAAa;AAC/B,QAAM,CAAC,OAAO,QAAQ,IAAIA,eAAM,SAAS,YAAY;AAErD,QAAM,eAAeA,eAAM;AAAA,IACzB,CAAC,UAAa;AACZ,wBAAkB,MAAM;AACtB,YAAI,WAAW;AACb,mBAAS,KAAK;AAAA,QAAA;AAAA,MAChB,CACD;AAAA,IACH;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEO,SAAA,CAAC,OAAO,YAAY;AAC7B;AAMA,SAAS,kBAAkB,UAAsB;AAC/C,UAAQ,QAAQ,EACb,KAAK,QAAQ,EACb;AAAA,IAAM,CAAC,UACN,WAAW,MAAM;AACT,YAAA;AAAA,IACP,CAAA;AAAA,EACH;AACJ;AAEO,SAAS,YACd,KACA,YAAqC,CAAC,CAAC,MAAM,CAAC,GACpC;AACV,SAAO,IACJ,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAU,EAC7B,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM;AAC1B,eAAW,YAAY,WAAW;AAC1B,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,SAAS,CAAC;AAEjB,UAAA,OAAO,OAAO,aAAa;AACzB,YAAA,OAAO,OAAO,aAAa;AAC7B;AAAA,QAAA;AAEK,eAAA;AAAA,MAAA;AAGT,UAAI,OAAO,IAAI;AACb;AAAA,MAAA;AAGK,aAAA,KAAK,KAAK,IAAI;AAAA,IAAA;AAGvB,WAAO,KAAK;AAAA,EACb,CAAA,EACA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AACnB;"}
package/src/AgeTicker.tsx DELETED
@@ -1,73 +0,0 @@
1
- import { clsx as cx } from 'clsx'
2
- import React from 'react'
3
- import { useStyles } from './useStyles'
4
- import type { AnyRouteMatch, AnyRouter } from '@tanstack/react-router'
5
-
6
- function formatTime(ms: number) {
7
- const units = ['s', 'min', 'h', 'd']
8
- const values = [ms / 1000, ms / 60000, ms / 3600000, ms / 86400000]
9
-
10
- let chosenUnitIndex = 0
11
- for (let i = 1; i < values.length; i++) {
12
- if (values[i]! < 1) break
13
- chosenUnitIndex = i
14
- }
15
-
16
- const formatter = new Intl.NumberFormat(navigator.language, {
17
- compactDisplay: 'short',
18
- notation: 'compact',
19
- maximumFractionDigits: 0,
20
- })
21
-
22
- return formatter.format(values[chosenUnitIndex]!) + units[chosenUnitIndex]
23
- }
24
-
25
- export function AgeTicker({
26
- match,
27
- router,
28
- }: {
29
- match?: AnyRouteMatch
30
- router: AnyRouter
31
- }) {
32
- const styles = useStyles()
33
- const rerender = React.useReducer(
34
- () => ({}),
35
- () => ({}),
36
- )[1]
37
-
38
- React.useEffect(() => {
39
- const interval = setInterval(() => {
40
- rerender()
41
- }, 1000)
42
-
43
- return () => {
44
- clearInterval(interval)
45
- }
46
- }, [rerender])
47
-
48
- if (!match) {
49
- return null
50
- }
51
-
52
- const route = router.looseRoutesById[match.routeId]!
53
-
54
- if (!route.options.loader) {
55
- return null
56
- }
57
-
58
- const age = Date.now() - match.updatedAt
59
- const staleTime =
60
- route.options.staleTime ?? router.options.defaultStaleTime ?? 0
61
- const gcTime =
62
- route.options.gcTime ?? router.options.defaultGcTime ?? 30 * 60 * 1000
63
-
64
- return (
65
- <div className={cx(styles.ageTicker(age > staleTime))}>
66
- <div>{formatTime(age)}</div>
67
- <div>/</div>
68
- <div>{formatTime(staleTime)}</div>
69
- <div>/</div>
70
- <div>{formatTime(gcTime)}</div>
71
- </div>
72
- )
73
- }