1"use strict";(globalThis.webpackChunkdocutest=globalThis.webpackChunkdocutest||[]).push([[2892],{36192(e,n,r){r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>g,frontMatter:()=>c,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"kb/scanastudio-sdk/reference/ref-triggers","title":"Triggers","description":"A trigger says what arms the capture. Build one with the Trigger helpers and","source":"@site/docs/kb/scanastudio-sdk/reference/004triggers.md","sourceDirName":"kb/scanastudio-sdk/reference","slug":"/kb/scanastudio-sdk/reference/ref-triggers","permalink":"/kb/scanastudio-sdk/reference/ref-triggers","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"id":"ref-triggers","title":"Triggers","sidebar_position":4},"sidebar":"docs_scanastudio_sdk","previous":{"title":"Capture","permalink":"/kb/scanastudio-sdk/reference/ref-capture"},"next":{"title":"Reading captured data","permalink":"/kb/scanastudio-sdk/reference/ref-data"}}');var i=r(74848),t=r(28453),l=r(4865),a=r(19365);const c={id:"ref-triggers",title:"Triggers",sidebar_position:4},d="Triggers",o={},h=[{value:"immediate",id:"immediate",level:2},{value:"rising and falling",id:"rising-and-falling",level:2},{value:"logic",id:"logic",level:2},{value:"pulse",id:"pulse",level:2},{value:"steps",id:"steps",level:2},{value:"external",id:"external",level:2},{value:"sequence",id:"sequence",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"triggers",children:"Triggers"})}),"\n",(0,i.jsxs)(n.p,{children:["A trigger says what arms the capture. Build one with the ",(0,i.jsx)(n.code,{children:"Trigger"})," helpers and\nhand it to ",(0,i.jsxs)(n.a,{href:"/kb/scanastudio-sdk/reference/ref-capture",children:[(0,i.jsx)(n.code,{children:"capture.start()"})," or ",(0,i.jsx)(n.code,{children:"capture.run()"})]}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Every builder takes the same two extras:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Extra"}),(0,i.jsx)(n.th,{children:"Meaning"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"position"})}),(0,i.jsxs)(n.td,{children:["The share of the acquisition kept ",(0,i.jsx)(n.strong,{children:"before"})," the trigger, ",(0,i.jsx)(n.code,{children:"0.0"})," to ",(0,i.jsx)(n.code,{children:"0.9"}),". ",(0,i.jsx)(n.code,{children:"0.1"})," keeps 10 % of history behind the event."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"mode"})}),(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"single"})," captures once and stops. ",(0,i.jsx)(n.code,{children:"normal"})," re-arms after every trigger until you stop the capture."]})]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"immediate",children:"immediate"}),"\n",(0,i.jsx)(n.p,{children:"No trigger: sampling starts as soon as the device is armed."}),"\n","\n",(0,i.jsxs)(l.A,{groupId:"ss-lang",children:[(0,i.jsx)(a.A,{value:"py",label:"Python",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"from ikalogic_scanastudio import Trigger\n\nTrigger.immediate()\n"})})}),(0,i.jsx)(a.A,{value:"js",label:"NodeJS",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-javascript",children:"import { Trigger } from '@ikalogic/scanastudio';\n\nTrigger.immediate();\n"})})}),(0,i.jsx)(a.A,{value:"rust",label:"Rust",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-rust",children:"use scanastudio_client::Trigger;\n\nTrigger::immediate()\n"})})}),(0,i.jsx)(a.A,{value:"c",label:"C",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-c",children:'/* Leave `trigger` out of the request and sampling starts at once. */\nss_capture_run(workspace, "{\\"samples\\": 1000000, \\"sample_rate\\": 25000000}", 300.0);\n\n/* Or say so explicitly: */\nchar *trigger = ss_trigger_immediate();\n/* ... drop it into the request under "trigger", then ss_string_free(trigger); */\n'})})})]}),"\n",(0,i.jsx)(n.h2,{id:"rising-and-falling",children:"rising and falling"}),"\n",(0,i.jsx)(n.p,{children:"An edge on one channel."}),"\n",(0,i.jsxs)(l.A,{groupId:"ss-lang",children:[(0,i.jsx)(a.A,{value:"py",label:"Python",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'Trigger.rising(channel=0, position=0.1, mode="single")\nTrigger.falling(channel=3)\n'})})}),(0,i.jsx)(a.A,{value:"js",label:"NodeJS",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-javascript",children:"Trigger.rising(0, { position: 0.1, mode: '
1single' });\nTrigger.falling(3); // a high-to-low edge on channel 3\n"})})}),(0,i.jsx)(a.A,{value:"rust",label:"Rust",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-rust",children:"use scanastudio_client::{Trigger, TriggerExt, Mode};\n\nTrigger::rising(0).at(0.1).mode(Mode::Single)\nTrigger::falling(3) // a high-to-low edge on channel 3\n"})})}),(0,i.jsxs)(a.A,{value:"c",label:"C",children:[(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-c",children:'/* A falling edge on channel 3, keeping 10 % of the capture before it. */\nchar *trigger = ss_trigger_edge(3, "falling", 0.1, "single");\nchar request[256];\nsnprintf(request, sizeof request,\n "{\\"samples\\": %lld, \\"sample_rate\\": %llu, \\"trigger\\": %s}",\n (long long)samples, (unsigned long long)rate, trigger);\nss_string_free(trigger);\n\n/* Arm and wait in one call, or ss_capture_start to arm and return. */\nss_capture_run(workspace, request, 300.0);\n'})}),(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.mdxAdmonitionTitle,{children:["The ",(0,i.jsx)(n.code,{children:"ss_trigger_*"})," builders"]}),(0,i.jsxs)(n.p,{children:["Each one returns the ",(0,i.jsx)(n.code,{children:"trigger"})," object as JSON, to drop into the request that\n",(0,i.jsx)(n.code,{children:"ss_capture_run"})," and ",(0,i.jsx)(n.code,{children:"ss_capture_start"})," take. They are the C equivalent of the\n",(0,i.jsx)(n.code,{children:"Trigger"})," helpers in the other SDKs. Free the string with ",(0,i.jsx)(n.code,{children:"ss_string_free"})," once\nyou have built the request. ",(0,i.jsx)(n.code,{children:"position"})," is 0.0\u20130.9; ",(0,i.jsx)(n.code,{children:"mode"})," is ",(0,i.jsx)(n.code,{children:'"single"'})," or\n",(0,i.jsx)(n.code,{children:'"normal"'}),", and ",(0,i.jsx)(n.code,{children:"NULL"})," means ",(0,i.jsx)(n.code,{children:'"single"'}),"."]})]})]})]}),"\n",(0,i.jsx)(n.admonition,{title:"Rust uses a trait",type:"note",children:(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"position"})," and ",(0,i.jsx)(n.code,{children:"mode"})," are not arguments in Rust: they are ",(0,i.jsx)(n.code,{children:".at()"})," and ",(0,i.jsx)(n.code,{children:".mode()"}),"\nfrom the ",(0,i.jsx)(n.code,{children:"TriggerExt"})," trait, which must be in scope. ",(0,i.jsx)(n.code,{children:".at()"})," clamps to 0.0\u20130.9;\nthe other SDKs raise instead."]})}),"\n",(0,i.jsx)(n.h2,{id:"logic",children:"logic"}),"\n",(0,i.jsx)(n.p,{children:"Fires on any logic change across a set of channels: a bus transaction starting,\nrather than one wire moving."}),"\n",(0,i.jsxs)(l.A,{groupId:"ss-lang",children:[(0,i.jsx)(a.A,{value:"py",label:"Python",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"Trigger.logic([0, 1, 2, 3], position=0.2)\n"})})}),(0,i.jsx)(a.A,{value:"js",label:"NodeJS",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-javascript",children:"// Any logic change across these four channels.\nTrigger.logic([0, 1, 2, 3], { position: 0.2 });\n"})})}),(0,i.jsx)(a.A,{value:"rust",label:"Rust",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-rust",children:"// Any logic change across these four channels.\nTrigger::logic([0u16, 1, 2, 3]).at(0.2)\n"})})}),(0,i.jsx)(a.A,{value:"c",label:"C",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-c",children:"/* Any logic change across these four channels. */\nuint16_t channels[] = { 0, 1, 2, 3 };\nchar *trigger = ss_trigger_logic(channels, 4, 0.2, NULL);\n/* ... build the request, then ss_string_free(trigger); */\n"})})})]}),"\n",(0,i.jsx)(n.h2,{id:"pulse",children:"pulse"}),"\n",(0,i.jsxs)(n.p,{children:["A pulse on one channel, optionally bounded in width. This is how you catch a\nglitch: ask for a pulse ",(0,i.jsx)(n.em,{children:"shorter"})," than anything legitimate."]}),"\n",(0,i.jsxs)(l.A,{groupId:"ss-lang",children:[(0,i.jsx)(a.A,{value:"py",label:"Python",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'# A high pulse (0-1-0) shorter than 50 ns \u2014 a runt.\nTrigger.pulse(channel=2, polarity="high", max_width=50e-9, position=0.5)\n\n# A low pulse (1-0-1) at least 1 ms long \u2014 a bus held down.\nTrigger.pulse(channel=2, polarity="low", min_width=1e-3)\n'})})}),(0,i.jsx)(a.A,{value:"js",label:"NodeJS",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-javascript",children:"// A high pulse (0-1-0) shorter than 50 ns \u2014 a runt.\nTrigger.pulse(2, { polarity: 'high', max_width: 50e-9, position: 0.5 });\n\n// A low pulse (1-0-1) at least 1 ms long \u2014 a bus held down.\nTrigger.pulse(2, { polarity: 'low', min_width: 1e-3 });\n"})})}),(0,i.jsx)(a.A,{value:"rust",label:"Rust",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-rust",children:'// A high pulse (0-1-0) shorter than 50 ns \u2014 a runt.\nTrigger::pulse(2, "high", None, Some(50e-9)).at(0.5)\n\n// A low pulse (1-0-1) at least 1 ms long \u2014 a bus held down.\nTrigger::pulse(2, "low", Some(1e-3), None)\n'})})}),(0,i.jsx)(a.A,{value:"c",label:"C",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-c",children:'/* A high pulse (0-1-0) shorter than 50 ns \u2014 a runt.\n A negative width leaves that end unconstrained. */\nchar *runt = ss_trigger_pulse(2, "high", -1.0, 50e-9, 0.5, NULL);\n\n/* A low pulse (1-0-1) at least 1 ms long \u2014 a bus held down. */\nchar *stuck = ss_trigger_pulse(2, "low", 1e-3, -1.0, 0.0, NULL);\n'})})})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Parameters:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"polarity"})," \u2014 ",(0,i.jsx)(n.code,{children:"high"})," for a 0\u20111\u20110 pulse, ",(0,i.jsx)(n.code,{children:"low"})," for 1\u20110\u20111."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"min_width"}),", ",(0,i.jsx)(n.code,{children:"max_width"})," \u2014 in ",(0,i.jsx)(n.strong,{children:"seconds"}),". Leaving one out leaves that side\nunconstrained."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"steps",children:"steps"}),"\n",(0,i.jsx)(n.p,{children:"A multi-step pattern: a sequence of per-channel cells, each with its own timing\nwindow. This is the most selective trigger the hardware offers."}),"\n",(0,i.jsx)(n.p,{children:"Each step is a list of cells, one per channel:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Cell"}),(0,i.jsx)(n.th,{children:"Meaning"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"x"})}),(0,i.jsx)(n.td,{children:"Ignore this channel."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"0"})," / ",(0,i.jsx)(n.code,{children:"1"})]}),(0,i.jsx)(n.td,{children:"The channel must be at this level."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:[(0,i.jsx)(n.code,{children:"r"})," / ",(0,i.jsx)(n.code,{children:"f"})]}),(0,i.jsx)(n.td,{children:"The channel must show this edge."})]})]})]}),"\n",(0,i.jsxs)(l.A,{groupId:"ss-lang",children:[(0,i.jsx)(a.A,{value:"py",label:"Python",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'from ikalogic_scanastudio import Trigger, step\n\n# A falling edge on ch0 while ch1 is high, then 1-10 us later ch0 rises again.\nTrigger.steps([\n step(["f", "1"]),\n step(["r", "x"], t_min=1e-6, t_max=10e-6),\n], position=0.3)\n'})})}),(0,i.jsx)(a.A,{value:"js",label:"NodeJS",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-javascript",children:"import { Trigger, step } from '@ikalogic/scanastudio';\n\n// A falling edge on ch0 while ch1 is high, then 1-10 us later ch0 rises again.\nTrigger.steps([\n step(['f', '1']),\n step(['r', 'x'], { t_min: 1e-6, t_max: 10e-6 }),\n], { position: 0.3 });\n"})})}),(0,i.jsx)(a.A,{value:"rust",label:"Rust",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-rust",children:'use scanastudio_client::{step, Trigger, TriggerExt};\n\n// A falling edge on ch0 while ch1 is high, then 1-10 us later ch0 rises again.\nTrigger::steps(vec![\n step(vec!["f".into(), "1".into()], None, None),\n step(vec!["r".into(), "x".into()], Some(1e-6), Some(10e-6)),\n]).at(0.3)\n'})})}),(0,i.jsxs)(a.A,{value:"c",label:"C",children:[(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-c",children:'/* A falling edge on ch0 while ch1 is high, then 1-10 us later ch0 rises. */\nchar *trigger = ss_trigger_steps(\n "[{\\"cells\\": [\\"f\\", \\"1\\"], \\"t_min\\": null, \\"t_max\\": null},"\n " {\\"cells\\": [\\"r\\", \\"x\\"], \\"t_min\\": 1e-6, \\"t_max\\": 10e-6}]",\n 0.3, NULL);\n'})}),(0,i.jsxs)(n.p,{children:["A cell is ",(0,i.jsx)(n.code,{children:'"x"'})," to ignore the channel, ",(0,i.jsx)(n.code,{children:'"0"'})," or ",(0,i.jsx)(n.code,{children:'"1"'})," to match a level, and\n",(0,i.jsx)(n.code,{children:'"r"'})," or ",(0,i.jsx)(n.code,{children:'"f"'})," to match an edge. The timings are in seconds."]})]})]}),"\n",(0,i.jsx)(n.h2,{id:"external",children:"external"}),"\n",(0,i.jsx)(n.p,{children:"The device's external trigger input, for arming off something outside the\nsignals you are watching."}),"\n",(0,i.jsxs)(l.A,{groupId:"ss-lang",children:[(0,i.jsx)(a.A,{value:"py",label:"Python",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'Trigger.external(edge="rising", impedance="100k", position=0.1)\n'})})}),(0,i.jsx)(a.A,{value:"js",label:"NodeJS",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-javascript",children:"// The device's external trigger input, not one of the signal channels.\nTrigger.external({ edge: 'rising', impedance: '100k', position: 0.1 });\n"})})}),(0,i.jsx)(a.A,{value:"rust",label:"Rust",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-rust",children:'// The device\'
1s external trigger input, not one of the signal channels.\nTrigger::external("rising", "100k").at(0.1)\n'})})}),(0,i.jsx)(a.A,{value:"c",label:"C",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-c",children:'/* The device\'s external trigger input, not one of the signal channels. */\nchar *trigger = ss_trigger_external("rising", "100k", 0.1, NULL);\n'})})})]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Parameters:"})," ",(0,i.jsx)(n.code,{children:"edge"})," is ",(0,i.jsx)(n.code,{children:"rising"})," or ",(0,i.jsx)(n.code,{children:"falling"}),"; ",(0,i.jsx)(n.code,{children:"impedance"})," is ",(0,i.jsx)(n.code,{children:"100k"})," for the\nhigh-impedance input or ",(0,i.jsx)(n.code,{children:"50ohm"})," for the terminated one. Python and NodeJS\ndefault it to ",(0,i.jsx)(n.code,{children:"100k"}),"; Rust and C take it as a required argument."]}),"\n",(0,i.jsx)(n.h2,{id:"sequence",children:"sequence"}),"\n",(0,i.jsx)(n.p,{children:"Combines two triggers into one condition."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Order"}),(0,i.jsx)(n.th,{children:"Fires when"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"a_then_b"})}),(0,i.jsx)(n.td,{children:"B, but only after A has happened."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"b_then_a"})}),(0,i.jsx)(n.td,{children:"A, but only after B has happened."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"a_or_b"})}),(0,i.jsx)(n.td,{children:"Either one."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"a_and_b"})}),(0,i.jsx)(n.td,{children:"Both, in any order."})]})]})]}),"\n",(0,i.jsxs)(l.A,{groupId:"ss-lang",children:[(0,i.jsx)(a.A,{value:"py",label:"Python",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'# A chip-select falling, then a clock edge.\nTrigger.sequence(\n Trigger.falling(channel=0),\n Trigger.rising(channel=1),\n order="a_then_b",\n position=0.2,\n)\n'})})}),(0,i.jsx)(a.A,{value:"js",label:"NodeJS",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-javascript",children:"// A chip-select falling, then a clock edge.\nTrigger.sequence(\n Trigger.falling(0),\n Trigger.rising(1),\n { order: 'a_then_b', position: 0.2 },\n);\n"})})}),(0,i.jsx)(a.A,{value:"rust",label:"Rust",children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-rust",children:'// A chip-select falling, then a clock edge.\nTrigger::sequence(Trigger::falling(0), Trigger::rising(1), "a_then_b").at(0.2)\n'})})}),(0,i.jsxs)(a.A,{value:"c",label:"C",children:[(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-c",children:'/* A chip-select falling, then a clock edge. The position comes from the first. */\nchar *cs = ss_trigger_edge(0, "falling", 0.2, NULL);\nchar *clock = ss_trigger_edge(1, "rising", 0.0, NULL);\nchar *both = ss_trigger_sequence(cs, clock, "a_then_b");\n\nss_string_free(cs);\nss_string_free(clock);\n/* ... build the request with `both`, then ss_string_free(both); */\n'})}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"order"})," is ",(0,i.jsx)(n.code,{children:'"a_or_b"'}),", ",(0,i.jsx)(n.code,{children:'"a_then_b"'}),", ",(0,i.jsx)(n.code,{children:'"b_then_a"'})," or ",(0,i.jsx)(n.code,{children:'"a_and_b"'}),"."]})]})]}),"\n",(0,i.jsx)(n.admonition,{title:"What the device supports",type:"caution",children:(0,i.jsxs)(n.p,{children:["Not every device offers every trigger. A definition the hardware cannot arm is\n",(0,i.jsx)(n.strong,{children:"refused"})," rather than silently downgraded: you get a ",(0,i.jsx)(n.code,{children:"Refused"})," error with the\nreason."]})})]})}function g(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},19365(e,n,r){r.d(n,{A:()=>c});r(96540);var s=r(34164),i=r(47751);const t="tabItem_Ymn6";var l=r(74848);function a({children:e,className:n,hidden:r}){return(0,l.jsx)("div",{role:"tabpanel",className:(0,s.A)(t,n),hidden:r,children:e})}function c({children:e,className:n,value:r}){const{selectedValue:s,lazy:t}=(0,i.uc)(),c=r===s;return!c&&t?null:(0,l.jsx)(a,{className:n,hidden:!c,children:e})}},4865(e,n,r){r.d(n,{A:()=>x});r(96540);
1var s=r(34164),i=r(17559),t=r(47751),l=r(23104),a=r(92303);const c="tabList__CuJ",d="tabItem_LNqP";var o=r(74848);function h({className:e}){const{selectedValue:n,selectValue:r,tabValues:i,block:a}=(0,t.uc)(),c=[],{blockElementScrollPositionUntilNextRender:h}=(0,l.a_)(),u=e=>{const s=e.currentTarget,t=c.indexOf(s),l=i[t].value;l!==n&&(h(s),r(l))},g=e=>{let n=null;switch(e.key){case"Enter":u(e);break;case"ArrowRight":{const r=c.indexOf(e.currentTarget)+1;n=c[r]??c[0];break}case"ArrowLeft":{const r=c.indexOf(e.currentTarget)-1;n=c[r]??c[c.length-1];break}}n?.focus()};return(0,o.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":a},e),children:i.map(({value:e,label:r,attributes:i})=>(0,o.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{c.push(e)},onKeyDown:g,onClick:u,...i,className:(0,s.A)("tabs__item",d,i?.className,{"tabs__item--active":n===e}),children:r??e},e))})}function u({children:e}){return(0,o.jsx)("div",{className:"margin-top--md",children:e})}function g({className:e,children:n}){return(0,o.jsxs)("div",{className:(0,s.A)(i.G.tabs.container,"tabs-container",c),children:[(0,o.jsx)(h,{className:e}),(0,o.jsx)(u,{children:n})]})}function x(e){const n=(0,a.A)(),r=(0,t.OC)(e);return(0,o.jsx)(t.O_,{value:r,children:(0,o.jsx)(g,{className:e.className,children:(0,t.vT)(e.children)})},String(n))}},47751(e,n,r){r.d(n,{OC:()=>x,O_:()=>m,uc:()=>j,vT:()=>
1o});var s=r(96540),i=r(56347),t=r(205),l=r(57485),a=r(70679),c=r(31682),d=r(74848);function o(e){return s.Children.toArray(e).filter(e=>"\n"!==e)}function h(e){const{values:n,children:r}=e;return(0,s.useMemo)(()=>{const e=n??function(e){return s.Children.toArray(e).flatMap(e=>{if(!e)return[];if((0,s.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return[e];const n="string"==typeof e.type?e.type:e.type.name;throw new Error(`Docusaurus error: Bad <Tabs> child <${n}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.\nIf you do not want to pass on a "value" prop to the direct children of <Tabs>, you can also pass an explicit <Tabs values={...}> prop.`)}).map(({props:{value:e,label:n,attributes:r,default:s}})=>({value:e,label:n,attributes:r,default:s}))}(r);return function(e){const n=(0,c.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>`'${e.value}'`).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e},[n,r])}function u({value:e,tabValues:n}){return n.some(n=>n.value===e)}function g({queryString:e=!1,groupId:n}){const r=(0,i.W6)(),t=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,l.aZ)(t),(0,s.useCallback)(e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace({...r.location,search:n.toString()})},[t,r])]}function x(e){const{defaultValue:n,queryString:r=!1,groupId:i}=e,l=h(e),[c,d]=(0,s.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!u({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const r=n.find(e=>e.default)??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:n,tabValues:l})),[o,x]=g({queryString:r,groupId:i}),[p,j]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[r,i]=(0,a.Dv)(n);return[r,(0,s.useCallback)(e=>{n&&i.set(e)},[n,i])]}({groupId:i}),m=(()=>{const e=o??p;return u({value:e,tabValues:l})?e:null})();(0,t.A)(()=>{m&&d(m)},[m]);return{selectedValue:c,selectValue:(0,s.useCallback)(e=>{if(!u({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);d(e),x(e),j(e)},[x,j,l]),tabValues:l,lazy:e.lazy??!1,block:e.block??!1}}const p=(0,s.createContext)(null);function j(){const e=s.useContext(p);if(!e)throw new Error("useTabsContext() must be used within a Tabs component");return e}function m(e){return(0,d.jsx)(p.Provider,{value:e.value,children:e.children})}},28453(e,n,r){r.d(n,{R:()=>l,x:()=>a});var s=r(96540);const i={},t=s.createContext(i);function l(e){const n=s.useContext(t);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.