diff --git a/.gitignore b/.gitignore index 2e243330..92e2b0e5 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,3 @@ target/* src/**/*.md node_modules - diff --git a/Scarb.lock b/Scarb.lock index d6ab17ce..b1269310 100644 --- a/Scarb.lock +++ b/Scarb.lock @@ -266,6 +266,10 @@ name = "pragma_lib" version = "1.0.0" source = "git+https://github.com/astraly-labs/pragma-lib?tag=2.9.1#ee1f3f7e9276cf64e19e267832de380d84c04d28" +[[package]] +name = "sierra_ir" +version = "0.1.0" + [[package]] name = "simple_account" version = "0.1.0" diff --git a/listings/advanced-concepts/sierra_ir/.gitignore b/listings/advanced-concepts/sierra_ir/.gitignore new file mode 100644 index 00000000..eb5a316c --- /dev/null +++ b/listings/advanced-concepts/sierra_ir/.gitignore @@ -0,0 +1 @@ +target diff --git a/listings/advanced-concepts/sierra_ir/Scarb.toml b/listings/advanced-concepts/sierra_ir/Scarb.toml new file mode 100644 index 00000000..d6496a44 --- /dev/null +++ b/listings/advanced-concepts/sierra_ir/Scarb.toml @@ -0,0 +1,16 @@ +[package] +name = "sierra_ir" +version.workspace = true +edition.workspace = true + +[lib] +sierra-text = true + +[dependencies] +starknet.workspace = true + +[dev-dependencies] +cairo_test.workspace = true + +[scripts] +test.workspace = true diff --git a/listings/advanced-concepts/sierra_ir/simple_program.sierra b/listings/advanced-concepts/sierra_ir/simple_program.sierra new file mode 100644 index 00000000..e0447566 --- /dev/null +++ b/listings/advanced-concepts/sierra_ir/simple_program.sierra @@ -0,0 +1,10 @@ +type felt252 = felt252 [storable: true, drop: true, dup: true, zero_sized: false]; + +libfunc felt252_add = felt252_add; +libfunc store_temp = store_temp; + +felt252_add([0], [1]) -> ([2]); // 0 +store_temp([2]) -> ([2]); // 1 +return([2]); // 2 + +sierra_ir::add_numbers@0([0]: felt252, [1]: felt252) -> (felt252); diff --git a/listings/advanced-concepts/sierra_ir/src/lib.cairo b/listings/advanced-concepts/sierra_ir/src/lib.cairo new file mode 100644 index 00000000..6d68b7fd --- /dev/null +++ b/listings/advanced-concepts/sierra_ir/src/lib.cairo @@ -0,0 +1 @@ +mod simple_program; diff --git a/listings/advanced-concepts/sierra_ir/src/simple_program.cairo b/listings/advanced-concepts/sierra_ir/src/simple_program.cairo new file mode 100644 index 00000000..651b1472 --- /dev/null +++ b/listings/advanced-concepts/sierra_ir/src/simple_program.cairo @@ -0,0 +1,3 @@ +fn add_numbers(a: felt252, b: felt252) -> felt252 { + a + b +} diff --git a/listings/getting-started/variables/storage_variables.sierra b/listings/getting-started/variables/storage_variables.sierra new file mode 100644 index 00000000..6d1f6833 --- /dev/null +++ b/listings/getting-started/variables/storage_variables.sierra @@ -0,0 +1,323 @@ +type RangeCheck = RangeCheck [storable: true, drop: false, dup: false, zero_sized: false]; +type Const = Const [storable: false, drop: false, dup: false, zero_sized: false]; +type StorageBaseAddress = StorageBaseAddress [storable: true, drop: true, dup: true, zero_sized: false]; +type core::starknet::storage::StoragePointer0Offset:: = Struct [storable: true, drop: true, dup: true, zero_sized: false]; +type Const = Const [storable: false, drop: false, dup: false, zero_sized: false]; +type Const = Const [storable: false, drop: false, dup: false, zero_sized: false]; +type Array = Array [storable: true, drop: true, dup: false, zero_sized: false]; +type Snapshot> = Snapshot> [storable: true, drop: true, dup: true, zero_sized: false]; +type core::array::Span:: = Struct>> [storable: true, drop: true, dup: true, zero_sized: false]; +type Tuple> = Struct> [storable: true, drop: true, dup: true, zero_sized: false]; +type Const = Const [storable: false, drop: false, dup: false, zero_sized: false]; +type StorageAddress = StorageAddress [storable: true, drop: true, dup: true, zero_sized: false]; +type BuiltinCosts = BuiltinCosts [storable: true, drop: true, dup: true, zero_sized: false]; +type System = System [storable: true, drop: false, dup: false, zero_sized: false]; +type core::panics::Panic = Struct [storable: true, drop: true, dup: true, zero_sized: true]; +type Tuple> = Struct> [storable: true, drop: true, dup: false, zero_sized: false]; +type core::panics::PanicResult::<(core::array::Span::,)> = Enum>, Tuple>> [storable: true, drop: true, dup: false, zero_sized: false]; +type Const = Const [storable: false, drop: false, dup: false, zero_sized: false]; +type u32 = u32 [storable: true, drop: true, dup: true, zero_sized: false]; +type Unit = Struct [storable: true, drop: true, dup: true, zero_sized: true]; +type Box = Box [storable: true, drop: true, dup: true, zero_sized: false]; +type core::option::Option::> = Enum, Unit> [storable: true, drop: true, dup: true, zero_sized: false]; +type felt252 = felt252 [storable: true, drop: true, dup: true, zero_sized: false]; +type GasBuiltin = GasBuiltin [storable: true, drop: false, dup: false, zero_sized: false]; + +libfunc revoke_ap_tracking = revoke_ap_tracking; +libfunc withdraw_gas = withdraw_gas; +libfunc branch_align = branch_align; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc enable_ap_tracking = enable_ap_tracking; +libfunc store_temp = store_temp; +libfunc array_snapshot_pop_front = array_snapshot_pop_front; +libfunc enum_init>, 0> = enum_init>, 0>; +libfunc store_temp>> = store_temp>>; +libfunc store_temp>> = store_temp>>; +libfunc jump = jump; +libfunc struct_construct = struct_construct; +libfunc enum_init>, 1> = enum_init>, 1>; +libfunc enum_match>> = enum_match>>; +libfunc unbox = unbox; +libfunc rename = rename; +libfunc store_temp = store_temp; +libfunc u32_try_from_felt252 = u32_try_from_felt252; +libfunc disable_ap_tracking = disable_ap_tracking; +libfunc drop>> = drop>>; +libfunc drop> = drop>; +libfunc drop = drop; +libfunc array_new = array_new; +libfunc const_as_immediate> = const_as_immediate>; +libfunc array_append = array_append; +libfunc struct_construct = struct_construct; +libfunc struct_construct>> = struct_construct>>; +libfunc enum_init,)>, 1> = enum_init,)>, 1>; +libfunc store_temp = store_temp; +libfunc store_temp = store_temp; +libfunc store_temp,)>> = store_temp,)>>; +libfunc get_builtin_costs = get_builtin_costs; +libfunc store_temp = store_temp; +libfunc withdraw_gas_all = withdraw_gas_all; +libfunc storage_base_address_const<763158443913282032384596498131031794477249071826004797576159089783775391621> = storage_base_address_const<763158443913282032384596498131031794477249071826004797576159089783775391621>; +libfunc u32_to_felt252 = u32_to_felt252; +libfunc storage_address_from_base = storage_address_from_base; +libfunc const_as_immediate> = const_as_immediate>; +libfunc store_temp = store_temp; +libfunc store_temp = store_temp; +libfunc storage_write_syscall = storage_write_syscall; +libfunc snapshot_take> = snapshot_take>; +libfunc drop> = drop>; +libfunc struct_construct> = struct_construct>; +libfunc struct_construct>> = struct_construct>>; +libfunc enum_init,)>, 0> = enum_init,)>, 0>; +libfunc const_as_immediate> = const_as_immediate>; +libfunc drop = drop; +libfunc const_as_immediate> = const_as_immediate>; +libfunc drop> = drop>; +libfunc struct_construct> = struct_construct>; +libfunc snapshot_take> = snapshot_take>; +libfunc drop> = drop>; +libfunc struct_deconstruct> = struct_deconstruct>; +libfunc rename = rename; +libfunc storage_read_syscall = storage_read_syscall; +libfunc const_as_immediate> = const_as_immediate>; +libfunc store_temp> = store_temp>; + +revoke_ap_tracking() -> (); // 0 +withdraw_gas([0], [1]) { fallthrough([4], [5]) 114([6], [7]) }; // 1 +branch_align() -> (); // 2 +struct_deconstruct>([3]) -> ([8]); // 3 +enable_ap_tracking() -> (); // 4 +store_temp([4]) -> ([4]); // 5 +array_snapshot_pop_front([8]) { fallthrough([9], [10]) 12([11]) }; // 6 +branch_align() -> (); // 7 +enum_init>, 0>([10]) -> ([12]); // 8 +store_temp>>([9]) -> ([13]); // 9 +store_temp>>([12]) -> ([14]); // 10 +jump() { 17() }; // 11 +branch_align() -> (); // 12 +struct_construct() -> ([15]); // 13 +enum_init>, 1>([15]) -> ([16]); // 14 +store_temp>>([11]) -> ([13]); // 15 +store_temp>>([16]) -> ([14]); // 16 +enum_match>>([14]) { fallthrough([17]) 97([18]) }; // 17 +branch_align() -> (); // 18 +unbox([17]) -> ([19]); // 19 +rename([19]) -> ([20]); // 20 +store_temp([20]) -> ([20]); // 21 +u32_try_from_felt252([4], [20]) { fallthrough([21], [22]) 93([23]) }; // 22 +branch_align() -> (); // 23 +store_temp([21]) -> ([21]); // 24 +array_snapshot_pop_front([13]) { fallthrough([24], [25]) 43([26]) }; // 25 +branch_align() -> (); // 26 +disable_ap_tracking() -> (); // 27 +drop>>([24]) -> (); // 28 +drop>([25]) -> (); // 29 +drop([22]) -> (); // 30 +array_new() -> ([27]); // 31 +const_as_immediate>() -> ([28]); // 32 +store_temp([28]) -> ([28]); // 33 +array_append([27], [28]) -> ([29]); // 34 +struct_construct() -> ([30]); // 35 +struct_construct>>([30], [29]) -> ([31]); // 36 +enum_init,)>, 1>([31]) -> ([32]); // 37 +store_temp([21]) -> ([21]); // 38 +store_temp([5]) -> ([5]); // 39 +store_temp([2]) -> ([2]); // 40 +store_temp,)>>([32]) -> ([32]); // 41 +return([21], [5], [2], [32]); // 42 +branch_align() -> (); // 43 +disable_ap_tracking() -> (); // 44 +drop>>([26]) -> (); // 45 +get_builtin_costs() -> ([33]); // 46 +store_temp([33]) -> ([33]); // 47 +withdraw_gas_all([21], [5], [33]) { fallthrough([34], [35]) 79([36], [37]) }; // 48 +branch_align() -> (); // 49 +storage_base_address_const<763158443913282032384596498131031794477249071826004797576159089783775391621>() -> ([38]); // 50 +u32_to_felt252([22]) -> ([39]); // 51 +storage_address_from_base([38]) -> ([40]); // 52 +const_as_immediate>() -> ([41]); // 53 +store_temp([41]) -> ([41]); // 54 +store_temp([40]) -> ([40]); // 55 +store_temp([34]) -> ([34]); // 56 +storage_write_syscall([35], [2], [41], [40], [39]) { fallthrough([42], [43]) 70([44], [45], [46]) }; // 57 +branch_align() -> (); // 58 +array_new() -> ([47]); // 59 +snapshot_take>([47]) -> ([48], [49]); // 60 +drop>([48]) -> (); // 61 +struct_construct>([49]) -> ([50]); // 62 +struct_construct>>([50]) -> ([51]); // 63 +enum_init,)>, 0>([51]) -> ([52]); // 64 +store_temp([34]) -> ([34]); // 65 +store_temp([42]) -> ([42]); // 66 +store_temp([43]) -> ([43]); // 67 +store_temp,)>>([52]) -> ([52]); // 68 +return([34], [42], [43], [52]); // 69 +branch_align() -> (); // 70 +struct_construct() -> ([53]); // 71 +struct_construct>>([53], [46]) -> ([54]); // 72 +enum_init,)>, 1>([54]) -> ([55]); // 73 +store_temp([34]) -> ([34]); // 74 +store_temp([44]) -> ([44]); // 75 +store_temp([45]) -> ([45]); // 76 +store_temp,)>>([55]) -> ([55]); // 77 +return([34], [44], [45], [55]); // 78 +branch_align() -> (); // 79 +drop([22]) -> (); // 80 +array_new() -> ([56]); // 81 +const_as_immediate>() -> ([57]); // 82 +store_temp([57]) -> ([57]); // 83 +array_append([56], [57]) -> ([58]); // 84 +struct_construct() -> ([59]); // 85 +struct_construct>>([59], [58]) -> ([60]); // 86 +enum_init,)>, 1>([60]) -> ([61]); // 87 +store_temp([36]) -> ([36]); // 88 +store_temp([37]) -> ([37]); // 89 +store_temp([2]) -> ([2]); // 90 +store_temp,)>>([61]) -> ([61]); // 91 +return([36], [37], [2], [61]); // 92 +branch_align() -> (); // 93 +drop>>([13]) -> (); // 94 +store_temp([23]) -> ([62]); // 95 +jump() { 101() }; // 96 +branch_align() -> (); // 97 +drop([18]) -> (); // 98 +drop>>([13]) -> (); // 99 +store_temp([4]) -> ([62]); // 100 +disable_ap_tracking() -> (); // 101 +array_new() -> ([63]); // 102 +const_as_immediate>() -> ([64]); // 103 +store_temp([64]) -> ([64]); // 104 +array_append([63], [64]) -> ([65]); // 105 +struct_construct() -> ([66]); // 106 +struct_construct>>([66], [65]) -> ([67]); // 107 +enum_init,)>, 1>([67]) -> ([68]); // 108 +store_temp([62]) -> ([62]); // 109 +store_temp([5]) -> ([5]); // 110 +store_temp([2]) -> ([2]); // 111 +store_temp,)>>([68]) -> ([68]); // 112 +return([62], [5], [2], [68]); // 113 +branch_align() -> (); // 114 +drop>([3]) -> (); // 115 +array_new() -> ([69]); // 116 +const_as_immediate>() -> ([70]); // 117 +store_temp([70]) -> ([70]); // 118 +array_append([69], [70]) -> ([71]); // 119 +struct_construct() -> ([72]); // 120 +struct_construct>>([72], [71]) -> ([73]); // 121 +enum_init,)>, 1>([73]) -> ([74]); // 122 +store_temp([6]) -> ([6]); // 123 +store_temp([7]) -> ([7]); // 124 +store_temp([2]) -> ([2]); // 125 +store_temp,)>>([74]) -> ([74]); // 126 +return([6], [7], [2], [74]); // 127 +revoke_ap_tracking() -> (); // 128 +withdraw_gas([0], [1]) { fallthrough([4], [5]) 222([6], [7]) }; // 129 +branch_align() -> (); // 130 +struct_deconstruct>([3]) -> ([8]); // 131 +store_temp([4]) -> ([4]); // 132 +array_snapshot_pop_front([8]) { fallthrough([9], [10]) 149([11]) }; // 133 +branch_align() -> (); // 134 +drop>>([9]) -> (); // 135 +drop>([10]) -> (); // 136 +array_new() -> ([12]); // 137 +const_as_immediate>() -> ([13]); // 138 +store_temp([13]) -> ([13]); // 139 +array_append([12], [13]) -> ([14]); // 140 +struct_construct() -> ([15]); // 141 +struct_construct>>([15], [14]) -> ([16]); // 142 +enum_init,)>, 1>([16]) -> ([17]); // 143 +store_temp([4]) -> ([4]); // 144 +store_temp([5]) -> ([5]); // 145 +store_temp([2]) -> ([2]); // 146 +store_temp,)>>([17]) -> ([17]); // 147 +return([4], [5], [2], [17]); // 148 +branch_align() -> (); // 149 +drop>>([11]) -> (); // 150 +get_builtin_costs() -> ([18]); // 151 +store_temp([18]) -> ([18]); // 152 +withdraw_gas_all([4], [5], [18]) { fallthrough([19], [20]) 209([21], [22]) }; // 153 +branch_align() -> (); // 154 +storage_base_address_const<763158443913282032384596498131031794477249071826004797576159089783775391621>() -> ([23]); // 155 +struct_construct>([23]) -> ([24]); // 156 +snapshot_take>([24]) -> ([25], [26]); // 157 +drop>([25]) -> (); // 158 +struct_deconstruct>([26]) -> ([27]); // 159 +rename([27]) -> ([28]); // 160 +storage_address_from_base([28]) -> ([29]); // 161 +const_as_immediate>() -> ([30]); // 162 +store_temp([30]) -> ([30]); // 163 +store_temp([29]) -> ([29]); // 164 +store_temp([19]) -> ([19]); // 165 +storage_read_syscall([20], [2], [30], [29]) { fallthrough([31], [32], [33]) 196([34], [35], [36]) }; // 166 +branch_align() -> (); // 167 +store_temp([33]) -> ([33]); // 168 +store_temp([31]) -> ([31]); // 169 +store_temp([32]) -> ([32]); // 170 +u32_try_from_felt252([19], [33]) { fallthrough([37], [38]) 186([39]) }; // 171 +branch_align() -> (); // 172 +array_new() -> ([40]); // 173 +u32_to_felt252([38]) -> ([41]); // 174 +array_append([40], [41]) -> ([42]); // 175 +snapshot_take>([42]) -> ([43], [44]); // 176 +drop>([43]) -> (); // 177 +struct_construct>([44]) -> ([45]); // 178 +struct_construct>>([45]) -> ([46]); // 179 +enum_init,)>, 0>([46]) -> ([47]); // 180 +store_temp([37]) -> ([37]); // 181 +store_temp([31]) -> ([31]); // 182 +store_temp([32]) -> ([32]); // 183 +store_temp,)>>([47]) -> ([47]); // 184 +return([37], [31], [32], [47]); // 185 +branch_align() -> (); // 186 +array_new() -> ([48]); // 187 +const_as_immediate>() -> ([49]); // 188 +store_temp([49]) -> ([49]); // 189 +array_append([48], [49]) -> ([50]); // 190 +store_temp([39]) -> ([51]); // 191 +store_temp([31]) -> ([52]); // 192 +store_temp([32]) -> ([53]); // 193 +store_temp>([50]) -> ([54]); // 194 +jump() { 201() }; // 195 +branch_align() -> (); // 196 +store_temp([19]) -> ([51]); // 197 +store_temp([34]) -> ([52]); // 198 +store_temp([35]) -> ([53]); // 199 +store_temp>([36]) -> ([54]); // 200 +struct_construct() -> ([55]); // 201 +struct_construct>>([55], [54]) -> ([56]); // 202 +enum_init,)>, 1>([56]) -> ([57]); // 203 +store_temp([51]) -> ([51]); // 204 +store_temp([52]) -> ([52]); // 205 +store_temp([53]) -> ([53]); // 206 +store_temp,)>>([57]) -> ([57]); // 207 +return([51], [52], [53], [57]); // 208 +branch_align() -> (); // 209 +array_new() -> ([58]); // 210 +const_as_immediate>() -> ([59]); // 211 +store_temp([59]) -> ([59]); // 212 +array_append([58], [59]) -> ([60]); // 213 +struct_construct() -> ([61]); // 214 +struct_construct>>([61], [60]) -> ([62]); // 215 +enum_init,)>, 1>([62]) -> ([63]); // 216 +store_temp([21]) -> ([21]); // 217 +store_temp([22]) -> ([22]); // 218 +store_temp([2]) -> ([2]); // 219 +store_temp,)>>([63]) -> ([63]); // 220 +return([21], [22], [2], [63]); // 221 +branch_align() -> (); // 222 +drop>([3]) -> (); // 223 +array_new() -> ([64]); // 224 +const_as_immediate>() -> ([65]); // 225 +store_temp([65]) -> ([65]); // 226 +array_append([64], [65]) -> ([66]); // 227 +struct_construct() -> ([67]); // 228 +struct_construct>>([67], [66]) -> ([68]); // 229 +enum_init,)>, 1>([68]) -> ([69]); // 230 +store_temp([6]) -> ([6]); // 231 +store_temp([7]) -> ([7]); // 232 +store_temp([2]) -> ([2]); // 233 +store_temp,)>>([69]) -> ([69]); // 234 +return([6], [7], [2], [69]); // 235 + +storage_variables::storage_variables::StorageVariablesExample::__wrapper__StorageVariablesExample__set@0([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: core::array::Span::) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); +storage_variables::storage_variables::StorageVariablesExample::__wrapper__StorageVariablesExample__get@128([0]: RangeCheck, [1]: GasBuiltin, [2]: System, [3]: core::array::Span::) -> (RangeCheck, GasBuiltin, System, core::panics::PanicResult::<(core::array::Span::,)>); diff --git a/pages/advanced-concepts/sierra_ir.md b/pages/advanced-concepts/sierra_ir.md new file mode 100644 index 00000000..737beafb --- /dev/null +++ b/pages/advanced-concepts/sierra_ir.md @@ -0,0 +1,169 @@ +# Understanding Sierra: From High-Level Cairo to Safe CASM + +Sierra (Safe Intermediate REpresentAtion) is a linear intermediate representation of Cairo instructions, designed to bridge the gap between high-level Cairo 1 intermdiate and low-level Cairo Assembly (CASM). +Sierra can be compiled to a subset of CASM, known as `Safe CASM{:md}`. + +Sierra ensures that programs are always **provable** by preventing the compilation of programs with infinite loops or invalid constraints. + +### From Cairo 1 to Sierra + +Before Starknet Alpha v0.11.0, developers wrote contracts in Cairo 0, which compiled directly to Cairo Assembly (CASM), and contract classes were submitted to the sequencer via `DECLARE` transactions. +This approach had risks, as the sequencer could not determine whether a given transaction would fail without executing it, and therefore could not charge fees for failed transactions. + +Cairo 1 introduced contract class compilation to this new Sierra intermediate representation instead of directly compiling to CASM. The Sierra code is then submitted to the sequencer, compiled down to CASM, and finally executed by the Starknet OS. +Using Sierra ensures that all transactions (including failed ones) are provable, and allows sequencers to charge fees for all submitted transactions, making DoS attacks significantly more expensive. + +### Compilation Pipeline + +``` + Cairo 1.0 Source (High-level) + | + | with Cairo-to-Sierra Compiler + V + Sierra IR (Safe, Provable Code) + | + | with Sierra-to-CASM Compiler (Run by Sequencer) + V + CASM (Cairo Assembly) + | + | with CairoVM Execution + V + STARK Proofs (Proof Generation) +``` + +At its core, Sierra's compilation process is focused on safety and efficiency. +Cairo 1 uses a linear type system and a non-deterministic, immutable, contiguous memory model, which guarantees that dereferencing never fails. + +Sierra transforms loops into recursion and keeps track of gas usage, which prevents infinite loops. + +:::note +If you're interested in really understanding how the compilation works under the hood, check out the [cairo-compiler-workshop](https://github.com/software-mansion-labs/cairo-compiler-workshop). +::: + +### Anatomy of a Sierra Program + +### Type Declarations + +Sierra, as a Cairo representation, also uses a **linear type system**, where each value **must be used exactly once**. +During the compilation, a unique identifier is assigned to each type. + +When types can safely be used multiple times, they need to be duplicated using the `dup` instruction, which will assign two new identifiers to preserve linearity. + +Type declaration is done with the following syntax: + +```cairo +type type_id = concrete_type; +``` + +:::info +In addition, each type has a set of attributes that describe how it can be used: + +- storable +- droppable +- duplicatable +- zero_sized + +They are added in the type declaration: + +```cairo +type type_id = concrete_type [storable: bool, drop: bool, dup: bool, zero_sized: bool] +``` + +::: + +### Library Function Declarations + +Sierra comes with a set of built-in functions (`libfuncs`) that represent the call to low-level units of code known to be safe. After type declarations, a Sierra program must define all the libfuncs used in the program along with their expected input types. + +Libfunc declaration is done with the following syntax: + +```cairo +libfunc libfunc_id = libfunc_name; +``` + +:::note +While this section is generic, Starknet uses an allowed [list](https://github.com/starkware-libs/cairo/tree/main/crates/cairo-lang-starknet-classes/src/allowed_libfuncs_lists) of libfuncs. +::: + +### Statements + +This section shows the sequence of operations that occur during execution, describing the actual logic of the program. A statement either invokes a libfunc or returns a value. + +Statements are declared with the following syntax: + +```cairo +libfunc_id(input_variables) -> (output_variables); +``` + +To return a value, we use the `return(variable_id)` statement. + +### User Defined Functions Declarations + +At the end of a Sierra program, each user-defined function is declared with a unique identifier and the statement index where the function starts. This provides information about the function, such as its signature, while the implementation is defined in the statements section. + +An user defined function is declared with the following syntax: + +```cairo +function_id@statement_index(parameters: types) -> (return_types); +``` + +## Simple Sierra Program Breakdown + +Let's go through the following Cairo program: + +```cairo +// [!include ~/listings/advanced-concepts/sierra_ir/src/simple_program.cairo] +``` + +It compiles to the following Sierra code: + +```cairo +// [!include ~/listings/advanced-concepts/sierra_ir/simple_program.sierra] +``` + +Type Declarations: + +- `felt252`: Represents the field element type + +Libfunc Declarations: + +- `felt252_add`: Performs addition on field elements +- `store_temp`: Temporarily stores the result + +Statements Section: + +- Statement 0: calls the `felt252_add` libfunc to add the values from memory cells 0 and 1, storing the result in memory cell 2 +- Statement 1: calls the `store_temp` libfunc to prepare the result for the return statement +- Statement 2: returns the value from memory cell 2 + +User Defined Functions: + +- `add_numbers`: Takes two `felt252` types in memory cells 0 and 1 and returns a `felt252` value by starting at statement 0 + +:::info +To enable Sierra code generation in a human-readable format, add the `sierra-text` flag to the library target in your `Scarb.toml{:md}` file: + +```toml +[lib] +sierra-text = true +``` + +::: + +### Storage Variables Smart Contract Sierra Code + +You can find a more complex example of the [compiled Sierra code](/advanced-concepts/sierra_ir_storage_contract) of the [Storage Variables Example](/getting-started/basics/variables#storage-variables). + +## Further Reading + +- [Under the hood of Cairo 1.0: Exploring Sierra](https://www.nethermind.io/blog/under-the-hood-of-cairo-1-0-exploring-sierra-part-1) + +- [Under the hood of Cairo 2.0: Exploring Sierra](https://www.nethermind.io/blog/under-the-hood-of-cairo-1-0-exploring-sierra-part-2) + +- [Under the hood of Cairo 1.0: Exploring Sierra](https://www.nethermind.io/blog/under-the-hood-of-cairo-1-0-exploring-sierra-part-3) + +- [Cairo and Sierra](https://docs.starknet.io/architecture-and-concepts/smart-contracts/cairo-and-sierra/) + +- [Sierra - Deep Dive](https://www.starknet.io/blog/sierra-deep-dive-video/) + +- [Cairo and MLIR](https://blog.lambdaclass.com/cairo-and-mlir/) diff --git a/pages/advanced-concepts/sierra_ir_storage_contract.md b/pages/advanced-concepts/sierra_ir_storage_contract.md new file mode 100644 index 00000000..b73a43fd --- /dev/null +++ b/pages/advanced-concepts/sierra_ir_storage_contract.md @@ -0,0 +1,3 @@ +```cairo +// [!include ~/listings/getting-started/variables/storage_variables.sierra] +``` \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a7ddb27..06575621 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,7 +23,7 @@ importers: dependencies: '@types/react': specifier: latest - version: 19.0.8 + version: 19.0.9 react: specifier: ^19.0.0 version: 19.0.0 @@ -41,11 +41,11 @@ importers: version: 5.7.3 vocs: specifier: 1.0.0-alpha.62 - version: 1.0.0-alpha.62(patch_hash=472ea4771ea28176fd7a35b8f83fe164ce160c07b9b50111ae749eb8da92176d)(@types/node@22.13.1)(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(acorn@8.14.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.34.6)(typescript@5.7.3) + version: 1.0.0-alpha.62(patch_hash=472ea4771ea28176fd7a35b8f83fe164ce160c07b9b50111ae749eb8da92176d)(@types/node@22.13.1)(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(acorn@8.14.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.34.6)(typescript@5.7.3) devDependencies: '@types/react-dom': specifier: ^18.3.1 - version: 18.3.5(@types/react@19.0.8) + version: 18.3.5(@types/react@19.0.9) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.5.1) @@ -1059,8 +1059,8 @@ packages: peerDependencies: '@types/react': ^18.0.0 - '@types/react@19.0.8': - resolution: {integrity: sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==} + '@types/react@19.0.9': + resolution: {integrity: sha512-FedNTYgmMwSZmD1Sru/W1gJKuiYCN/3SuBkmZkcxX+FpO5zL76B22A9YNfAKg4HQO3Neh/30AiynP6BELdU0qQ==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -3058,10 +3058,10 @@ snapshots: - acorn - supports-color - '@mdx-js/react@3.1.0(@types/react@19.0.8)(react@19.0.0)': + '@mdx-js/react@3.1.0(@types/react@19.0.9)(react@19.0.0)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.0.8 + '@types/react': 19.0.9 react: 19.0.0 '@mdx-js/rollup@3.1.0(acorn@8.14.0)(rollup@4.34.6)': @@ -3096,336 +3096,336 @@ snapshots: '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-accordion@1.2.3(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-accordion@1.2.3(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collapsible': 1.1.3(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-collapsible': 1.1.3(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-slot': 1.1.2(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.2(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.9)(react@19.0.0)': dependencies: react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-context@1.1.1(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-context@1.1.1(@types/react@19.0.9)(react@19.0.0)': dependencies: react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-slot': 1.1.2(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.2(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.9)(react@19.0.0) aria-hidden: 1.2.4 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - react-remove-scroll: 2.6.3(@types/react@19.0.8)(react@19.0.0) + react-remove-scroll: 2.6.3(@types/react@19.0.9)(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-direction@1.1.0(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-direction@1.1.0(@types/react@19.0.9)(react@19.0.0)': dependencies: react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-focus-guards@1.1.1(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.0.9)(react@19.0.0)': dependencies: react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) '@radix-ui/react-icons@1.3.2(react@19.0.0)': dependencies: react: 19.0.0 - '@radix-ui/react-id@1.1.0(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-id@1.1.0(@types/react@19.0.9)(react@19.0.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-label@2.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-label@2.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-navigation-menu@1.2.5(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-navigation-menu@1.2.5(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-slot': 1.1.2(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.1.2(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.9)(react@19.0.0) aria-hidden: 1.2.4 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - react-remove-scroll: 2.6.3(@types/react@19.0.8)(react@19.0.0) + react-remove-scroll: 2.6.3(@types/react@19.0.9)(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-rect': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.9)(react@19.0.0) '@radix-ui/rect': 1.1.0 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-slot': 1.1.2(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-slot': 1.1.2(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-slot@1.1.2(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-slot@1.1.2(@types/react@19.0.9)(react@19.0.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-direction': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-id': 1.1.0(@types/react@19.0.8)(react@19.0.0) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-context': 1.1.1(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-direction': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-id': 1.1.0(@types/react@19.0.9)(react@19.0.0) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.9)(react@19.0.0)': dependencies: react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.0.9)(react@19.0.0)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.0.9)(react@19.0.0)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.9)(react@19.0.0)': dependencies: react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-use-previous@1.1.0(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-use-previous@1.1.0(@types/react@19.0.9)(react@19.0.0)': dependencies: react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-use-rect@1.1.0(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-use-rect@1.1.0(@types/react@19.0.9)(react@19.0.0)': dependencies: '@radix-ui/rect': 1.1.0 react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-use-size@1.1.0(@types/react@19.0.8)(react@19.0.0)': + '@radix-ui/react-use-size@1.1.0(@types/react@19.0.9)(react@19.0.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.8)(react@19.0.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.9)(react@19.0.0) react: 19.0.0 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 - '@types/react-dom': 18.3.5(@types/react@19.0.8) + '@types/react': 19.0.9 + '@types/react-dom': 18.3.5(@types/react@19.0.9) '@radix-ui/rect@1.1.0': {} @@ -3600,11 +3600,11 @@ snapshots: dependencies: undici-types: 6.20.0 - '@types/react-dom@18.3.5(@types/react@19.0.8)': + '@types/react-dom@18.3.5(@types/react@19.0.9)': dependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - '@types/react@19.0.8': + '@types/react@19.0.9': dependencies: csstype: 3.1.3 @@ -5177,24 +5177,24 @@ snapshots: react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.8(@types/react@19.0.8)(react@19.0.0): + react-remove-scroll-bar@2.3.8(@types/react@19.0.9)(react@19.0.0): dependencies: react: 19.0.0 - react-style-singleton: 2.2.3(@types/react@19.0.8)(react@19.0.0) + react-style-singleton: 2.2.3(@types/react@19.0.9)(react@19.0.0) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - react-remove-scroll@2.6.3(@types/react@19.0.8)(react@19.0.0): + react-remove-scroll@2.6.3(@types/react@19.0.9)(react@19.0.0): dependencies: react: 19.0.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.0.8)(react@19.0.0) - react-style-singleton: 2.2.3(@types/react@19.0.8)(react@19.0.0) + react-remove-scroll-bar: 2.3.8(@types/react@19.0.9)(react@19.0.0) + react-style-singleton: 2.2.3(@types/react@19.0.9)(react@19.0.0) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.0.8)(react@19.0.0) - use-sidecar: 1.1.3(@types/react@19.0.8)(react@19.0.0) + use-callback-ref: 1.3.3(@types/react@19.0.9)(react@19.0.0) + use-sidecar: 1.1.3(@types/react@19.0.9)(react@19.0.0) optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 react-router-dom@6.29.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: @@ -5212,13 +5212,13 @@ snapshots: dependencies: react: 19.0.0 - react-style-singleton@2.2.3(@types/react@19.0.8)(react@19.0.0): + react-style-singleton@2.2.3(@types/react@19.0.9)(react@19.0.0): dependencies: get-nonce: 1.0.1 react: 19.0.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 react@19.0.0: {} @@ -5704,20 +5704,20 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - use-callback-ref@1.3.3(@types/react@19.0.8)(react@19.0.0): + use-callback-ref@1.3.3(@types/react@19.0.9)(react@19.0.0): dependencies: react: 19.0.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 - use-sidecar@1.1.3(@types/react@19.0.8)(react@19.0.0): + use-sidecar@1.1.3(@types/react@19.0.9)(react@19.0.0): dependencies: detect-node-es: 1.1.0 react: 19.0.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.0.8 + '@types/react': 19.0.9 util-deprecate@1.0.2: {} @@ -5777,21 +5777,21 @@ snapshots: '@types/node': 22.13.1 fsevents: 2.3.3 - vocs@1.0.0-alpha.62(patch_hash=472ea4771ea28176fd7a35b8f83fe164ce160c07b9b50111ae749eb8da92176d)(@types/node@22.13.1)(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(acorn@8.14.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.34.6)(typescript@5.7.3): + vocs@1.0.0-alpha.62(patch_hash=472ea4771ea28176fd7a35b8f83fe164ce160c07b9b50111ae749eb8da92176d)(@types/node@22.13.1)(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(acorn@8.14.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.34.6)(typescript@5.7.3): dependencies: '@floating-ui/react': 0.26.28(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@hono/node-server': 1.13.8(hono@3.12.12) - '@mdx-js/react': 3.1.0(@types/react@19.0.8)(react@19.0.0) + '@mdx-js/react': 3.1.0(@types/react@19.0.9)(react@19.0.0) '@mdx-js/rollup': 3.1.0(acorn@8.14.0)(rollup@4.34.6) '@noble/hashes': 1.7.1 '@radix-ui/colors': 3.0.0 - '@radix-ui/react-accordion': 1.2.3(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-dialog': 1.1.6(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-accordion': 1.2.3(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-dialog': 1.1.6(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-icons': 1.3.2(react@19.0.0) - '@radix-ui/react-label': 2.1.2(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-navigation-menu': 1.2.5(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-popover': 1.1.6(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-tabs': 1.1.3(@types/react-dom@18.3.5(@types/react@19.0.8))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-label': 2.1.2(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-navigation-menu': 1.2.5(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-popover': 1.1.6(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-tabs': 1.1.3(@types/react-dom@18.3.5(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@shikijs/rehype': 1.23.1 '@shikijs/transformers': 1.23.1 '@shikijs/twoslash': 1.23.1(typescript@5.7.3) diff --git a/routes.ts b/routes.ts index cefeec7e..40940f03 100644 --- a/routes.ts +++ b/routes.ts @@ -216,6 +216,10 @@ const config: Sidebar = [ text: "Signature Verification", link: "/advanced-concepts/signature_verification", }, + { + text: "Sierra IR", + link: "/advanced-concepts/sierra_ir", + } ], }, {