[{"data":1,"prerenderedAt":805},["ShallowReactive",2],{"docs-nav":3,"docs:\u002Fdocs\u002Fgetting-started\u002Fsound":187,"docs-surround:\u002Fdocs\u002Fgetting-started\u002Fsound":800},[4,31,178],{"title":5,"path":6,"stem":7,"children":8,"page":30},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[9,14,18,22,26],{"title":10,"path":11,"stem":12,"status":13,"badge":13},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction",null,{"title":15,"path":16,"stem":17,"status":13,"badge":13},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21,"status":13,"badge":13},"Theming","\u002Fdocs\u002Fgetting-started\u002Ftheming","docs\u002F1.getting-started\u002F3.theming",{"title":23,"path":24,"stem":25,"status":13,"badge":13},"Accessibility & reduced motion","\u002Fdocs\u002Fgetting-started\u002Faccessibility","docs\u002F1.getting-started\u002F4.accessibility",{"title":27,"path":28,"stem":29,"status":13,"badge":13},"Sound","\u002Fdocs\u002Fgetting-started\u002Fsound","docs\u002F1.getting-started\u002F5.sound",false,{"title":32,"path":33,"stem":34,"children":35,"page":30},"Components","\u002Fdocs\u002Fcomponents","docs\u002F2.components",[36,40,44,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,126,130,134,138,142,146,150,154,158,162,166,170,174],{"title":37,"path":38,"stem":39,"status":13,"badge":13},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002F2.components\u002F01.button",{"title":41,"path":42,"stem":43,"status":13,"badge":13},"Spinner","\u002Fdocs\u002Fcomponents\u002Fspinner","docs\u002F2.components\u002F02.spinner",{"title":45,"path":46,"stem":47,"status":13,"badge":48},"Toggle","\u002Fdocs\u002Fcomponents\u002Ftoggle","docs\u002F2.components\u002F03.toggle","experimental",{"title":50,"path":51,"stem":52,"status":13,"badge":13},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002F2.components\u002F04.switch",{"title":54,"path":55,"stem":56,"status":13,"badge":13},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002F2.components\u002F05.checkbox",{"title":58,"path":59,"stem":60,"status":13,"badge":13},"Radio Group","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002F2.components\u002F06.radio-group",{"title":62,"path":63,"stem":64,"status":13,"badge":48},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002F2.components\u002F07.input",{"title":66,"path":67,"stem":68,"status":13,"badge":13},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002F2.components\u002F08.slider",{"title":70,"path":71,"stem":72,"status":13,"badge":13},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002F2.components\u002F09.progress",{"title":74,"path":75,"stem":76,"status":13,"badge":48},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002F2.components\u002F10.select",{"title":78,"path":79,"stem":80,"status":13,"badge":13},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002F2.components\u002F11.popover",{"title":82,"path":83,"stem":84,"status":13,"badge":13},"Dropdown Menu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002F2.components\u002F12.dropdown-menu",{"title":86,"path":87,"stem":88,"status":13,"badge":13},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002F2.components\u002F13.tooltip",{"title":90,"path":91,"stem":92,"status":13,"badge":13},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002F2.components\u002F14.tabs",{"title":94,"path":95,"stem":96,"status":13,"badge":48},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002F2.components\u002F15.accordion",{"title":98,"path":99,"stem":100,"status":13,"badge":48},"Dialog","\u002Fdocs\u002Fcomponents\u002Fdialog","docs\u002F2.components\u002F16.dialog",{"title":102,"path":103,"stem":104,"status":13,"badge":48},"Alert Dialog","\u002Fdocs\u002Fcomponents\u002Falert-dialog","docs\u002F2.components\u002F17.alert-dialog",{"title":106,"path":107,"stem":108,"status":13,"badge":48},"Sheet","\u002Fdocs\u002Fcomponents\u002Fsheet","docs\u002F2.components\u002F18.sheet",{"title":110,"path":111,"stem":112,"status":13,"badge":48},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002F2.components\u002F19.drawer",{"title":114,"path":115,"stem":116,"status":13,"badge":13},"Toaster","\u002Fdocs\u002Fcomponents\u002Ftoaster","docs\u002F2.components\u002F20.toaster",{"title":118,"path":119,"stem":120,"status":13,"badge":48},"Page transition","\u002Fdocs\u002Fcomponents\u002Fpage-transition","docs\u002F2.components\u002F21.page-transition",{"title":122,"path":123,"stem":124,"status":125,"badge":13},"Blob","\u002Fdocs\u002Fcomponents\u002Fblob","docs\u002F2.components\u002F22.blob","soon",{"title":127,"path":128,"stem":129,"status":13,"badge":48},"Command","\u002Fdocs\u002Fcomponents\u002Fcommand","docs\u002F2.components\u002F23.command",{"title":131,"path":132,"stem":133,"status":13,"badge":48},"Combobox","\u002Fdocs\u002Fcomponents\u002Fcombobox","docs\u002F2.components\u002F24.combobox",{"title":135,"path":136,"stem":137,"status":13,"badge":48},"NumberField","\u002Fdocs\u002Fcomponents\u002Fnumber-field","docs\u002F2.components\u002F25.number-field",{"title":139,"path":140,"stem":141,"status":13,"badge":48},"InputOTP","\u002Fdocs\u002Fcomponents\u002Finput-otp","docs\u002F2.components\u002F26.input-otp",{"title":143,"path":144,"stem":145,"status":13,"badge":48},"Hover Card","\u002Fdocs\u002Fcomponents\u002Fhover-card","docs\u002F2.components\u002F27.hover-card",{"title":147,"path":148,"stem":149,"status":13,"badge":48},"Context Menu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002F2.components\u002F28.context-menu",{"title":151,"path":152,"stem":153,"status":13,"badge":48},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002F2.components\u002F29.skeleton",{"title":155,"path":156,"stem":157,"status":13,"badge":48},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002F2.components\u002F30.badge",{"title":159,"path":160,"stem":161,"status":13,"badge":48},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002F2.components\u002F31.card",{"title":163,"path":164,"stem":165,"status":13,"badge":48},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002F2.components\u002F32.avatar",{"title":167,"path":168,"stem":169,"status":13,"badge":48},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002F2.components\u002F33.separator",{"title":171,"path":172,"stem":173,"status":13,"badge":48},"Label","\u002Fdocs\u002Fcomponents\u002Flabel","docs\u002F2.components\u002F34.label",{"title":175,"path":176,"stem":177,"status":13,"badge":48},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002F2.components\u002F35.sidebar",{"title":179,"path":180,"stem":181,"children":182,"page":30},"Core","\u002Fdocs\u002Fcore","docs\u002F3.core",[183],{"title":184,"path":185,"stem":186,"status":13,"badge":13},"API reference","\u002Fdocs\u002Fcore\u002Fapi","docs\u002F3.core\u002F1.api",{"id":188,"title":27,"badge":13,"body":189,"description":795,"extension":796,"meta":797,"navigation":524,"path":28,"seo":798,"status":13,"stem":29,"__hash__":799},"docs\u002Fdocs\u002F1.getting-started\u002F5.sound.md",{"type":190,"value":191,"toc":788},"minimark",[192,204,212,217,225,250,253,257,264,305,319,367,374,430,439,460,482,492,496,501,548,565,569,572,719,737,774,778,784],[193,194,195,196,203],"p",{},"goopUI can play short interaction sounds through ",[197,198,202],"a",{"href":199,"rel":200},"https:\u002F\u002Fgithub.com\u002Fdanielwh2\u002Fcuelume",[201],"nofollow","Cuelume",": a tap for a button, a snap for a switch, a soft whoosh when a dialog opens. The sounds are synthesized with Web Audio, so there are no audio files to ship.",[193,205,206,207,211],{},"Sound is ",[208,209,210],"strong",{},"off by default",". Until you turn it on, components render exactly the same markup as before and Cuelume is never loaded.",[213,214,216],"h2",{"id":215},"install-cuelume","Install Cuelume",[193,218,219,220,224],{},"Cuelume is an optional peer dependency of ",[221,222,223],"code",{},"@goopui\u002Fcore",". Install it in your app:",[226,227,232],"pre",{"className":228,"code":229,"language":230,"meta":231,"style":231},"language-bash shiki shiki-themes github-light github-dark","pnpm add cuelume\n","bash","",[221,233,234],{"__ignoreMap":231},[235,236,239,243,247],"span",{"class":237,"line":238},"line",1,[235,240,242],{"class":241},"sScJk","pnpm",[235,244,246],{"class":245},"sZZnC"," add",[235,248,249],{"class":245}," cuelume\n",[193,251,252],{},"It's only imported, lazily and in the browser, once sound is on. If sound is on and Cuelume isn't installed, nothing plays and you get one warning in the console.",[213,254,256],{"id":255},"turn-it-on","Turn it on",[193,258,259,260,263],{},"For one component, add the ",[221,261,262],{},"sound"," prop:",[226,265,269],{"className":266,"code":267,"language":268,"meta":231,"style":231},"language-vue shiki shiki-themes github-light github-dark","\u003CGoopButton sound>Save\u003C\u002FGoopButton>\n\u003CGoopSwitch sound \u002F>\n","vue",[221,270,271,292],{"__ignoreMap":231},[235,272,273,277,281,284,287,289],{"class":237,"line":238},[235,274,276],{"class":275},"sVt8B","\u003C",[235,278,280],{"class":279},"s9eBZ","GoopButton",[235,282,283],{"class":241}," sound",[235,285,286],{"class":275},">Save\u003C\u002F",[235,288,280],{"class":279},[235,290,291],{"class":275},">\n",[235,293,295,297,300,302],{"class":237,"line":294},2,[235,296,276],{"class":275},[235,298,299],{"class":279},"GoopSwitch",[235,301,283],{"class":241},[235,303,304],{"class":275}," \u002F>\n",[193,306,307,308,310,311,314,315,318],{},"On a root component, ",[221,309,262],{}," covers its parts too. A sounding ",[221,312,313],{},"GoopDialog"," makes its trigger and close buttons sound, and a sounding ",[221,316,317],{},"GoopSelect"," makes its trigger and items sound:",[226,320,322],{"className":266,"code":321,"language":268,"meta":231,"style":231},"\u003CGoopDialog sound>\n  \u003CGoopDialogTrigger as-child>\n    \u003CGoopButton>Open\u003C\u002FGoopButton>\n  \u003C\u002FGoopDialogTrigger>\n  \u003CGoopDialogContent>…\u003C\u002FGoopDialogContent>\n\u003C\u002FGoopDialog>\n",[221,323,324,334,339,345,351,357],{"__ignoreMap":231},[235,325,326,328,330,332],{"class":237,"line":238},[235,327,276],{"class":275},[235,329,313],{"class":279},[235,331,283],{"class":241},[235,333,291],{"class":275},[235,335,336],{"class":237,"line":294},[235,337,338],{"class":275},"  \u003CGoopDialogTrigger as-child>\n",[235,340,342],{"class":237,"line":341},3,[235,343,344],{"class":275},"    \u003CGoopButton>Open\u003C\u002FGoopButton>\n",[235,346,348],{"class":237,"line":347},4,[235,349,350],{"class":275},"  \u003C\u002FGoopDialogTrigger>\n",[235,352,354],{"class":237,"line":353},5,[235,355,356],{"class":275},"  \u003CGoopDialogContent>…\u003C\u002FGoopDialogContent>\n",[235,358,360,363,365],{"class":237,"line":359},6,[235,361,362],{"class":275},"\u003C\u002F",[235,364,313],{"class":279},[235,366,291],{"class":275},[193,368,369,370,373],{},"For the whole app in Nuxt, set ",[221,371,372],{},"goop.sound",":",[226,375,379],{"className":376,"code":377,"language":378,"meta":231,"style":231},"language-ts shiki shiki-themes github-light github-dark","\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['@goopui\u002Fnuxt'],\n  goop: { sound: true },\n})\n","ts",[221,380,381,387,402,413,425],{"__ignoreMap":231},[235,382,383],{"class":237,"line":238},[235,384,386],{"class":385},"sJ8bj","\u002F\u002F nuxt.config.ts\n",[235,388,389,393,396,399],{"class":237,"line":294},[235,390,392],{"class":391},"szBVR","export",[235,394,395],{"class":391}," default",[235,397,398],{"class":241}," defineNuxtConfig",[235,400,401],{"class":275},"({\n",[235,403,404,407,410],{"class":237,"line":341},[235,405,406],{"class":275},"  modules: [",[235,408,409],{"class":245},"'@goopui\u002Fnuxt'",[235,411,412],{"class":275},"],\n",[235,414,415,418,422],{"class":237,"line":347},[235,416,417],{"class":275},"  goop: { sound: ",[235,419,421],{"class":420},"sj4cs","true",[235,423,424],{"class":275}," },\n",[235,426,427],{"class":237,"line":353},[235,428,429],{"class":275},"})\n",[193,431,432,433,435,436,373],{},"Without Nuxt, pass ",[221,434,262],{}," to the plugin, or set it for part of the tree with ",[221,437,438],{},"provideGoopSound",[226,440,442],{"className":376,"code":441,"language":378,"meta":231,"style":231},"app.use(GoopPlugin, { sound: true })\n",[221,443,444],{"__ignoreMap":231},[235,445,446,449,452,455,457],{"class":237,"line":238},[235,447,448],{"class":275},"app.",[235,450,451],{"class":241},"use",[235,453,454],{"class":275},"(GoopPlugin, { sound: ",[235,456,421],{"class":420},[235,458,459],{"class":275}," })\n",[226,461,463],{"className":376,"code":462,"language":378,"meta":231,"style":231},"\u002F\u002F in a parent component's setup\nprovideGoopSound(true)\n",[221,464,465,470],{"__ignoreMap":231},[235,466,467],{"class":237,"line":238},[235,468,469],{"class":385},"\u002F\u002F in a parent component's setup\n",[235,471,472,474,477,479],{"class":237,"line":294},[235,473,438],{"class":241},[235,475,476],{"class":275},"(",[235,478,421],{"class":420},[235,480,481],{"class":275},")\n",[193,483,484,485,487,488,491],{},"A component's own ",[221,486,262],{}," prop always wins, so ",[221,489,490],{},"\u003CGoopButton :sound=\"false\">"," stays quiet in a sounding app.",[213,493,495],{"id":494},"muting","Muting",[193,497,498,500],{},[221,499,223],{}," holds one switch for playback. Wire it to your own sound toggle:",[226,502,504],{"className":376,"code":503,"language":378,"meta":231,"style":231},"import { disableSound, enableSound, isSoundEnabled } from '@goopui\u002Fcore'\n\nenableSound()  \u002F\u002F load Cuelume, bind its listeners, unmute\ndisableSound() \u002F\u002F mute: later cues are silent, ringing ones fade\n",[221,505,506,520,526,537],{"__ignoreMap":231},[235,507,508,511,514,517],{"class":237,"line":238},[235,509,510],{"class":391},"import",[235,512,513],{"class":275}," { disableSound, enableSound, isSoundEnabled } ",[235,515,516],{"class":391},"from",[235,518,519],{"class":245}," '@goopui\u002Fcore'\n",[235,521,522],{"class":237,"line":294},[235,523,525],{"emptyLinePlaceholder":524},true,"\n",[235,527,528,531,534],{"class":237,"line":341},[235,529,530],{"class":241},"enableSound",[235,532,533],{"class":275},"()  ",[235,535,536],{"class":385},"\u002F\u002F load Cuelume, bind its listeners, unmute\n",[235,538,539,542,545],{"class":237,"line":347},[235,540,541],{"class":241},"disableSound",[235,543,544],{"class":275},"() ",[235,546,547],{"class":385},"\u002F\u002F mute: later cues are silent, ringing ones fade\n",[193,549,550,551,554,555,557,558,561,562,564],{},"Once you've called ",[221,552,553],{},"disableSound()",", components with ",[221,556,262],{}," keep their markup but stay silent until you call ",[221,559,560],{},"enableSound()"," again. Browsers only start audio after someone has interacted with the page, so call ",[221,563,560],{}," from the click that turns sound on.",[213,566,568],{"id":567},"which-sound-plays","Which sound plays",[193,570,571],{},"Each component plays the cue for its job, following Cuelume's guidance. Nothing plays on hover, so tooltips and hover cards stay silent.",[573,574,575,588],"table",{},[576,577,578],"thead",{},[579,580,581,585],"tr",{},[582,583,584],"th",{},"Component",[582,586,587],{},"Cue",[589,590,591,602,612,622,632,643,656,665,674,683,694],"tbody",{},[579,592,593,597],{},[594,595,596],"td",{},"Button, Alert dialog action",[594,598,599],{},[221,600,601],{},"tap",[579,603,604,607],{},[594,605,606],{},"Switch, Checkbox, Toggle, menu checkbox items",[594,608,609],{},[221,610,611],{},"toggle",[579,613,614,617],{},[594,615,616],{},"Radio group items, Toggle group items, Tabs triggers",[594,618,619],{},[221,620,621],{},"select",[579,623,624,627],{},[594,625,626],{},"Select, Dropdown menu, Context menu, Combobox and Command items",[594,628,629,631],{},[221,630,621],{}," (Command items subtle)",[579,633,634,637],{},[594,635,636],{},"Select trigger, Dropdown menu trigger, submenu triggers, Combobox trigger",[594,638,639,642],{},[221,640,641],{},"open",", subtle",[579,644,645,648],{},[594,646,647],{},"Popover, Accordion and Collapsible triggers",[594,649,650,652,653,642],{},[221,651,641],{}," \u002F ",[221,654,655],{},"close",[579,657,658,661],{},[594,659,660],{},"Dialog, Alert dialog, Sheet, Drawer triggers",[594,662,663],{},[221,664,641],{},[579,666,667,670],{},[594,668,669],{},"Dialog, Sheet, Drawer close buttons, Alert dialog cancel",[594,671,672],{},[221,673,655],{},[579,675,676,679],{},[594,677,678],{},"Number field steppers",[594,680,681,642],{},[221,682,621],{},[579,684,685,688],{},[594,686,687],{},"Input, Textarea, Input OTP, Combobox input",[594,689,690,693],{},[221,691,692],{},"type"," (never on password fields)",[579,695,696,698],{},[594,697,114],{},[594,699,700,701,704,705,704,708,704,711,714,715,718],{},"the toast's outcome, subtle: ",[221,702,703],{},"success",", ",[221,706,707],{},"error",[221,709,710],{},"warning",[221,712,713],{},"loading",", and ",[221,716,717],{},"ready"," for info and plain toasts",[193,720,721,722,724,725,728,729,732,733,736],{},"The map lives in ",[221,723,223],{}," as ",[221,726,727],{},"GOOP_SOUND_CUES"," (and ",[221,730,731],{},"GOOP_TOAST_CUES"," for toasts), so every framework adapter plays the same cues. To play an outcome yourself, use ",[221,734,735],{},"playCue",". It does nothing while sound is off:",[226,738,740],{"className":376,"code":739,"language":378,"meta":231,"style":231},"import { playCue } from '@goopui\u002Fcore'\n\nplayCue('success', { emphasis: 'subtle' })\n",[221,741,742,753,757],{"__ignoreMap":231},[235,743,744,746,749,751],{"class":237,"line":238},[235,745,510],{"class":391},[235,747,748],{"class":275}," { playCue } ",[235,750,516],{"class":391},[235,752,519],{"class":245},[235,754,755],{"class":237,"line":294},[235,756,525],{"emptyLinePlaceholder":524},[235,758,759,761,763,766,769,772],{"class":237,"line":341},[235,760,735],{"class":241},[235,762,476],{"class":275},[235,764,765],{"class":245},"'success'",[235,767,768],{"class":275},", { emphasis: ",[235,770,771],{"class":245},"'subtle'",[235,773,459],{"class":275},[213,775,777],{"id":776},"sound-is-not-motion","Sound is not motion",[193,779,780,783],{},[221,781,782],{},"prefers-reduced-motion"," doesn't change sound, and turning sound off doesn't change the goo. Someone who turns off animation may still want sound, so each one has its own switch.",[785,786,787],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":231,"searchDepth":341,"depth":341,"links":789},[790,791,792,793,794],{"id":215,"depth":294,"text":216},{"id":255,"depth":294,"text":256},{"id":494,"depth":294,"text":495},{"id":567,"depth":294,"text":568},{"id":776,"depth":294,"text":777},"Opt-in interaction sounds from Cuelume. Off by default, one prop per component or one switch for the whole app.","md",{},{"title":27,"description":795},"GGuvKsuzRMzKRvmWvvH4tGUa5fs920HzcCuFgW5Vpmo",[801,803],{"title":23,"path":24,"stem":25,"description":802,"children":-1},"The goo is decoration, so it stays out of the way of assistive tech. Reduced motion keeps the goo shape and turns the motion off.",{"title":37,"path":38,"stem":39,"description":804,"children":-1},"shadcn's Button with goo. Hover to drip, press to squish, tap for a single drip.",1793670387392]