[{"data":1,"prerenderedAt":586},["ShallowReactive",2],{"navigation_docs":3,"i-nanime:logo":163,"-examples-drive":170,"-examples-drive-surround":555,"preview-examples\u002Fdrive\u002FDriveDemo.vue-false":560,"mdc--59gyrm-key":560},[4,35,95,115,129,153],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-ph-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-ph-download-simple",{"title":21,"path":22,"stem":23,"icon":24},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-ph-sliders-horizontal",{"title":26,"path":27,"stem":28,"icon":29},"Performance","\u002Fgetting-started\u002Fperformance","1.getting-started\u002F4.performance","i-ph-gauge",{"title":31,"path":32,"stem":33,"icon":34},"Accessibility","\u002Fgetting-started\u002Faccessibility","1.getting-started\u002F5.accessibility","i-ph-person-simple-circle",{"title":36,"icon":6,"path":37,"stem":38,"children":39,"page":6},"Composables","\u002Fcomposables","2.composables",[40,44,49,54,59,64,69,74,79,84,90],{"title":11,"path":41,"stem":42,"icon":43},"\u002Fcomposables\u002Fintroduction","2.composables\u002F0.introduction","i-ph-stack",{"title":45,"path":46,"stem":47,"icon":48},"useAnimate","\u002Fcomposables\u002Fuse-animate","2.composables\u002F1.use-animate","i-ph-play-circle",{"title":50,"path":51,"stem":52,"icon":53},"useWaapiAnimate","\u002Fcomposables\u002Fuse-waapi-animate","2.composables\u002F2.use-waapi-animate","i-ph-lightning",{"title":55,"path":56,"stem":57,"icon":58},"useAnimatable","\u002Fcomposables\u002Fuse-animatable","2.composables\u002F3.use-animatable","i-ph-cube",{"title":60,"path":61,"stem":62,"icon":63},"useSplitText","\u002Fcomposables\u002Fuse-split-text","2.composables\u002F4.use-split-text","i-ph-text-t",{"title":65,"path":66,"stem":67,"icon":68},"useScrambleText","\u002Fcomposables\u002Fuse-scramble-text","2.composables\u002F5.use-scramble-text","i-ph-shuffle",{"title":70,"path":71,"stem":72,"icon":73},"useDraggable","\u002Fcomposables\u002Fuse-draggable","2.composables\u002F6.use-draggable","i-ph-hand-grabbing",{"title":75,"path":76,"stem":77,"icon":78},"useAnimeTimeline","\u002Fcomposables\u002Fuse-anime-timeline","2.composables\u002F7.use-anime-timeline","i-ph-list-numbers",{"title":80,"path":81,"stem":82,"icon":83},"useAnimeScroll","\u002Fcomposables\u002Fuse-anime-scroll","2.composables\u002F8.use-anime-scroll","i-ph-mouse-scroll",{"title":85,"path":86,"stem":87,"icon":88,"badge":89},"useAnimeLayout","\u002Fcomposables\u002Fuse-anime-layout","2.composables\u002F9.use-anime-layout","i-ph-layout","New",{"title":91,"path":92,"stem":93,"icon":94},"Utilities","\u002Fcomposables\u002Futilities","2.composables\u002F99.utilities","i-ph-puzzle-piece",{"title":96,"icon":6,"path":97,"stem":98,"children":99,"page":6},"Components","\u002Fcomponents","3.components",[100,105,110],{"title":101,"path":102,"stem":103,"icon":104,"badge":89},"Transitions","\u002Fcomponents\u002Ftransitions","3.components\u002F1.transitions","i-ph-arrows-left-right",{"title":106,"path":107,"stem":108,"icon":109,"badge":89},"Transition styles","\u002Fcomponents\u002Ftransition-styles","3.components\u002F2.transition-styles","i-ph-palette",{"title":111,"path":112,"stem":113,"icon":114,"badge":89},"Layout group","\u002Fcomponents\u002Flayout-group","3.components\u002F3.layout-group","i-ph-frame-corners",{"title":116,"icon":6,"path":117,"stem":118,"children":119,"page":6},"Comparisons","\u002Fcomparisons","4.comparisons",[120,125],{"title":121,"path":122,"stem":123,"icon":124,"badge":89},"Compared with Nuxt modules","\u002Fcomparisons\u002Fvs-nuxt-modules","4.comparisons\u002F1.vs-nuxt-modules","i-ph-scales",{"title":126,"path":127,"stem":128,"icon":124,"badge":89},"Compared with Vue packages","\u002Fcomparisons\u002Fvs-vue-packages","4.comparisons\u002F2.vs-vue-packages",{"title":130,"icon":6,"path":131,"stem":132,"children":133,"page":6},"Examples","\u002Fexamples","5.examples",[134,138,143,148],{"title":11,"path":135,"stem":136,"icon":137},"\u002Fexamples\u002Fintroduction","5.examples\u002F0.introduction","i-ph-shapes",{"title":139,"path":140,"stem":141,"icon":142},"Drive","\u002Fexamples\u002Fdrive","5.examples\u002F1.drive","i-ph-hard-drives",{"title":144,"path":145,"stem":146,"icon":147},"Road trip","\u002Fexamples\u002Froad-trip","5.examples\u002F2.road-trip","i-ph-car-profile",{"title":149,"path":150,"stem":151,"icon":152},"Player","\u002Fexamples\u002Fplayer","5.examples\u002F3.player","i-ph-music-notes",{"title":154,"icon":6,"path":155,"stem":156,"children":157,"page":6},"Updates","\u002Fchanges","6.changes",[158],{"title":159,"path":160,"stem":161,"icon":162},"Changelog","\u002Fchanges\u002Fchangelog","6.changes\u002F1.changelog","i-ph-clock-counter-clockwise",{"left":164,"top":165,"width":166,"height":167,"rotate":168,"vFlip":6,"hFlip":6,"body":169},84,74,344,367,0,"\u003Cpath d=\"M124 401 V230 C124 144 186 114 256 114 C326 114 388 144 388 230 V304\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"80\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u002F>\n  \u003Crect x=\"348\" y=\"358\" width=\"80\" height=\"80\" rx=\"12\" fill=\"#ff4b4b\"\u002F>",{"id":171,"title":139,"body":172,"description":546,"extension":547,"links":548,"meta":549,"navigation":550,"path":140,"seo":551,"stem":141,"__hash__":554},"docs\u002F5.examples\u002F1.drive.md",{"type":173,"value":174,"toc":541},"minimark",[175,180,185,189,236,239,243,310,528],[176,177],"render-code-block-preview",{":code":178,"src":179},"false","examples\u002Fdrive\u002FDriveDemo.vue",[181,182,184],"h2",{"id":183},"try-it","Try it",[186,187,188],"p",{},"The numbered controls work. The greyed ones fill out the page and do\nnothing.",[190,191,192,200,206,212,218,224,230],"ol",{},[193,194,195,199],"li",{},[196,197,198],"strong",{},"Switch the layout"," between grid, list and columns. Every tile glides\nto its new place and size, and its icon and name slide with it.",[193,201,202,205],{},[196,203,204],{},"Filter"," by kind. The files that don't match shrink away and the rest\nclose the gap.",[193,207,208,211],{},[196,209,210],{},"Sort"," by name, type or size. The tiles move to their new order.",[193,213,214,217],{},[196,215,216],{},"Click a tile"," to expand it, and click again to shrink it. A tile\ndragged anywhere but the trash springs back to its slot.",[193,219,220,223],{},[196,221,222],{},"Drag a tile onto Trash."," When the pointer reaches the bin, the tile\nsnaps onto it and resizes to fill it. It fades out when you let go. The\nbadge counts up and the storage bar counts down.",[193,225,226,229],{},[196,227,228],{},"Upload"," adds a file, which pops in at its sorted place. The button\nturns off at eight files.",[193,231,232,235],{},[196,233,234],{},"Undo"," in the notice puts the last trashed file back.",[186,237,238],{},"Reset in the title bar puts everything back to the start.",[181,240,242],{"id":241},"built-with","Built with",[244,245,246,256,264,272,279,286],"ul",{},[193,247,248,255],{},[249,250,251],"a",{"href":102},[252,253,254],"code",{},"\u003CAnimeTransitionGroup>",": the tiles, as they\nenter, leave and move",[193,257,258,263],{},[249,259,260],{"href":112},[252,261,262],{},"\u003CAnimeLayoutGroup>",": the sliding highlight\nin each segmented control",[193,265,266,271],{},[249,267,268],{"href":102},[252,269,270],{},"\u003CAnimeTransition>",": a tile dropped in the\ntrash, the trash badge and the undo notice",[193,273,274,278],{},[249,275,276],{"href":71},[252,277,70],{},": dragging a tile and\nspringing it back",[193,280,281,285],{},[249,282,283],{"href":56},[252,284,55],{},": the tile filling the\ntrash and the storage bar",[193,287,288,291,292,297,298,301,302,291,305],{},[252,289,290],{},"spring"," from ",[249,293,294],{"href":92},[252,295,296],{},"#nanime\u002Feasings",", and ",[252,299,300],{},"stagger","\nand ",[252,303,304],{},"round",[249,306,307],{"href":92},[252,308,309],{},"#nanime\u002Futils",[311,312,314,324,355,374,401,423,445,467,490,497,510],"collapsible",{"name":313},"How it's built",[186,315,316,319,320,323],{},[196,317,318],{},"State."," One composable, ",[252,321,322],{},"useDrive",", holds the files, the trash, the\nlayout, the filter, the sort order and the expanded tile. The window is\nsplit into a title bar, a sidebar, a toolbar, a filter bar, the file grid\nand a toast, and each part only gets the props and events it needs.",[186,325,326,329,330,334,335,338,339,342,343,346,347,350,351,354],{},[196,327,328],{},"Tiles."," The grid is an ",[249,331,332],{"href":102},[252,333,254],{},"\nwhose classes change with the layout: ",[252,336,337],{},"grid",", ",[252,340,341],{},"flex flex-col"," or\n",[252,344,345],{},"columns-3",". The group records every element inside it before an update and\nanimates the difference after it, so a layout switch is only a change of\nclasses. The icon and name move too, because they are elements inside the\ngroup. Filtering and sorting come from one ",[252,348,349],{},"computed"," that returns a\nfiltered, sorted copy of the files. The group sees a new order and moves the\ntiles into it. An expanded tile gets ",[252,352,353],{},"col-span-2 row-span-2"," in the grid and\na bigger height in the other layouts, and its neighbours move out of the way.",[186,356,357,358,361,362,365,366,369,370,373],{},"New tiles pop in: they scale up from ",[252,359,360],{},"0.9"," on a ",[252,363,364],{},"spring()"," with a small\nbounce, so they overshoot a little and settle. Removed tiles fade and shrink\nto ",[252,367,368],{},"0.95"," in 150ms. Moves have no overshoot. The tiles are already on screen,\nso they ease out over 300ms with ",[252,371,372],{},"stagger(8)"," as their delay, and each\ntile's content trails the tile by a few milliseconds.",[186,375,376,379,380,383,384,388,389,392,393,396,397,400],{},[196,377,378],{},"Segmented controls."," The pill behind the current option is one element in\nthe same grid row as the buttons. Its ",[252,381,382],{},"grid-column"," follows the selected\nvalue. An ",[249,385,386],{"href":112},[252,387,262],{}," with\n",[252,390,391],{},":deps=\"[selected]\""," and ",[252,394,395],{},"elements=\".segment-pill\""," slides it to the new\ncolumn and resizes it to the new button's width. Only the pill is listed in\n",[252,398,399],{},"elements",", so the buttons stay where they are.",[186,402,403,406,407,411,412,415,416,418,419,422],{},[196,404,405],{},"Dragging to the trash."," Each tile's handle gets\n",[249,408,409],{"href":71},[252,410,70],{}," with ",[252,413,414],{},"snap: [0]"," and a\nlow-bounce ",[252,417,364],{}," as ",[252,420,421],{},"releaseEase",", so a tile dropped anywhere else\nreturns to its slot.",[186,424,425,426,429,430,433,434,392,437,440,441,444],{},"The hit test follows the pointer, not the tile. A list row is as wide as\nthe grid, so its centre would never reach the sidebar. The handle's own\n",[252,427,428],{},"pointerdown"," stores where it was grabbed, and ",[252,431,432],{},"onUpdate"," adds the\ndraggable's ",[252,435,436],{},"x",[252,438,439],{},"y"," to that point and tests it against the trash rect.\n",[252,442,443],{},"onGrab"," measures the trash, the tile's size and its rest centre once, since\nnothing else moves during a drag.",[186,446,447,448,451,452,455,456,460,461,463,464,466],{},"The fill is one number from ",[252,449,450],{},"0"," to ",[252,453,454],{},"1",", run by\n",[249,457,458],{"href":56},[252,459,55],{}," over 250ms. The card's\nwidth, height and offset are interpolated from it. At ",[252,462,450],{}," the card has its\nown size. At ",[252,465,454],{}," it covers the trash, less 6px of padding, and sits on its\ncentre, whether the tile started as a grid square or a full-width row. An\nanimatable starts from its current value, so a tile that crosses in and out\nof the trash quickly never jumps.",[186,468,469,470,473,474,477,478,482,483,486,487,489],{},"On release over the trash, ",[252,471,472],{},"onRelease"," calls ",[252,475,476],{},"draggable.stop()"," to cancel\nthe return spring and hides the handle. The handle sits in an\n",[249,479,480],{"href":102},[252,481,270],{},", so it fades out first.\nThe file leaves the list only in ",[252,484,485],{},"@after-leave",". Removing it earlier would\nunmount the tile, and ",[252,488,70],{}," reverts its draggable on unmount,\nwhich moves the card back to its slot before it fades.",[186,491,492,493,496],{},"The tiles read the trash element through a getter instead of a prop value.\nThe element only exists after mount, and a prop that changed from ",[252,494,495],{},"null"," to\nthe element would re-render the list and run a layout pass over every tile.",[186,498,499,502,503,506,507,509],{},[196,500,501],{},"Sidebar and toast."," The trash badge is keyed on the count inside an\n",[252,504,505],{},"\u003CAnimeTransition mode=\"out-in\">",", so every new count pops in.\nThe storage bar and its number read from one object animated by\n",[252,508,55],{},", which retargets from its current value when the total\nchanges again mid-animation. The undo notice is keyed on the file id, so\ntrashing a second file swaps the notice instead of stacking a new one.",[186,511,512,515,516,519,520,523,524,527],{},[196,513,514],{},"Highlights."," The numbered badges are plain CSS: each live control has a\n",[252,517,518],{},"data-live"," attribute, and a ",[252,521,522],{},"::after"," rule prints it with ",[252,525,526],{},"attr()",".",[311,529,531],{"name":530},"AI build prompt",[532,533,539],"pre",{"className":534,"code":536,"language":537,"meta":538},[535],"language-text","Using the nanime Nuxt module (AnimeJS v4 for Vue, with Tailwind CSS v4 and\nNuxt UI), build a small file manager in Vue 3 single-file components.\n\u003CAnimeTransition>, \u003CAnimeTransitionGroup>, \u003CAnimeLayoutGroup>,\nuseDraggable and useAnimatable are auto-imported by nanime. Import spring\nfrom '#nanime\u002Feasings', and stagger and round from '#nanime\u002Futils'. Use\nstrict TypeScript with no `any` and no `as` casts. Ease names are AnimeJS\nv4 strings such as 'out(3)', not 'easeOutCubic'. A spring sets its own\nduration, so spring params have none.\n\nData: files { id, name, kind: 'image' | 'video' | 'audio', size (MB),\nmodified (a short date such as 'Sep 12') }, starting with seven files. Put the state in a useDrive() composable: files,\ntrash (a list of { file, index }), layout ('grid' | 'list' | 'columns'),\nfilter ('all' or a kind), sort ('name' | 'kind' | 'size'), expandedId and\ntoast. A computed visibleFiles filters by kind and sorts a copy. Actions:\ntoggleExpanded, moveToTrash (splice the file out, remember its index, show\nthe toast for 4 seconds), undo (splice it back at its index), upload (add a\nfile with a new id and modified 'Just now', up to eight files) and reset.\n\nLayout: a window with a title bar, a sidebar and a main area, in a\nfixed-height frame (h-[44rem]) so the page never jumps. Eight list rows\nfit inside it, so the file area never scrolls: a scrolling area would\nclip a tile dragged out of it.\n- Title bar: a Reset button and a \"Show interactive\" switch.\n- Sidebar: Library (current), Recent, Starred and Shared as disabled\n  buttons, a Trash drop target with a count badge, and a storage bar.\n- Toolbar: a disabled search input, a layout switcher, Upload, and a\n  disabled avatar.\n- Filter bar: a kind filter and a sort switcher.\n- File grid and an undo toast pinned to the bottom of the main area.\nGive every working control data-live=\"\u003Cn>\" and draw the number with a CSS\n::after { content: attr(data-live) } plus a dashed outline while \"Show\ninteractive\" is on.\n\nSegmented control component (layout, filter and sort all use it): an\n\u003CAnimeLayoutGroup :deps=\"[selected]\" elements=\".segment-pill\"\n:layout-options=\"{ duration: 250, ease: 'out(3)' }\"> with\nclasses \"relative grid grid-flow-col auto-cols-max\". Inside it, a pill\n\u003Cspan class=\"segment-pill row-start-1\"> whose style gridColumn is the\nselected index + 1, then one button per option with class \"relative\nrow-start-1\" and gridColumn index + 1. The group slides the pill to the new\ncolumn. Do not animate the pill yourself.\n\nFile grid: \u003CAnimeTransitionGroup tag=\"ul\" class=\"relative\"> whose classes\ncome from the layout:\n  grid: 'grid grid-cols-5 auto-rows-[6.5rem] grid-flow-dense gap-3'\n  list: 'flex flex-col gap-1.5'\n  columns: 'columns-4 gap-3'\n  :enter-animation = { opacity: [0, 1], scale: [0.9, 1],\n    ease: spring({ bounce: 0.15, duration: 350 }) }\n  :leave-animation = { opacity: 0, scale: 0.95, duration: 150, ease: 'out(2)' }\n  :move-animation = { duration: 300, delay: stagger(8), ease: 'out(3)' }\nThe enter is a pop in with a slight overshoot. Moves have no overshoot,\nbecause the tiles are already on screen.\nDefine these objects once in \u003Cscript setup>. The group animates layout\nchanges on its own, including a change of its own classes, so add no CSS\ntransitions.\n\nTile component, one per visible file, keyed by id. Root: an \u003Cli\nclass=\"relative\"> sized by layout (grid: expanded gets 'col-span-2\nrow-span-2'; list: 'h-14 w-full', expanded 'h-20 w-full'; columns: 'mb-3\nw-full break-inside-avoid' with a height from ['h-20', 'h-28',\n'h-24'][id % 3], expanded 'h-44'). Inside it, an \u003CAnimeTransition\n:leave-animation=\"{ opacity: 0, duration: 150, ease: 'out(2)' }\"\n@after-leave=\"emit('trashed')\"> around a handle div (ref \"handle\",\nv-if=\"!dropped\", \"absolute inset-0 cursor-grab touch-none select-none\",\n@pointerdown stores the grab point, @click emits toggle). Inside the\nhandle, the visible card: \"absolute inset-0\" with the icon, the name, a\nsecond line with the kind and modified date, and the size, and :style\nfrom the fill below. The second line and the size show in list rows and\non the expanded tile. Hide them with a class instead of v-if, so the\ngroup can animate them in and out. The draggable owns the handle's transform,\nso the card's own size and offset go on this inner div.\n\nTile logic:\n- The tile gets the trash element through a getter prop, () =>\n  HTMLElement | null, not the element itself. The element only exists\n  after mount, and a prop change would re-render the list and run a layout\n  pass over every tile.\n- draggable = useDraggable(handle, { snap: [0], releaseEase: spring({\n  bounce: 0.1, duration: 400 }), onGrab, onUpdate, onRelease, onSettle }).\n- pointerdown on the handle: store the rest pointer as event.clientX\u002FY\n  minus draggable.x\u002Fy. Test the pointer, not the tile's centre, against the\n  trash: a list row is as wide as the grid, so its centre never reaches the\n  sidebar.\n- onGrab: read the trash rect and the handle rect. Store the handle's rest\n  centre (its centre minus draggable.x\u002Fy), its width and height, and the\n  trash's width and height minus 12 (6px padding per side). Set lifted =\n  true, which adds z-20 to the li so the tile draws over the sidebar.\n- onUpdate: the pointer is the rest pointer + draggable.x\u002Fy. Over the\n  trash when it is inside the stored rect. While over, store the vector\n  from the card's current centre (rest centre + draggable.x\u002Fy) to the\n  trash centre. When the boolean changes, call\n  fillTo.progress?.(over ? 1 : 0) on useAnimatable(fill, { progress: {\n  duration: 250, ease: 'out(3)' } }), where fill =\n  reactive({ progress: 0 }), and emit over so the sidebar can highlight\n  the trash.\n- The card's style, a computed: {} when progress is 0. Otherwise width =\n  cardWidth + (trashWidth - cardWidth) * progress, the same for height,\n  x = vector.x * progress - (width - cardWidth) \u002F 2 and y = vector.y *\n  progress - (height - cardHeight) \u002F 2. Return width and height in px and\n  transform: translate(xpx, ypx).\n- onRelease: if over the trash, call draggable.stop(), emit over(false) and\n  set dropped = true. onSettle sets lifted = false.\n- The parent removes the file only on trashed, after the leave. Removing it\n  earlier unmounts the tile, and useDraggable reverts its draggable on\n  unmount, which moves the card back to its slot before it fades.\n\nSidebar: the badge is a span keyed on the trash count inside \u003CAnimeTransition\nmode=\"out-in\" :enter-animation=\"{ scale: [0.6, 1], ease: spring({ bounce:\n0.2, duration: 300 }) }\" :leave-animation=\"{ opacity: 0, duration: 60 }\">.\nThe storage bar reads meter = reactive({ used }) animated by\nuseAnimatable(meter, { used: { duration: 600, ease: 'out(3)' } }); watch\nthe total and call meterTo.used?.(total). Show round(meter.used, 0) MB.\n\nToast: \u003CAnimeTransition mode=\"out-in\"> keyed on the trashed file's id, with\nenter { opacity: [0, 1], y: [8, 0], duration: 250, ease: 'out(3)' } and\nleave { opacity: 0, y: 4, duration: 150, ease: 'out(2)' }, and an Undo\nbutton.\n","text","",[252,540,536],{"__ignoreMap":538},{"title":538,"searchDepth":542,"depth":542,"links":543},2,[544,545],{"id":183,"depth":542,"text":184},{"id":241,"depth":542,"text":242},"A file manager whose tiles change layout, filter, sort and drag into the trash.","md",null,{},{"icon":142},{"title":552,"description":553},"Drive example: animated file manager in Nuxt","A file manager built with AnimeTransitionGroup, AnimeLayoutGroup, useDraggable and useAnimatable in Nuxt. Layout switches, filters, drag to trash and undo.","Q1MSSAr8W_BwWyMlmzLzLn6NedYkzKFc0QCuCoNxTag",[556,558],{"title":11,"path":135,"stem":136,"description":557,"icon":137,"children":-1},"Complete sequences built from nanime composables and utilities.",{"title":144,"path":145,"stem":146,"description":559,"icon":147,"children":-1},"A trip planner whose route is driven by scroll, with a booking log that runs step by step.",{"data":561,"body":562,"toc":584},{"title":538,"description":538},{"type":563,"children":564},"root",[565,570],{"type":566,"tag":567,"props":568,"children":569},"element","drive-demo",{},[],{"type":566,"tag":571,"props":572,"children":581},"u-button",{"className":573,"color":576,"icon":577,"target":578,"to":579,"variant":580},[574,575],"mt-2.5","pl-0.5","neutral","i-simple-icons-github","_blank","https:\u002F\u002Fgithub.com\u002Fastraldev\u002Fnanime\u002Fblob\u002Fmain\u002Fdocs\u002Fapp\u002Fcomponents\u002Fcontent\u002Fexamples\u002Fdrive\u002FDriveDemo.vue","link",[582],{"type":537,"value":583},"View on GitHub",{"title":538,"searchDepth":542,"depth":542,"links":585},[],1792591718245]