@tanstack/router-devtools-core 1.121.19 → 1.121.21

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 (89) hide show
  1. package/dist/cjs/AgeTicker.cjs +47 -0
  2. package/dist/cjs/AgeTicker.cjs.map +1 -0
  3. package/dist/cjs/AgeTicker.d.cts +6 -0
  4. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs +602 -0
  5. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.cjs.map +1 -0
  6. package/dist/cjs/BaseTanStackRouterDevtoolsPanel.d.cts +35 -0
  7. package/dist/cjs/Explorer.cjs +307 -0
  8. package/dist/cjs/Explorer.cjs.map +1 -0
  9. package/dist/cjs/Explorer.d.cts +43 -0
  10. package/dist/cjs/FloatingTanStackRouterDevtools.cjs +204 -0
  11. package/dist/cjs/FloatingTanStackRouterDevtools.cjs.map +1 -0
  12. package/dist/cjs/FloatingTanStackRouterDevtools.d.cts +48 -0
  13. package/dist/cjs/NavigateButton.cjs +30 -0
  14. package/dist/cjs/NavigateButton.cjs.map +1 -0
  15. package/dist/cjs/NavigateButton.d.cts +7 -0
  16. package/dist/cjs/TanStackRouterDevtoolsCore.cjs +121 -0
  17. package/dist/cjs/TanStackRouterDevtoolsCore.cjs.map +1 -0
  18. package/dist/cjs/TanStackRouterDevtoolsCore.d.cts +55 -0
  19. package/dist/cjs/TanStackRouterDevtoolsPanelCore.cjs +107 -0
  20. package/dist/cjs/TanStackRouterDevtoolsPanelCore.cjs.map +1 -0
  21. package/dist/cjs/TanStackRouterDevtoolsPanelCore.d.cts +43 -0
  22. package/dist/cjs/context.cjs +20 -0
  23. package/dist/cjs/context.cjs.map +1 -0
  24. package/dist/cjs/context.d.cts +13 -0
  25. package/dist/cjs/index.cjs +7 -0
  26. package/dist/cjs/index.cjs.map +1 -0
  27. package/dist/cjs/index.d.cts +2 -0
  28. package/dist/cjs/logo.cjs +92 -0
  29. package/dist/cjs/logo.cjs.map +1 -0
  30. package/dist/cjs/logo.d.cts +1 -0
  31. package/dist/cjs/theme.d.cts +34 -0
  32. package/dist/cjs/tokens.cjs +201 -0
  33. package/dist/cjs/tokens.cjs.map +1 -0
  34. package/dist/cjs/tokens.d.cts +298 -0
  35. package/dist/cjs/useLocalStorage.cjs +42 -0
  36. package/dist/cjs/useLocalStorage.cjs.map +1 -0
  37. package/dist/cjs/useLocalStorage.d.cts +2 -0
  38. package/dist/cjs/useMediaQuery.d.cts +2 -0
  39. package/dist/cjs/useStyles.cjs +607 -0
  40. package/dist/cjs/useStyles.cjs.map +1 -0
  41. package/dist/cjs/useStyles.d.cts +55 -0
  42. package/dist/cjs/utils.cjs +63 -0
  43. package/dist/cjs/utils.cjs.map +1 -0
  44. package/dist/cjs/utils.d.cts +25 -0
  45. package/dist/esm/AgeTicker.d.ts +6 -0
  46. package/dist/esm/AgeTicker.js +47 -0
  47. package/dist/esm/AgeTicker.js.map +1 -0
  48. package/dist/esm/BaseTanStackRouterDevtoolsPanel.d.ts +35 -0
  49. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js +602 -0
  50. package/dist/esm/BaseTanStackRouterDevtoolsPanel.js.map +1 -0
  51. package/dist/esm/Explorer.d.ts +43 -0
  52. package/dist/esm/Explorer.js +290 -0
  53. package/dist/esm/Explorer.js.map +1 -0
  54. package/dist/esm/FloatingTanStackRouterDevtools.d.ts +48 -0
  55. package/dist/esm/FloatingTanStackRouterDevtools.js +204 -0
  56. package/dist/esm/FloatingTanStackRouterDevtools.js.map +1 -0
  57. package/dist/esm/NavigateButton.d.ts +7 -0
  58. package/dist/esm/NavigateButton.js +30 -0
  59. package/dist/esm/NavigateButton.js.map +1 -0
  60. package/dist/esm/TanStackRouterDevtoolsCore.d.ts +55 -0
  61. package/dist/esm/TanStackRouterDevtoolsCore.js +121 -0
  62. package/dist/esm/TanStackRouterDevtoolsCore.js.map +1 -0
  63. package/dist/esm/TanStackRouterDevtoolsPanelCore.d.ts +43 -0
  64. package/dist/esm/TanStackRouterDevtoolsPanelCore.js +107 -0
  65. package/dist/esm/TanStackRouterDevtoolsPanelCore.js.map +1 -0
  66. package/dist/esm/context.d.ts +13 -0
  67. package/dist/esm/context.js +20 -0
  68. package/dist/esm/context.js.map +1 -0
  69. package/dist/esm/index.d.ts +2 -0
  70. package/dist/esm/index.js +7 -0
  71. package/dist/esm/index.js.map +1 -0
  72. package/dist/esm/logo.d.ts +1 -0
  73. package/dist/esm/logo.js +92 -0
  74. package/dist/esm/logo.js.map +1 -0
  75. package/dist/esm/theme.d.ts +34 -0
  76. package/dist/esm/tokens.d.ts +298 -0
  77. package/dist/esm/tokens.js +201 -0
  78. package/dist/esm/tokens.js.map +1 -0
  79. package/dist/esm/useLocalStorage.d.ts +2 -0
  80. package/dist/esm/useLocalStorage.js +43 -0
  81. package/dist/esm/useLocalStorage.js.map +1 -0
  82. package/dist/esm/useMediaQuery.d.ts +2 -0
  83. package/dist/esm/useStyles.d.ts +55 -0
  84. package/dist/esm/useStyles.js +590 -0
  85. package/dist/esm/useStyles.js.map +1 -0
  86. package/dist/esm/utils.d.ts +25 -0
  87. package/dist/esm/utils.js +63 -0
  88. package/dist/esm/utils.js.map +1 -0
  89. package/package.json +2 -2
