next-cache-toolbar 0.2.1 → 0.3.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 (31) hide show
  1. package/dist/cjs/{cache-entry-client-C0CjMKC5.js → cache-entry-client-BlFbLrtq.js} +34 -22
  2. package/dist/cjs/{cache-panel-context-client-FIUru-uB.js → cache-panel-context-client-CkDMJX2-.js} +7 -1
  3. package/dist/cjs/{cache-panel-head-client-Cs4uyFh7.js → cache-panel-head-client-BqfBWPpR.js} +30 -21
  4. package/dist/cjs/{cache-panel-table-client-9aBv-MjJ.js → cache-panel-table-client-DBvA6vo5.js} +2 -2
  5. package/dist/cjs/{cache-panel-trigger-client-CGeo22Q8.js → cache-panel-trigger-client-0RzTHzAT.js} +2 -3
  6. package/dist/cjs/{cache-panel-wrapper-client-puZq7rcV.js → cache-panel-wrapper-client-DTI35uJg.js} +2 -3
  7. package/dist/cjs/cache-purge-button-client-CXGIDomZ.js +25 -0
  8. package/dist/cjs/{cache-refresh-data-client-CrvqEMoX.js → cache-refresh-data-client-DIPw0IhW.js} +5 -6
  9. package/dist/cjs/{dialog-client-ChHtZVMD.js → dialog-client-eJy2OUEG.js} +18 -16
  10. package/dist/cjs/getCacheEntries-server-Bq5gM82M.js +104 -0
  11. package/dist/cjs/index.d.ts +11 -1
  12. package/dist/cjs/index.js +15 -12
  13. package/dist/cjs/purge-cache-server-GmkiFGoN.js +12 -0
  14. package/dist/es/{cache-entry-client-Ceh-eYDl.js → cache-entry-client-Bk7a0rFQ.mjs} +34 -22
  15. package/dist/es/{cache-panel-context-client-DCXKayLF.js → cache-panel-context-client-DlqXZGzO.mjs} +7 -1
  16. package/dist/es/{cache-panel-head-client-BBfig3xH.js → cache-panel-head-client-DTReOdNO.mjs} +15 -6
  17. package/dist/es/{cache-panel-table-client-C9YfopmF.js → cache-panel-table-client-B844eHwF.mjs} +2 -2
  18. package/dist/es/{cache-panel-trigger-client-CGReagL-.js → cache-panel-trigger-client-CbXiKLEx.mjs} +2 -3
  19. package/dist/es/{cache-panel-wrapper-client-CjKNX-hk.js → cache-panel-wrapper-client-Dcmlm3kc.mjs} +2 -3
  20. package/dist/es/cache-purge-button-client-CN9H6t8R.mjs +25 -0
  21. package/dist/es/{cache-refresh-data-client-Cb9wMeZh.js → cache-refresh-data-client-CX8rfbFV.mjs} +5 -6
  22. package/dist/es/{dialog-client-C319YNfG.js → dialog-client-D8kKKnZH.mjs} +2 -2
  23. package/dist/es/getCacheEntries-server-eY7FwQMw.mjs +104 -0
  24. package/dist/es/index.d.mts +11 -1
  25. package/dist/es/index.mjs +16 -13
  26. package/dist/es/purge-cache-server-Dd41_99d.mjs +12 -0
  27. package/dist/style.css +1 -1
  28. package/package.json +84 -84
  29. package/readme.md +32 -5
  30. package/dist/cjs/getCacheEntries-server-DMz68ZTt.js +0 -72
  31. package/dist/es/getCacheEntries-server-BkR7kA29.js +0 -72
