///|
/// サンプル図形を追加
pub fn add_sample_shapes(
  state : @core.EditorState,
  new_id : () -> String,
) -> Unit {
  let text_style = state.get_text_style()
  let arrow_style = state.get_arrow_style()

  // カスタムスタイル
  let magenta_fill : @model.Style = {
    fill: Some("#e040e0"),
    stroke: Some("#c030c0"),
    stroke_width: Some(2.0),
    opacity: None,
    stroke_dasharray: None,
    marker_start: None,
    marker_end: None,
    font_family: None,
  }
  let blue_stroke : @model.Style = {
    fill: Some("transparent"),
    stroke: Some("#3355aa"),
    stroke_width: Some(2.0),
    opacity: None,
    stroke_dasharray: None,
    marker_start: None,
    marker_end: None,
    font_family: None,
  }
  let yellow_fill : @model.Style = {
    fill: Some("#ffee44"),
    stroke: Some(@model.css_var_stroke),
    stroke_width: Some(1.0),
    opacity: None,
    stroke_dasharray: None,
    marker_start: None,
    marker_end: None,
    font_family: None,
  }
  let yellow_stroke : @model.Style = {
    fill: Some("transparent"),
    stroke: Some("#ddcc00"),
    stroke_width: Some(2.0),
    opacity: None,
    stroke_dasharray: None,
    marker_start: None,
    marker_end: None,
    font_family: None,
  }
  let brown_fill : @model.Style = {
    fill: Some("#8b7080"),
    stroke: Some("#6b5060"),
    stroke_width: Some(2.0),
    opacity: None,
    stroke_dasharray: None,
    marker_start: None,
    marker_end: None,
    font_family: None,
  }
  let default_rect : @model.Style = {
    fill: Some("transparent"),
    stroke: Some(@model.css_var_stroke),
    stroke_width: Some(1.0),
    opacity: None,
    stroke_dasharray: None,
    marker_start: None,
    marker_end: None,
    font_family: None,
  }

  // 行1: Moonbit → Luna → JS
  // Moonbit (マゼンタの円)
  let moonbit_id = new_id()
  let moonbit = @model.Element::new(moonbit_id, 55.0, 65.0, @model.Circle(35.0)).with_style(
    magenta_fill,
  )
  let moonbit_text_id = new_id()
  let moonbit_text = @model.Element::new(
      moonbit_text_id,
      55.0,
      65.0,
      @model.Text("Moonbit", Some(14.0)),
    )
    .with_style(text_style)
    .with_parent(moonbit_id)

  // Luna (青い枠の矩形)
  let luna_id = new_id()
  let luna = @model.Element::new(
    luna_id,
    130.0,
    40.0,
    @model.Rect(100.0, 50.0, None, None),
  ).with_style(blue_stroke)
  let luna_text_id = new_id()
  let luna_text = @model.Element::new(
      luna_text_id,
      180.0,
      65.0,
      @model.Text("Luna", Some(16.0)),
    )
    .with_style(text_style)
    .with_parent(luna_id)

  // JS (黄色背景の矩形)
  let js_id = new_id()
  let js = @model.Element::new(
    js_id,
    280.0,
    40.0,
    @model.Rect(70.0, 50.0, None, None),
  ).with_style(yellow_fill)
  let js_text_id = new_id()
  let js_text = @model.Element::new(
      js_text_id,
      315.0,
      65.0,
      @model.Text("JS", Some(18.0)),
    )
    .with_style(text_style)
    .with_parent(js_id)

  // 矢印: Moonbit → Luna
  let arrow1_id = new_id()
  let arrow1 = @model.Element::new(
    arrow1_id,
    90.0,
    65.0,
    @model.Line(130.0, 65.0),
  ).with_style(arrow_style)
  let arrow1_conn = {
    ..arrow1,
    connections: Some({
      start: Some({ element_id: moonbit_id, anchor: @model.Right }),
      end: Some({ element_id: luna_id, anchor: @model.Left }),
    }),
  }

  // 矢印: Luna → JS
  let arrow2_id = new_id()
  let arrow2 = @model.Element::new(
    arrow2_id,
    230.0,
    65.0,
    @model.Line(280.0, 65.0),
  ).with_style(arrow_style)
  let arrow2_conn = {
    ..arrow2,
    connections: Some({
      start: Some({ element_id: luna_id, anchor: @model.Right }),
      end: Some({ element_id: js_id, anchor: @model.Left }),
    }),
  }

  // 行2: Excalidraw → Moonlight → Svg
  // Excalidraw (黄色い枠の楕円)
  let excalidraw_id = new_id()
  let excalidraw = @model.Element::new(
    excalidraw_id,
    55.0,
    200.0,
    @model.Ellipse(50.0, 28.0),
  ).with_style(yellow_stroke)
  let excalidraw_text_id = new_id()
  let excalidraw_text = @model.Element::new(
      excalidraw_text_id,
      55.0,
      200.0,
      @model.Text("Excalidraw", Some(12.0)),
    )
    .with_style(text_style)
    .with_parent(excalidraw_id)

  // Moonlight (茶色の塗りつぶし矩形)
  let moonlight_id = new_id()
  let moonlight = @model.Element::new(
    moonlight_id,
    150.0,
    160.0,
    @model.Rect(100.0, 70.0, None, None),
  ).with_style(brown_fill)
  let moonlight_text_id = new_id()
  let moonlight_text = @model.Element::new(
      moonlight_text_id,
      200.0,
      195.0,
      @model.Text("Moonlight", Some(14.0)),
    )
    .with_style(text_style)
    .with_parent(moonlight_id)

  // Svg (白い矩形)
  let svg_id = new_id()
  let svg = @model.Element::new(
    svg_id,
    300.0,
    165.0,
    @model.Rect(70.0, 60.0, None, None),
  ).with_style(default_rect)
  let svg_text_id = new_id()
  let svg_text = @model.Element::new(
      svg_text_id,
      335.0,
      195.0,
      @model.Text("Svg", Some(16.0)),
    )
    .with_style(text_style)
    .with_parent(svg_id)

  // 矢印: Luna → Moonlight (下向き)
  let arrow3_id = new_id()
  let arrow3 = @model.Element::new(
    arrow3_id,
    180.0,
    90.0,
    @model.Line(200.0, 160.0),
  ).with_style(arrow_style)
  let arrow3_conn = {
    ..arrow3,
    connections: Some({
      start: Some({ element_id: luna_id, anchor: @model.Bottom }),
      end: Some({ element_id: moonlight_id, anchor: @model.Top }),
    }),
  }

  // 矢印: Excalidraw → Moonlight
  let arrow4_id = new_id()
  let arrow4 = @model.Element::new(
    arrow4_id,
    105.0,
    200.0,
    @model.Line(150.0, 195.0),
  ).with_style(arrow_style)
  let arrow4_conn = {
    ..arrow4,
    connections: Some({
      start: Some({ element_id: excalidraw_id, anchor: @model.Right }),
      end: Some({ element_id: moonlight_id, anchor: @model.Left }),
    }),
  }

  // 矢印: Moonlight → Svg
  let arrow5_id = new_id()
  let arrow5 = @model.Element::new(
    arrow5_id,
    250.0,
    195.0,
    @model.Line(300.0, 195.0),
  ).with_style(arrow_style)
  let arrow5_conn = {
    ..arrow5,
    connections: Some({
      start: Some({ element_id: moonlight_id, anchor: @model.Right }),
      end: Some({ element_id: svg_id, anchor: @model.Left }),
    }),
  }

  // 要素を追加
  state.add_element_raw(moonbit)
  state.add_element_raw(moonbit_text)
  state.add_element_raw(luna)
  state.add_element_raw(luna_text)
  state.add_element_raw(js)
  state.add_element_raw(js_text)
  state.add_element_raw(excalidraw)
  state.add_element_raw(excalidraw_text)
  state.add_element_raw(moonlight)
  state.add_element_raw(moonlight_text)
  state.add_element_raw(svg)
  state.add_element_raw(svg_text)
  // 矢印は最後に追加(最前面に表示)
  state.add_element_raw(arrow1_conn)
  state.add_element_raw(arrow2_conn)
  state.add_element_raw(arrow3_conn)
  state.add_element_raw(arrow4_conn)
  state.add_element_raw(arrow5_conn)
}