@@ -0,0 +1,55 @@
1
+ import { Accessor } from 'solid-js';
2
+ export declare function useStyles(): Accessor<{
3
+ devtoolsPanelContainer: string;
4
+ devtoolsPanelContainerVisibility: (isOpen: boolean) => string;
5
+ devtoolsPanelContainerResizing: (isResizing: Accessor<boolean>) => string;
6
+ devtoolsPanelContainerAnimation: (isOpen: boolean, height: number) => string;
7
+ logo: string;
8
+ tanstackLogo: string;
9
+ routerLogo: string;
10
+ devtoolsPanel: string;
11
+ dragHandle: string;
12
+ firstContainer: string;
13
+ routerExplorerContainer: string;
14
+ routerExplorer: string;
15
+ row: string;
16
+ detailsHeader: string;
17
+ maskedBadge: string;
18
+ maskedLocation: string;
19
+ detailsContent: string;
20
+ routeMatchesToggle: string;
21
+ routeMatchesToggleBtn: (active: boolean, showBorder: boolean) => string[];
22
+ detailsHeaderInfo: string;
23
+ matchRow: (active: boolean) => string[];
24
+ matchIndicator: (color: "green" | "red" | "yellow" | "gray" | "blue" | "purple") => string[];
25
+ matchID: string;
26
+ ageTicker: (showWarning: boolean) => string[];
27
+ secondContainer: string;
28
+ thirdContainer: string;
29
+ fourthContainer: string;
30
+ routesContainer: string;
31
+ routesRowContainer: (active: boolean, isMatch: boolean) => string[];
32
+ routesRow: (isMatch: boolean) => string[];
33
+ routesRowInner: string;
34
+ routeParamInfo: string;
35
+ nestedRouteRow: (isRoot: boolean) => string;
36
+ code: string;
37
+ matchesContainer: string;
38
+ cachedMatchesContainer: string;
39
+ maskedBadgeContainer: string;
40
+ matchDetails: string;
41
+ matchStatus: (status: "pending" | "success" | "error" | "notFound" | "redirected", isFetching: false | "beforeLoad" | "loader") => string;
42
+ matchDetailsInfo: string;
43
+ matchDetailsInfoLabel: string;
44
+ mainCloseBtn: string;
45
+ mainCloseBtnPosition: (position: "top-left" | "top-right" | "bottom-left" | "bottom-right") => string;
46
+ mainCloseBtnAnimation: (isOpen: boolean) => string;
47
+ routerLogoCloseButton: string;
48
+ mainCloseBtnDivider: string;
49
+ mainCloseBtnIconContainer: string;
50
+ mainCloseBtnIconOuter: string;
51
+ mainCloseBtnIconInner: string;
52
+ panelCloseBtn: string;
53
+ panelCloseBtnIcon: string;
54
+ navigateButton: string;
55
+ }>;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ require("solid-js/web");
4
+ const solidJs = require("solid-js");
5
+ const isServer = typeof window === "undefined";
6
+ function getStatusColor(match) {
7
+ const colorMap = {
8
+ pending: "yellow",
9
+ success: "green",
10
+ error: "red",
11
+ notFound: "purple",
12
+ redirected: "gray"
13
+ };
14
+ return match.isFetching && match.status === "success" ? match.isFetching === "beforeLoad" ? "purple" : "blue" : colorMap[match.status];
15
+ }
16
+ function getRouteStatusColor(matches, route) {
17
+ const found = matches.find((d) => d.routeId === route.id);
18
+ if (!found) return "gray";
19
+ return getStatusColor(found);
20
+ }
21
+ function useIsMounted() {
22
+ const [isMounted, setIsMounted] = solidJs.createSignal(false);
23
+ const effect = isServer ? solidJs.createEffect : solidJs.createRenderEffect;
24
+ effect(() => {
25
+ setIsMounted(true);
26
+ });
27
+ return isMounted;
28
+ }
29
+ const displayValue = (value) => {
30
+ const name = Object.getOwnPropertyNames(Object(value));
31
+ const newValue = typeof value === "bigint" ? `${value.toString()}n` : value;
32
+ try {
33
+ return JSON.stringify(newValue, name);
34
+ } catch (e) {
35
+ return `unable to stringify`;
36
+ }
37
+ };
38
+ function multiSortBy(arr, accessors = [(d) => d]) {
39
+ return arr.map((d, i) => [d, i]).sort(([a, ai], [b, bi]) => {
40
+ for (const accessor of accessors) {
41
+ const ao = accessor(a);
42
+ const bo = accessor(b);
43
+ if (typeof ao === "undefined") {
44
+ if (typeof bo === "undefined") {
45
+ continue;
46
+ }
47
+ return 1;
48
+ }
49
+ if (ao === bo) {
50
+ continue;
51
+ }
52
+ return ao > bo ? 1 : -1;
53
+ }
54
+ return ai - bi;
55
+ }).map(([d]) => d);
56
+ }
57
+ exports.displayValue = displayValue;
58
+ exports.getRouteStatusColor = getRouteStatusColor;
59
+ exports.getStatusColor = getStatusColor;
60
+ exports.isServer = isServer;
61
+ exports.multiSortBy = multiSortBy;
62
+ exports.useIsMounted = useIsMounted;
63
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","sources":["../../src/utils.tsx"],"sourcesContent":["import { Dynamic } from 'solid-js/web'\nimport { createEffect, createRenderEffect, createSignal } from 'solid-js'\nimport { useTheme } from './theme'\nimport useMediaQuery from './useMediaQuery'\nimport type { AnyRoute, AnyRouteMatch } from '@tanstack/router-core'\n\nimport type { Theme } from './theme'\nimport type { JSX } from 'solid-js'\n\nexport const isServer = typeof window === 'undefined'\n\ntype StyledComponent<T> = T extends 'button'\n ? JSX.ButtonHTMLAttributes<HTMLButtonElement>\n : T extends 'input'\n ? JSX.InputHTMLAttributes<HTMLInputElement>\n : T extends 'select'\n ? JSX.SelectHTMLAttributes<HTMLSelectElement>\n : T extends keyof HTMLElementTagNameMap\n ? JSX.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,\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 | JSX.CSSProperties\n | ((props: Record<string, any>, theme: Theme) => JSX.CSSProperties)\n\nexport function styled<T extends keyof HTMLElementTagNameMap>(\n type: T,\n newStyles: Styles,\n queries: Record<string, Styles> = {},\n) {\n return ({\n ref,\n style,\n ...rest\n }: StyledComponent<T> & {\n ref?: HTMLElementTagNameMap[T] | undefined\n }) => {\n const theme = useTheme()\n\n const mediaStyles = Object.entries(queries).reduce(\n (current, [key, value]) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return useMediaQuery(key)\n ? {\n ...current,\n ...(typeof value === 'function' ? value(rest, theme) : value),\n }\n : current\n },\n {},\n )\n\n const baseStyles =\n typeof newStyles === 'function' ? newStyles(rest, theme) : newStyles\n\n // Handle style being either a string or an object\n const combinedStyles =\n typeof style === 'string'\n ? { ...baseStyles, ...mediaStyles, cssText: style }\n : { ...baseStyles, ...style, ...mediaStyles }\n\n return (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n <Dynamic component={type} {...rest} style={combinedStyles} ref={ref} />\n )\n }\n}\n\nexport function useIsMounted() {\n const [isMounted, setIsMounted] = createSignal(false)\n\n const effect = isServer ? createEffect : createRenderEffect\n\n effect(() => {\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] = createSignal(initialState)\n\n const safeSetState = (value: T) => {\n scheduleMicrotask(() => {\n if (isMounted()) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n setState(value)\n }\n })\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":["isServer","window","getStatusColor","match","colorMap","pending","success","error","notFound","redirected","isFetching","status","getRouteStatusColor","matches","route","found","find","d","routeId","id","useIsMounted","isMounted","setIsMounted","createSignal","effect","createEffect","createRenderEffect","displayValue","value","name","Object","getOwnPropertyNames","newValue","toString","JSON","stringify","e","multiSortBy","arr","accessors","map","i","sort","a","ai","b","bi","accessor","ao","bo"],"mappings":";;;;AASaA,MAAAA,WAAW,OAAOC,WAAW;AAYnC,SAASC,eAAeC,OAAsB;AACnD,QAAMC,WAAW;AAAA,IACfC,SAAS;AAAA,IACTC,SAAS;AAAA,IACTC,OAAO;AAAA,IACPC,UAAU;AAAA,IACVC,YAAY;AAAA,EACd;AAEA,SAAON,MAAMO,cAAcP,MAAMQ,WAAW,YACxCR,MAAMO,eAAe,eACnB,WACA,SACFN,SAASD,MAAMQ,MAAM;AAC3B;AAEgBC,SAAAA,oBACdC,SACAC,OACA;AACA,QAAMC,QAAQF,QAAQG,KAAMC,OAAMA,EAAEC,YAAYJ,MAAMK,EAAE;AACpD,MAAA,CAACJ,MAAc,QAAA;AACnB,SAAOb,eAAea,KAAK;AAC7B;AAkDO,SAASK,eAAe;AAC7B,QAAM,CAACC,WAAWC,YAAY,IAAIC,QAAAA,aAAa,KAAK;AAE9CC,QAAAA,SAASxB,WAAWyB,QAAAA,eAAeC,QAAAA;AAEzCF,SAAO,MAAM;AACXF,iBAAa,IAAI;AAAA,EAAA,CAClB;AAEMD,SAAAA;AACT;AAMaM,MAAAA,eAAeA,CAACC,UAAmB;AAC9C,QAAMC,OAAOC,OAAOC,oBAAoBD,OAAOF,KAAK,CAAC;AAC/CI,QAAAA,WAAW,OAAOJ,UAAU,WAAW,GAAGA,MAAMK,SAAAA,CAAU,MAAML;AAClE,MAAA;AACKM,WAAAA,KAAKC,UAAUH,UAAUH,IAAI;AAAA,WAC7BO,GAAG;AACH,WAAA;AAAA,EAAA;AAEX;AAsCO,SAASC,YACdC,KACAC,YAAqC,CAAEtB,CAAAA,MAAMA,CAAC,GACpC;AACV,SAAOqB,IACJE,IAAI,CAACvB,GAAGwB,MAAM,CAACxB,GAAGwB,CAAC,CAAU,EAC7BC,KAAK,CAAC,CAACC,GAAGC,EAAE,GAAG,CAACC,GAAGC,EAAE,MAAM;AAC1B,eAAWC,YAAYR,WAAW;AAC1BS,YAAAA,KAAKD,SAASJ,CAAC;AACfM,YAAAA,KAAKF,SAASF,CAAC;AAEjB,UAAA,OAAOG,OAAO,aAAa;AACzB,YAAA,OAAOC,OAAO,aAAa;AAC7B;AAAA,QAAA;AAEK,eAAA;AAAA,MAAA;AAGT,UAAID,OAAOC,IAAI;AACb;AAAA,MAAA;AAGKD,aAAAA,KAAKC,KAAK,IAAI;AAAA,IAAA;AAGvB,WAAOL,KAAKE;AAAAA,EACb,CAAA,EACAN,IAAI,CAAC,CAACvB,CAAC,MAAMA,CAAC;AACnB;;;;;;;"}
@@ -0,0 +1,25 @@
1
+ import { AnyRoute, AnyRouteMatch } from '@tanstack/router-core';
2
+ import { Theme } from './theme.cjs';
3
+ import { JSX } from 'solid-js';
4
+ export declare const isServer: boolean;
5
+ type StyledComponent<T> = T extends 'button' ? JSX.ButtonHTMLAttributes<HTMLButtonElement> : T extends 'input' ? JSX.InputHTMLAttributes<HTMLInputElement> : T extends 'select' ? JSX.SelectHTMLAttributes<HTMLSelectElement> : T extends keyof HTMLElementTagNameMap ? JSX.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): "yellow" | "green" | "red" | "purple" | "gray" | "blue";
8
+ type Styles = JSX.CSSProperties | ((props: Record<string, any>, theme: Theme) => JSX.CSSProperties);
9
+ export declare function styled<T extends keyof HTMLElementTagNameMap>(type: T, newStyles: Styles, queries?: Record<string, Styles>): ({ ref, style, ...rest }: StyledComponent<T> & {
10
+ ref?: HTMLElementTagNameMap[T] | undefined;
11
+ }) => JSX.Element;
12
+ export declare function useIsMounted(): import('solid-js').Accessor<boolean>;
13
+ /**
14
+ * Displays a string regardless the type of the data
15
+ * @param {unknown} value Value to be stringified
16
+ */
17
+ export declare const displayValue: (value: unknown) => string;
18
+ /**
19
+ * This hook is a safe useState version which schedules state updates in microtasks
20
+ * to prevent updating a component state while React is rendering different components
21
+ * or when the component is not mounted anymore.
22
+ */
23
+ export declare function useSafeState<T>(initialState: T): [T, (value: T) => void];
24
+ export declare function multiSortBy<T>(arr: Array<T>, accessors?: Array<(item: T) => any>): Array<T>;
25
+ export {};
@@ -0,0 +1,6 @@
1
+ import { AnyRouteMatch, AnyRouter } from '@tanstack/router-core';
2
+ import { Accessor } from 'solid-js';
3
+ export declare function AgeTicker({ match, router, }: {
4
+ match?: AnyRouteMatch;
5
+ router: Accessor<AnyRouter>;
6
+ }): import("solid-js").JSX.Element;
@@ -0,0 +1,47 @@
1
+ import { template, insert, effect, className } from "solid-js/web";
2
+ import { clsx } from "clsx";
3
+ import { useStyles } from "./useStyles.js";
4
+ var _tmpl$ = /* @__PURE__ */ template(`<div><div></div><div>/</div><div></div><div>/</div><div>`);
5
+ function formatTime(ms) {
6
+ const units = ["s", "min", "h", "d"];
7
+ const values = [ms / 1e3, ms / 6e4, ms / 36e5, ms / 864e5];
8
+ let chosenUnitIndex = 0;
9
+ for (let i = 1; i < values.length; i++) {
10
+ if (values[i] < 1) break;
11
+ chosenUnitIndex = i;
12
+ }
13
+ const formatter = new Intl.NumberFormat(navigator.language, {
14
+ compactDisplay: "short",
15
+ notation: "compact",
16
+ maximumFractionDigits: 0
17
+ });
18
+ return formatter.format(values[chosenUnitIndex]) + units[chosenUnitIndex];
19
+ }
20
+ function AgeTicker({
21
+ match,
22
+ router
23
+ }) {
24
+ const styles = useStyles();
25
+ if (!match) {
26
+ return null;
27
+ }
28
+ const route = router().looseRoutesById[match.routeId];
29
+ if (!route.options.loader) {
30
+ return null;
31
+ }
32
+ const age = Date.now() - match.updatedAt;
33
+ const staleTime = route.options.staleTime ?? router().options.defaultStaleTime ?? 0;
34
+ const gcTime = route.options.gcTime ?? router().options.defaultGcTime ?? 30 * 60 * 1e3;
35
+ return (() => {
36
+ var _el$ = _tmpl$(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling;
37
+ insert(_el$2, () => formatTime(age));
38
+ insert(_el$4, () => formatTime(staleTime));
39
+ insert(_el$6, () => formatTime(gcTime));
40
+ effect(() => className(_el$, clsx(styles().ageTicker(age > staleTime))));
41
+ return _el$;
42
+ })();
43
+ }
44
+ export {
45
+ AgeTicker
46
+ };
47
+ //# sourceMappingURL=AgeTicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgeTicker.js","sources":["../../src/AgeTicker.tsx"],"sourcesContent":["import { clsx as cx } from 'clsx'\nimport { useStyles } from './useStyles'\nimport type { AnyRouteMatch, AnyRouter } from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\nfunction formatTime(ms: number) {\n const units = ['s', 'min', 'h', 'd']\n const values = [ms / 1000, ms / 60000, ms / 3600000, ms / 86400000]\n\n let chosenUnitIndex = 0\n for (let i = 1; i < values.length; i++) {\n if (values[i]! < 1) break\n chosenUnitIndex = i\n }\n\n const formatter = new Intl.NumberFormat(navigator.language, {\n compactDisplay: 'short',\n notation: 'compact',\n maximumFractionDigits: 0,\n })\n\n return formatter.format(values[chosenUnitIndex]!) + units[chosenUnitIndex]\n}\n\nexport function AgeTicker({\n match,\n router,\n}: {\n match?: AnyRouteMatch\n router: Accessor<AnyRouter>\n}) {\n const styles = useStyles()\n\n if (!match) {\n return null\n }\n\n const route = router().looseRoutesById[match.routeId]!\n\n if (!route.options.loader) {\n return null\n }\n\n const age = Date.now() - match.updatedAt\n const staleTime =\n route.options.staleTime ?? router().options.defaultStaleTime ?? 0\n const gcTime =\n route.options.gcTime ?? router().options.defaultGcTime ?? 30 * 60 * 1000\n\n return (\n <div class={cx(styles().ageTicker(age > staleTime))}>\n <div>{formatTime(age)}</div>\n <div>/</div>\n <div>{formatTime(staleTime)}</div>\n <div>/</div>\n <div>{formatTime(gcTime)}</div>\n </div>\n )\n}\n"],"names":["formatTime","ms","units","values","chosenUnitIndex","i","length","formatter","Intl","NumberFormat","navigator","language","compactDisplay","notation","maximumFractionDigits","format","AgeTicker","match","router","styles","useStyles","route","looseRoutesById","routeId","options","loader","age","Date","now","updatedAt","staleTime","defaultStaleTime","gcTime","defaultGcTime","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_el$5","_el$6","_$insert","_$className","cx","ageTicker"],"mappings":";;;;AAKA,SAASA,WAAWC,IAAY;AAC9B,QAAMC,QAAQ,CAAC,KAAK,OAAO,KAAK,GAAG;AAC7BC,QAAAA,SAAS,CAACF,KAAK,KAAMA,KAAK,KAAOA,KAAK,MAASA,KAAK,KAAQ;AAElE,MAAIG,kBAAkB;AACtB,WAASC,IAAI,GAAGA,IAAIF,OAAOG,QAAQD,KAAK;AAClCF,QAAAA,OAAOE,CAAC,IAAK,EAAG;AACFA,sBAAAA;AAAAA,EAAAA;AAGpB,QAAME,YAAY,IAAIC,KAAKC,aAAaC,UAAUC,UAAU;AAAA,IAC1DC,gBAAgB;AAAA,IAChBC,UAAU;AAAA,IACVC,uBAAuB;AAAA,EAAA,CACxB;AAED,SAAOP,UAAUQ,OAAOZ,OAAOC,eAAe,CAAE,IAAIF,MAAME,eAAe;AAC3E;AAEO,SAASY,UAAU;AAAA,EACxBC;AAAAA,EACAC;AAIF,GAAG;AACD,QAAMC,SAASC,UAAU;AAEzB,MAAI,CAACH,OAAO;AACH,WAAA;AAAA,EAAA;AAGT,QAAMI,QAAQH,OAAAA,EAASI,gBAAgBL,MAAMM,OAAO;AAEhD,MAAA,CAACF,MAAMG,QAAQC,QAAQ;AAClB,WAAA;AAAA,EAAA;AAGT,QAAMC,MAAMC,KAAKC,IAAI,IAAIX,MAAMY;AAC/B,QAAMC,YACJT,MAAMG,QAAQM,aAAaZ,SAASM,QAAQO,oBAAoB;AAC5DC,QAAAA,SACJX,MAAMG,QAAQQ,UAAUd,SAASM,QAAQS,iBAAiB,KAAK,KAAK;AAEtE,UAAA,MAAA;AAAA,QAAAC,OAAAC,UAAAC,QAAAF,KAAAG,YAAAC,QAAAF,MAAAG,aAAAC,QAAAF,MAAAC,aAAAE,QAAAD,MAAAD,aAAAG,QAAAD,MAAAF;AAAAI,WAAAP,OAAA,MAEUpC,WAAW0B,GAAG,CAAC;AAAAiB,WAAAH,OAAA,MAEfxC,WAAW8B,SAAS,CAAC;AAAAa,WAAAD,OAAA,MAErB1C,WAAWgC,MAAM,CAAC;iBAAAY,UAAAV,MALdW,KAAG1B,SAAS2B,UAAUpB,MAAMI,SAAS,CAAC,CAAC,CAAA;AAAAI,WAAAA;AAAAA,EAAAA,GAAA;AAQvD;"}
@@ -0,0 +1,35 @@
1
+ import { AnyRouter } from '@tanstack/router-core';
2
+ import { Accessor, JSX } from 'solid-js';
3
+ export interface BaseDevtoolsPanelOptions {
4
+ /**
5
+ * The standard React style object used to style a component with inline styles
6
+ */
7
+ style?: Accessor<JSX.CSSProperties>;
8
+ /**
9
+ * The standard React class property used to style a component with classes
10
+ */
11
+ className?: Accessor<string>;
12
+ /**
13
+ * A boolean variable indicating whether the panel is open or closed
14
+ */
15
+ isOpen?: boolean;
16
+ /**
17
+ * A function that toggles the open and close state of the panel
18
+ */
19
+ setIsOpen?: (isOpen: boolean) => void;
20
+ /**
21
+ * Handles the opening and closing the devtools panel
22
+ */
23
+ handleDragStart?: (e: any) => void;
24
+ /**
25
+ * A boolean variable indicating if the "lite" version of the library is being used
26
+ */
27
+ router: Accessor<AnyRouter>;
28
+ routerState: Accessor<any>;
29
+ /**
30
+ * Use this to attach the devtool's styles to specific element in the DOM.
31
+ */
32
+ shadowDOMTarget?: ShadowRoot;
33
+ }
34
+ export declare const BaseTanStackRouterDevtoolsPanel: ({ ...props }: BaseDevtoolsPanelOptions) => JSX.Element;
35
+ export default BaseTanStackRouterDevtoolsPanel;