@@ -27,7 +27,7 @@ const sortCacheEntryByKey = (key, a, b)=>{
27
27
  return a.tags[0]?.localeCompare(b.tags[0] ?? "") ?? 0;
28
28
  case "timestamp":
29
29
  {
30
- if (!a.data?.headers.date || !b.data?.headers.date) {
30
+ if (!a.data?.headers?.date || !b.data?.headers?.date) {
31
31
  return 0;
32
32
  }
33
33
  return new Date(b.data.headers.date).getTime() - new Date(a.data.headers.date).getTime();
@@ -42,7 +42,13 @@ const CachePanelContextProvider = (props)=>{
42
42
  const [sorting, setSorting] = useState(undefined);
43
43
  const toggleOpen = ()=>{
44
44
  setIsOpen(!isOpen);
45
+ localStorage.setItem("cache-panel-open", (!isOpen).toString());
45
46
  };
47
+ React__default.useEffect(()=>{
48
+ if (typeof window !== "undefined") {
49
+ setIsOpen(localStorage.getItem("cache-panel-open") === "true");
50
+ }
51
+ }, []);
46
52
  const addFilter = (key, value)=>{
47
53
  setFilters((prev)=>{
48
54
  if (!prev) {
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
  import { jsx, jsxs } from 'react/jsx-runtime';
3
- import { c as cn, T as TableHead, B as Button } from './cache-entry-client-Ceh-eYDl.js';
3
+ import { c as cn, T as TableHead, B as Button } from './cache-entry-client-Bk7a0rFQ.mjs';
4
4
  import * as React from 'react';
5
5
  import { useState, useCallback, useMemo } from 'react';
6
6
  import { ArrowDownAZIcon, ArrowUpAZIcon, FilterIcon } from 'lucide-react';
7
- import { u as useCachePanelContext } from './cache-panel-context-client-DCXKayLF.js';
7
+ import { u as useCachePanelContext } from './cache-panel-context-client-DlqXZGzO.mjs';
8
8
 
9
9
  const Input = /*#__PURE__*/ React.forwardRef(({ className, type, ...props }, ref)=>{
10
10
  return /*#__PURE__*/ jsx("input", {
@@ -80,19 +80,28 @@ const CachePanelHead = ({ sortingProperty, children, className, withFilter = fal
80
80
  setFilterInputVisible(false);
81
81
  }
82
82
  };
83
+ const isActiveSortProperty = sorting?.key === sortingProperty;
84
+ const ariaSortAttribute = isActiveSortProperty ? sortingDirection === "asc" ? "ascending" : "descending" : undefined;
83
85
  return /*#__PURE__*/ jsx(TableHead, {
84
86
  className: cn("group", className),
85
87
  ...props,
88
+ "aria-sort": ariaSortAttribute,
86
89
  children: /*#__PURE__*/ jsxs("div", {
87
- className: cn("nct-flex nct-items-center nct-gap-2 nct-py-2", sorting?.key === sortingProperty && "nct-underline"),
90
+ className: cn("nct-flex nct-items-center nct-gap-2 nct-py-2", isActiveSortProperty && "nct-underline"),
88
91
  children: [
89
- /*#__PURE__*/ jsx("div", {
92
+ /*#__PURE__*/ jsx(Button, {
93
+ variant: "linkTable",
94
+ size: "text",
90
95
  onClick: onHeadClick,
91
96
  onKeyDown: onHeadClick,
92
97
  children: children
93
98
  }),
94
- sortingDirection === "asc" && /*#__PURE__*/ jsx(ArrowDownAZIcon, {}),
95
- sortingDirection === "desc" && /*#__PURE__*/ jsx(ArrowUpAZIcon, {}),
99
+ sortingDirection === "asc" && /*#__PURE__*/ jsx(ArrowDownAZIcon, {
100
+ "aria-hidden": true
101
+ }),
102
+ sortingDirection === "desc" && /*#__PURE__*/ jsx(ArrowUpAZIcon, {
103
+ "aria-hidden": true
104
+ }),
96
105
  withFilter && /*#__PURE__*/ jsxs("div", {
97
106
  className: "ml-auto",
98
107
  children: [
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import { a as TableBody, b as TableRow, d as TableCell, C as CacheEntry } from './cache-entry-client-Ceh-eYDl.js';
4
- import { u as useCachePanelContext } from './cache-panel-context-client-DCXKayLF.js';
3
+ import { a as TableBody, b as TableRow, d as TableCell, C as CacheEntry } from './cache-entry-client-Bk7a0rFQ.mjs';
4
+ import { u as useCachePanelContext } from './cache-panel-context-client-DlqXZGzO.mjs';
5
5
 
6
6
  const CachePanelTable = ()=>{
7
7
  const { entries } = useCachePanelContext();
@@ -1,8 +1,7 @@
1
1
  'use client';
2
2
  import { jsx } from 'react/jsx-runtime';
3
- import { B as Button } from './cache-entry-client-Ceh-eYDl.js';
4
- import 'react';
5
- import { u as useCachePanelContext } from './cache-panel-context-client-DCXKayLF.js';
3
+ import { B as Button } from './cache-entry-client-Bk7a0rFQ.mjs';
4
+ import { u as useCachePanelContext } from './cache-panel-context-client-DlqXZGzO.mjs';
6
5
 
7
6
  function CachePanelTrigger(props) {
8
7
  const { toggleOpen } = useCachePanelContext();
@@ -1,8 +1,7 @@
1
1
  'use client';
2
2
  import { jsx } from 'react/jsx-runtime';
3
- import { e as Table } from './cache-entry-client-Ceh-eYDl.js';
4
- import 'react';
5
- import { u as useCachePanelContext } from './cache-panel-context-client-DCXKayLF.js';
3
+ import { e as Table } from './cache-entry-client-Bk7a0rFQ.mjs';
4
+ import { u as useCachePanelContext } from './cache-panel-context-client-DlqXZGzO.mjs';
6
5
 
7
6
  const CacheTable = (props)=>{
8
7
  const { isOpen } = useCachePanelContext();
@@ -0,0 +1,25 @@
1
+ 'use client';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { p as purgeCache } from './purge-cache-server-Dd41_99d.mjs';
4
+ import { B as Button } from './cache-entry-client-Bk7a0rFQ.mjs';
5
+ import { BombIcon } from 'lucide-react';
6
+ import { u as useCachePanelContext } from './cache-panel-context-client-DlqXZGzO.mjs';
7
+
8
+ function CachePurgeButton() {
9
+ const { setEntries } = useCachePanelContext();
10
+ const purgeCache$1 = ()=>{
11
+ purgeCache().then(()=>{
12
+ setEntries([]);
13
+ });
14
+ };
15
+ return /*#__PURE__*/ jsx(Button, {
16
+ variant: "outline",
17
+ size: "icon",
18
+ onClick: purgeCache$1,
19
+ children: /*#__PURE__*/ jsx(BombIcon, {
20
+ className: "nct-h-4 nct-w-4"
21
+ })
22
+ });
23
+ }
24
+
25
+ export { CachePurgeButton as C };
@@ -1,24 +1,23 @@
1
1
  'use client';
2
2
  import { jsx } from 'react/jsx-runtime';
3
- import { g as getCacheFiles } from './getCacheEntries-server-BkR7kA29.js';
4
- import { B as Button, c as cn } from './cache-entry-client-Ceh-eYDl.js';
3
+ import { g as getCacheFiles } from './getCacheEntries-server-eY7FwQMw.mjs';
4
+ import { B as Button, c as cn } from './cache-entry-client-Bk7a0rFQ.mjs';
5
5
  import { Loader2 } from 'lucide-react';
6
6
  import { usePathname } from 'next/navigation';
7
7
  import { useTransition, useEffect } from 'react';
8
- import { u as useCachePanelContext } from './cache-panel-context-client-DCXKayLF.js';
8
+ import { u as useCachePanelContext } from './cache-panel-context-client-DlqXZGzO.mjs';
9
9
 
10
- function RefreshDataButton({ enabled, interval }) {
10
+ function RefreshDataButton({ enabled, interval, distDir }) {
11
11
  const { setEntries } = useCachePanelContext();
12
12
  const [isPending, startTransition] = useTransition();
13
13
  const pathname = usePathname();
14
14
  const refreshData = ()=>{
15
15
  startTransition(async ()=>{
16
- const files = await getCacheFiles();
16
+ const files = await getCacheFiles(distDir);
17
17
  setEntries(files ?? []);
18
18
  });
19
19
  };
20
20
  useEffect(()=>{
21
- console.log("pathname changed", pathname);
22
21
  refreshData();
23
22
  }, [
24
23
  pathname
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { c as cn } from './cache-entry-client-Bk7a0rFQ.mjs';
3
4
  import * as DialogPrimitive from '@radix-ui/react-dialog';
4
5
  import { X } from 'lucide-react';
5
6
  import * as React from 'react';
6
- import { c as cn } from './cache-entry-client-Ceh-eYDl.js';
7
7
 
8
8
  const Dialog = DialogPrimitive.Root;
9
9
  const DialogTrigger = DialogPrimitive.Trigger;
@@ -54,4 +54,4 @@ const DialogDescription = /*#__PURE__*/ React.forwardRef(({ className, ...props
54
54
  }));
55
55
  DialogDescription.displayName = DialogPrimitive.Description.displayName;
56
56
 
57
- export { Dialog as D, DialogTrigger as a, DialogContent as b };
57
+ export { Dialog as D, DialogTrigger as a, DialogContent as b, DialogTitle as c, DialogDescription as d };
@@ -0,0 +1,104 @@
1
+ 'use server';
2
+ import { existsSync, promises } from 'node:fs';
3
+ import { z, ZodError } from 'zod';
4
+
5
+ const stringToJSONSchema = z.string().transform((str, ctx)=>{
6
+ try {
7
+ return JSON.parse(str);
8
+ } catch (e) {
9
+ ctx.addIssue({
10
+ code: "custom",
11
+ message: "Encoded body is not in JSON format",
12
+ path: [
13
+ "data",
14
+ "body"
15
+ ]
16
+ });
17
+ return z.NEVER;
18
+ }
19
+ });
20
+ const unstableCacheFileSchema = z.object({
21
+ data: z.object({
22
+ body: z.string(),
23
+ headers: z.object({}).transform(()=>null),
24
+ status: z.number(),
25
+ url: z.literal("")
26
+ }),
27
+ kind: z.union([
28
+ z.literal("FETCH"),
29
+ z.unknown()
30
+ ]),
31
+ revalidate: z.number().optional(),
32
+ tags: z.array(z.string()).optional().default([])
33
+ });
34
+ const fetchCacheFileSchema = z.object({
35
+ data: z.object({
36
+ body: z.string(),
37
+ headers: z.record(z.string(), z.string()),
38
+ status: z.number(),
39
+ url: z.string().url()
40
+ }),
41
+ kind: z.union([
42
+ z.literal("FETCH"),
43
+ z.unknown()
44
+ ]),
45
+ revalidate: z.number().optional(),
46
+ tags: z.array(z.string()).optional().default([])
47
+ });
48
+ const nextCacheFileSchema = z.union([
49
+ unstableCacheFileSchema,
50
+ fetchCacheFileSchema
51
+ ]).transform((cacheEntry)=>{
52
+ const body = cacheEntry.data.url !== "" ? stringToJSONSchema.parse(atob(cacheEntry.data.body)) : stringToJSONSchema.parse(cacheEntry.data.body);
53
+ return {
54
+ ...cacheEntry,
55
+ timestamp: cacheEntry.data.headers?.date ? new Date(cacheEntry.data.headers?.date) : new Date(),
56
+ data: {
57
+ ...cacheEntry.data,
58
+ url: cacheEntry.data.url === "" ? "unstable_cache" : cacheEntry.data.url,
59
+ body
60
+ }
61
+ };
62
+ });
63
+
64
+ const getCacheFiles = async (distDir)=>{
65
+ const cachePath = `${distDir}/cache/fetch-cache`;
66
+ if (!existsSync(cachePath)) {
67
+ return;
68
+ }
69
+ const files = await promises.readdir(cachePath);
70
+ const cacheFiles = new Map();
71
+ for (const file of files){
72
+ // ignore tags-manifest file
73
+ if (file.match(/manifest/)) {
74
+ continue;
75
+ }
76
+ try {
77
+ const fileContent = await promises.readFile(`${cachePath}/${file}`).catch((err)=>{
78
+ throw Error(`Error reading file ${file}`, {
79
+ cause: err
80
+ });
81
+ });
82
+ const fileStats = await promises.stat(`${cachePath}/${file}`).catch((err)=>{
83
+ throw Error(`Error reading file ${file}`, {
84
+ cause: err
85
+ });
86
+ });
87
+ const jsonData = JSON.parse(fileContent.toString());
88
+ const cacheEntry = nextCacheFileSchema.parse(jsonData);
89
+ cacheFiles.set(file, {
90
+ ...cacheEntry,
91
+ timestamp: fileStats.birthtime
92
+ });
93
+ } catch (error) {
94
+ if (error instanceof ZodError) {
95
+ const issues = error.issues;
96
+ console.error(`File ${file} do not match the schema`, issues);
97
+ }
98
+ console.error(`Error parsing ${file}`);
99
+ }
100
+ }
101
+ return Array.from(cacheFiles.entries());
102
+ };
103
+
104
+ export { getCacheFiles as g };
@@ -11,7 +11,17 @@ type Props = {
11
11
  * @default 10000
12
12
  */
13
13
  interval?: number;
14
+ /**
15
+ * If true, the purge button will be shown.
16
+ * @default false
17
+ */
18
+ purgeButton?: boolean;
19
+ /**
20
+ * Output path for next build, should be in sync with `distDir` parameter from next.config
21
+ * @default ".next"
22
+ */
23
+ distDir?: string;
14
24
  };
15
- declare function NextCacheToolbar({ autoRefresh, interval, }: Props): Promise<react_jsx_runtime.JSX.Element>;
25
+ declare function NextCacheToolbar({ autoRefresh, interval, purgeButton, distDir, }: Props): Promise<react_jsx_runtime.JSX.Element>;
16
26
 
17
27
  export { NextCacheToolbar };
package/dist/es/index.mjs CHANGED
@@ -1,16 +1,17 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { Braces, PanelBottomCloseIcon } from 'lucide-react';
3
- import { g as getCacheFiles } from './getCacheEntries-server-BkR7kA29.js';
4
- import { f as TableHeader, b as TableRow, T as TableHead } from './cache-entry-client-Ceh-eYDl.js';
5
- import { C as CachePanelContextProvider } from './cache-panel-context-client-DCXKayLF.js';
6
- import { C as CachePanelTable } from './cache-panel-table-client-C9YfopmF.js';
7
- import { C as CachePanelTrigger } from './cache-panel-trigger-client-CGReagL-.js';
8
- import { C as CacheTable } from './cache-panel-wrapper-client-CjKNX-hk.js';
9
- import { R as RefreshDataButton } from './cache-refresh-data-client-Cb9wMeZh.js';
10
- import { C as CachePanelHead } from './cache-panel-head-client-BBfig3xH.js';
2
+ import { Layers3Icon, PanelBottomCloseIcon } from 'lucide-react';
3
+ import { g as getCacheFiles } from './getCacheEntries-server-eY7FwQMw.mjs';
4
+ import { f as TableHeader, b as TableRow, T as TableHead } from './cache-entry-client-Bk7a0rFQ.mjs';
5
+ import { C as CachePanelContextProvider } from './cache-panel-context-client-DlqXZGzO.mjs';
6
+ import { C as CachePanelTable } from './cache-panel-table-client-B844eHwF.mjs';
7
+ import { C as CachePanelTrigger } from './cache-panel-trigger-client-CbXiKLEx.mjs';
8
+ import { C as CacheTable } from './cache-panel-wrapper-client-Dcmlm3kc.mjs';
9
+ import { C as CachePurgeButton } from './cache-purge-button-client-CN9H6t8R.mjs';
10
+ import { R as RefreshDataButton } from './cache-refresh-data-client-CX8rfbFV.mjs';
11
+ import { C as CachePanelHead } from './cache-panel-head-client-DTReOdNO.mjs';
11
12
 
12
- async function NextCacheToolbar({ autoRefresh = false, interval = 10000 }) {
13
- const files = await getCacheFiles();
13
+ async function NextCacheToolbar({ autoRefresh = false, interval = 10000, purgeButton = false, distDir = ".next" }) {
14
+ const files = await getCacheFiles(distDir);
14
15
  return /*#__PURE__*/ jsx("div", {
15
16
  id: "next-cache-toolbar",
16
17
  className: "nct-text-primary nct-font-mono",
@@ -19,7 +20,7 @@ async function NextCacheToolbar({ autoRefresh = false, interval = 10000 }) {
19
20
  children: [
20
21
  /*#__PURE__*/ jsx(CachePanelTrigger, {
21
22
  className: "nct-fixed nct-rounded-full nct-bottom-4 nct-right-4 nct-bg-gradient-to-r nct-from-fuchsia-500 nct-to-cyan-500",
22
- children: /*#__PURE__*/ jsx(Braces, {})
23
+ children: /*#__PURE__*/ jsx(Layers3Icon, {})
23
24
  }),
24
25
  /*#__PURE__*/ jsxs(CacheTable, {
25
26
  children: [
@@ -53,8 +54,10 @@ async function NextCacheToolbar({ autoRefresh = false, interval = 10000 }) {
53
54
  children: [
54
55
  /*#__PURE__*/ jsx(RefreshDataButton, {
55
56
  enabled: autoRefresh,
56
- interval: interval
57
+ interval: interval,
58
+ distDir: distDir
57
59
  }),
60
+ purgeButton && /*#__PURE__*/ jsx(CachePurgeButton, {}),
58
61
  /*#__PURE__*/ jsx(CachePanelTrigger, {
59
62
  children: /*#__PURE__*/ jsx(PanelBottomCloseIcon, {})
60
63
  })
@@ -0,0 +1,12 @@
1
+ 'use server';
2
+ import { promises } from 'node:fs';
3
+
4
+ const cachePath = ".next/cache/fetch-cache";
5
+ const purgeCache = async ()=>{
6
+ await promises.rm(cachePath, {
7
+ recursive: true,
8
+ force: true
9
+ });
10
+ };
11
+
12
+ export { purgeCache as p };
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .json-view{display:block;color:#4d4d4d;text-align:left;--json-property:#009033;--json-index:#676dff;--json-number:#676dff;--json-string:#b2762e;--json-boolean:#dc155e;--json-null:#dc155e}.json-view .json-view--property{color:var(--json-property)}.json-view .json-view--index{color:var(--json-index)}.json-view .json-view--number{color:var(--json-number)}.json-view .json-view--string{color:var(--json-string)}.json-view .json-view--boolean{color:var(--json-boolean)}.json-view .json-view--null{color:var(--json-null)}.json-view .jv-indent{padding-left:1em}.json-view .jv-chevron{display:inline-block;vertical-align:-20%;cursor:pointer;opacity:.4;width:1em;height:1em}:is(.json-view .jv-chevron:hover,.json-view .jv-size:hover+.jv-chevron){opacity:.8}.json-view .jv-size{cursor:pointer;opacity:.4;font-size:.875em;font-style:italic;margin-left:.5em;vertical-align:-5%;line-height:1}.json-view .json-view--link svg,.json-view :is(.json-view--copy,.json-view--edit){display:none;width:1em;height:1em;margin-left:.25em;cursor:pointer}.json-view .json-view--input{width:120px;margin-left:.25em;border-radius:4px;border:1px solid;padding:0 4px;font-size:87.5%;line-height:1.25;background:#0000}.json-view .json-view--deleting{outline:1px solid #da0000;background-color:#da000011;text-decoration-line:line-through}:is(.json-view:hover,.json-view--pair:hover)>.json-view--link svg,:is(.json-view:hover,.json-view--pair:hover)>:is(.json-view--copy,.json-view--edit){display:inline-block}.json-view .jv-button{background:#0000;outline:none;border:none;cursor:pointer}.json-view .cursor-pointer{cursor:pointer}.json-view svg{vertical-align:-10%}.jv-size-chevron~svg{vertical-align:-16%}.json-view_a11y{color:#545454;--json-property:#aa5d00;--json-index:#007299;--json-number:#007299;--json-string:green;--json-boolean:#d91e18;--json-null:#d91e18}.json-view_github{color:#005cc5;--json-property:#005cc5;--json-index:#005cc5;--json-number:#005cc5;--json-string:#032f62;--json-boolean:#005cc5;--json-null:#005cc5}.json-view_vscode{color:#005cc5;--json-property:#0451a5;--json-index:#00f;--json-number:#00f;--json-string:#a31515;--json-boolean:#00f;--json-null:#00f}.json-view_atom{color:#383a42;--json-property:#e45649;--json-index:#986801;--json-number:#986801;--json-string:#50a14f;--json-boolean:#0184bc;--json-null:#0184bc}.json-view_winter-is-coming{color:#0431fa;--json-property:#3a9685;--json-index:#ae408b;--json-number:#ae408b;--json-string:#8123a9;--json-boolean:#0184bc;--json-null:#0184bc}#next-cache-toolbar{--background:0 0% 100%;--foreground:222.2 47.4% 11.2%;--muted:210 40% 96.1%;--muted-foreground:215.4 16.3% 46.9%;--popover:0 0% 100%;--popover-foreground:222.2 47.4% 11.2%;--border:214.3 31.8% 91.4%;--input:214.3 31.8% 91.4%;--card:0 0% 100%;--card-foreground:222.2 47.4% 11.2%;--primary:222.2 47.4% 11.2%;--primary-foreground:210 40% 98%;--secondary:210 40% 96.1%;--secondary-foreground:222.2 47.4% 11.2%;--accent:210 40% 96.1%;--accent-foreground:222.2 47.4% 11.2%;--destructive:0 100% 50%;--destructive-foreground:210 40% 98%;--ring:215 20.2% 65.1%;--radius:0.5rem}@media (prefers-color-scheme:dark){#next-cache-toolbar{--background:224 71% 4%;--foreground:213 31% 91%;--muted:223 47% 11%;--muted-foreground:215.4 16.3% 56.9%;--accent:216 34% 17%;--accent-foreground:210 40% 98%;--popover:224 71% 4%;--popover-foreground:215 20.2% 65.1%;--border:216 34% 17%;--input:216 34% 17%;--card:224 71% 4%;--card-foreground:213 31% 91%;--primary:210 40% 98%;--primary-foreground:222.2 47.4% 1.2%;--secondary:222.2 47.4% 11.2%;--secondary-foreground:210 40% 98%;--destructive:0 63% 31%;--destructive-foreground:210 40% 98%;--ring:216 34% 17%;--radius:0.5rem}}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.nct-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.nct-fixed{position:fixed}.nct-absolute{position:absolute}.nct-sticky{position:sticky}.nct-inset-0{inset:0}.nct-inset-x-0{left:0;right:0}.nct-bottom-0{bottom:0}.nct-bottom-4{bottom:1rem}.nct-left-\[50\%\]{left:50%}.nct-right-4{right:1rem}.nct-top-0{top:0}.nct-top-4{top:1rem}.nct-top-\[50\%\]{top:50%}.nct-z-50{z-index:50}.nct-mt-4{margin-top:1rem}.nct-flex{display:flex}.nct-inline-flex{display:inline-flex}.nct-grid{display:grid}.nct-h-10{height:2.5rem}.nct-h-11{height:2.75rem}.nct-h-12{height:3rem}.nct-h-4{height:1rem}.nct-h-9{height:2.25rem}.nct-h-\[480px\]{height:480px}.nct-max-h-\[65vh\]{max-height:65vh}.nct-w-10{width:2.5rem}.nct-w-4{width:1rem}.nct-w-\[300px\]{width:300px}.nct-w-full{width:100%}.nct-max-w-\[25vw\]{max-width:25vw}.nct-max-w-lg{max-width:32rem}.nct-caption-bottom{caption-side:bottom}.nct-translate-x-\[-50\%\]{--tw-translate-x:-50%}.nct-translate-x-\[-50\%\],.nct-translate-y-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.nct-translate-y-\[-50\%\]{--tw-translate-y:-50%}@keyframes nct-spin{to{transform:rotate(1turn)}}.nct-animate-spin{animation:nct-spin 1s linear infinite}.nct-break-before-all{-moz-column-break-before:all;break-before:all}.nct-flex-col{flex-direction:column}.nct-flex-col-reverse{flex-direction:column-reverse}.nct-items-center{align-items:center}.nct-justify-end{justify-content:flex-end}.nct-justify-center{justify-content:center}.nct-gap-2{gap:.5rem}.nct-gap-4{gap:1rem}.nct-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.nct-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.nct-space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.nct-overflow-hidden{overflow:hidden}.nct-overflow-x-auto{overflow-x:auto}.nct-overflow-y-auto{overflow-y:auto}.nct-overflow-x-hidden{overflow-x:hidden}.nct-truncate{overflow:hidden;text-overflow:ellipsis}.nct-truncate,.nct-whitespace-nowrap{white-space:nowrap}.nct-rounded-full{border-radius:9999px}.nct-rounded-md{border-radius:calc(var(--radius) - 2px)}.nct-rounded-sm{border-radius:calc(var(--radius) - 4px)}.nct-border{border-width:1px}.nct-border-b{border-bottom-width:1px}.nct-border-t{border-top-width:1px}.nct-border-input{border-color:hsl(var(--input))}.nct-border-transparent{border-color:#0000}.nct-bg-background{background-color:hsl(var(--background))}.nct-bg-black\/80{background-color:#000c}.nct-bg-destructive{background-color:hsl(var(--destructive))}.nct-bg-muted\/50{background-color:hsl(var(--muted)/.5)}.nct-bg-popover{background-color:hsl(var(--popover))}.nct-bg-primary{background-color:hsl(var(--primary))}.nct-bg-secondary{background-color:hsl(var(--secondary))}.nct-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.nct-from-fuchsia-500{--tw-gradient-from:#d946ef var(--tw-gradient-from-position);--tw-gradient-to:#d946ef00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.nct-to-cyan-500{--tw-gradient-to:#06b6d4 var(--tw-gradient-to-position)}.nct-p-4{padding:1rem}.nct-p-6{padding:1.5rem}.nct-px-2{padding-left:.5rem;padding-right:.5rem}.nct-px-2\.5{padding-left:.625rem;padding-right:.625rem}.nct-px-3{padding-left:.75rem;padding-right:.75rem}.nct-px-4{padding-left:1rem;padding-right:1rem}.nct-px-8{padding-left:2rem;padding-right:2rem}.nct-py-0{padding-top:0;padding-bottom:0}.nct-py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.nct-py-1{padding-top:.25rem;padding-bottom:.25rem}.nct-py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.nct-py-2{padding-top:.5rem;padding-bottom:.5rem}.nct-text-left{text-align:left}.nct-text-center{text-align:center}.nct-align-middle{vertical-align:middle}.nct-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.nct-text-lg{font-size:1.125rem;line-height:1.75rem}.nct-text-sm{font-size:.875rem;line-height:1.25rem}.nct-text-xs{font-size:.75rem;line-height:1rem}.nct-font-medium{font-weight:500}.nct-font-semibold{font-weight:600}.nct-leading-none{line-height:1}.nct-tracking-tight{letter-spacing:-.025em}.nct-text-destructive-foreground{color:hsl(var(--destructive-foreground))}.nct-text-foreground{color:hsl(var(--foreground))}.nct-text-muted-foreground{color:hsl(var(--muted-foreground))}.nct-text-popover-foreground{color:hsl(var(--popover-foreground))}.nct-text-primary{color:hsl(var(--primary))}.nct-text-primary-foreground{color:hsl(var(--primary-foreground))}.nct-text-secondary-foreground{color:hsl(var(--secondary-foreground))}.nct-underline{text-decoration-line:underline}.nct-underline-offset-4{text-underline-offset:4px}.nct-opacity-70{opacity:.7}.nct-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.nct-shadow-lg,.nct-shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.nct-shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.nct-ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.nct-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.nct-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.nct-duration-200{transition-duration:.2s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.nct-animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.nct-fade-in-0{--tw-enter-opacity:0}.nct-zoom-in-95{--tw-enter-scale:.95}.nct-duration-200{animation-duration:.2s}.file\:nct-border-0::file-selector-button{border-width:0}.file\:nct-bg-transparent::file-selector-button{background-color:initial}.file\:nct-text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:nct-font-medium::file-selector-button{font-weight:500}.placeholder\:nct-text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:nct-text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.hover\:nct-bg-accent:hover{background-color:hsl(var(--accent))}.hover\:nct-bg-destructive\/80:hover{background-color:hsl(var(--destructive)/.8)}.hover\:nct-bg-destructive\/90:hover{background-color:hsl(var(--destructive)/.9)}.hover\:nct-bg-muted\/50:hover{background-color:hsl(var(--muted)/.5)}.hover\:nct-bg-primary\/80:hover{background-color:hsl(var(--primary)/.8)}.hover\:nct-bg-primary\/90:hover{background-color:hsl(var(--primary)/.9)}.hover\:nct-bg-secondary\/80:hover{background-color:hsl(var(--secondary)/.8)}.hover\:nct-text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:nct-underline:hover{text-decoration-line:underline}.hover\:nct-opacity-100:hover{opacity:1}.focus\:nct-outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:nct-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:nct-ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\:nct-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:nct-outline-none:focus-visible{outline:2px solid #0000;outline-offset:2px}.focus-visible\:nct-ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:nct-ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:nct-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:nct-pointer-events-none:disabled{pointer-events:none}.disabled\:nct-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:nct-opacity-50:disabled{opacity:.5}.data-\[state\=open\]\:nct-bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=selected\]\:nct-bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=open\]\:nct-text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[state\=open\]\:nct-animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\[state\=closed\]\:nct-animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\[state\=closed\]\:nct-fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=open\]\:nct-fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=closed\]\:nct-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:nct-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[side\=bottom\]\:nct-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\[side\=left\]\:nct-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\[side\=right\]\:nct-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\[side\=top\]\:nct-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\[state\=closed\]\:nct-slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\[state\=closed\]\:nct-slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\[state\=open\]\:nct-slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\[state\=open\]\:nct-slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}@media (min-width:640px){.sm\:nct-max-w-3xl{max-width:48rem}.sm\:nct-flex-row{flex-direction:row}.sm\:nct-justify-end{justify-content:flex-end}.sm\:nct-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.sm\:nct-rounded-lg{border-radius:var(--radius)}.sm\:nct-text-left{text-align:left}}.\[\&\:has\(\[role\=checkbox\]\)\]\:nct-pr-0:has([role=checkbox]){padding-right:0}.\[\&\>tr\]\:last\:nct-border-b-0:last-child>tr{border-bottom-width:0}.\[\&_tr\:last-child\]\:nct-border-0 tr:last-child{border-width:0}.\[\&_tr\]\:nct-border-b tr{border-bottom-width:1px}
1
+ .json-view{display:block;color:#4d4d4d;text-align:left;--json-property:#009033;--json-index:#676dff;--json-number:#676dff;--json-string:#b2762e;--json-boolean:#dc155e;--json-null:#dc155e}.json-view .json-view--property{color:var(--json-property)}.json-view .json-view--index{color:var(--json-index)}.json-view .json-view--number{color:var(--json-number)}.json-view .json-view--string{color:var(--json-string)}.json-view .json-view--boolean{color:var(--json-boolean)}.json-view .json-view--null{color:var(--json-null)}.json-view .jv-indent{padding-left:1em}.json-view .jv-chevron{display:inline-block;vertical-align:-20%;cursor:pointer;opacity:.4;width:1em;height:1em}:is(.json-view .jv-chevron:hover,.json-view .jv-size:hover+.jv-chevron){opacity:.8}.json-view .jv-size{cursor:pointer;opacity:.4;font-size:.875em;font-style:italic;margin-left:.5em;vertical-align:-5%;line-height:1}.json-view .json-view--link svg,.json-view :is(.json-view--copy,.json-view--edit){display:none;width:1em;height:1em;margin-left:.25em;cursor:pointer}.json-view .json-view--input{width:120px;margin-left:.25em;border-radius:4px;border:1px solid;padding:0 4px;font-size:87.5%;line-height:1.25;background:transparent}.json-view .json-view--deleting{outline:1px solid #da0000;background-color:#da000011;text-decoration-line:line-through}:is(.json-view:hover,.json-view--pair:hover)>.json-view--link svg,:is(.json-view:hover,.json-view--pair:hover)>:is(.json-view--copy,.json-view--edit){display:inline-block}.json-view .jv-button{background:transparent;outline:none;border:none;cursor:pointer;color:inherit}.json-view .cursor-pointer{cursor:pointer}.json-view svg{vertical-align:-10%}.jv-size-chevron~svg{vertical-align:-16%}.json-view_a11y{color:#545454;--json-property:#aa5d00;--json-index:#007299;--json-number:#007299;--json-string:green;--json-boolean:#d91e18;--json-null:#d91e18}.json-view_github{color:#005cc5;--json-property:#005cc5;--json-index:#005cc5;--json-number:#005cc5;--json-string:#032f62;--json-boolean:#005cc5;--json-null:#005cc5}.json-view_vscode{color:#005cc5;--json-property:#0451a5;--json-index:#00f;--json-number:#00f;--json-string:#a31515;--json-boolean:#00f;--json-null:#00f}.json-view_atom{color:#383a42;--json-property:#e45649;--json-index:#986801;--json-number:#986801;--json-string:#50a14f;--json-boolean:#0184bc;--json-null:#0184bc}.json-view_winter-is-coming{color:#0431fa;--json-property:#3a9685;--json-index:#ae408b;--json-number:#ae408b;--json-string:#8123a9;--json-boolean:#0184bc;--json-null:#0184bc}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }#next-cache-toolbar{--background:0 0% 100%;--foreground:222.2 47.4% 11.2%;--muted:210 40% 96.1%;--muted-foreground:215.4 16.3% 46.9%;--popover:0 0% 100%;--popover-foreground:222.2 47.4% 11.2%;--border:214.3 31.8% 91.4%;--input:214.3 31.8% 91.4%;--card:0 0% 100%;--card-foreground:222.2 47.4% 11.2%;--primary:222.2 47.4% 11.2%;--primary-foreground:210 40% 98%;--secondary:210 40% 96.1%;--secondary-foreground:222.2 47.4% 11.2%;--accent:210 40% 96.1%;--accent-foreground:222.2 47.4% 11.2%;--destructive:0 100% 50%;--destructive-foreground:210 40% 98%;--ring:215 20.2% 65.1%;--radius:0.5rem}@media (prefers-color-scheme:dark){#next-cache-toolbar{--background:224 71% 4%;--foreground:213 31% 91%;--muted:223 47% 11%;--muted-foreground:215.4 16.3% 56.9%;--accent:216 34% 17%;--accent-foreground:210 40% 98%;--popover:224 71% 4%;--popover-foreground:215 20.2% 65.1%;--border:216 34% 17%;--input:216 34% 17%;--card:224 71% 4%;--card-foreground:213 31% 91%;--primary:210 40% 98%;--primary-foreground:222.2 47.4% 1.2%;--secondary:222.2 47.4% 11.2%;--secondary-foreground:210 40% 98%;--destructive:0 63% 31%;--destructive-foreground:210 40% 98%;--ring:216 34% 17%;--radius:0.5rem}}.nct-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.nct-fixed{position:fixed}.nct-absolute{position:absolute}.nct-sticky{position:sticky}.nct-inset-0{inset:0}.nct-inset-x-0{left:0;right:0}.nct-bottom-0{bottom:0}.nct-bottom-4{bottom:1rem}.nct-left-\[50\%\]{left:50%}.nct-right-4{right:1rem}.nct-top-0{top:0}.nct-top-4{top:1rem}.nct-top-\[50\%\]{top:50%}.nct-z-50{z-index:50}.nct-mt-4{margin-top:1rem}.nct-flex{display:flex}.nct-inline-flex{display:inline-flex}.nct-grid{display:grid}.nct-hidden{display:none}.nct-h-10{height:2.5rem}.nct-h-11{height:2.75rem}.nct-h-12{height:3rem}.nct-h-4{height:1rem}.nct-h-9{height:2.25rem}.nct-h-\[480px\]{height:480px}.nct-max-h-\[65vh\]{max-height:65vh}.nct-w-10{width:2.5rem}.nct-w-4{width:1rem}.nct-w-\[300px\]{width:300px}.nct-w-full{width:100%}.nct-max-w-\[25vw\]{max-width:25vw}.nct-max-w-lg{max-width:32rem}.nct-caption-bottom{caption-side:bottom}.nct-translate-x-\[-50\%\]{--tw-translate-x:-50%}.nct-translate-x-\[-50\%\],.nct-translate-y-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.nct-translate-y-\[-50\%\]{--tw-translate-y:-50%}@keyframes nct-spin{to{transform:rotate(1turn)}}.nct-animate-spin{animation:nct-spin 1s linear infinite}.nct-break-before-all{-moz-column-break-before:all;break-before:all}.nct-flex-col{flex-direction:column}.nct-flex-col-reverse{flex-direction:column-reverse}.nct-items-center{align-items:center}.nct-justify-end{justify-content:flex-end}.nct-justify-center{justify-content:center}.nct-gap-2{gap:.5rem}.nct-gap-4{gap:1rem}.nct-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.nct-space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.nct-overflow-hidden{overflow:hidden}.nct-overflow-x-auto{overflow-x:auto}.nct-overflow-y-auto{overflow-y:auto}.nct-overflow-x-hidden{overflow-x:hidden}.nct-truncate{overflow:hidden;text-overflow:ellipsis}.nct-truncate,.nct-whitespace-nowrap{white-space:nowrap}.nct-rounded-full{border-radius:9999px}.nct-rounded-md{border-radius:calc(var(--radius) - 2px)}.nct-rounded-sm{border-radius:calc(var(--radius) - 4px)}.nct-border{border-width:1px}.nct-border-b{border-bottom-width:1px}.nct-border-t{border-top-width:1px}.nct-border-input{border-color:hsl(var(--input))}.nct-border-transparent{border-color:transparent}.nct-bg-background{background-color:hsl(var(--background))}.nct-bg-black\/80{background-color:rgba(0,0,0,.8)}.nct-bg-destructive{background-color:hsl(var(--destructive))}.nct-bg-muted\/50{background-color:hsl(var(--muted)/.5)}.nct-bg-popover{background-color:hsl(var(--popover))}.nct-bg-primary{background-color:hsl(var(--primary))}.nct-bg-secondary{background-color:hsl(var(--secondary))}.nct-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.nct-from-fuchsia-500{--tw-gradient-from:#d946ef var(--tw-gradient-from-position);--tw-gradient-to:rgba(217,70,239,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.nct-to-cyan-500{--tw-gradient-to:#06b6d4 var(--tw-gradient-to-position)}.nct-p-4{padding:1rem}.nct-p-6{padding:1.5rem}.nct-px-2\.5{padding-left:.625rem;padding-right:.625rem}.nct-px-3{padding-left:.75rem;padding-right:.75rem}.nct-px-4{padding-left:1rem;padding-right:1rem}.nct-px-8{padding-left:2rem;padding-right:2rem}.nct-py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.nct-py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.nct-py-2{padding-top:.5rem;padding-bottom:.5rem}.nct-text-left{text-align:left}.nct-text-center{text-align:center}.nct-align-middle{vertical-align:middle}.nct-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.nct-text-lg{font-size:1.125rem;line-height:1.75rem}.nct-text-sm{font-size:.875rem;line-height:1.25rem}.nct-text-xs{font-size:.75rem;line-height:1rem}.nct-font-medium{font-weight:500}.nct-font-semibold{font-weight:600}.nct-leading-none{line-height:1}.nct-tracking-tight{letter-spacing:-.025em}.nct-text-destructive-foreground{color:hsl(var(--destructive-foreground))}.nct-text-foreground{color:hsl(var(--foreground))}.nct-text-muted-foreground{color:hsl(var(--muted-foreground))}.nct-text-popover-foreground{color:hsl(var(--popover-foreground))}.nct-text-primary{color:hsl(var(--primary))}.nct-text-primary-foreground{color:hsl(var(--primary-foreground))}.nct-text-secondary-foreground{color:hsl(var(--secondary-foreground))}.nct-underline{text-decoration-line:underline}.nct-underline-offset-4{text-underline-offset:4px}.nct-opacity-70{opacity:.7}.nct-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.nct-shadow-lg,.nct-shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.nct-shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.nct-ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.nct-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.nct-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.nct-duration-200{transition-duration:.2s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.nct-animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.nct-fade-in-0{--tw-enter-opacity:0}.nct-zoom-in-95{--tw-enter-scale:.95}.nct-duration-200{animation-duration:.2s}.file\:nct-border-0::file-selector-button{border-width:0}.file\:nct-bg-transparent::file-selector-button{background-color:transparent}.file\:nct-text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:nct-font-medium::file-selector-button{font-weight:500}.placeholder\:nct-text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:nct-text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.hover\:nct-bg-accent:hover{background-color:hsl(var(--accent))}.hover\:nct-bg-destructive\/80:hover{background-color:hsl(var(--destructive)/.8)}.hover\:nct-bg-destructive\/90:hover{background-color:hsl(var(--destructive)/.9)}.hover\:nct-bg-muted\/50:hover{background-color:hsl(var(--muted)/.5)}.hover\:nct-bg-primary\/80:hover{background-color:hsl(var(--primary)/.8)}.hover\:nct-bg-primary\/90:hover{background-color:hsl(var(--primary)/.9)}.hover\:nct-bg-secondary\/80:hover{background-color:hsl(var(--secondary)/.8)}.hover\:nct-text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:nct-underline:hover{text-decoration-line:underline}.hover\:nct-opacity-100:hover{opacity:1}.focus\:nct-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:nct-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:nct-ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\:nct-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:nct-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:nct-ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:nct-ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:nct-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:nct-pointer-events-none:disabled{pointer-events:none}.disabled\:nct-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:nct-opacity-50:disabled{opacity:.5}.data-\[state\=open\]\:nct-bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=selected\]\:nct-bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=open\]\:nct-text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[state\=open\]\:nct-animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\[state\=closed\]\:nct-animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\[state\=closed\]\:nct-fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=open\]\:nct-fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=closed\]\:nct-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:nct-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[side\=bottom\]\:nct-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\[side\=left\]\:nct-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\[side\=right\]\:nct-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\[side\=top\]\:nct-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\[state\=closed\]\:nct-slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\[state\=closed\]\:nct-slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\[state\=open\]\:nct-slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\[state\=open\]\:nct-slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}@media (min-width:640px){.sm\:nct-max-w-3xl{max-width:48rem}.sm\:nct-flex-row{flex-direction:row}.sm\:nct-justify-end{justify-content:flex-end}.sm\:nct-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.sm\:nct-rounded-lg{border-radius:var(--radius)}.sm\:nct-text-left{text-align:left}}.\[\&\:has\(\[role\=checkbox\]\)\]\:nct-pr-0:has([role=checkbox]){padding-right:0}.\[\&\>tr\]\:last\:nct-border-b-0:last-child>tr{border-bottom-width:0}.\[\&_tr\:last-child\]\:nct-border-0 tr:last-child{border-width:0}.\[\&_tr\]\:nct-border-b tr{border-bottom-width:1px}
package/package.json CHANGED
@@ -1,86 +1,86 @@
1
1
  {
2
- "name": "next-cache-toolbar",
3
- "version": "0.2.1",
4
- "description": "Toolbar with all cached data in Next.js app router",
5
- "scripts": {
6
- "prepublish": "npm run build",
7
- "build": "rimraf dist && bunchee && tailwindcss -i src/style.css -o dist/style.css --minify",
8
- "dev": "concurrently --names 'compile,tailwind,type-check' --prefix-colors 'green,white,white' --kill-others 'npm run dev:compile' 'npm run dev:tailwind' 'npm run dev:type-check'",
9
- "dev:type-check": "tsc --watch --preserveWatchOutput --noEmit",
10
- "dev:compile": "bunchee --watch",
11
- "dev:tailwind": "tailwindcss -i src/style.css -o dist/style.css --watch"
12
- },
13
- "author": {
14
- "name": "Kajetan Szymczak"
15
- },
16
- "repository": {
17
- "type": "git",
18
- "url": "https://github.com/KajSzy/next-cache-toolbar"
19
- },
20
- "engines": {
21
- "node": ">=18",
22
- "pnpm": ">=8"
23
- },
24
- "license": "MIT",
25
- "dependencies": {
26
- "@radix-ui/react-dialog": "^1.0.5",
27
- "@radix-ui/react-slot": "^1.0.2",
28
- "@radix-ui/react-tooltip": "^1.0.7",
29
- "class-variance-authority": "^0.7.0",
30
- "clsx": "^2.1.0",
31
- "lucide-react": "^0.344.0",
32
- "next": "^14",
33
- "react": "^18",
34
- "react-dom": "^18",
35
- "react18-json-view": "^0.2.7",
36
- "tailwind-merge": "^2.2.1",
37
- "tailwindcss-animate": "^1.0.7",
38
- "zod": "^3.22.4"
39
- },
40
- "devDependencies": {
41
- "@biomejs/biome": "^1.5.3",
42
- "@types/node": "^20.11.25",
43
- "@types/react": "^18.2.61",
44
- "@types/react-dom": "^18.2.19",
45
- "autoprefixer": "^10.4.18",
46
- "bunchee": "5.0.0-beta.4",
47
- "concurrently": "^8.2.2",
48
- "npm-run-all": "^4.1.5",
49
- "postcss": "^8.4.35",
50
- "rimraf": "^5.0.5",
51
- "tailwindcss": "^3.4.1",
52
- "turbo": "^1.12.5",
53
- "typescript": "^5.4.2"
54
- },
55
- "peerDependencies": {
56
- "next": "^14",
57
- "react": "^18",
58
- "react-dom": "^18"
59
- },
60
- "files": [
61
- "dist"
62
- ],
63
- "main": "./dist/cjs/index.js",
64
- "module": "./dist/es/index.mjs",
65
- "types": "./dist/cjs/index.d.ts",
66
- "exports": {
67
- ".": {
68
- "import": {
69
- "types": "./dist/es/index.d.mts",
70
- "default": "./dist/es/index.mjs"
71
- },
72
- "require": {
73
- "types": "./dist/cjs/index.d.ts",
74
- "default": "./dist/cjs/index.js"
75
- }
76
- },
77
- "./style.css": {
78
- "import": {
79
- "default": "./dist/style.css"
80
- },
81
- "require": {
82
- "default": "./dist/style.css"
83
- }
84
- }
85
- }
2
+ "name": "next-cache-toolbar",
3
+ "version": "0.3.1",
4
+ "description": "Toolbar with all cached data in Next.js app router",
5
+ "scripts": {
6
+ "prepublish": "npm run build",
7
+ "prebuild": "rimraf dist",
8
+ "build": "bunchee && tailwindcss -i src/style.css -o dist/style.css --minify",
9
+ "dev": "concurrently --names 'compile,tailwind,type-check' --prefix-colors 'green,white,white' --kill-others 'npm run dev:compile' 'npm run dev:tailwind' 'npm run dev:type-check'",
10
+ "dev:type-check": "tsc --watch --preserveWatchOutput --noEmit",
11
+ "dev:compile": "bunchee --watch",
12
+ "dev:tailwind": "tailwindcss -i src/style.css -o dist/style.css --watch"
13
+ },
14
+ "author": {
15
+ "name": "Kajetan Szymczak"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/KajSzy/next-cache-toolbar"
20
+ },
21
+ "engines": {
22
+ "node": ">=20",
23
+ "pnpm": ">=9"
24
+ },
25
+ "license": "MIT",
26
+ "dependencies": {
27
+ "@radix-ui/react-dialog": "^1.1.2",
28
+ "@radix-ui/react-slot": "^1.1.0",
29
+ "@radix-ui/react-tooltip": "^1.1.3",
30
+ "class-variance-authority": "^0.7.0",
31
+ "clsx": "^2.1.0",
32
+ "lucide-react": "^0.454.0",
33
+ "next": "^14 || ^15",
34
+ "react": "^18 || ^19",
35
+ "react-dom": "^18 || ^19",
36
+ "react18-json-view": "^0.2.7",
37
+ "tailwind-merge": "^2.2.1",
38
+ "tailwindcss-animate": "^1.0.7",
39
+ "zod": "^3.22.4"
40
+ },
41
+ "devDependencies": {
42
+ "@biomejs/biome": "^1.9.4",
43
+ "@types/node": "^20.11.25",
44
+ "@types/react": "^19.0.3",
45
+ "@types/react-dom": "^19.0.2",
46
+ "autoprefixer": "^10.4.18",
47
+ "bunchee": "6.2.0",
48
+ "concurrently": "^9.1.2",
49
+ "npm-run-all": "^4.1.5",
50
+ "postcss": "^8.4.49",
51
+ "rimraf": "^6.0.1",
52
+ "tailwindcss": "^3.4.17",
53
+ "turbo": "^2.3.3",
54
+ "typescript": "^5.7.2"
55
+ },
56
+ "peerDependencies": {
57
+ "next": "^14.1 || ^15",
58
+ "react": "^18 || ^19",
59
+ "react-dom": "^18 || ^19"
60
+ },
61
+ "files": ["dist"],
62
+ "main": "./dist/cjs/index.js",
63
+ "module": "./dist/es/index.mjs",
64
+ "types": "./dist/cjs/index.d.ts",
65
+ "exports": {
66
+ ".": {
67
+ "import": {
68
+ "types": "./dist/es/index.d.mts",
69
+ "default": "./dist/es/index.mjs"
70
+ },
71
+ "require": {
72
+ "types": "./dist/cjs/index.d.ts",
73
+ "default": "./dist/cjs/index.js"
74
+ }
75
+ },
76
+ "./style.css": {
77
+ "import": {
78
+ "default": "./dist/style.css"
79
+ },
80
+ "require": {
81
+ "default": "./dist/style.css"
82
+ }
83
+ }
84
+ },
85
+ "packageManager": "pnpm@9.15.2"
86
86
  }