1use js_sys::{Array, Function, Object};
2use wasm_bindgen::prelude::*;
3
4#[wasm_bindgen]
5extern "C" {
6
7 #[wasm_bindgen(extends = Object, js_name = d3)]
8 pub type D3;
9
10 #[wasm_bindgen(static_method_of=D3, js_class=d3, js_name = scaleTime)]
19 pub fn scale_time() -> ScaleTime;
20
21 #[wasm_bindgen(static_method_of=D3, js_class=d3, js_name = scaleLinear)]
22 pub fn scale_linear() -> ScaleLinear;
23
24 #[wasm_bindgen(static_method_of=D3, js_class=d3, js_name = area)]
25 pub fn area() -> Area;
26
27 #[wasm_bindgen(static_method_of=D3, js_class=d3, js_name = extent)]
28 pub fn extent(data: &Array, cb: Function) -> Array;
29}
30
31#[wasm_bindgen]
32extern "C" {
33 #[wasm_bindgen(extends = Function)]
34 pub type ScaleTime;
35
36 #[wasm_bindgen(method, js_name=range)]
37 pub fn range_impl(this: &ScaleTime, range: Array) -> ScaleTime;
38
39 #[wasm_bindgen(method, js_name=domain)]
40 pub fn set_domain_array(this: &ScaleTime, domain: Array) -> ScaleTime;
41
42 #[wasm_bindgen(method)]
43 pub fn ticks(this: &ScaleTime, count: u32) -> Array;
44
45 #[wasm_bindgen(method, js_name=tickFormat)]
46 pub fn tick_format(this: &ScaleTime) -> Function;
47
48 #[wasm_bindgen(method, js_name=clamp)]
49 pub fn set_clamp(this: &ScaleTime, clamp: bool);
50
51 }
55
56impl ScaleTime {
57 pub fn range(&self, range: [f32; 2]) -> &Self {
58 let range_value = Array::new();
59 range_value.push(&range[0].into());
60 range_value.push(&range[1].into());
61 self.range_impl(range_value);
62 self
63 }
64}
65
66#[wasm_bindgen]
67extern "C" {
68 #[wasm_bindgen(extends = Function)]
69 pub type ScaleLinear;
70
71 #[wasm_bindgen(method, js_name=range)]
72 pub fn range_impl(this: &ScaleLinear, range: Array) -> ScaleLinear;
73
74 #[wasm_bindgen(method, js_name=domain)]
75 pub fn set_domain_array(this: &ScaleLinear, domain: Array) -> ScaleLinear;
76
77 #[wasm_bindgen(method)]
78 pub fn ticks(this: &ScaleLinear, count: u32) -> Array;
79
80 #[wasm_bindgen(method, js_name=tickFormat)]
81 pub fn tick_format(this: &ScaleLinear) -> Function;
82}
83
84impl ScaleLinear {
85 pub fn range(&self, range: [f32; 2]) -> &Self {
86 let range_value = Array::new();
87 range_value.push(&range[0].into());
88 range_value.push(&range[1].into());
89 self.range_impl(range_value);
90 self
91 }
92
93 pub fn set_domain(&self, min: u32, max: u32) -> &Self {
94 let domain = Array::new();
95 domain.push(&min.into());
96 domain.push(&max.into());
97 self.set_domain_array(domain);
98 self
99 }
100}
101
102#[wasm_bindgen]
103extern "C" {
104 #[wasm_bindgen(extends = Function)]
105 pub type Area;
106
107 #[wasm_bindgen(method)]
108 pub fn x(this: &Area, cb: &Function) -> Area;
109
110 #[wasm_bindgen(method)]
111 pub fn y0(this: &Area, value: f32) -> Area;
112
113 #[wasm_bindgen(method)]
114 pub fn y1(this: &Area, cb: &Function) -> Area;
115
116 #[wasm_bindgen(method)]
117 pub fn context(this: &Area, ctx: &web_sys::CanvasRenderingContext2d) -> Area;
118}